Parcourir la source

fix_复制任务

Ethan il y a 1 mois
Parent
commit
a47cbf6837

+ 72 - 3
app/controller/task_controller.go

@@ -69,7 +69,6 @@ func (t TaskController) CreateProduct(c *gin.Context) {
 
 // 关联商品-完成关联创建带货任务
 func (t TaskController) CreateSelection(c *gin.Context) {
-	//data := &vo.SelectionInfoCreateParam{}
 	data := &vo.SelectionInfoCreateParam{}
 	err := c.BindJSON(data)
 	if err != nil {
@@ -123,7 +122,30 @@ func (t TaskController) GetSelectionDetail(c *gin.Context) {
 		returnError(c, 40000, err.Error())
 		return
 	}
+	returnSuccess(c, 20000, res)
+}
 
+// 电商带货复制任务
+func (t TaskController) CopySelection(c *gin.Context) {
+	data := &vo.SelectionSearchParam{}
+	err := c.BindJSON(data)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	res, err := service.SelectionInfoService{}.CopySelection(data)
+	if err != nil {
+		if err.Error() == "任务不存在" {
+			returnError(c, 30000, err.Error())
+			return
+		}
+		logrus.Errorf("[CopySelection] call CopySelection err:%+v\n", err)
+		returnError(c, 40000, err.Error())
+		return
+	}
+	resultMap := make(map[string]string)
+	resultMap["selectionId"] = *res
 	returnSuccess(c, 20000, res)
 }
 
@@ -162,7 +184,6 @@ func (t TaskController) SelectionTaskList(c *gin.Context) {
 		returnError(c, 40000, err.Error())
 		return
 	}
-
 	returnSuccess(c, 20000, res)
 }
 
@@ -257,7 +278,7 @@ func (t TaskController) GetProjectDetail(c *gin.Context) {
 	}
 	res, err := service.ProjectService{}.GetProjectDetail(data.ProjectId)
 	if err != nil {
-		logrus.Errorf("[GetProjectDetail] call Show err:%+v\n", err)
+		logrus.Errorf("[GetProjectDetail] call GetProjectDetail err:%+v\n", err)
 		returnError(c, 40000, err.Error())
 		return
 	}
@@ -265,6 +286,30 @@ func (t TaskController) GetProjectDetail(c *gin.Context) {
 	returnSuccess(c, 20000, res)
 }
 
+// 种草复制任务
+func (t TaskController) CopyProject(c *gin.Context) {
+	data := &vo.ProjectSearchParam{}
+	err := c.BindJSON(data)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	projectId, err := service.ProjectService{}.CopyProject(data)
+	if err != nil {
+		if err.Error() == "任务不存在" {
+			returnError(c, 30000, err.Error())
+			return
+		}
+		logrus.Errorf("[CopyProject] call CopyProject err:%+v\n", err)
+		returnError(c, 40000, err.Error())
+		return
+	}
+	resultMap := make(map[string]string)
+	resultMap["projectId"] = *projectId
+	returnSuccess(c, 20000, resultMap)
+}
+
 // 种草提交审核
 func (t TaskController) ProjectToReview(c *gin.Context) {
 	data := &vo.ProjectUpdateParam{}
@@ -712,6 +757,30 @@ func (t TaskController) GetLocalLifeDetail(c *gin.Context) {
 	returnSuccess(c, 20000, res)
 }
 
+// 本地生活复制任务
+func (t TaskController) CopyLocalLife(c *gin.Context) {
+	data := &vo.LocalSearchParam{}
+	err := c.BindJSON(data)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	localId, err := service.LocalLifeService{}.CopyLocalLife(data)
+	if err != nil {
+		if err.Error() == "任务不存在" {
+			returnError(c, 30000, err.Error())
+			return
+		}
+		logrus.Errorf("[CreateLocalLife] call CreateLocalLife err:%+v\n", err)
+		returnError(c, 40000, err.Error())
+		return
+	}
+	resultMap := make(map[string]string)
+	resultMap["localId"] = *localId
+	returnSuccess(c, 20000, resultMap)
+}
+
 // 本地生活提交审核
 func (t TaskController) LocalLifeToReview(c *gin.Context) {
 	data := &vo.LocalUpdateParam{}

+ 1 - 1
app/dao/project_dao.go

@@ -14,7 +14,7 @@ type ProjectDAO struct{}
 // 根据projectId获取project信息
 func (d ProjectDAO) GetProjectById(projectId string) (*entity.Project, error) {
 	var project entity.Project
-	err := Db.Where("project_id = ?", projectId).Find(&project).Error
+	err := Db.Where("project_id = ?", projectId).First(&project).Error
 	if err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return nil, nil

+ 6 - 3
app/schedule/auto_task_review.go

@@ -232,8 +232,9 @@ func AutoProjectReviewTask() {
 		}
 
 		// 审核通过
+		t := time.Now()
 		_ = dao.ProjectReviewDao{}.UpdateProjectReview(&entity.ReviewProject{ID: reviewProject.ID, Status: 2})
-		_ = dao.ProjectDAO{}.UpdateProject(entity.Project{ProjectId: reviewProject.ProjectID, ProjectStatus: 4})
+		_ = dao.ProjectDAO{}.UpdateProject(entity.Project{ProjectId: reviewProject.ProjectID, ProjectStatus: 4, PassAt: t})
 	}
 
 	log.Println("AutoProjectReviewTask running End, Time :", time.Now())
@@ -413,8 +414,9 @@ func AutoSelectionReviewTask() {
 		}
 
 		// 审核通过
+		t := time.Now()
 		_ = dao.SelectionReviewDao{}.UpdateSelectionReview(&entity.ReviewSelection{ID: reviewSelection.ID, Status: 2})
-		_ = dao.SelectionInfoDAO{}.UpdateSelectionInfo(entity.SelectionInfo{SelectionID: reviewSelection.SelectionID, SelectionStatus: 4})
+		_ = dao.SelectionInfoDAO{}.UpdateSelectionInfo(entity.SelectionInfo{SelectionID: reviewSelection.SelectionID, SelectionStatus: 4, PassAt: t})
 	}
 
 	log.Println("AutoSelectionInvalidTask running End, Time :", time.Now())
@@ -662,8 +664,9 @@ func AutoLocalLifeReviewTask() {
 		}
 
 		// 审核通过
+		t := time.Now()
 		_ = dao.LocalLifeReviewDao{}.UpdateLocalReview(&entity.ReviewLocalLife{ID: reviewLocalLife.ID, Status: 2})
-		_ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{LocalID: reviewLocalLife.LocalID, TaskStatus: 4})
+		_ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{LocalID: reviewLocalLife.LocalID, TaskStatus: 4, PassAt: t})
 	}
 
 	log.Println("AutoLocalLifeInvalidTask running End, Time :", time.Now())

+ 135 - 6
app/service/local_life_service.go

@@ -28,7 +28,7 @@ func (s LocalLifeService) CreateLocalLife(localCreateParam *vo.LocalCreateParam)
 	if product == nil {
 		return nil, errors.New("未找到关联门店")
 	}
-	// c)创建种草任务
+	// c)创建本地生活任务
 	var operatorType int64
 	if localCreateParam.SubAccountId == 0 {
 		operatorType = 1
@@ -101,11 +101,6 @@ func (s LocalLifeService) CreateLocalLife(localCreateParam *vo.LocalCreateParam)
 	}
 
 	if localCreateParam.LocalMaterial != nil {
-		// 删除已有示例
-		err = dao.LocalLifeMaterialDao{}.DeleteLocalMaterialByLocalId(localId)
-		if err != nil {
-			return nil, err
-		}
 		// 插入新的示例
 		for _, v := range localCreateParam.LocalMaterial {
 			material := entity.LocalLifeMaterial{
@@ -602,6 +597,139 @@ func (s LocalLifeService) GetLocalLifeDetail(localId string) (*vo.ReLocalDetail,
 	return &reLocalDetail, nil
 }
 
+// 复制本地生活任务
+func (s LocalLifeService) CopyLocalLife(param *vo.LocalSearchParam) (*string, error) {
+	localLifeOrigin, err := dao.LocalLifeDao{}.GetLocalById(param.LocalId)
+	if err != nil {
+		logrus.Errorf("[localLifeDB service] call GetLocalById error,err:%+v", err)
+		return nil, err
+	}
+	if localLifeOrigin == nil {
+		return nil, errors.New("任务不存在")
+	}
+	localIdOrigin := localLifeOrigin.LocalID
+	localIdNew := strings.ReplaceAll(util.GenerateUUID(11), "-", "")
+	t := time.Now()
+	// 获取定时任务配置id
+	infoAutoTask := entity.InfoAutoTask{}
+	infoAutoTask = dao.InfoAutoTaskDao{}.GetAutoTaskLast(param.EnterpriseId)
+	infoAutoDefault := entity.InfoAutoDefault{}
+	infoAutoDefault = dao.InfoAutoDefaultDao{}.GetAutoDefaultLast(param.EnterpriseId)
+
+	// 复制任务
+	localLifeNew := entity.LocalLifeInfo{
+		EnterpriseID:        param.EnterpriseId,
+		SubAccountID:        param.SubAccountId,
+		OperatorType:        localLifeOrigin.OperatorType,
+		TaskStatus:          localLifeOrigin.TaskStatus,
+		LocalID:             localIdNew,
+		LocalType:           localLifeOrigin.LocalType,
+		LocalPlatform:       localLifeOrigin.LocalPlatform,
+		StoreID:             localLifeOrigin.StoreID,
+		StoreRelatedAt:      t,
+		PromoteBody:         localLifeOrigin.PromoteBody,
+		Donate:              localLifeOrigin.Donate,
+		TeamBuyingId:        localLifeOrigin.TeamBuyingId,
+		TeamBuyingRelatedAt: t,
+		CreatedAt:           t,
+		AutoTaskID:          infoAutoTask.AutoTaskID,
+		AutoDefaultID:       infoAutoDefault.AutoDefaultID,
+		LocalName:           localLifeOrigin.LocalName,
+		TalentType:          localLifeOrigin.TalentType,
+		RecruitDdl:          localLifeOrigin.RecruitDdl,
+		TaskForm:            localLifeOrigin.TaskForm,
+		ContentType:         localLifeOrigin.ContentType,
+		TaskDetail:          localLifeOrigin.TaskDetail,
+		ServiceChargeRate:   localLifeOrigin.ServiceChargeRate,
+		EstimatedCost:       localLifeOrigin.EstimatedCost,
+	}
+	err = dao.LocalLifeDao{}.CreateLocalLife(localLifeNew)
+	if err != nil {
+		return nil, err
+	}
+
+	// 更新选品brief和示例(本地生活任务补充信息)
+	localBriefInfos, err := dao.LocalLifeBriefDao{}.GetLocalBriefInfo(localIdOrigin)
+	if err != nil {
+		logrus.Errorf("[projectDB service] call GetLocalBriefInfo error,err:%+v", err)
+		return nil, err
+	}
+	if localBriefInfos != nil {
+		for _, v := range localBriefInfos {
+			brief := entity.LocalLifeBrief{
+				LocalID:   localIdNew,
+				FileUid:   v.FileUid,
+				FileName:  v.FileName,
+				FileUrl:   v.FileUrl,
+				CreatedAt: time.Now(),
+				Type:      v.Type,
+			}
+			err = dao.LocalLifeBriefDao{}.CreateLocalBrief(brief)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+	localMaterials, err := dao.LocalLifeMaterialDao{}.GetLocalMaterialInfo(localIdOrigin)
+	if err != nil {
+		logrus.Errorf("[projectDB service] call GetLocalMaterialInfo error,err:%+v", err)
+		return nil, err
+	}
+	if localMaterials != nil {
+		for _, v := range localMaterials {
+			material := entity.LocalLifeMaterial{
+				LocalID:   localIdNew,
+				FileUid:   v.FileUid,
+				FileName:  v.FileName,
+				FileUrl:   v.FileUrl,
+				CreatedAt: time.Now(),
+				Type:      v.Type,
+			}
+			err = dao.LocalLifeMaterialDao{}.CreateLocalMaterial(material)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	// 更新本地生活任务的招募策略
+	recruitStrategys, err := dao.RecruitStrategyDao{}.GetRecruitStrategyByProjectId(localIdOrigin)
+	if err != nil {
+		logrus.Errorf("[localLifeDB service] call GetRecruitStrategy error,err:%+v", err)
+		return nil, err
+	}
+	var totalRecruitNum int64
+	if recruitStrategys != nil {
+		// 2. 接收并创建新的招募策略
+		if len(recruitStrategys) != 0 {
+			var recruits []entity.RecruitStrategy
+			for _, strategy := range recruitStrategys {
+				recruitStrategy := entity.RecruitStrategy{
+					FeeForm:       strategy.FeeForm,
+					StrategyID:    strategy.StrategyID,
+					FollowersLow:  strategy.FollowersLow,
+					FollowersUp:   strategy.FollowersUp,
+					RecruitNumber: strategy.RecruitNumber,
+					ProjectID:     localIdNew,
+					StrategyType:  strategy.StrategyType,
+					ServiceRate:   strategy.ServiceRate,
+					Offer:         strategy.Offer,
+					ServiceCharge: strategy.ServiceCharge,
+					TOffer:        strategy.TOffer,
+				}
+				totalRecruitNum += strategy.RecruitNumber
+				recruits = append(recruits, recruitStrategy)
+			}
+			err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	return &localIdNew, nil
+}
+
 // 本地生活提交审核
 func (s LocalLifeService) LocalLifeToReview(localUpdateParam *vo.LocalUpdateParam) (*string, error) {
 	localId := localUpdateParam.LocalID
@@ -774,6 +902,7 @@ func (s LocalLifeService) LocalLifeToReview(localUpdateParam *vo.LocalUpdatePara
 	updateLocal := entity.LocalLifeInfo{
 		LocalID:    localId,
 		TaskStatus: 2,
+		SubmitAt:   t,
 		UpdatedAt:  t,
 	}
 	err9 := dao.LocalLifeDao{}.UpdateLocal(updateLocal)

+ 137 - 0
app/service/project_service.go

@@ -596,6 +596,142 @@ func (s ProjectService) GetProjectDetail(projectId string) (*vo.ReProjectDetail,
 	return &reProjectDetail, nil
 }
 
+// 复制种草任务
+func (s ProjectService) CopyProject(param *vo.ProjectSearchParam) (*string, error) {
+	projectOrigin, err := dao.ProjectDAO{}.GetProjectById(param.ProjectId)
+	if err != nil {
+		logrus.Errorf("[projectDB service] call GetProject error,err:%+v", err)
+		return nil, err
+	}
+	if projectOrigin == nil {
+		return nil, errors.New("任务不存在")
+	}
+	projectIdOrigin := projectOrigin.ProjectId
+	projectIdNew := strings.ReplaceAll(util.GenerateUUID(11), "-", "")
+	t := time.Now()
+	// 获取定时任务配置id
+	infoAutoTask := entity.InfoAutoTask{}
+	infoAutoTask = dao.InfoAutoTaskDao{}.GetAutoTaskLast(param.EnterpriseId)
+	infoAutoDefault := entity.InfoAutoDefault{}
+	infoAutoDefault = dao.InfoAutoDefaultDao{}.GetAutoDefaultLast(param.EnterpriseId)
+
+	// 复制任务
+	projectNew := entity.Project{
+		ProjectStatus:     projectOrigin.ProjectStatus,
+		ProjectType:       projectOrigin.ProjectType,
+		ProjectId:         projectIdNew,
+		ProductID:         projectOrigin.ProductID,
+		ProductCategory:   projectOrigin.ProductCategory,
+		EnterpriseID:      param.EnterpriseId,
+		SubAccountId:      param.SubAccountId,
+		ProjectPlatform:   projectOrigin.ProjectPlatform,
+		OperatorType:      projectOrigin.OperatorType,
+		ProductSnap:       projectOrigin.ProductSnap,
+		ProductPhotoSnap:  projectOrigin.ProductPhotoSnap,
+		CreatedAt:         t,
+		AutoTaskID:        infoAutoTask.AutoTaskID,
+		AutoDefaultID:     infoAutoDefault.AutoDefaultID,
+		ProjectName:       projectOrigin.ProjectName,
+		TalentType:        projectOrigin.TalentType,
+		RecruitDdl:        projectOrigin.RecruitDdl,
+		ProjectForm:       projectOrigin.ProjectForm,
+		ContentType:       projectOrigin.ContentType,
+		ProjectDetail:     projectOrigin.ProjectDetail,
+		Tools:             projectOrigin.Tools,
+		ServiceChargeRate: projectOrigin.ServiceChargeRate,
+		EstimatedCost:     projectOrigin.EstimatedCost,
+	}
+	err = dao.ProjectDAO{}.CreateProject(projectNew)
+	if err != nil {
+		return nil, err
+	}
+
+	// 更新选品brief和示例(种草任务补充信息)
+	projectBriefInfos, err := dao.ProjectBriefDao{}.GetProjectBriefInfo(projectIdOrigin)
+	if err != nil {
+		logrus.Errorf("[projectDB service] call GetProjectBriefInfo error,err:%+v", err)
+		return nil, err
+	}
+	if projectBriefInfos != nil {
+		for _, v := range projectBriefInfos {
+			brief := entity.ProjectBrief{
+				ProjectID: projectIdNew,
+				FileUid:   v.FileUid,
+				FileName:  v.FileName,
+				FileUrl:   v.FileUrl,
+				CreatedAt: time.Now(),
+				Type:      v.Type,
+			}
+			err = dao.ProjectBriefDao{}.CreateProjectBrief(brief)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+	projectMaterials, err := dao.ProjectMaterialDao{}.GetProjectMaterialInfo(projectIdOrigin)
+	if err != nil {
+		logrus.Errorf("[projectDB service] call GetprojectMaterialInfo error,err:%+v", err)
+		return nil, err
+	}
+	if projectMaterials != nil {
+		// 插入新的示例
+		for _, v := range projectMaterials {
+			projectMaterial := entity.ProjectMaterial{
+				ProjectID: projectIdNew,
+				FileUid:   v.FileUid,
+				FileName:  v.FileName,
+				FileUrl:   v.FileUrl,
+				CreatedAt: time.Now(),
+				Type:      v.Type,
+			}
+			err = dao.ProjectMaterialDao{}.CreateProjectMaterial(projectMaterial)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+	// 更新种草任务的招募策略
+	recruitStrategys, err := dao.RecruitStrategyDao{}.GetRecruitStrategyByProjectId(projectIdOrigin)
+	if err != nil {
+		logrus.Errorf("[projectDB service] call GetRecruitStrategy error,err:%+v", err)
+		return nil, err
+	}
+	var totalRecruitNum int64
+	var estimatedCost float64
+	if recruitStrategys != nil {
+		// 2. 接收并创建新的招募策略
+		if len(recruitStrategys) != 0 {
+			var recruits []entity.RecruitStrategy
+			for _, strategy := range recruitStrategys {
+				if strategy.FeeForm == 2 {
+					estimatedCost += float64(strategy.RecruitNumber) * strategy.Offer
+				}
+				recruitStrategy := entity.RecruitStrategy{
+					FeeForm:       strategy.FeeForm,
+					StrategyID:    strategy.StrategyID,
+					FollowersLow:  strategy.FollowersLow,
+					FollowersUp:   strategy.FollowersUp,
+					RecruitNumber: strategy.RecruitNumber,
+					ProjectID:     projectIdNew,
+					StrategyType:  strategy.StrategyType,
+					ServiceRate:   strategy.ServiceRate,
+					Offer:         strategy.Offer,
+					ServiceCharge: strategy.ServiceCharge,
+					TOffer:        strategy.TOffer,
+				}
+				totalRecruitNum += strategy.RecruitNumber
+				recruits = append(recruits, recruitStrategy)
+			}
+			err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	return &projectIdNew, nil
+}
+
 // 种草提交审核
 func (s ProjectService) ProjectToReview(projectUpdateParam *vo.ProjectUpdateParam) (*string, error) {
 	projectId := projectUpdateParam.ProjectID
@@ -730,6 +866,7 @@ func (s ProjectService) ProjectToReview(projectUpdateParam *vo.ProjectUpdatePara
 	updateProject := entity.Project{
 		ProjectId:     projectId,
 		ProjectStatus: 2,
+		SubmitAt:      t,
 		UpdatedAt:     t,
 	}
 	err6 := dao.ProjectDAO{}.UpdateProject(updateProject)

+ 142 - 1
app/service/selection_info_service.go

@@ -433,7 +433,7 @@ func (s SelectionInfoService) GetSelectionDetail(selectionId string) (*vo.ReSele
 	}
 	reSelectionDetail.SelectionName = selection.SelectionName
 	// 系统信息
-	reSelectionDetail.SelectionId = selectionId
+	reSelectionDetail.SelectionId = selection.SelectionID
 	reSelectionDetail.SelectionStatus = selection.SelectionStatus
 	reSelectionDetail.SelectionPlatform = selection.Platform
 	reSelectionDetail.CreatedAt = selection.CreatedAt.Format("2006-01-02 15:04:05")
@@ -534,6 +534,146 @@ func (s SelectionInfoService) GetSelectionDetail(selectionId string) (*vo.ReSele
 	return &reSelectionDetail, nil
 }
 
+// 电商带货复制任务
+func (s SelectionInfoService) CopySelection(param *vo.SelectionSearchParam) (*string, error) {
+	selectionOrigin, err := dao.SelectionInfoDAO{}.GetSelectionInfoById(param.SelectionId)
+	if err != nil {
+		logrus.Errorf("[selectionInfoDB service] call GetSelection error,err:%+v", err)
+		return nil, err
+	}
+	if selectionOrigin == nil {
+		return nil, errors.New("任务不存在")
+	}
+	selectionIdOrigin := selectionOrigin.SelectionID
+	selectionIdNew := strings.ReplaceAll(util.GenerateUUID(11), "-", "")
+	t := time.Now()
+	// 获取定时任务配置
+	infoAutoTask := entity.InfoAutoTask{}
+	infoAutoTask = dao.InfoAutoTaskDao{}.GetAutoTaskLast(param.EnterpriseId)
+
+	// 复制选品
+	selectionNew := entity.SelectionInfo{
+		SelectionStatus:  selectionOrigin.SelectionStatus,
+		SelectionID:      selectionIdNew,
+		ProductID:        selectionOrigin.ProductID,
+		ProductCategory:  selectionOrigin.ProductCategory,
+		EnterpriseID:     param.EnterpriseId,
+		SubAccountId:     param.SubAccountId,
+		Platform:         selectionOrigin.Platform,
+		ProductSnap:      selectionOrigin.ProductSnap,
+		ProductPhotoSnap: selectionOrigin.ProductPhotoSnap,
+		SelectionName:    selectionOrigin.SelectionName,
+		TaskDdl:          selectionOrigin.TaskDdl,
+		SampleNum:        selectionOrigin.SampleNum,
+		RemainNum:        selectionOrigin.SampleNum,
+		SampleMode:       selectionOrigin.SampleMode,
+		TaskMode:         selectionOrigin.TaskMode,
+		CreatedAt:        t,
+		AutoTaskID:       infoAutoTask.AutoTaskID,
+		EstimatedCost:    selectionOrigin.EstimatedCost,
+	}
+	err = dao.SelectionInfoDAO{}.CreateSelectionInfo(selectionNew)
+	if err != nil {
+		return nil, err
+	}
+
+	// 更新选品brief和示例(带货任务补充信息)
+	selectionBriefInfos, err := dao.SecBriefDao{}.GetSelectionBriefInfo(selectionIdOrigin)
+	if err != nil {
+		logrus.Errorf("[selectionInfoDB service] call GetSelectionBriefInfo error,err:%+v", err)
+		return nil, err
+	}
+	if selectionBriefInfos != nil {
+		for _, v := range selectionBriefInfos {
+			brief := entity.SecBrief{
+				SelectionID: selectionIdNew,
+				FileUid:     v.FileUid,
+				FileName:    v.FileName,
+				FileUrl:     v.FileUrl,
+				CreatedAt:   time.Now(),
+				Type:        v.Type,
+			}
+			err = dao.SecBriefDao{}.CreateSecBrief(brief)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+	selectionMaterials, err := dao.SecMaterialDao{}.GetSelectionMaterialInfo(selectionIdOrigin)
+	if err != nil {
+		logrus.Errorf("[selectionInfoDB service] call GetSelectionMaterialInfo error,err:%+v", err)
+		return nil, err
+	}
+	if selectionMaterials != nil {
+		for _, v := range selectionMaterials {
+			secMaterial := entity.SecMaterial{
+				SelectionID: selectionIdNew,
+				FileUid:     v.FileUid,
+				FileName:    v.FileName,
+				FileUrl:     v.FileUrl,
+				CreatedAt:   time.Now(),
+				Type:        v.Type,
+			}
+			err = dao.SecMaterialDao{}.CreateSecMaterial(secMaterial)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	// 更新带货任务的免费领样策略
+	freeStrategys, err := dao.FreeStrategyDao{}.GetFreeStrategyBySelectionId(selectionIdOrigin)
+	if err != nil {
+		logrus.Errorf("[selectionInfoDB service] call GetFreeStrategy error,err:%+v", err)
+		return nil, err
+	}
+	if freeStrategys != nil {
+		var frees []entity.FreeStrategy
+		for _, v := range freeStrategys {
+			free := entity.FreeStrategy{
+				SelectionId:    selectionIdNew,
+				StrategyId:     v.StrategyId,
+				FollowersLow:   v.FollowersLow,
+				FollowersUp:    v.FollowersUp,
+				SaleNum:        v.SaleNum,
+				StrategyStatus: v.StrategyStatus,
+				EnrollNum:      0,
+				ChooseNum:      0,
+			}
+			frees = append(frees, free)
+		}
+		err = dao.FreeStrategyDao{}.CreateFreeStrategy(frees)
+		if err != nil {
+			return nil, err
+		}
+	}
+	// 更新带货任务的悬赏策略
+	rewardStrategys, err := dao.RewardStrategyDao{}.GetRewardStrategyBySelectionId(selectionIdOrigin)
+	if err != nil {
+		logrus.Errorf("[selectionInfoDB service] call GetRewardStrategy error,err:%+v", err)
+		return nil, err
+	}
+	if rewardStrategys != nil {
+		var rewards []entity.RewardStrategy
+		for _, v := range rewardStrategys {
+			reward := entity.RewardStrategy{
+				SelectionId:    selectionIdNew,
+				Reward:         v.Reward,
+				SaleActual:     v.SaleActual,
+				PerReward:      v.PerReward,
+				StrategyStatus: 1,
+			}
+			rewards = append(rewards, reward)
+		}
+		err = dao.RewardStrategyDao{}.CreateRewardStrategy(rewards)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	return &selectionIdNew, nil
+}
+
 // 电商带货提交审核
 func (s SelectionInfoService) SelectionToReview(param *vo.SelectionInfoUpdateParam) (*string, error) {
 	selectionId := param.SelectionID
@@ -665,6 +805,7 @@ func (s SelectionInfoService) SelectionToReview(param *vo.SelectionInfoUpdatePar
 	updateSelection := entity.SelectionInfo{
 		SelectionID:     selectionId,
 		SelectionStatus: 2,
+		SubmitAt:        t,
 		UpdatedAt:       t,
 	}
 	err6 := dao.SelectionInfoDAO{}.UpdateSelectionInfo(updateSelection)

+ 3 - 0
route/init.go

@@ -179,6 +179,7 @@ func InitRoute(r *gin.Engine) {
 		task.POST("/selection/create", controller.TaskController{}.CreateSelection)             // 创建带货任务
 		task.POST("/selection/update", controller.TaskController{}.UpdateSelection)             // 更新带货任务(样品奖励、补充信息)
 		task.POST("/selection/detail", controller.TaskController{}.GetSelectionDetail)          // 电商带货任务预览
+		task.POST("/selection/copy", controller.TaskController{}.CopySelection)                 // 电商带货复制任务(获取原任务-创建任务)
 		task.POST("/selection/toReview", controller.TaskController{}.SelectionToReview)         // 电商带货提交审核
 		task.POST("/selection/task/list", controller.TaskController{}.SelectionTaskList)        // 电商带货任务列表
 		task.POST("/selection/del", controller.TaskController{}.SelectionDel)                   // 删除带货任务
@@ -191,6 +192,7 @@ func InitRoute(r *gin.Engine) {
 		task.POST("/project/update", controller.TaskController{}.UpdateProject)              // 更新公开种草任务
 		task.POST("/project/target/update", controller.TaskController{}.UpdateProjectTarget) // 更新定向种草任务
 		task.POST("/project/detail", controller.TaskController{}.GetProjectDetail)           // 品牌种草任务预览
+		task.POST("/project/copy", controller.TaskController{}.CopyProject)                  // 品牌种草复制任务
 		task.POST("/project/toReview", controller.TaskController{}.ProjectToReview)          // 种草提交审核
 		task.POST("/project/task/list", controller.TaskController{}.ProjectTaskList)         // 种草任务列表
 		task.POST("/project/del", controller.TaskController{}.ProjectDel)                    // 删除种草任务
@@ -206,6 +208,7 @@ func InitRoute(r *gin.Engine) {
 		task.POST("/localLife/update", controller.TaskController{}.UpdateLocalLife)              // 更新公开本地生活任务
 		task.POST("/localLife/target/update", controller.TaskController{}.UpdateLocalLifeTarget) // 更新定向本地生活任务
 		task.POST("/localLife/detail", controller.TaskController{}.GetLocalLifeDetail)           // 本地生活任务预览
+		task.POST("/localLife/copy", controller.TaskController{}.CopyLocalLife)                  // 本地生活复制任务
 		task.POST("/localLife/toReview", controller.TaskController{}.LocalLifeToReview)          // 本地生活提交审核
 		task.POST("/localLife/task/list", controller.TaskController{}.LocalLifeTaskList)         // 本地生活列表
 		task.POST("/localLife/del", controller.TaskController{}.LocalLifeDel)                    // 删除本地生活