Xingyu Xian před 6 měsíci
rodič
revize
baa794be9c

+ 12 - 0
db/auto_default.go

@@ -19,3 +19,15 @@ func GetLastAutoDefaultID() (int, error) {
 	//fmt.Printf("auto task %+v %+v", result, LastTask)
 	return LastDefault.AutoDefaultID, nil
 }
+
+// GetLastAutoDefaultIDByEnterpriseId 根据enterpriseId查找违约扣款Id
+func GetLastAutoDefaultIDByEnterpriseId(enterpriseId string) (int, error) {
+	db := GetReadDB(context.Background())
+	LastDefault := gorm_model.InfoAutoDefaultHandle{}
+	autoDefaultIErr := db.Model(gorm_model.InfoAutoDefaultHandle{}).Where("enterprise_id = ?", enterpriseId).Find(&LastDefault).Error
+	if autoDefaultIErr != nil {
+		log.Println("DB GetLastAutoDefaultID:", autoDefaultIErr)
+		return 0, autoDefaultIErr
+	}
+	return LastDefault.AutoDefaultID, nil
+}

+ 815 - 247
db/auto_task.go

@@ -146,15 +146,19 @@ func AutoCompleteSelection() error {
 	return nil
 }
 
-/*
-// GetAutoDraftDefaultInPicTask 图文-初稿超时违约判断
-func GetAutoDraftDefaultInPicTask() error {
+// GetAutoDraftDefaultTask 品牌种草-商品寄拍 初稿超时违约
+func GetAutoDraftDefaultTask() error {
+	fmt.Println("GetAutoDraftDefaultInPicTask Running")
 	db := GetReadDB(context.Background())
+
+	// 1. 根据种草任务形式取出对应的Project
 	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
+	projectInfoErr := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_form = ? ", 1, 1).Find(&projectInfos).Error
+	if projectInfoErr != nil {
+		return projectInfoErr
 	}
+
+	// 2. 构建查询map
 	var projectIds []string
 	projectIdToAutoTaskIdMap := map[string]int{}    // 项目id 对 定时任务id 的map
 	projectIdToAutoDefaultIdMap := map[string]int{} // 项目id 对 违约扣款设置id 的map
@@ -162,7 +166,6 @@ func GetAutoDraftDefaultInPicTask() error {
 	TaskIdToProjectId := make(map[string]string)    // taskId 对 项目id的 map
 	var taskNeedModIds []string                     // 首次提交初稿的任务记录id
 	var submitTaskNeedModIds []string               // 修改后提交初稿的任务记录id
-	// 构造map及list
 	for _, projectInfo := range projectInfos {
 		projectIds = append(projectIds, projectInfo.ProjectID)
 		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
@@ -170,117 +173,138 @@ func GetAutoDraftDefaultInPicTask() error {
 	}
 	for _, projectId := range projectIds {
 		db1 := GetReadDB(context.Background())
-
 		var taskInfos []gorm_model.YoungeeTaskInfo
 		db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? AND logistics_status = 3", projectId, 2, 9, 0).Find(&taskInfos)
 		for _, taskInfo := range taskInfos {
-			TaskIdToProjectId[taskInfo.TaskId] = projectId
+			TaskIdToProjectId[taskInfo.TaskID] = 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)
-			taskIdToFeeFormMap[taskInfo.TaskId] = taskInfo.FeeForm
+			db2.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskInfo.TaskID).First(&taskNeedMod)
+			taskIdToFeeFormMap[taskInfo.TaskID] = taskInfo.FeeForm
 			if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 1 {
-				taskNeedModIds = append(taskNeedModIds, taskInfo.TaskId)
+				taskNeedModIds = append(taskNeedModIds, taskInfo.TaskID)
 			}
 			if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 3 {
-				submitTaskNeedModIds = append(submitTaskNeedModIds, taskInfo.TaskId)
+				submitTaskNeedModIds = append(submitTaskNeedModIds, taskInfo.TaskID)
 			}
 		}
 	}
-	// 判断应首次上传初稿的任务
+
+	// 3. 对初次初稿未上传的操作
 	for _, taskNeedModId := range taskNeedModIds {
-		// 获取 autoTaskId 及其对应的限制时间
+		if taskNeedModId != "3601319242" {
+			break
+		}
+		fmt.Println("Task right")
+
+		// 获取taskId对应的autoTaskId
 		autoTaskId := projectIdToAutoTaskIdMap[TaskIdToProjectId[taskNeedModId]]
+
+		// 根据autoTaskId去查找对应的初稿违约小时数
 		dbStart := GetReadDB(context.Background())
 		var DraftDefaultInPic int32
-		dbStart.Model(gorm_model.InfoAutoTask{}).Select("draft_default_in_pic").Where("auto_task_id = ?", autoTaskId).First(&DraftDefaultInPic)
-		db3 := GetReadDB(context.Background())
+		dbStart.Model(gorm_model.InfoAutoTask{}).Select("draft_default").Where("auto_task_id = ?", autoTaskId).First(&DraftDefaultInPic)
 
-		taskLogisticNeedMod := gorm_model.YoungeeTaskLogistics{}
-		db3.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskNeedModId).First(&taskLogisticNeedMod)
+		// 根据taskId查询taskInfo
+		db3 := GetReadDB(context.Background())
+		taskLogisticNeedMod := gorm_model.YoungeeTaskInfo{}
+		db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).First(&taskLogisticNeedMod)
 
-		// 查询违约扣款比例
+		// 获取task对应的autoDefaultId 并取出违约扣款比例
 		autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
 		db6 := GetReadDB(context.Background())
 		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
 
 		var sketchDefaultRate int
 		var sketchErrRate int
-		if taskIdToFeeFormMap[taskNeedModId] == 1 { // 稿费形式为产品置换
+		// 稿费形式为产品置换
+		if taskIdToFeeFormMap[taskNeedModId] == 1 {
 			sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
 			sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
 			// db6 := GetReadDB(context.Background())
 			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
-		} else { // 稿费形式为其他
+		} else {
+			// 稿费形式为其他
 			sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
 			sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
 			// db6 := GetReadDB(context.Background())
 			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
 		}
 
-		//	添加初稿违约自动处理时间
-		if taskLogisticNeedMod.Status == 1 && taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.AutoSketchBreakAt == nil || taskLogisticNeedMod.AutoSketchBreakAt.IsZero() {
+		//	若无违约自动处理时间 则添加初稿违约自动处理时间
+		if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.SketchMissingTime.IsZero() {
 			dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInPic, "") + "h")
 			db4 := GetReadDB(context.Background())
 			t := taskLogisticNeedMod.SignedTime.Add(dd)
-			db4.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskLogistics{
-				AutoSketchBreakAt: &t,
+			db4.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{
+				SketchMissingTime: t,
 			})
-			taskLogisticNeedMod.AutoSketchBreakAt = &t
-			fmt.Println("已添加图片初稿违约自动处理时间")
+			taskLogisticNeedMod.SketchMissingTime = t
+			fmt.Println("已添加 品牌种草-商品寄拍-初次初稿未上传 初稿违约自动处理时间")
+			fmt.Println(sketchDefaultRate, sketchErrRate)
 		}
 
 		// 判断是否超时违约
-		if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
-			// 超时违约处理
-			db5 := GetReadDB(context.Background())
-			err1 := db5.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
-				TaskID: taskLogisticNeedMod.TaskID, ProjectID: TaskIdToProjectId[taskNeedModId], BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
-			if err1 != nil {
-				return err1
-			}
+		if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.SketchMissingTime.Sub(time.Now()) <= 0 {
+			fmt.Println("taskId: ", taskLogisticNeedMod.TaskID, "超时违约触发")
 			taskInfo := gorm_model.YoungeeTaskInfo{}
 			dbt := GetReadDB(context.Background())
 			err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Find(&taskInfo).Error
 			if err2 != nil {
 				return err2
 			}
-			settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
+
+			// 计算违约扣款后的达人所得
+			settleAmount := taskInfo.DraftFee * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
 			if settleAmount <= 0 {
 				settleAmount = 0.0
 			}
-			realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
+
+			// 计算违约扣款后的服务商所得
+			realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
+			if realServiceCharge <= 0 {
+				realServiceCharge = 0.0
+			}
+
+			// 计算企业需要实际支付金额
+			realPayment := settleAmount + realServiceCharge
 			if realPayment <= 0 {
 				realPayment = 0.0
 			}
+
 			db8 := GetReadDB(context.Background())
+			fmt.Println("待更新的taskId: ", taskLogisticNeedMod.TaskID)
 			db8.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Updates(
 				map[string]interface{}{
-					"cur_default_type":  3,
-					"sketch_break_rate": sketchDefaultRate,
-					"settle_amount":     settleAmount,
-					"err_break_rate":    sketchErrRate,
-					"real_payment":      realPayment,
+					"sketch_missing_status": 1,
+					"cur_default_type":      3,
+					"sketch_break_rate":     sketchDefaultRate,
+					"settle_amount":         settleAmount,
+					"err_break_rate":        sketchErrRate,
+					"real_service_charge":   realServiceCharge,
+					"real_payment":          realPayment,
 				})
-
-			err = CreateTaskLog(context.Background(), taskLogisticNeedMod.TaskID, "初稿逾期")
-			if err != nil {
-				logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+			createTaskLogErr := CreateTaskLog(context.Background(), taskLogisticNeedMod.TaskID, "初稿逾期")
+			if createTaskLogErr != nil {
+				log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", createTaskLogErr)
 			}
-			err = CreateMessageByTaskId(context.Background(), 22, 4, taskLogisticNeedMod.TaskID)
-			if err != nil {
-				logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+			createMessageByTaskIdErr := CreateMessageByTaskId(context.Background(), 22, 4, taskLogisticNeedMod.TaskID)
+			if createMessageByTaskIdErr != nil {
+				log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", createMessageByTaskIdErr)
 			}
-			fmt.Println("已创建图文类型的初稿违约记录")
+			fmt.Println("已创建 品牌种草-商品寄拍-初次初稿未上传 初稿违约记录")
 		}
 	}
-	// 判断应修改后上传初稿的任务
+
+	// 4. 判断应该修改后上传的任务
 	for _, submitTaskNeedModId := range submitTaskNeedModIds {
+
 		// 获取 autoTaskId 及其对应的限制时间
 		db2 := GetReadDB(context.Background())
 		var DraftDefaultInMv int32
-		db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[TaskIdToProjectId[submitTaskNeedModId]]).First(&DraftDefaultInMv)
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[TaskIdToProjectId[submitTaskNeedModId]]).First(&DraftDefaultInMv)
 		dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
 
 		// 查询违约扣款比例
@@ -301,6 +325,7 @@ func GetAutoDraftDefaultInPicTask() error {
 			// db6 := GetReadDB(context.Background())
 			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
 		}
+
 		//	添加初稿违约自动处理时间
 		db1 := GetReadDB(context.Background())
 		var taskSketchInfo gorm_model.YounggeeSketchInfo
@@ -311,7 +336,7 @@ func GetAutoDraftDefaultInPicTask() error {
 				return err4
 			}
 			taskSketchInfo.AutoSketchBreakAt = taskSketchInfo.RejectAt.Add(dd)
-			fmt.Println("已添加图文形式的初稿违约自动处理时间")
+			fmt.Println("已添加 品牌种草-商品寄拍-修改后上传初稿未上传自动处理时间")
 		}
 
 		// 判断是否违约
@@ -328,276 +353,819 @@ func GetAutoDraftDefaultInPicTask() error {
 			if err2 != nil {
 				return err2
 			}
-			settleAmount := taskInfo.TaskReward * (1.0 - float64(sketchDefaultRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
+
+			// 计算违约扣款后的达人所得
+			settleAmount := taskInfo.DraftFee * (1.0 - float64(sketchDefaultRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
 			if settleAmount <= 0 {
 				settleAmount = 0.
 			}
-			realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
+
+			// 计算违约扣款后的服务商所得
+			realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
+			if realServiceCharge <= 0 {
+				realServiceCharge = 0.0
+			}
+
+			// 计算企业需要实际支付金额
+			realPayment := settleAmount + realServiceCharge
 			if realPayment <= 0 {
 				realPayment = 0.0
 			}
+
 			db3 := GetReadDB(context.Background())
 			err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
 				map[string]interface{}{
-					"cur_default_type":  3,
-					"sketch_break_rate": sketchDefaultRate,
-					"settle_amount":     settleAmount,
-					"err_break_rate":    sketchErrRate,
-					"real_payment":      realPayment,
+					"sketch_missing_status": 1,
+					"cur_default_type":      3,
+					"sketch_break_rate":     sketchDefaultRate,
+					"settle_amount":         settleAmount,
+					"err_break_rate":        sketchErrRate,
+					"real_service_charge":   realServiceCharge,
+					"real_payment":          realPayment,
 				}).Error
 			if err2 != nil {
 				return err2
 			}
-			err = CreateTaskLog(context.Background(), submitTaskNeedModId, "初稿逾期")
-			if err != nil {
-				logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+			createTaskLogErr := CreateTaskLog(context.Background(), submitTaskNeedModId, "初稿逾期")
+			if createTaskLogErr != nil {
+				log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", createTaskLogErr)
 			}
-			err = CreateMessageByTaskId(context.Background(), 22, 4, submitTaskNeedModId)
-			if err != nil {
-				logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+			createMessageByTaskIdErr := CreateMessageByTaskId(context.Background(), 22, 4, submitTaskNeedModId)
+			if createMessageByTaskIdErr != nil {
+				log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", createMessageByTaskIdErr)
 			}
-			fmt.Println("创建已提交初稿的图文类型的初稿违约记录")
+			fmt.Println("创建已提交初稿的初稿违约记录")
 		}
 	}
 	return nil
 }
-*/
 
-// GetAutoDraftDefaultInPicTask 品牌种草-商品寄拍 初稿超时违约
-func GetAutoDraftDefaultInPicTask() error {
-	fmt.Println("GetAutoDraftDefaultInPicTask Running")
-	db := GetReadDB(context.Background())
+// GetAutoLinkDefaultTask 品牌种草 链接超时违约
+func GetAutoLinkDefaultTask() error {
 
-	// 1. 根据种草任务形式取出对应的Project
+	// 1. 筛选出可能链接超时违约的子任务,首次/修改
+	db := GetReadDB(context.Background())
 	var projectInfos []*gorm_model.ProjectInfo
-	projectInfoErr := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_form = ? ", 1, 1).Find(&projectInfos).Error
-	if projectInfoErr != nil {
-		return projectInfoErr
+	err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectInfos).Error
+	if err != nil {
+		return err
 	}
-
-	// 2. 构建查询map
 	var projectIds []string
-	projectIdToAutoTaskIdMap := map[string]int{}    // 项目id 对 定时任务id 的map
-	projectIdToAutoDefaultIdMap := map[string]int{} // 项目id 对 违约扣款设置id 的map
-	taskIdToFeeFormMap := make(map[string]int)      // taskId 对 稿费形式的 map
-	TaskIdToProjectId := make(map[string]string)    // taskId 对 项目id的 map
-	var taskNeedModIds []string                     // 首次提交初稿的任务记录id
-	var submitTaskNeedModIds []string               // 修改后提交初稿的任务记录id
+	// 任务id 对 项目id 的map
+	taskIdToProjectIdMap := map[string]string{}
+	// 项目id 对 定时任务id 的map
+	projectIdToAutoTaskIdMap := map[string]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[string]int{}
+	var taskIds []string
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[string]int)
 	for _, projectInfo := range projectInfos {
 		projectIds = append(projectIds, projectInfo.ProjectID)
 		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
 		projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
-	}
-	for _, projectId := range projectIds {
+
+		var taskInfos []*gorm_model.YoungeeTaskInfo
 		db1 := GetReadDB(context.Background())
-		var taskInfos []gorm_model.YoungeeTaskInfo
-		db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? AND logistics_status = 3", projectId, 2, 9, 0).Find(&taskInfos)
+		db1.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? ", projectInfo.ProjectID, 2, 11, 0).Find(&taskInfos)
 		for _, taskInfo := range taskInfos {
-			TaskIdToProjectId[taskInfo.TaskID] = 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)
+			taskIdToProjectIdMap[taskInfo.TaskID] = projectInfo.ProjectID
+			taskIds = append(taskIds, taskInfo.TaskID)
 			taskIdToFeeFormMap[taskInfo.TaskID] = taskInfo.FeeForm
-			if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 1 {
-				taskNeedModIds = append(taskNeedModIds, taskInfo.TaskID)
-			}
-			if taskNeedMod.TaskStage == 9 && taskNeedMod.SketchStatus == 3 {
-				submitTaskNeedModIds = append(submitTaskNeedModIds, taskInfo.TaskID)
-			}
+		}
+	}
+	// 首次提交链接的任务记录id
+	var taskNeedModIds []string
+	// 已提交链接的任务记录id
+	var submitTaskNeedModIds []string
+	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 == 11 {
+			taskNeedModIds = append(taskNeedModIds, taskId)
+		}
+		// 保存所有链接上传状态为 3  且任务状态为12 的任务记录的id
+		if taskInfo.LinkStatus == 3 && taskInfo.TaskStage == 11 {
+			submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
 		}
 	}
 
-	// 3. 对初次初稿未上传的操作
+	// 2. 对于需要初次上传链接但是未上传的子任务
 	for _, taskNeedModId := range taskNeedModIds {
-		if taskNeedModId != "3601319242" {
-			break
+		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")
+
+		autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
+		db6 := GetReadDB(context.Background())
+		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
+
+		var linkDefaultRate int
+		var linkErrRate int
+		if taskIdToFeeFormMap[taskNeedModId] == 1 {
+			linkDefaultRate = autoDefaultHandle.LinkReplaceTimeOut
+			linkErrRate = autoDefaultHandle.LinkReplaceNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out", "link_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
+		} else {
+			linkDefaultRate = autoDefaultHandle.LinkOtherTimeOut
+			linkErrRate = autoDefaultHandle.LinkOtherNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out", "link_other_not_uploadsg").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
 		}
-		fmt.Println("Task right")
+		db1 := GetReadDB(context.Background())
+		var taskSketchInfo gorm_model.YounggeeSketchInfo
+		db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskSketchInfo)
+		dbTask := GetReadDB(context.Background())
+		var taskInfoCurr gorm_model.YoungeeTaskInfo
+		dbTask.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfoCurr)
+		if taskInfoCurr.LinkMissingTime.IsZero() {
+			// db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoLinkBreakAt: taskSketchInfo.AgreeAt.Add(dd)})
+			dbTask.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{LinkMissingTime: taskSketchInfo.AgreeAt.Add(dd)})
+			fmt.Println("已添加链接违约自动处理时间")
+		} else {
+			if taskInfoCurr.TaskID != "" && taskInfoCurr.LinkMissingTime.Sub(time.Now()) <= 0 {
+				//db4 := GetReadDB(context.Background())
+				//err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+				//	TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				//if err1 != nil {
+				//	return err1
+				//}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				// 达人实际所得
+				settleAmount := taskInfo.DraftFee * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				// 服务商实际所得
+				realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+linkDefaultRate+taskInfo.ScriptBreakRate)/100)
+				if realServiceCharge <= 0 {
+					realServiceCharge = 0.0
+				}
+				// 企业实际支付
+				realPayment := settleAmount + realServiceCharge
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
+					map[string]interface{}{
+						"link_missing_status": 1,
+						"cur_default_type":    5,
+						"link_break_rate":     linkDefaultRate,
+						"settle_amount":       settleAmount,
+						"real_service_charge": realServiceCharge,
+						"err_break_rate":      linkErrRate,
+						"real_payment":        realPayment,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), taskNeedModId, "链接逾期")
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 23, 4, taskNeedModId)
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				fmt.Println("已创建链接违约记录")
+			}
+		}
+	}
 
-		// 获取taskId对应的autoTaskId
-		autoTaskId := projectIdToAutoTaskIdMap[TaskIdToProjectId[taskNeedModId]]
+	// 3. 对于需要修改后上传的链接
+	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")
 
-		// 根据autoTaskId去查找对应的初稿违约小时数
-		dbStart := GetReadDB(context.Background())
-		var DraftDefaultInPic int32
-		dbStart.Model(gorm_model.InfoAutoTask{}).Select("draft_default_in_pic").Where("auto_task_id = ?", autoTaskId).First(&DraftDefaultInPic)
+		autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
+		db6 := GetReadDB(context.Background())
+		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
 
-		// 根据taskId查询taskInfo
+		var linkDefaultRate int
+		var linkErrRate int
+		if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
+			linkDefaultRate = autoDefaultHandle.LinkReplaceTimeOut
+			linkErrRate = autoDefaultHandle.LinkReplaceNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out", "link_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
+		} else {
+			linkDefaultRate = autoDefaultHandle.LinkOtherTimeOut
+			linkErrRate = autoDefaultHandle.LinkOtherNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out", "link_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate, &linkErrRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskLinkInfo gorm_model.YounggeeLinkInfo
+		db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ?", submitTaskNeedModId).Order("reject_at desc").First(&taskLinkInfo)
+		dbTask := GetReadDB(context.Background())
+		var taskInfoCurr gorm_model.YoungeeTaskInfo
+		dbTask.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfoCurr)
+		if taskInfoCurr.LinkMissingTime.IsZero() {
+			err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoLinkBreakAt: taskLinkInfo.RejectAt.Add(dd)}).Error
+			if err4 != nil {
+				return err4
+			}
+			taskInfoCurrErr := dbTask.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{LinkMissingTime: taskLinkInfo.RejectAt.Add(dd)}).Error
+			if taskInfoCurrErr != nil {
+				return taskInfoCurrErr
+			}
+			fmt.Println("已添加链接违约自动处理时间")
+		} else {
+			if taskInfoCurr.TaskID != "" && taskInfoCurr.LinkMissingTime.Sub(time.Now()) <= 0 {
+				//db4 := GetReadDB(context.Background())
+				//err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+				//	TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				//if err1 != nil {
+				//	return err1
+				//}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				// 达人实际所得
+				settleAmount := taskInfo.DraftFee * (1.0 - float64(linkDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				// 服务商实际所得
+				realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+linkDefaultRate+taskInfo.ScriptBreakRate)/100)
+				if realServiceCharge <= 0 {
+					realServiceCharge = 0.0
+				}
+				// 企业实际支付
+				realPayment := settleAmount + realServiceCharge
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
+					map[string]interface{}{
+						"link_missing_status": 1,
+						"cur_default_type":    5,
+						"link_break_rate":     linkDefaultRate,
+						"settle_amount":       settleAmount,
+						"real_service_charge": realServiceCharge,
+						"err_break_rate":      linkErrRate,
+						"real_payment":        realPayment,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), submitTaskNeedModId, "链接逾期")
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 23, 4, submitTaskNeedModId)
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				fmt.Println("创建已提交链接的链接违约记录")
+			}
+		}
+	}
+	return nil
+}
+
+/*
+func GetAutoCaseCloseDefaultTask() 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 []string
+	// 任务id 对 项目id 的map
+	taskIdToProjectIdMap := map[string]string{}
+	// 项目id 对 定时任务id 的map
+	projectIdToAutoTaskIdMap := map[string]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[string]int{}
+	var taskIds []string
+	for _, projectInfo := range projectInfos {
+		projectIds = append(projectIds, projectInfo.ProjectID)
+		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
+		projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
+
+		var taskInfos []string
+		db1 := GetReadDB(context.Background())
+		db1.Select("task_id").Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? ", projectInfo.ProjectID, 2, 13, 0).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			taskIdToProjectIdMap[taskInfo] = projectInfo.ProjectID
+			taskIds = append(taskIds, taskInfo)
+		}
+	}
+	// 首次提交链接的任务记录id
+	var taskNeedModIds []string
+	// 已提交链接的任务记录id
+	var submitTaskNeedModIds []string
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[string]int)
+	for _, taskId := range taskIds {
+		var taskInfo gorm_model.YoungeeTaskInfo
 		db3 := GetReadDB(context.Background())
-		taskLogisticNeedMod := gorm_model.YoungeeTaskInfo{}
-		db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).First(&taskLogisticNeedMod)
+		// 保存所有数据上传状态为 1  且任务状态为14 的任务记录的id
+		db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
+		if taskInfo.DataStatus == 1 && taskInfo.TaskStage == 13 {
+			taskNeedModIds = append(taskNeedModIds, taskId)
+		}
+		// 保存所有数据上传状态为 3  且任务状态为14 的任务记录的id
+		if taskInfo.DataStatus == 3 && taskInfo.TaskStage == 13 {
+			submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
+		}
+		taskIdToFeeFormMap[taskId] = taskInfo.FeeForm
+	}
+	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")
 
-		// 获取task对应的autoDefaultId 并取出违约扣款比例
 		autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
 		db6 := GetReadDB(context.Background())
-		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
+		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
 
-		var sketchDefaultRate int
-		var sketchErrRate int
-		// 稿费形式为产品置换
+		var dataDefaultRate int
+		var dataErrRate int
 		if taskIdToFeeFormMap[taskNeedModId] == 1 {
-			sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
-			sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
+			dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
+			dataErrRate = autoDefaultHandle.DataReplaceNotUpload
 			// db6 := GetReadDB(context.Background())
-			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&autoDefaultHandle)
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
 		} else {
-			// 稿费形式为其他
-			sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
-			sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
+			dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
+			dataErrRate = autoDefaultHandle.DataOtherNotUpload
 			// db6 := GetReadDB(context.Background())
-			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[taskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
 		}
-
-		//	若无违约自动处理时间 则添加初稿违约自动处理时间
-		if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.SketchMissingTime.IsZero() {
-			dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInPic, "") + "h")
-			db4 := GetReadDB(context.Background())
-			t := taskLogisticNeedMod.SignedTime.Add(dd)
-			db4.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{
-				SketchMissingTime: t,
-			})
-			taskLogisticNeedMod.SketchMissingTime = t
-			fmt.Println("已添加 品牌种草-商品寄拍-初次初稿未上传 初稿违约自动处理时间")
-			fmt.Println(sketchDefaultRate, sketchErrRate)
+		//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.AgreeAt.Add(dd)})
+			fmt.Println("已添加数据违约自动处理时间")
+			if taskLinkInfo.TaskID != "" && taskLinkInfo.AgreeAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
+					map[string]interface{}{
+						"cur_default_type": 7,
+						"data_break_rate":  dataDefaultRate,
+						"settle_amount":    settleAmount,
+						"err_break_rate":   dataErrRate,
+						"real_payment":     realPayment,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				fmt.Println("创建时已违约则创建数据违约记录")
+			}
+		} else {
+			if taskLinkInfo.TaskID != "" && taskLinkInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				fmt.Println("settleAmount: ", settleAmount)
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
+					map[string]interface{}{
+						"cur_default_type":  7,
+						"sketch_break_rate": dataDefaultRate,
+						"settle_amount":     settleAmount,
+						"err_break_rate":    dataErrRate,
+						"real_payment":      realPayment,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				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")
 
-		// 判断是否超时违约
-		if taskLogisticNeedMod.TaskID != "" && taskLogisticNeedMod.SketchMissingTime.Sub(time.Now()) <= 0 {
-			fmt.Println("taskId: ", taskLogisticNeedMod.TaskID, "超时违约触发")
+		autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
+		db6 := GetReadDB(context.Background())
+		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
 
-			// 超时违约处理
-			//db5 := GetReadDB(context.Background())
-			//err1 := db5.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
-			//	TaskID:        taskLogisticNeedMod.TaskID,
-			//	ProjectID:     TaskIdToProjectId[taskNeedModId],
-			//	BreakType:     2,
-			//	BreakAt:       time.Now(),
-			//	DefaultStatus: 1}).Error
-			//if err1 != nil {
-			//	return err1
-			//}
-			taskInfo := gorm_model.YoungeeTaskInfo{}
-			dbt := GetReadDB(context.Background())
-			err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Find(&taskInfo).Error
-			if err2 != nil {
-				return err2
+		var dataDefaultRate int
+		var dataErrRate int
+		if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
+			dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
+			dataErrRate = autoDefaultHandle.DataReplaceNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
+		} else {
+			dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
+			dataErrRate = autoDefaultHandle.DataOtherNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskDataInfo gorm_model.YounggeeDataInfo
+		db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 1", 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
 			}
-			settleAmount := taskInfo.DraftFee * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+sketchDefaultRate+taskInfo.ScriptBreakRate)/100)
-			if settleAmount <= 0 {
-				settleAmount = 0.0
+			fmt.Println("已添加数据违约自动处理时间")
+			if taskDataInfo.TaskID != "" && taskDataInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
+					map[string]interface{}{
+						"cur_default_type": 7,
+						"data_break_rate":  dataDefaultRate,
+						"settle_amount":    settleAmount,
+						"err_break_rate":   dataErrRate,
+						"real_payment":     realPayment,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				fmt.Println("创建时已违约则创建已提交数据的数据违约记录")
+			}
+		} else {
+			if taskDataInfo.TaskID != "" && taskDataInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				settleAmount := taskInfo.TaskReward * (1.0 - float64(taskInfo.SketchBreakRate+dataDefaultRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				realPayment := taskInfo.AllPayment * (1.0 - float64(dataErrRate)/100)
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
+					map[string]interface{}{
+						"cur_default_type": 7,
+						"data_break_rate":  dataDefaultRate,
+						"settle_amount":    settleAmount,
+						"err_break_rate":   dataErrRate,
+						"real_payment":     realPayment,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
+				if err != nil {
+					logrus.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				fmt.Println("创建已提交数据的数据违约记录")
 			}
+		}
+	}
+	return nil
+}
+*/
 
-			// realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
-			// if realPayment <= 0 {
-			// 	realPayment = 0.0
-			// }
+// GetAutoCaseCloseDefaultTask 品牌种草 数据超时违约
+func GetAutoCaseCloseDefaultTask() error {
 
-			db8 := GetReadDB(context.Background())
-			fmt.Println("待更新的taskId: ", taskLogisticNeedMod.TaskID)
-			db8.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod.TaskID).Updates(
-				map[string]interface{}{
-					"cur_default_type":  3,
-					"sketch_break_rate": sketchDefaultRate,
-					"settle_amount":     settleAmount,
-					"err_break_rate":    sketchErrRate,
-				})
-			createTaskLogErr := CreateTaskLog(context.Background(), taskLogisticNeedMod.TaskID, "初稿逾期")
-			if createTaskLogErr != nil {
-				log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", createTaskLogErr)
-			}
-			createMessageByTaskIdErr := CreateMessageByTaskId(context.Background(), 22, 4, taskLogisticNeedMod.TaskID)
-			if createMessageByTaskIdErr != nil {
-				log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", createMessageByTaskIdErr)
+	// 1. 筛选出可能数据违约的种草子任务 待上传/待修改
+	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 []string
+	// 任务id 对 项目id 的map
+	taskIdToProjectIdMap := map[string]string{}
+	// 项目id 对 定时任务id 的map
+	projectIdToAutoTaskIdMap := map[string]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[string]int{}
+	var taskIds []string
+	for _, projectInfo := range projectInfos {
+		projectIds = append(projectIds, projectInfo.ProjectID)
+		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = int(projectInfo.AutoTaskID)
+		projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = int(projectInfo.AutoDefaultID)
+		var taskInfos []string
+		db1 := GetReadDB(context.Background())
+		db1.Select("task_id").Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ? AND task_stage = ? AND cur_default_type = ? ", projectInfo.ProjectID, 2, 13, 0).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			taskIdToProjectIdMap[taskInfo] = projectInfo.ProjectID
+			taskIds = append(taskIds, taskInfo)
+		}
+	}
+	// 首次提交链接的任务记录id
+	var taskNeedModIds []string
+	// 已提交链接的任务记录id
+	var submitTaskNeedModIds []string
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[string]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 == 13 {
+			taskNeedModIds = append(taskNeedModIds, taskId)
+		}
+		// 保存所有数据上传状态为 3  且任务状态为14 的任务记录的id
+		if taskInfo.DataStatus == 3 && taskInfo.TaskStage == 13 {
+			submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
+		}
+		taskIdToFeeFormMap[taskId] = taskInfo.FeeForm
+	}
+
+	// 2. 对待上传数据的子任务判断
+	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")
+
+		autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
+		db6 := GetReadDB(context.Background())
+		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&autoDefaultHandle)
+
+		var dataDefaultRate int
+		var dataErrRate int
+		if taskIdToFeeFormMap[taskNeedModId] == 1 {
+			dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
+			dataErrRate = autoDefaultHandle.DataReplaceNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
+		} else {
+			dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
+			dataErrRate = autoDefaultHandle.DataOtherNotUpload
+			// db6 := GetReadDB(context.Background())
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
+		}
+		//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)
+		dbTask := GetReadDB(context.Background())
+		var taskInfoCurr gorm_model.YoungeeTaskInfo
+		dbTask.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfoCurr)
+		if taskInfoCurr.DataMissingTime.IsZero() {
+			// db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoDataBreakAt: taskLinkInfo.AgreeAt.Add(dd)})
+			dbTask.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{DataMissingTime: taskLinkInfo.AgreeAt.Add(dd)})
+			fmt.Println("已添加数据违约自动处理时间")
+		} else {
+			if taskInfoCurr.TaskID != "" && taskInfoCurr.DataMissingTime.Sub(time.Now()) <= 0 {
+				//db4 := GetReadDB(context.Background())
+				//err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+				//	TaskID: taskNeedModId, ProjectID: taskIdToProjectIdMap[taskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				//if err1 != nil {
+				//	return err1
+				//}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				// 达人实际所得
+				settleAmount := taskInfo.DraftFee * (1.0 - float64(dataDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				// 服务商实际所得
+				realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+dataDefaultRate+taskInfo.ScriptBreakRate)/100)
+				if realServiceCharge <= 0 {
+					realServiceCharge = 0.0
+				}
+				// 企业实际支付
+				realPayment := settleAmount + realServiceCharge
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				fmt.Println("settleAmount: ", settleAmount)
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(
+					map[string]interface{}{
+						"data_missing_status": 1,
+						"cur_default_type":    7,
+						"sketch_break_rate":   dataDefaultRate,
+						"settle_amount":       settleAmount,
+						"err_break_rate":      dataErrRate,
+						"real_payment":        realPayment,
+						"real_service_charge": realServiceCharge,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), taskNeedModId, "数据逾期")
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 24, 4, taskNeedModId)
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				fmt.Println("已创建数据违约记录")
 			}
-			fmt.Println("已创建 品牌种草-商品寄拍-初次初稿未上传 初稿违约记录")
 		}
 	}
 
-	// 4. 判断应该修改后上传的任务
+	// 3. 针对待修改的子任务
 	for _, submitTaskNeedModId := range submitTaskNeedModIds {
-		// 获取 autoTaskId 及其对应的限制时间
 		db2 := GetReadDB(context.Background())
-		var DraftDefaultInMv int32
-		db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[TaskIdToProjectId[submitTaskNeedModId]]).First(&DraftDefaultInMv)
-		dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
+		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")
 
-		// 查询违约扣款比例
 		autoDefaultHandle := gorm_model.InfoAutoDefaultHandle{}
 		db6 := GetReadDB(context.Background())
-		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&autoDefaultHandle)
+		db6.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&autoDefaultHandle)
 
-		var sketchDefaultRate int
-		var sketchErrRate int
+		var dataDefaultRate int
+		var dataErrRate int
 		if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
-			sketchDefaultRate = autoDefaultHandle.SketchReplaceTimeOut
-			sketchErrRate = autoDefaultHandle.SketchReplaceNotUpload
+			dataDefaultRate = autoDefaultHandle.DataReplaceTimeOut
+			dataErrRate = autoDefaultHandle.DataReplaceNotUpload
 			// db6 := GetReadDB(context.Background())
-			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_replace_time_out", "sketch_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out", "data_replace_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
 		} else {
-			sketchDefaultRate = autoDefaultHandle.SketchOtherTimeOut
-			sketchErrRate = autoDefaultHandle.SketchOtherNotUpload
+			dataDefaultRate = autoDefaultHandle.DataOtherTimeOut
+			dataErrRate = autoDefaultHandle.DataOtherNotUpload
 			// db6 := GetReadDB(context.Background())
-			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("sketch_other_time_out", "sketch_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[TaskIdToProjectId[submitTaskNeedModId]]).Find(&sketchDefaultRate, &sketchErrRate)
+			// db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out", "data_other_not_upload").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate, &dataErrRate)
 		}
-
-		//	添加初稿违约自动处理时间
 		db1 := GetReadDB(context.Background())
-		var taskSketchInfo gorm_model.YounggeeSketchInfo
-		db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 1", 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
+		var taskDataInfo gorm_model.YounggeeDataInfo
+		db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 1", 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
 			}
-			taskSketchInfo.AutoSketchBreakAt = taskSketchInfo.RejectAt.Add(dd)
-			fmt.Println("已添加 品牌种草-商品寄拍-修改后上传初稿未上传自动处理时间")
-		}
-
-		// 判断是否违约
-		if taskSketchInfo.TaskID != "" && taskSketchInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
-			db4 := GetReadDB(context.Background())
-			err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
-				TaskID: submitTaskNeedModId, ProjectID: TaskIdToProjectId[submitTaskNeedModId], BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
-			if err1 != nil {
-				return err1
-			}
-			taskInfo := gorm_model.YoungeeTaskInfo{}
-			dbt := GetReadDB(context.Background())
-			err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
-			if err2 != nil {
-				return err2
-			}
-			settleAmount := taskInfo.DraftFee * (1.0 - float64(sketchDefaultRate+taskInfo.DataBreakRate+taskInfo.LinkBreakRate+taskInfo.ScriptBreakRate)/100)
-			if settleAmount <= 0 {
-				settleAmount = 0.
-			}
-			// realPayment := taskInfo.AllPayment * (1.0 - float64(sketchErrRate)/100)
-			// if realPayment <= 0 {
-			// 	realPayment = 0.0
-			// }
-			db3 := GetReadDB(context.Background())
-			err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
-				map[string]interface{}{
-					"cur_default_type":  3,
-					"sketch_break_rate": sketchDefaultRate,
-					"settle_amount":     settleAmount,
-					"err_break_rate":    sketchErrRate,
-				}).Error
-			if err2 != nil {
-				return err2
-			}
-			createTaskLogErr := CreateTaskLog(context.Background(), submitTaskNeedModId, "初稿逾期")
-			if createTaskLogErr != nil {
-				log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", createTaskLogErr)
-			}
-			createMessageByTaskIdErr := CreateMessageByTaskId(context.Background(), 22, 4, submitTaskNeedModId)
-			if createMessageByTaskIdErr != nil {
-				log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", createMessageByTaskIdErr)
+			fmt.Println("已添加数据违约自动处理时间")
+		} else {
+			if taskDataInfo.TaskID != "" && taskDataInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, ProjectID: taskIdToProjectIdMap[submitTaskNeedModId], BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				taskInfo := gorm_model.YoungeeTaskInfo{}
+				dbt := GetReadDB(context.Background())
+				err2 := dbt.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Find(&taskInfo).Error
+				if err2 != nil {
+					return err2
+				}
+				// 达人实际所得
+				settleAmount := taskInfo.DraftFee * (1.0 - float64(dataDefaultRate+taskInfo.DataBreakRate+taskInfo.SketchBreakRate+taskInfo.ScriptBreakRate)/100)
+				if settleAmount <= 0 {
+					settleAmount = 0.0
+				}
+				// 服务商实际所得
+				realServiceCharge := taskInfo.ServiceCharge * (1.0 - float64(taskInfo.LinkBreakRate+taskInfo.DataBreakRate+dataDefaultRate+taskInfo.ScriptBreakRate)/100)
+				if realServiceCharge <= 0 {
+					realServiceCharge = 0.0
+				}
+				// 企业实际支付
+				realPayment := settleAmount + realServiceCharge
+				if realPayment <= 0 {
+					realPayment = 0.0
+				}
+				db3 := GetReadDB(context.Background())
+				err2 = db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(
+					map[string]interface{}{
+						"data_missing_status": 1,
+						"cur_default_type":    7,
+						"sketch_break_rate":   dataDefaultRate,
+						"settle_amount":       settleAmount,
+						"err_break_rate":      dataErrRate,
+						"real_payment":        realPayment,
+						"real_service_charge": realServiceCharge,
+					}).Error
+				if err2 != nil {
+					return err2
+				}
+				err = CreateTaskLog(context.Background(), submitTaskNeedModId, "数据逾期")
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateTaskLog error,err:%+v", err)
+				}
+				err = CreateMessageByTaskId(context.Background(), 24, 4, submitTaskNeedModId)
+				if err != nil {
+					log.WithContext(context.Background()).Errorf("[operate db] call CreateMessageByTaskId error,err:%+v", err)
+				}
+				fmt.Println("创建已提交数据的数据违约记录")
 			}
-			fmt.Println("创建已提交初稿的图文类型的初稿违约记录")
 		}
 	}
+
 	return nil
 }

+ 14 - 15
model/gorm_model/info_auto_task.go

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

+ 6 - 0
model/gorm_model/project_task.go

@@ -24,6 +24,7 @@ type YoungeeTaskInfo struct {
 	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"`                       // 服务费
+	RealServiceCharge      float64   `gorm:"column:real_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表
@@ -59,6 +60,11 @@ type YoungeeTaskInfo struct {
 	CancelTime             time.Time `gorm:"column:cancel_time"`                          // 解约时间
 	CancelReason           string    `gorm:"column:cancel_reason"`                        // 解约理由
 	SketchMissingTime      time.Time `gorm:"column:sketch_missing_time"`                  // 未传初稿违约时间
+	SketchMissingStatus    int       `gorm:"column:sketch_missing_status"`                // 未传初稿违约状态,0无违约,1有违约
+	LinkMissingTime        time.Time `gorm:"column:link_missing_time"`                    // 未发作品违约时间
+	LinkMissingStatus      int       `gorm:"column:link_missing_status"`                  // 未发作品违约状态,0无违约,1有违约
+	DataMissingTime        time.Time `gorm:"column:data_missing_time"`                    // 未传数据违约时间
+	DataMissingStatus      int       `gorm:"column:data_missing_status"`                  // 未传数据违约状态,0无违约,1有违约
 }
 
 func (m *YoungeeTaskInfo) TableName() string {

+ 19 - 4
service/autoTask.go

@@ -32,9 +32,14 @@ func AutoTask() error {
 		}
 
 	*/
-	_, err4 := c.AddFunc(spec, GetAutoDraftDefaultInPicTask)
+	_, err4 := c.AddFunc(spec, GetAutoDraftDefaultTask)
 	if err4 != nil {
-		log.Println("service [AutoTaskCompleteSecTask] error:", err4)
+		log.Println("service [GetAutoDraftDefaultTask] error:", err4)
+		return err4
+	}
+	_, err5 := c.AddFunc(spec, GetAutoLinkDefaultTask)
+	if err5 != nil {
+		log.Println("service [GetAutoLinkDefaultTask] error:", err4)
 		return err4
 	}
 	fmt.Println(spec)
@@ -66,10 +71,20 @@ func AutoTaskCompleteSelection() {
 	}
 }
 
-func GetAutoDraftDefaultInPicTask() {
-	err := db.GetAutoDraftDefaultInPicTask()
+// GetAutoDraftDefaultTask 初稿超时违约
+func GetAutoDraftDefaultTask() {
+	err := db.GetAutoDraftDefaultTask()
 	log.Println("GetAutoDraftDefaultInPicTask is running ,Time :", time.Now())
 	if err != nil {
 		log.Println("GetAutoDraftDefaultInPicTask error : ", err)
 	}
 }
+
+// GetAutoLinkDefaultTask 链接超时违约
+func GetAutoLinkDefaultTask() {
+	err := db.GetAutoLinkDefaultTask()
+	log.Println("GetAutoLinkDefaultTask is running ,Time :", time.Now())
+	if err != nil {
+		log.Println("GetAutoDraftDefaultInPicTask error : ", err)
+	}
+}