Jelajahi Sumber

Merge remote-tracking branch 'origin/develop' into develop

lin-jim-leon 3 hari lalu
induk
melakukan
d7d9e547fc

+ 21 - 6
app/dao/local_life_task_info_dao.go

@@ -22,29 +22,44 @@ func (d LocalLifeTaskInfoDao) CountByTaskStage(localId string, taskStage int64)
 }
 
 // 获取指定任务阶段的本地生活子任务
-func (d LocalLifeTaskInfoDao) GetListByTaskStage(localId string, bookStatus int64, time string, page int, pageSize int) ([]*entity.LocalLifeTaskInfo, int64, error) {
+func (d LocalLifeTaskInfoDao) GetListByTaskStage(localId string, taskStage int64, time string, page int, pageSize int) ([]*entity.LocalLifeTaskInfo, int64, error) {
 	var taskInfos []*entity.LocalLifeTaskInfo
 	var total int64
-	query := Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND book_status = ?", localId, bookStatus)
+	query := Db.Debug().Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND task_stage = ?", localId, taskStage)
 	// 计算偏移量
 	offset := (page - 1) * pageSize
 	var err error
-	if bookStatus == 1 {
+	if taskStage == 4 { // 待预约探店
 		query.Count(&total)
 		err = query.Order("select_date asc").Offset(offset).Limit(pageSize).Find(&taskInfos).Error
-	} else if bookStatus == 2 {
+	} else if taskStage == 5 { // 待确认探店
 		if time != "" {
 			query = query.Where("DATE(reserve_time) = ?", time)
 		}
 		query.Count(&total)
 		err = query.Order("reserve_time desc").Offset(offset).Limit(pageSize).Find(&taskInfos).Error
-	} else if bookStatus == 3 {
+	}
+	if err != nil {
+		return nil, 0, err
+	}
+	return taskInfos, total, nil
+}
+
+// 获取指定探店状态的本地生活子任务
+func (d LocalLifeTaskInfoDao) GetListByBookStatus(localId string, bookStatus int64, time string, page int, pageSize int) ([]*entity.LocalLifeTaskInfo, int64, error) {
+	var taskInfos []*entity.LocalLifeTaskInfo
+	var total int64
+	query := Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND book_status = ?", localId, bookStatus)
+	// 计算偏移量
+	offset := (page - 1) * pageSize
+	var err error
+	if bookStatus == 5 { // 待探店
 		if time != "" {
 			query = query.Where("DATE(explore_time) = ?", time)
 		}
 		query.Count(&total)
 		err = query.Order("explore_time desc").Offset(offset).Limit(pageSize).Find(&taskInfos).Error
-	} else if bookStatus == 4 {
+	} else if bookStatus == 6 { // 已探店
 		if time != "" {
 			query = query.Where("DATE(finish_explore_time) = ?", time)
 		}

+ 6 - 1
app/dao/project_task_info_dao.go

@@ -25,7 +25,12 @@ func (d ProjectTaskInfoDao) CountByTaskStage(projectId string, taskStage int64)
 func (d ProjectTaskInfoDao) GetListByTaskStage(projectId string, taskStage int64, time string, page int, pageSize int, talentNickname string) ([]*entity.ProjectTaskInfo, int64, error) {
 	var taskInfos []*entity.ProjectTaskInfo
 	var total int64
-	query := Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage = ?", projectId, taskStage)
+	query := Db.Model(&entity.ProjectTaskInfo{})
+	if taskStage == 6 {
+		query = query.Where("project_id = ? AND task_stage >= ?", projectId, taskStage)
+	} else {
+		query = query.Where("project_id = ? AND task_stage = ?", projectId, taskStage)
+	}
 	if talentNickname != "" {
 		var talentInfos []entity.YoungeeTalentInfo
 		err1 := Db.Model(&entity.YoungeeTalentInfo{}).Where("talent_wx_nickname = ?", talentNickname).Find(&talentInfos).Error

+ 67 - 42
app/schedule/auto_task_invalid.go

@@ -44,30 +44,44 @@ func AutoTaskInvalid() error {
 func AutoProjectInvalidTask() {
 	log.Println("AutoProjectInvalidTask running Start, Time :", time.Now())
 	var projectInfos []*entity.Project
-	projectInfos, _ = dao.ProjectDAO{}.GetProjectList(6, "project_status")
+	_ = dao.Db.Model(entity.Project{}).Where("project_status <= ?", 6).Select("project_id,project_status,recruit_ddl,auto_task_id,auto_fail_at").Find(&projectInfos).Error
 	// 对于所有未支付的品牌种草项目进行处理
 	for _, projectInfo := range projectInfos {
 		projectId := projectInfo.ProjectId
+		if time.Now().After(projectInfo.RecruitDdl) && projectInfo.ProjectStatus < 4 {
+			// 变成失效
+			_ = dao.ProjectDAO{}.UpdateProject(entity.Project{
+				ProjectId:     projectId,
+				ProjectStatus: 9,
+			})
+			continue
+		}
+		if time.Now().After(projectInfo.RecruitDdl) && projectInfo.ProjectStatus == 4 {
+			// 变成待支付
+			_ = dao.ProjectDAO{}.UpdateProject(entity.Project{
+				ProjectId:     projectId,
+				ProjectStatus: 6,
+			})
+			continue
+		}
 		autoTaskId := projectInfo.AutoTaskID
 		autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "invalid")
 		dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.Invalid, "") + "h")
 		// 失效时间计算:任务截止时间 + 设置的失效自动执行时间
-		timeInvalid := projectInfo.RecruitDdl.Add(dd)
 		if projectInfo.AutoFailAt.IsZero() {
+			timeInvalid := projectInfo.RecruitDdl.Add(dd)
 			dao.Db.Model(&entity.Project{}).Where("project_id = ?", projectId).Updates(&entity.Project{AutoFailAt: timeInvalid})
+			projectInfo.AutoFailAt = timeInvalid
 		}
-		projectNeedMod := entity.Project{}
-		dao.Db.Where("project_id = ?", projectId).First(&projectNeedMod)
-		//fmt.Println(fmt.Sprintf("品牌种草项目 %s 失效自动处理时间为:%s", projectId, projectNeedMod.AutoFailAt))
-		// 如果失效自动处理的时间不为空
-		if !projectNeedMod.AutoFailAt.IsZero() {
-			timeNow := time.Now()
-			// 如果 未失效 && 已经过了失效自动处理的时间
-			if projectNeedMod.ProjectStatus < 9 && projectNeedMod.AutoFailAt.Sub(time.Now()) <= 0 {
-				dao.Db.Model(entity.Project{}).Where("project_id = ?", projectId).Updates(&entity.Project{ProjectStatus: 9, FinishAt: timeInvalid, FailReason: 1})
-				fmt.Println(fmt.Sprintf("已更新品牌种草项目 %s 状态为超时未支付的失效状态", projectId))
-				dao.Db.Model(entity.ProjectTaskInfo{}).Where("project_id = ?", projectId).Updates(entity.ProjectTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: timeNow})
-			}
+		// 超时未支付则变为失效
+		if time.Now().After(projectInfo.AutoFailAt) && projectInfo.ProjectStatus == 6 {
+			_ = dao.ProjectDAO{}.UpdateProject(entity.Project{
+				ProjectId:     projectId,
+				ProjectStatus: 9,
+				FailReason:    1,
+			})
+			fmt.Println(fmt.Sprintf("已更新品牌种草项目 %s 状态为超时未支付的失效状态", projectId))
+			dao.Db.Model(entity.ProjectTaskInfo{}).Where("project_id = ?", projectId).Updates(entity.ProjectTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
 		}
 	}
 	log.Println("AutoProjectInvalidTask running End, Time :", time.Now())
@@ -84,23 +98,20 @@ func AutoSelectionInvalidTask() {
 		autoTaskId := selectionInfo.AutoTaskID
 		autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "selection_invalid")
 		dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.SelectionInvalid, "") + "h")
-		// 失效时间计算:任务截止时间 + 设置的失效自动执行时间
-		timeInvalid := selectionInfo.PassAt.Add(dd)
 		if selectionInfo.AutoFailAt.IsZero() {
+			timeInvalid := selectionInfo.PassAt.Add(dd)
 			dao.Db.Model(&entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(&entity.SelectionInfo{AutoFailAt: timeInvalid})
+			selectionInfo.AutoFailAt = timeInvalid
 		}
-		selectionInfoNeedMod := entity.SelectionInfo{}
-		dao.Db.Where("selection_id = ?", selectionId).First(&selectionInfoNeedMod)
-		//fmt.Println(fmt.Sprintf("电商带货项目 %s 失效自动处理时间为:%s", selectionId, selectionInfoNeedMod.AutoFailAt))
-		// 如果失效自动处理的时间不为空
-		if !selectionInfoNeedMod.AutoFailAt.IsZero() {
-			timeNow := time.Now()
-			// 如果 未失效 && 已经过了失效自动处理的时间
-			if selectionInfoNeedMod.SelectionStatus < 5 && selectionInfoNeedMod.AutoFailAt.Sub(time.Now()) <= 0 {
-				dao.Db.Model(entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(&entity.SelectionInfo{SelectionStatus: 7, FinishAt: timeInvalid, FailReason: 1})
-				fmt.Println(fmt.Sprintf("已更新电商带货项目 %s 状态为超时未支付的失效状态", selectionId))
-				dao.Db.Model(entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(entity.SelectionTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: timeNow})
-			}
+		// 超时未支付则变为失效
+		if time.Now().After(selectionInfo.AutoFailAt) && selectionInfo.SelectionStatus == 4 {
+			_ = dao.SelectionInfoDAO{}.UpdateSelectionInfo(entity.SelectionInfo{
+				SelectionID:     selectionId,
+				SelectionStatus: 7,
+				FailReason:      1,
+			})
+			fmt.Println(fmt.Sprintf("已更新电商带货项目 %s 状态为超时未支付的失效状态", selectionId))
+			dao.Db.Model(entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(entity.SelectionTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
 		}
 	}
 	log.Println("AutoSelectionInvalidTask running End, Time :", time.Now())
@@ -110,30 +121,44 @@ func AutoSelectionInvalidTask() {
 func AutoLocalLifeInvalidTask() {
 	log.Println("AutoLocalLifeInvalidTask running Start, Time :", time.Now())
 	var localLifeInfos []*entity.LocalLifeInfo
-	localLifeInfos, _ = dao.LocalLifeDao{}.GetLocalLifeList(6, "task_status")
+	_ = dao.Db.Model(entity.LocalLifeInfo{}).Where("task_status <= ?", 6).Select("local_id,task_status,recruit_ddl,auto_task_id,auto_fail_at").Find(&localLifeInfos).Error
 	// 对于所有未支付的本地生活项目进行处理
 	for _, localLifeInfo := range localLifeInfos {
 		localId := localLifeInfo.LocalID
+		if time.Now().After(localLifeInfo.RecruitDdl) && localLifeInfo.TaskStatus < 4 {
+			// 变成失效
+			_ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
+				LocalID:    localId,
+				TaskStatus: 9,
+			})
+			continue
+		}
+		if time.Now().After(localLifeInfo.RecruitDdl) && localLifeInfo.TaskStatus == 4 {
+			// 变成待支付
+			_ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
+				LocalID:    localId,
+				TaskStatus: 6,
+			})
+			continue
+		}
 		autoTaskId := localLifeInfo.AutoTaskID
 		autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "invalid")
 		dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.Invalid, "") + "h")
 		// 失效时间计算:任务截止时间 + 设置的失效自动执行时间
-		timeInvalid := localLifeInfo.RecruitDdl.Add(dd)
 		if localLifeInfo.AutoFailAt.IsZero() {
+			timeInvalid := localLifeInfo.RecruitDdl.Add(dd)
 			dao.Db.Model(&entity.LocalLifeInfo{}).Where("local_id = ?", localId).Updates(&entity.LocalLifeInfo{AutoFailAt: timeInvalid})
+			localLifeInfo.AutoFailAt = timeInvalid
 		}
-		localLifeNeedMod := entity.LocalLifeInfo{}
-		dao.Db.Where("local_id = ?", localId).First(&localLifeNeedMod)
-		//fmt.Println(fmt.Sprintf("本地生活项目 %s 失效自动处理时间为:%s", localId, localLifeNeedMod.AutoFailAt))
-		// 如果失效自动处理的时间不为空
-		if !localLifeNeedMod.AutoFailAt.IsZero() {
-			timeNow := time.Now()
-			// 如果 未失效 && 已经过了失效自动处理的时间
-			if localLifeNeedMod.TaskStatus < 9 && localLifeNeedMod.AutoFailAt.Sub(time.Now()) <= 0 {
-				dao.Db.Model(entity.LocalLifeInfo{}).Where("local_id = ?", localId).Updates(&entity.LocalLifeInfo{TaskStatus: 9, FinishAt: timeInvalid, FailReason: 1})
-				fmt.Println(fmt.Sprintf("已更新本地生活项目 %s 状态为超时未支付的失效状态", localId))
-				dao.Db.Model(entity.LocalLifeTaskInfo{}).Where("local_id = ?", localId).Updates(entity.LocalLifeTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: timeNow})
-			}
+		// 超时未支付则变为失效
+		if time.Now().After(localLifeInfo.AutoFailAt) && localLifeInfo.TaskStatus == 6 {
+			_ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
+				LocalID:    localId,
+				TaskStatus: 9,
+				FailReason: 1,
+			})
+			fmt.Println(fmt.Sprintf("已更新本地生活项目 %s 状态为超时未支付的失效状态", localId))
+			dao.Db.Model(entity.LocalLifeTaskInfo{}).Where("local_id = ?", localId).Updates(entity.LocalLifeTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
 		}
 	}
 	log.Println("AutoLocalLifeInvalidTask running End, Time :", time.Now())

+ 6 - 6
app/service/local_life_service.go

@@ -1123,13 +1123,13 @@ func (s LocalLifeService) GetStoreExploreInfo(param *vo.StoreExploreParam) (*vo.
 	var err error
 	localLifeId := param.LocalLifeId
 	if param.Status == 1 { // 待预约
-		localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 1, "", param.Page, param.PageSize)
+		localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 4, "", param.Page, param.PageSize)
 	} else if param.Status == 2 { // 待确认
-		localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 2, param.SearchTime, param.Page, param.PageSize)
-	} else if param.Status == 3 { // 待探店
 		localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 5, param.SearchTime, param.Page, param.PageSize)
+	} else if param.Status == 3 { // 待探店
+		localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByBookStatus(localLifeId, 5, param.SearchTime, param.Page, param.PageSize)
 	} else if param.Status == 4 { // 已探店
-		localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 6, param.SearchTime, param.Page, param.PageSize)
+		localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByBookStatus(localLifeId, 6, param.SearchTime, param.Page, param.PageSize)
 	}
 	if err != nil {
 		return nil, err
@@ -1186,8 +1186,8 @@ func (t LocalLifeService) StoreExploreInfoCount(param *vo.StoreExploreParam) map
 	var needConfirm int64
 	var needExplore int64
 	var explored int64
-	dao.Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND book_status = ?", param.LocalLifeId, 1).Count(&needBook)
-	dao.Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND book_status = ?", param.LocalLifeId, 2).Count(&needConfirm)
+	dao.Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND task_stage = ?", param.LocalLifeId, 4).Count(&needBook)
+	dao.Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND task_stage = ?", param.LocalLifeId, 5).Count(&needConfirm)
 	dao.Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND book_status = ?", param.LocalLifeId, 5).Count(&needExplore)
 	dao.Db.Model(&entity.LocalLifeTaskInfo{}).Where("local_id = ? AND book_status = ?", param.LocalLifeId, 6).Count(&explored)
 	res["needBook"] = needBook

+ 2 - 1
app/service/task_info_service.go

@@ -81,6 +81,7 @@ func (t TaskInfoService) LogisticsTalentList(param *vo.LogisticsTalentParam) (*v
 			Gender:      talentInfo.Sex,
 		}
 		reLogisticsTalent := &vo.ReLogisticsTalent{
+			TaskId:             projectTaskInfo.TaskID,
 			TalentPostAddrSnap: projectTaskInfo.TalentPostAddrSnap,
 			ReTalentPreview:    talentPreview,
 			LogisticsId:        taskLogistics.LogisticsID,
@@ -194,7 +195,7 @@ func (t TaskInfoService) LogisticsTalentCount(param *vo.LogisticsTalentParam) ma
 	var received int64
 	dao.Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage = ?", param.ProjectId, 4).Count(&needDelivery)
 	dao.Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage = ?", param.ProjectId, 5).Count(&needReceive)
-	dao.Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage = ?", param.ProjectId, 6).Count(&received)
+	dao.Db.Model(&entity.ProjectTaskInfo{}).Where("project_id = ? AND task_stage >= ?", param.ProjectId, 6).Count(&received)
 	res["needDelivery"] = needDelivery
 	res["needReceive"] = needReceive
 	res["received"] = received

+ 1 - 0
app/vo/re_logistics_talent.go

@@ -1,6 +1,7 @@
 package vo
 
 type ReLogisticsTalent struct {
+	TaskId             string         `json:"taskId"`
 	LogisticsId        int64          `json:"logisticsId"`        // 物流id
 	CompanyName        string         `json:"companyName"`        // 快递公司
 	LogisticsNumber    string         `json:"logisticsNumber"`    // 快递单号

+ 5 - 1
service/logistics.go

@@ -83,7 +83,11 @@ func (*logistics) Create(ctx context.Context, newLogistics http_model.CreateLogi
 		return nil, err1
 	}
 
-	dao.Db.Model(&entity.Project{ProjectId: *projectId}).Update("delivery_num", gorm.Expr("delivery_num + ?", 1))
+	// 更新发货数值
+	dao.Db.Model(&entity.Project{}).Where("task_id = ?", projectId).Updates(map[string]interface{}{
+		"delivery_num":        gorm.Expr("delivery_num + ?", 1),
+		"before_delivery_num": gorm.Expr("before_delivery_num - ?", 1),
+	})
 
 	// 查询StrategyID 通过 StrategyID 和 projectId
 	RecruitStrategyId, err2 := db.GetRecruitStrategyIdByTS(ctx, *projectId, StrategyID)