浏览代码

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

Xingyu Xian 3 周之前
父节点
当前提交
32840fa8b6
共有 82 个文件被更改,包括 3450 次插入535 次删除
  1. 28 0
      app/controller/cooperation_controller.go
  2. 28 0
      app/controller/finance_controller.go
  3. 85 1
      app/controller/task_controller.go
  4. 2 2
      app/dao/enterprise_supplier_cooperate_dao.go
  5. 5 5
      app/dao/info_auto_default_dao.go
  6. 49 2
      app/dao/local_life_dao.go
  7. 5 2
      app/dao/project_dao.go
  8. 13 1
      app/dao/project_task_info_dao.go
  9. 71 0
      app/dao/s_local_dao.go
  10. 41 41
      app/dao/s_project_dao.go
  11. 4 1
      app/dao/selection_info_dao.go
  12. 9 9
      app/entity/local_life_task_info.go
  13. 1 0
      app/entity/platform_kuaishou_user_info.go
  14. 22 22
      app/entity/project_task_info.go
  15. 41 0
      app/entity/s_local.go
  16. 1 0
      app/entity/s_project.go
  17. 48 3
      app/service/cooperation_service.go
  18. 331 135
      app/service/default_service.go
  19. 24 4
      app/service/local_life_service.go
  20. 20 0
      app/service/product_service.go
  21. 4 4
      app/service/project_service.go
  22. 42 6
      app/service/recharge_service.go
  23. 17 1
      app/service/selection_info_service.go
  24. 36 3
      app/service/task_info_service.go
  25. 2 2
      app/vo/default_search_param.go
  26. 1 1
      app/vo/local_draft_param.go
  27. 10 0
      app/vo/logistics_selection_talent_param.go
  28. 3 3
      app/vo/logistics_talent_param.go
  29. 1 1
      app/vo/project_draft_param.go
  30. 1 0
      app/vo/re_logistics_talent.go
  31. 4 2
      app/vo/re_talent_default.go
  32. 5 0
      app/vo/re_task_default_public.go
  33. 1 1
      app/vo/selection_draft_param.go
  34. 417 44
      db/locallife_task.go
  35. 35 0
      db/platform_kuaishou_user.go
  36. 420 55
      db/project_task.go
  37. 345 0
      db/talent.go
  38. 60 0
      handler/gatlocaltalentstatuscountnum.go
  39. 60 0
      handler/getgoodstalent.go
  40. 60 0
      handler/getlocallife.go
  41. 60 0
      handler/getlocalrecruittime.go
  42. 60 0
      handler/getlocaltalentstatusnum.go
  43. 60 0
      handler/getprojecttalent.go
  44. 60 0
      handler/getprovince.go
  45. 60 0
      handler/getrecruittime.go
  46. 60 0
      handler/gettalentnum.go
  47. 60 0
      handler/gettalentstatuscountnum.go
  48. 60 0
      handler/gettalentstatusnum.go
  49. 16 7
      model/gorm_model/enterprise_talent_cooperate.go
  50. 2 0
      model/gorm_model/locallife_task_info.go
  51. 3 1
      model/gorm_model/project_task.go
  52. 9 8
      model/http_model/LocalPrelinkList.go
  53. 9 8
      model/http_model/PreLinkList.go
  54. 41 0
      model/http_model/getgoodstalentrequest.go
  55. 39 0
      model/http_model/getlocallifetalentrequest.go
  56. 22 0
      model/http_model/getlocaltalentstatuscountrequest.go
  57. 21 0
      model/http_model/getlocaltalentstatusnumrequest.go
  58. 19 16
      model/http_model/getlocaltasklist.go
  59. 39 0
      model/http_model/getprojecttalentrequest.go
  60. 18 0
      model/http_model/getprovincerequest.go
  61. 19 0
      model/http_model/getrecruittimerequest.go
  62. 19 0
      model/http_model/getrlocalrecruittimerequest.go
  63. 21 0
      model/http_model/gettalentnumrequest.go
  64. 22 0
      model/http_model/gettalentstatuscountrequset.go
  65. 23 0
      model/http_model/gettalentstatusnumrequest.go
  66. 18 15
      model/http_model/gettasklist.go
  67. 9 8
      model/http_model/localpredatalist.go
  68. 9 8
      model/http_model/localpresketchlistrequest.go
  69. 10 9
      model/http_model/localtaskdatalist.go
  70. 10 9
      model/http_model/localtasklinklist.go
  71. 9 8
      model/http_model/localtasksketchlist.go
  72. 9 8
      model/http_model/predatalist.go
  73. 9 8
      model/http_model/presketchlist.go
  74. 2 4
      model/http_model/sktech_info.go
  75. 10 9
      model/http_model/taskdatalist.go
  76. 10 9
      model/http_model/tasklinklist.go
  77. 9 8
      model/http_model/tasksketchlist.go
  78. 67 39
      route/init.go
  79. 27 0
      service/Localtask.go
  80. 26 0
      service/Task.go
  81. 2 2
      service/sketch.go
  82. 40 0
      service/talent.go

+ 28 - 0
app/controller/cooperation_controller.go

@@ -95,6 +95,20 @@ func (o CooperationController) GetSupplierConfirmingList(c *gin.Context) {
 	returnSuccess(c, 20000, result)
 }
 
+// 服务商管理-角标
+func (o CooperationController) GetSupplierCount(c *gin.Context) {
+	param := &vo.SupplierConfirmingParam{}
+	err := c.BindJSON(param)
+	if err != nil || "" == param.EnterpriseId {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	result := service.CooperationService{}.GetSupplierCount(param)
+
+	returnSuccess(c, 20000, result)
+}
+
 // 门店详情
 func (o CooperationController) GetStoreDetail(c *gin.Context) {
 	param := &vo.StoreSearchParam{}
@@ -268,3 +282,17 @@ func (o CooperationController) DeleteProduct(c *gin.Context) {
 	resultMap["productId"] = productId
 	returnSuccess(c, 20000, resultMap)
 }
+
+// 商品列表角标
+func (o CooperationController) CountProduct(c *gin.Context) {
+	param := &vo.GetAllProductParam{}
+	err := c.BindJSON(param)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	resMap := service.ProductService{}.CountProduct(param)
+
+	returnSuccess(c, 20000, resMap)
+}

+ 28 - 0
app/controller/finance_controller.go

@@ -110,6 +110,20 @@ func (f FinanceController) FrozenInfoList(c *gin.Context) {
 	returnSuccess(c, 20000, result)
 }
 
+// 余额管理——冻结记录-角标
+func (f FinanceController) FrozenInfoCount(c *gin.Context) {
+	param := &vo.BalanceParam{}
+	err := c.BindJSON(param)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	result := service.RechargeService{}.FrozenInfoCount(param)
+
+	returnSuccess(c, 20000, result)
+}
+
 // 充值管理——累计充值金额、确认中金额
 func (f FinanceController) ShowRecharge(c *gin.Context) {
 	param := &vo.RechargeParam{}
@@ -146,6 +160,20 @@ func (f FinanceController) RechargeInfoList(c *gin.Context) {
 	returnSuccess(c, 20000, result)
 }
 
+// 充值管理——充值记录-角标
+func (f FinanceController) RechargeInfoCount(c *gin.Context) {
+	param := &vo.RechargeParam{}
+	err := c.BindJSON(param)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	result := service.RechargeService{}.RechargeInfoCount(param)
+
+	returnSuccess(c, 20000, result)
+}
+
 // 设置默认开票抬头
 func (f FinanceController) UpdateInvoiceDefault(c *gin.Context) {
 	param := &vo.InvoiceDefaultParam{}

+ 85 - 1
app/controller/task_controller.go

@@ -227,6 +227,20 @@ func (t TaskController) SelectionClose(c *gin.Context) {
 	returnSuccess(c, 20000, resultMap)
 }
 
+// 电商带货选达人角标 未处理、同意合作、拒绝合作
+func (t TaskController) SelectionTalentCount(c *gin.Context) {
+	param := &vo.SelectionSearchParam{}
+	err := c.BindJSON(param)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	res := service.SelectionInfoService{}.SelectionTalentCount(param.SelectionId)
+
+	returnSuccess(c, 20000, res)
+}
+
 // 创建种草任务
 func (t TaskController) CreateProject(c *gin.Context) {
 	data := &vo.ProjectCreateParam{}
@@ -523,6 +537,20 @@ func (t TaskController) GetPublicDefaultTalentList(c *gin.Context) {
 	returnSuccess(c, 20000, res)
 }
 
+// 违约管理——公开任务-违约达人列表角标
+func (t TaskController) GetPublicDefaultTalentCount(c *gin.Context) {
+	param := &vo.DefaultSearchParam{}
+	err := c.BindJSON(param)
+	if err != nil {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	res, _ := service.DefaultService{}.GetPublicDefaultTalentCount(param)
+
+	returnSuccess(c, 20000, res)
+}
+
 // 违约管理——定向任务-违约达人列表
 func (t TaskController) GetTargetDefaultTalentList(c *gin.Context) {
 	param := &vo.DefaultSearchParam{}
@@ -600,6 +628,20 @@ func (o TaskController) GetSupplierInTargetTaskList(c *gin.Context) {
 	returnSuccess(c, 20000, result)
 }
 
+// 服务商合作-服务商列表角标
+func (t TaskController) GetSupplierInTargetCount(c *gin.Context) {
+	param := &vo.SupplierSearchInTargetTaskParam{}
+	err := c.BindJSON(param)
+	if err != nil || "" == param.EnterpriseId {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	res := service.CooperationService{}.GetSupplierInTargetCount(param)
+
+	returnSuccess(c, 20000, res)
+}
+
 // 服务商合作-邀约合作
 func (o TaskController) InviteSupplier(c *gin.Context) {
 	param := &vo.SupplierInviteInTargetTaskParam{}
@@ -841,7 +883,21 @@ func (t TaskController) LocalLifeToReview(c *gin.Context) {
 	returnSuccess(c, 20000, resultMap)
 }
 
-// 达人物流列表
+// 带货待发货、待签收、已签收统计
+func (t TaskController) LogisticsSelectionTalentCount(c *gin.Context) {
+	param := &vo.LogisticsSelectionTalentParam{}
+	err := c.BindJSON(param)
+	if err != nil || "" == param.SelectionId {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	res := service.TaskInfoService{}.LogisticsSelectionTalentCount(param)
+
+	returnSuccess(c, 20000, res)
+}
+
+// 种草达人物流列表
 func (t TaskController) LogisticsTalentList(c *gin.Context) {
 	param := &vo.LogisticsTalentParam{}
 	err := c.BindJSON(param)
@@ -860,6 +916,20 @@ func (t TaskController) LogisticsTalentList(c *gin.Context) {
 	returnSuccess(c, 20000, res)
 }
 
+// 种草待发货、待签收、已签收统计
+func (t TaskController) LogisticsTalentCount(c *gin.Context) {
+	param := &vo.LogisticsTalentParam{}
+	err := c.BindJSON(param)
+	if err != nil || "" == param.ProjectId {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	res := service.TaskInfoService{}.LogisticsTalentCount(param)
+
+	returnSuccess(c, 20000, res)
+}
+
 // 本地生活列表
 func (t TaskController) LocalLifeTaskList(c *gin.Context) {
 	param := &vo.LocalSearchParam{}
@@ -955,6 +1025,20 @@ func (t TaskController) StoreExploreInfo(c *gin.Context) {
 	returnSuccess(c, 20000, res)
 }
 
+// 探店达人列表角标
+func (t TaskController) StoreExploreInfoCount(c *gin.Context) {
+	param := &vo.StoreExploreParam{}
+	err := c.BindJSON(param)
+	if err != nil || "" == param.LocalLifeId {
+		logrus.Errorf("Request bind err:%+v\n", err)
+		returnError(c, 40000, "Parameter Error: "+err.Error())
+		return
+	}
+	res := service.LocalLifeService{}.StoreExploreInfoCount(param)
+
+	returnSuccess(c, 20000, res)
+}
+
 // 探店终止合作
 func (t TaskController) StoreExploreOver(c *gin.Context) {
 	param := &vo.LocalTalentOperateParam{}

+ 2 - 2
app/dao/enterprise_supplier_cooperate_dao.go

@@ -28,7 +28,7 @@ func (d EnterpriseSupplierCooperateDao) GetSupplierByEnterprise(enterpriseId str
 	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
 	var total int64
 	offset := (page - 1) * pageSize
-	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 2", enterpriseId)
+	query := Db.Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 2", enterpriseId)
 	query.Count(&total)
 	query = query.Select("supplier_id, cooperate_num, upload_talent_num, cooperate_talent_num, b_operator, b_operator_type, agree_time")
 	err := query.Order("agree_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error
@@ -56,7 +56,7 @@ func (d EnterpriseSupplierCooperateDao) GetSupplierConfirmingList(enterpriseId s
 	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
 	var total int64
 	offset := (page - 1) * pageSize
-	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 1", enterpriseId)
+	query := Db.Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 1", enterpriseId)
 	query.Count(&total)
 	query = query.Select("supplier_id,  b_operator, b_operator_type, cooperate_status, create_time")
 	err := query.Order("create_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error

+ 5 - 5
app/dao/info_auto_default_dao.go

@@ -16,11 +16,11 @@ func (d InfoAutoDefaultDao) GetAutoDefaultLast(enterpriseId string) entity.InfoA
 	return autoDefaultInfo
 }
 
-// 获取指定 auto_default_id 的指定字段值
-func (d InfoAutoDefaultDao) GetValueByIdFieldName(autoDefaultId int64, fieldName string) int64 {
-	var value int64
-	Db.Model(&entity.InfoAutoDefault{}).Select(fieldName).Where("auto_default_id = ?", autoDefaultId).Find(&value)
-	return value
+// 获取指定 auto_default_id 的字段值
+func (d InfoAutoDefaultDao) GetValueById(autoDefaultId int64) (entity.InfoAutoDefault, error) {
+	var infoAutoDefault entity.InfoAutoDefault
+	err := Db.Model(&entity.InfoAutoDefault{}).Where("auto_default_id = ?", autoDefaultId).Find(&infoAutoDefault).Error
+	return infoAutoDefault, err
 }
 
 // 为当前 enterpriseId 插入新的策略配置

+ 49 - 2
app/dao/local_life_dao.go

@@ -151,7 +151,7 @@ func (d LocalLifeDao) DeleteLocalLife(localId string) (*string, error) {
 	if localId == "" {
 		return &localId, nil
 	}
-	err := Db.Where("local_id = ?", localId).Delete(&entity.LocalLifeInfo{}).Error
+	err := Db.Model(&entity.LocalLifeInfo{}).Where("local_id = ?", localId).Delete(&entity.LocalLifeInfo{}).Error
 	if err != nil {
 		return nil, err
 	}
@@ -179,6 +179,9 @@ func (d LocalLifeDao) GetLocalDraftList(param *vo.LocalDraftParam) ([]vo.ReLocal
 	if param.LocalPlatform != 0 {
 		query = query.Where("local_platform = ?", param.LocalPlatform)
 	}
+	if param.Others != "" {
+		query = query.Where("enterprise_id = ? or local_id = ? or local_name LIKE ?", param.Others, param.Others, "%"+param.Others+"%")
+	}
 	query.Count(&total)
 	query = query.Select("enterprise_id, sub_account_id, local_id, local_platform, local_type, created_at, store_id")
 	offset := (param.Page - 1) * param.PageSize
@@ -201,7 +204,7 @@ func (d LocalLifeDao) GetLocalDraftList(param *vo.LocalDraftParam) ([]vo.ReLocal
 	return reLocalTaskPreviews, total, nil
 }
 
-// 获取公开种草中全部指定状态值的项目
+// 获取公开本地生活中全部指定状态值的项目
 func (d LocalLifeDao) GetLocalLifeList(value int64, fieldName string) ([]*entity.LocalLifeInfo, error) {
 	var localLifeInfos []*entity.LocalLifeInfo
 	err := Db.Model(entity.LocalLifeInfo{}).Where(fmt.Sprintf("local_type = ? AND %s = ? ", fieldName), 1, value).Find(&localLifeInfos).Error
@@ -211,6 +214,50 @@ func (d LocalLifeDao) GetLocalLifeList(value int64, fieldName string) ([]*entity
 	return localLifeInfos, nil
 }
 
+// 违约管理——违约公开本地生活任务列表
+func (d LocalLifeDao) GetLocalPublicList(param *vo.DefaultSearchParam) ([]vo.ReTaskDefaultPublic, int64, error) {
+	var reTaskDefaultPublics []vo.ReTaskDefaultPublic
+	var localLifeInfos []entity.LocalLifeInfo
+	var total int64
+	query := Db.Model(&entity.LocalLifeInfo{}).Where("local_type = ?", 1)
+	// 动态添加查询条件
+	if param.SubAccountId == 0 {
+		if param.EnterpriseId == "" {
+			return reTaskDefaultPublics, 0, errors.New("enterpriseId is empty")
+		}
+		query = query.Where("enterprise_id = ?", param.EnterpriseId)
+	} else {
+		query = query.Where("sub_account_id = ?", param.SubAccountId)
+	}
+	if param.Platform != 0 {
+		query = query.Where("local_platform = ?", param.Platform)
+	}
+	if param.Others != "" {
+		query = query.Where("enterprise_id = ? or local_id = ? or local_name LIKE ?", param.Others, param.Others, "%"+param.Others+"%")
+	}
+	query.Count(&total)
+	query = query.Select("enterprise_id, sub_account_id, local_id, local_platform, task_form, content_type, store_id")
+	offset := (param.Page - 1) * param.PageSize
+	if err := query.Order("created_at asc").Offset(offset).Limit(param.PageSize).Find(&localLifeInfos).Error; err != nil {
+		return nil, 0, err
+	}
+	for _, localLife := range localLifeInfos {
+		reTaskDefaultPublic := vo.ReTaskDefaultPublic{
+			EnterpriseId: localLife.EnterpriseID,
+			SubAccountId: localLife.SubAccountID,
+			TaskId:       localLife.LocalID,
+			Platform:     localLife.LocalPlatform,
+			TaskForm:     localLife.TaskForm,
+			ContentType:  localLife.ContentType,
+			TaskType:     1,
+			StoreId:      localLife.StoreID,
+		}
+		reTaskDefaultPublics = append(reTaskDefaultPublics, reTaskDefaultPublic)
+	}
+
+	return reTaskDefaultPublics, total, nil
+}
+
 // 探店本地生活列表
 func (d LocalLifeDao) GetLocalStoreExplorePreviews(param *vo.LocalSearchParam) ([]vo.ReLocalStoreExplorePreview, int64, error) {
 	var reLocalStoreExplorePreviews []vo.ReLocalStoreExplorePreview

+ 5 - 2
app/dao/project_dao.go

@@ -157,14 +157,14 @@ func (d ProjectDAO) DeleteProject(projectId string) (*string, error) {
 	if projectId == "" {
 		return &projectId, nil
 	}
-	err := Db.Debug().Where("project_id = ?", projectId).Delete(&entity.Project{}).Error
+	err := Db.Model(&entity.Project{}).Where("project_id = ?", projectId).Delete(&entity.Project{}).Error
 	if err != nil {
 		return nil, err
 	}
 	return &projectId, nil
 }
 
-// 获取草稿箱——电商带货任务列表
+// 获取草稿箱——种草任务列表
 func (d ProjectDAO) GetProjectDraftList(param *vo.ProjectDraftParam) ([]vo.ReProjectTaskPreview, int64, error) {
 	var reProjectTaskPreviews []vo.ReProjectTaskPreview
 	var projects []entity.Project
@@ -185,6 +185,9 @@ func (d ProjectDAO) GetProjectDraftList(param *vo.ProjectDraftParam) ([]vo.RePro
 	if param.ProjectPlatform != 0 {
 		query = query.Where("project_platform = ?", param.ProjectPlatform)
 	}
+	if param.Others != "" {
+		query = query.Where("enterprise_id = ? or project_id = ? or project_name LIKE ?", param.Others, param.Others, "%"+param.Others+"%")
+	}
 	query.Count(&total)
 	query = query.Select("enterprise_id, sub_account_id, project_id, project_platform, project_type, created_at, product_id")
 	offset := (param.Page - 1) * param.PageSize

+ 13 - 1
app/dao/project_task_info_dao.go

@@ -22,10 +22,22 @@ func (d ProjectTaskInfoDao) CountByTaskStage(projectId string, taskStage int64)
 }
 
 // 获取指定任务阶段的种草子任务
-func (d ProjectTaskInfoDao) GetListByTaskStage(projectId string, taskStage int64, time string, page int, pageSize int) ([]*entity.ProjectTaskInfo, int64, error) {
+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)
+	if talentNickname != "" {
+		var talentInfos []entity.YoungeeTalentInfo
+		err1 := Db.Model(&entity.YoungeeTalentInfo{}).Where("talent_wx_nickname = ?", talentNickname).Find(&talentInfos).Error
+		if err1 != nil {
+			return nil, 0, err1
+		}
+		var talentIds []string
+		for _, talentInfo := range talentInfos {
+			talentIds = append(talentIds, talentInfo.ID)
+		}
+		query = query.Where("talent_id in ?", talentIds)
+	}
 	// 计算偏移量
 	offset := (page - 1) * pageSize
 	var err error

+ 71 - 0
app/dao/s_local_dao.go

@@ -0,0 +1,71 @@
+package dao
+
+import (
+	"youngee_b_api/app/entity"
+)
+
+type SLocalLifeDao struct{}
+
+// 插入数据
+func (d SLocalLifeDao) Insert(record *entity.SLocalLifeInfo) error {
+	result := Db.Debug().Model(&entity.SLocalLifeInfo{}).Create(&record)
+	return result.Error
+}
+
+// 根据本地生活id、邀约状态返回数据列表
+func (d SLocalLifeDao) GetSLocalLifeByStatus(localId string, status int64, page int, pageSize int) ([]*entity.SLocalLifeInfo, int64, error) {
+	var sLocalLifeInfos []*entity.SLocalLifeInfo
+	var total int64
+	offset := (page - 1) * pageSize
+	query := Db.Debug().Model(&entity.SLocalLifeInfo{}).Where("local_id = ? AND s_local_status = ?", localId, status)
+	query.Count(&total)
+	query = query.Select("supplier_id,  b_operator, b_operator_type")
+	err := query.Order("create_time desc").Offset(offset).Limit(pageSize).Find(&sLocalLifeInfos).Error
+	if err != nil {
+		return nil, 0, err
+	}
+
+	return sLocalLifeInfos, total, nil
+}
+
+//// 检查给定的服务商是否在该商家库中
+//func (d SupplierDao) EnterpriseDatabaseCheck(enterpriseId string, supplierId int64) (bool, error) {
+//	var count int64
+//	err := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND supplier_id = ? AND cooperate_status != 2", enterpriseId, supplierId).Count(&count).Error
+//	if err != nil {
+//		return false, err
+//	}
+//	return count > 0, nil
+//}
+//
+//// 获取指定商家的服务商库
+//func (d SupplierDao) GetSupplierByEnterprise(enterpriseId string, page int, pageSize int) ([]*entity.EnterpriseSupplierCooperate, int64, error) {
+//	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
+//	var total int64
+//	offset := (page - 1) * pageSize
+//	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 2", enterpriseId)
+//	query.Count(&total)
+//	query = query.Select("supplier_id, cooperate_num, upload_talent_num, cooperate_talent_num, b_operator, b_operator_type, agree_time")
+//	err := query.Order("agree_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error
+//	if err != nil {
+//		return nil, 0, err
+//	}
+//
+//	return enterpriseSupplierCooperates, total, nil
+//}
+//
+//// 获取邀请待确认的服务商
+//func (d SupplierDao) GetSupplierConfirmingList(enterpriseId string, page int, pageSize int) ([]*entity.EnterpriseSupplierCooperate, int64, error) {
+//	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
+//	var total int64
+//	offset := (page - 1) * pageSize
+//	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 1", enterpriseId)
+//	query.Count(&total)
+//	query = query.Select("supplier_id,  b_operator, b_operator_type, cooperate_status, create_time")
+//	err := query.Order("create_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error
+//	if err != nil {
+//		return nil, 0, err
+//	}
+//
+//	return enterpriseSupplierCooperates, total, nil
+//}

+ 41 - 41
app/dao/s_project_dao.go

@@ -28,44 +28,44 @@ func (d SProjectDao) GetSProjectByStatus(projectId string, status int64, page in
 	return sProjectInfos, total, nil
 }
 
-// 检查给定的服务商是否在该商家库中
-func (d SupplierDao) EnterpriseDatabaseCheck(enterpriseId string, supplierId int64) (bool, error) {
-	var count int64
-	err := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND supplier_id = ? AND cooperate_status != 2", enterpriseId, supplierId).Count(&count).Error
-	if err != nil {
-		return false, err
-	}
-	return count > 0, nil
-}
-
-// 获取指定商家的服务商库
-func (d SupplierDao) GetSupplierByEnterprise(enterpriseId string, page int, pageSize int) ([]*entity.EnterpriseSupplierCooperate, int64, error) {
-	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
-	var total int64
-	offset := (page - 1) * pageSize
-	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 2", enterpriseId)
-	query.Count(&total)
-	query = query.Select("supplier_id, cooperate_num, upload_talent_num, cooperate_talent_num, b_operator, b_operator_type, agree_time")
-	err := query.Order("agree_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error
-	if err != nil {
-		return nil, 0, err
-	}
-
-	return enterpriseSupplierCooperates, total, nil
-}
-
-// 获取邀请待确认的服务商
-func (d SupplierDao) GetSupplierConfirmingList(enterpriseId string, page int, pageSize int) ([]*entity.EnterpriseSupplierCooperate, int64, error) {
-	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
-	var total int64
-	offset := (page - 1) * pageSize
-	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 1", enterpriseId)
-	query.Count(&total)
-	query = query.Select("supplier_id,  b_operator, b_operator_type, cooperate_status, create_time")
-	err := query.Order("create_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error
-	if err != nil {
-		return nil, 0, err
-	}
-
-	return enterpriseSupplierCooperates, total, nil
-}
+//// 检查给定的服务商是否在该商家库中
+//func (d SupplierDao) EnterpriseDatabaseCheck(enterpriseId string, supplierId int64) (bool, error) {
+//	var count int64
+//	err := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND supplier_id = ? AND cooperate_status != 2", enterpriseId, supplierId).Count(&count).Error
+//	if err != nil {
+//		return false, err
+//	}
+//	return count > 0, nil
+//}
+//
+//// 获取指定商家的服务商库
+//func (d SupplierDao) GetSupplierByEnterprise(enterpriseId string, page int, pageSize int) ([]*entity.EnterpriseSupplierCooperate, int64, error) {
+//	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
+//	var total int64
+//	offset := (page - 1) * pageSize
+//	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 2", enterpriseId)
+//	query.Count(&total)
+//	query = query.Select("supplier_id, cooperate_num, upload_talent_num, cooperate_talent_num, b_operator, b_operator_type, agree_time")
+//	err := query.Order("agree_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error
+//	if err != nil {
+//		return nil, 0, err
+//	}
+//
+//	return enterpriseSupplierCooperates, total, nil
+//}
+//
+//// 获取邀请待确认的服务商
+//func (d SupplierDao) GetSupplierConfirmingList(enterpriseId string, page int, pageSize int) ([]*entity.EnterpriseSupplierCooperate, int64, error) {
+//	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
+//	var total int64
+//	offset := (page - 1) * pageSize
+//	query := Db.Debug().Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 1", enterpriseId)
+//	query.Count(&total)
+//	query = query.Select("supplier_id,  b_operator, b_operator_type, cooperate_status, create_time")
+//	err := query.Order("create_time desc").Offset(offset).Limit(pageSize).Find(&enterpriseSupplierCooperates).Error
+//	if err != nil {
+//		return nil, 0, err
+//	}
+//
+//	return enterpriseSupplierCooperates, total, nil
+//}

+ 4 - 1
app/dao/selection_info_dao.go

@@ -139,7 +139,7 @@ func (d SelectionInfoDAO) DeleteSelection(selectionId string) (*string, error) {
 	if selectionId == "" {
 		return &selectionId, nil
 	}
-	err := Db.Where("selection_id = ?", selectionId).Delete(&entity.SelectionInfo{}).Error
+	err := Db.Model(&entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Delete(&entity.SelectionInfo{}).Error
 	if err != nil {
 		return nil, err
 	}
@@ -164,6 +164,9 @@ func (d SelectionInfoDAO) GetSelectionDraftList(param *vo.SelectionDraftParam) (
 	if param.SelectionPlatform != 0 {
 		query = query.Where("platform = ?", param.SelectionPlatform)
 	}
+	if param.Others != "" {
+		query = query.Where("enterprise_id = ? or selection_id = ? or selection_name LIKE ?", param.Others, param.Others, "%"+param.Others+"%")
+	}
 	query.Count(&total)
 	query = query.Select("enterprise_id, sub_account_id, selection_id, platform, created_at, product_id")
 	offset := (param.Page - 1) * param.PageSize

+ 9 - 9
app/entity/local_life_task_info.go

@@ -12,13 +12,13 @@ type LocalLifeTaskInfo struct {
 	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap;NOT NULL"`   // 达人平台信息快照
 	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap;NOT NULL"`   // 达人个人信息快照
 	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap;NOT NULL"`       // 收货地址快照
-	TaskReward             string    `gorm:"column:task_reward;NOT NULL"`                 // 达人报酬(3.0未用)
-	SettleAmount           string    `gorm:"column:settle_amount;NOT NULL"`               // 达人实际所得(自动填充)(扣除违约扣款)
-	AllPayment             string    `gorm:"column:all_payment;NOT NULL"`                 // 企业支付(3.0未用)
-	RealPayment            string    `gorm:"column:real_payment;NOT NULL"`                // 企业实际支付(加上服务商的服务费)(扣除违约扣款)
+	TaskReward             float64   `gorm:"column:task_reward;NOT NULL"`                 // 达人报酬(3.0未用)
+	SettleAmount           float64   `gorm:"column:settle_amount;NOT NULL"`               // 达人实际所得(自动填充)(扣除违约扣款)
+	AllPayment             float64   `gorm:"column:all_payment;NOT NULL"`                 // 企业支付(3.0未用)
+	RealPayment            float64   `gorm:"column:real_payment;NOT NULL"`                // 企业实际支付(加上服务商的服务费)(扣除违约扣款)
 	ServiceRate            int64     `gorm:"column:service_rate"`                         // 服务费率,千分之
-	ServiceCharge          string    `gorm:"column:service_charge"`                       // 服务费
-	RealServiceCharge      string    `gorm:"column:real_service_charge"`                  // 服务商实际所得服务费(扣除违约)
+	ServiceCharge          float64   `gorm:"column:service_charge"`                       // 服务费
+	RealServiceCharge      float64   `gorm:"column:real_service_charge"`                  // 服务商实际所得服务费(扣除违约)
 	FeeForm                int64     `gorm:"column:fee_form"`                             // 稿费形式,1,2,3分别代表产品置换、一口价、自报价
 	ErrBreakRate           int64     `gorm:"column:err_break_rate;default:0;NOT NULL"`    // 未上传类型违约扣款比例,百分之
 	ScriptBreakRate        int64     `gorm:"column:script_break_rate;default:0;NOT NULL"` // 脚本上传超时违约扣款比例,百分之
@@ -44,12 +44,12 @@ type LocalLifeTaskInfo struct {
 	LeadTeamID             string    `gorm:"column:lead_team_id"`                         // 作为团长的young之团id,对应younggee_talent_team中的team_id字段
 	TeamID                 string    `gorm:"column:team_id"`                              // 作为团员的young之团id,对应younggee_talent_team中的team_id字段
 	SettleStatus           int64     `gorm:"column:settle_status;default:1"`              // 结算状态,1、2分别表示待结算、已结算
-	TeamIncome             string    `gorm:"column:team_income"`                          // young之团团长现金收益
+	TeamIncome             float64   `gorm:"column:team_income"`                          // young之团团长现金收益
 	TeamPoint              int64     `gorm:"column:team_point"`                           // young之团团长积分收益
 	CurBreakAt             time.Time `gorm:"column:cur_break_at"`                         // 当前阶段截止时间
 	SupplierID             int64     `gorm:"column:supplier_id;default:0"`                // 服务商ID
 	SupplierStatus         int64     `gorm:"column:supplier_status;default:0"`            // 服务商任务状态 0表示达人来源非服务商 1待选 2已选 3落选
-	DraftFee               string    `gorm:"column:draft_fee;default:0.00"`               // 达人稿费,达人所见的稿费金额
+	DraftFee               float64   `gorm:"column:draft_fee;default:0.00"`               // 达人稿费,达人所见的稿费金额
 	SignedTime             time.Time `gorm:"column:signed_time"`                          // 签收时间
 	FansNum                int64     `gorm:"column:fans_num"`                             // 粉丝数
 	VoteAvg                int64     `gorm:"column:vote_avg"`                             // 平均点赞数
@@ -60,7 +60,7 @@ type LocalLifeTaskInfo struct {
 	SOperatorType          int64     `gorm:"column:s_operator_type;default:0"`            // 服务商操作人类型,1服务商主账号,2服务商子账号,3管理后台
 	OpenID                 string    `gorm:"column:open_id"`                              // 达人报名的快手唯一标识
 	SProjectID             int64     `gorm:"column:s_project_id"`                         // 服务商种草任务ID
-	SupportFee             string    `gorm:"column:support_fee"`                          // 提报价格(达人自报价经过计算后,)
+	SupportFee             float64   `gorm:"column:support_fee"`                          // 提报价格(达人自报价经过计算后,)
 	SketchMissingTime      time.Time `gorm:"column:sketch_missing_time"`                  // 未传初稿违约时间
 	SketchMissingStatus    int64     `gorm:"column:sketch_missing_status;default:0"`      // 未传初稿违约状态,0无违约,1有违约
 	LinkMissingTime        time.Time `gorm:"column:link_missing_time"`                    // 未发作品违约时间

+ 1 - 0
app/entity/platform_kuaishou_user_info.go

@@ -24,6 +24,7 @@ type PlatformKuaishouUserInfo struct {
 	IsDelete     int64     `gorm:"column:is_delete;NOT NULL"`
 	LikeNum      int64     `gorm:"column:like_num;NOT NULL"`
 	VideoNum     int64     `gorm:"column:video_num;NOT NULL"`
+	City         string    `gorm:"column:city"`
 }
 
 func (m *PlatformKuaishouUserInfo) TableName() string {

+ 22 - 22
app/entity/project_task_info.go

@@ -8,39 +8,39 @@ type ProjectTaskInfo struct {
 	TaskID                 string    `gorm:"column:task_id;primary_key;AUTO_INCREMENT"`   // 任务id
 	ProjectID              string    `gorm:"column:project_id;NOT NULL"`                  // 项目id
 	TalentID               string    `gorm:"column:talent_id;NOT NULL"`                   // 达人id
-	AccountID              int       `gorm:"column:account_id;NOT NULL"`                  // 账号id
+	AccountID              int64     `gorm:"column:account_id;NOT NULL"`                  // 账号id
 	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap;NOT NULL"`   // 达人平台信息快照
 	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap;NOT NULL"`   // 达人个人信息快照
 	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap;NOT NULL"`       // 收货地址快照
-	StrategyID             int       `gorm:"column:strategy_id"`                          // 报名选择的招募策略id
+	StrategyID             int64     `gorm:"column:strategy_id"`                          // 报名选择的招募策略id
 	TaskReward             float64   `gorm:"column:task_reward;NOT NULL"`                 // 达人报酬
 	SettleAmount           float64   `gorm:"column:settle_amount;NOT NULL"`               // 达人实际所得(扣除违约扣款)
 	AllPayment             float64   `gorm:"column:all_payment;NOT NULL"`                 // 企业支付
 	RealPayment            float64   `gorm:"column:real_payment;NOT NULL"`                // 企业实际支付(扣除违约扣款)
-	ErrBreakRate           int       `gorm:"column:err_break_rate;default:0;NOT NULL"`    // 未上传类型违约扣款比例,百分之
-	ScriptBreakRate        int       `gorm:"column:script_break_rate;default:0;NOT NULL"` // 脚本上传超时违约扣款比例,百分之
-	SketchBreakRate        int       `gorm:"column:sketch_break_rate;default:0;NOT NULL"` // 初稿上传超时违约扣款比例,百分之
-	LinkBreakRate          int       `gorm:"column:link_break_rate;default:0;NOT NULL"`   // 链接上传超时违约扣款比例,百分之
-	DataBreakRate          int       `gorm:"column:data_break_rate;default:0;NOT NULL"`   // 数据上传超时违约扣款比例,百分之
-	FeeForm                int       `gorm:"column:fee_form;NOT NULL"`                    // 稿费形式,1,2,3分别代表产品置换、固定稿费、自报价
+	ErrBreakRate           int64     `gorm:"column:err_break_rate;default:0;NOT NULL"`    // 未上传类型违约扣款比例,百分之
+	ScriptBreakRate        int64     `gorm:"column:script_break_rate;default:0;NOT NULL"` // 脚本上传超时违约扣款比例,百分之
+	SketchBreakRate        int64     `gorm:"column:sketch_break_rate;default:0;NOT NULL"` // 初稿上传超时违约扣款比例,百分之
+	LinkBreakRate          int64     `gorm:"column:link_break_rate;default:0;NOT NULL"`   // 链接上传超时违约扣款比例,百分之
+	DataBreakRate          int64     `gorm:"column:data_break_rate;default:0;NOT NULL"`   // 数据上传超时违约扣款比例,百分之
+	FeeForm                int64     `gorm:"column:fee_form;NOT NULL"`                    // 稿费形式,1,2,3分别代表产品置换、固定稿费、自报价
 	ServiceCharge          float64   `gorm:"column:service_charge"`                       // 服务费
-	ServiceRate            int       `gorm:"column:service_rate"`                         // 服务费率,千分之
-	TaskStatus             int       `gorm:"column:task_status;default:1;NOT NULL"`       // 任务状态 1待选 2已选 3落选
-	TaskStage              int       `gorm:"column:task_stage;NOT NULL"`                  // 任务阶段,详情见info_task_stage表
+	ServiceRate            int64     `gorm:"column:service_rate"`                         // 服务费率,千分之
+	TaskStatus             int64     `gorm:"column:task_status;default:1;NOT NULL"`       // 任务状态 1待选 2已选 3落选
+	TaskStage              int64     `gorm:"column:task_stage;NOT NULL"`                  // 任务阶段,详情见info_task_stage表
 	CreateDate             time.Time `gorm:"column:create_date;NOT NULL"`                 // 创建时间
 	SelectDate             time.Time `gorm:"column:select_date"`                          // 反选时间
 	DeliveryDate           time.Time `gorm:"column:delivery_date"`                        // 发货时间
-	CompleteStatus         int       `gorm:"column:complete_status;default:1;NOT NULL"`   // 结束方式 1未结束 2正常结束 3反选失败 4被解约
+	CompleteStatus         int64     `gorm:"column:complete_status;default:1;NOT NULL"`   // 结束方式 1未结束 2正常结束 3反选失败 4被解约
 	CompleteDate           time.Time `gorm:"column:complete_date"`                        // 结束时间
-	LogisticsStatus        int       `gorm:"column:logistics_status;default:1"`           // 发货状态 1 待发货 2已发货 3 已签收
-	ScriptStatus           uint      `gorm:"column:script_status;default:1"`              // 脚本上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	SketchStatus           uint      `gorm:"column:sketch_status;default:1"`              // 初稿上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	LogisticsStatus        int64     `gorm:"column:logistics_status;default:1"`           // 发货状态 1 待发货 2已发货 3 已签收
+	ScriptStatus           uint64    `gorm:"column:script_status;default:1"`              // 脚本上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	SketchStatus           uint64    `gorm:"column:sketch_status;default:1"`              // 初稿上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
 	UpdateAt               time.Time `gorm:"column:update_at"`                            // 更新时间
-	LinkStatus             uint      `gorm:"column:link_status;default:1"`                // 链接上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	DataStatus             uint      `gorm:"column:data_status;default:1"`                // 数据上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	CurDefaultType         int       `gorm:"column:cur_default_type"`                     // 任务当前处于的违约类型 0-8分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约
-	WithdrawStatus         int       `gorm:"column:withdraw_status;default:1"`            // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
-	SettleStatus           int       `gorm:"column:settle_status;default:1"`              // 结算状态,1、2分别表示待结算、已结算
+	LinkStatus             uint64    `gorm:"column:link_status;default:1"`                // 链接上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	DataStatus             uint64    `gorm:"column:data_status;default:1"`                // 数据上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	CurDefaultType         int64     `gorm:"column:cur_default_type"`                     // 任务当前处于的违约类型 0-8分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约
+	WithdrawStatus         int64     `gorm:"column:withdraw_status;default:1"`            // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
+	SettleStatus           int64     `gorm:"column:settle_status;default:1"`              // 结算状态,1、2分别表示待结算、已结算
 	DraftFee               float64   `gorm:"column:draft_fee;NOT NULL"`                   // 达人稿费,达人所见的稿费金额
 	SignedTime             time.Time `gorm:"column:signed_time"`                          // 签收时间
 	TerminateTime          time.Time `gorm:"column:terminate_time"`
@@ -50,9 +50,9 @@ type ProjectTaskInfo struct {
 	SketchMissingTime      time.Time `gorm:"column:sketch_missing_time"`
 	LinkMissingTime        time.Time `gorm:"column:link_missing_time"`
 	DataMissingTime        time.Time `gorm:"column:data_missing_time"`
-	TerminateOperatorType  int       `gorm:"column:terminate_operator_type;default:0;NOT NULL"`
+	TerminateOperatorType  int64     `gorm:"column:terminate_operator_type;default:0;NOT NULL"`
 	TerminateOperator      string    `gorm:"column:terminate_operator"`
-	CancelOperatorType     int       `gorm:"column:cancel_operator_type;default:0;NOT NULL"`
+	CancelOperatorType     int64     `gorm:"column:cancel_operator_type;default:0;NOT NULL"`
 	CancelOperator         string    `gorm:"column:cancel_operator"`
 }
 

+ 41 - 0
app/entity/s_local.go

@@ -0,0 +1,41 @@
+// Code generated by sql2gorm. DO NOT EDIT.
+package entity
+
+import (
+	"time"
+)
+
+type SLocalLifeInfo struct {
+	SLocalID            int64     `gorm:"column:s_local_id;primary_key;AUTO_INCREMENT"` // 主键ID
+	LocalID             string    `gorm:"column:local_id"`                              // 被加入商单的原本地生活ID
+	LocalType           int64     `gorm:"column:local_type"`                            // 类型,1代表公开,2代表定向
+	LocalName           string    `gorm:"column:local_name"`                            // 名称
+	LocalPlatform       int64     `gorm:"column:local_platform"`                        // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	StoreID             int64     `gorm:"column:store_id"`                              // 门店ID
+	TeamBuyingID        int64     `gorm:"column:team_buying_id"`                        // 关联团购id
+	TaskForm            int64     `gorm:"column:task_form"`                             // 任务形式,1-2分别代表线下探店,素材分发
+	ContentType         int64     `gorm:"column:content_type"`                          // 内容形式,1代表图文,2代表视频
+	TaskStatus          int64     `gorm:"column:task_status"`                           // 项目状态,1-10分别代表创建中、待审核、审核通过、招募中、招募完毕、待支付、已支付、执行中、失效、已结案
+	EnterpriseID        string    `gorm:"column:enterprise_id"`                         // 商家ID
+	SupplierID          int64     `gorm:"column:supplier_id"`                           // 服务商ID
+	ApplyNum            int64     `gorm:"column:apply_num"`                             // 报名人数
+	RecruitNum          int64     `gorm:"column:recruit_num"`                           // 已招募人数
+	SettleNum           int64     `gorm:"column:settle_num;default:0"`                  // 已结算人数
+	SubAccountID        int64     `gorm:"column:sub_account_id"`                        // 服务商子账号ID
+	ServiceCharge       string    `gorm:"column:service_charge"`                        // 服务商预估可赚服务费
+	ServiceChargeActual string    `gorm:"column:service_charge_actual"`                 // 服务商实际可赚服务费
+	OperatorType        int64     `gorm:"column:operator_type;default:0"`               // 添加商单操作人类型,1为服务商主账号,2为服务商子账号
+	SLocalStatus        int64     `gorm:"column:s_local_status;default:0"`              // 服务商本地生活任务状态,1待确认,2已确认,3已拒绝
+	StrategyStatus      int64     `gorm:"column:strategy_status;default:2"`             // 定向本地生活任务是否替换招募策略,1是,2否
+	BOperator           string    `gorm:"column:b_operator"`                            // 商家发起入库邀约人
+	BOperatorType       int64     `gorm:"column:b_operator_type"`                       // 商家发起入库邀约人类型:1主账号 2子账号
+	CreateTime          time.Time `gorm:"column:create_time"`                           // 创建时间
+	CreateStrategyID    int64     `gorm:"column:create_strategy_id"`                    // 服务商替换招募策略操作人ID
+	CreateStrategyType  int64     `gorm:"column:create_strategy_type"`                  // 服务商替换招募策略操作人类型:1服务商主账号,2子账号
+	ShareCode           string    `gorm:"column:share_code"`                            // 分享码url
+	FinishTime          time.Time `gorm:"column:finish_time"`                           // 结案时间
+}
+
+func (m *SLocalLifeInfo) TableName() string {
+	return "younggee_s_local_life_info"
+}

+ 1 - 0
app/entity/s_project.go

@@ -35,6 +35,7 @@ type SProjectInfo struct {
 	CreateTime          time.Time `gorm:"column:create_time"`                        // 创建时间
 	CreateStrategyID    int64     `gorm:"column:create_strategy_id"`                 // 服务商修改服务费操作人ID
 	CreateStrategyType  int64     `gorm:"column:create_strategy_type"`               // 服务商修改服务费操作人类型:1服务商主账号,2子账号
+	FinishTime          time.Time `gorm:"column:finish_time"`                        // 结案时间
 }
 
 func (m *SProjectInfo) TableName() string {

+ 48 - 3
app/service/cooperation_service.go

@@ -192,6 +192,19 @@ func (s CooperationService) GetSupplierConfirmingList(param *vo.SupplierConfirmi
 	return result, nil
 }
 
+// 服务商管理-角标
+func (t CooperationService) GetSupplierCount(param *vo.SupplierConfirmingParam) map[string]int64 {
+	res := make(map[string]int64)
+	var inPoolNum int64     // 在库服务商
+	var confirmingNum int64 // 邀请待确认
+	dao.Db.Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 2", param.EnterpriseId).Count(&inPoolNum)
+	dao.Db.Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = 1", param.EnterpriseId).Count(&confirmingNum)
+	res["inPoolNum"] = inPoolNum
+	res["confirmingNum"] = confirmingNum
+
+	return res
+}
+
 // 服务商合作-服务商列表
 func (s CooperationService) GetSupplierInTargetTaskList(param *vo.SupplierSearchInTargetTaskParam) (vo.ResultVO, error) {
 	if param.Page <= 0 {
@@ -210,6 +223,7 @@ func (s CooperationService) GetSupplierInTargetTaskList(param *vo.SupplierSearch
 	}
 	var enterpriseSupplierCooperates []*entity.EnterpriseSupplierCooperate
 	var sProjectInfos []*entity.SProjectInfo
+	var sLocalLifeInfos []*entity.SLocalLifeInfo
 	var enterpriseOperator string
 	if param.Status == 1 { // 可邀约
 		enterpriseSupplierCooperates, total, _ = dao.EnterpriseSupplierCooperateDao{}.GetSupplierByEnterprise(param.EnterpriseId, param.Page, param.PageSize)
@@ -219,7 +233,7 @@ func (s CooperationService) GetSupplierInTargetTaskList(param *vo.SupplierSearch
 			sProjectInfos, total, _ = dao.SProjectDao{}.GetSProjectByStatus(param.TaskId, 1, param.Page, param.PageSize)
 		} else if param.TaskType == 3 {
 			// 本地生活
-
+			sLocalLifeInfos, total, _ = dao.SLocalLifeDao{}.GetSLocalLifeByStatus(param.TaskId, 1, param.Page, param.PageSize)
 		}
 	} else if param.Status == 3 { // 合作中
 		if param.TaskType == 2 {
@@ -227,7 +241,7 @@ func (s CooperationService) GetSupplierInTargetTaskList(param *vo.SupplierSearch
 			sProjectInfos, total, _ = dao.SProjectDao{}.GetSProjectByStatus(param.TaskId, 2, param.Page, param.PageSize)
 		} else if param.TaskType == 3 {
 			// 本地生活
-
+			sLocalLifeInfos, total, _ = dao.SLocalLifeDao{}.GetSLocalLifeByStatus(param.TaskId, 2, param.Page, param.PageSize)
 		}
 	}
 	if enterpriseSupplierCooperates == nil {
@@ -242,7 +256,14 @@ func (s CooperationService) GetSupplierInTargetTaskList(param *vo.SupplierSearch
 			}
 		} else if param.TaskType == 3 {
 			// 本地生活
-
+			for _, sLocalLifeInfo := range sLocalLifeInfos {
+				supplierId := sLocalLifeInfo.SupplierID
+				enterpriseSupplierCooperate, err1 := dao.EnterpriseSupplierCooperateDao{}.GetDataByEnterpriseAndSupplier(param.EnterpriseId, supplierId)
+				if err1 != nil {
+					return result, err1
+				}
+				enterpriseSupplierCooperates = append(enterpriseSupplierCooperates, enterpriseSupplierCooperate)
+			}
 		}
 	}
 	for _, enterpriseSupplierCooperate := range enterpriseSupplierCooperates {
@@ -301,6 +322,30 @@ func (s CooperationService) GetSupplierInTargetTaskList(param *vo.SupplierSearch
 	return result, nil
 }
 
+// 服务商合作-服务商列表角标
+func (t CooperationService) GetSupplierInTargetCount(param *vo.SupplierSearchInTargetTaskParam) map[string]int64 {
+	res := make(map[string]int64)
+	var invitableNum int64   // 可邀约
+	var invitingNum int64    // 邀约中
+	var cooperatingNum int64 // 合作中
+	dao.Db.Model(&entity.EnterpriseSupplierCooperate{}).Where("enterprise_id = ? AND cooperate_status = ?", param.EnterpriseId, 2).Count(&invitableNum)
+	if param.TaskType == 2 {
+		// 品牌种草
+		dao.Db.Model(&entity.SProjectInfo{}).Where("project_id = ? AND s_project_status = ?", param.TaskId, 1).Count(&invitingNum)
+		dao.Db.Model(&entity.SProjectInfo{}).Where("project_id = ? AND s_project_status = ?", param.TaskId, 2).Count(&cooperatingNum)
+	} else if param.TaskType == 3 {
+		// 本地生活
+		dao.Db.Model(&entity.SLocalLifeInfo{}).Where("local_id = ? AND s_local_status = ?", param.TaskId, 1).Count(&invitingNum)
+		dao.Db.Model(&entity.SProjectInfo{}).Where("local_id = ? AND s_local_status = ?", param.TaskId, 2).Count(&cooperatingNum)
+
+	}
+	res["invitableNum"] = invitableNum
+	res["invitingNum"] = invitingNum
+	res["cooperatingNum"] = cooperatingNum
+
+	return res
+}
+
 // 服务商合作-邀约合作
 func (s CooperationService) InviteSupplierInTargetTask(param *vo.SupplierInviteInTargetTaskParam) error {
 	var sProjectInfo entity.SProjectInfo

+ 331 - 135
app/service/default_service.go

@@ -20,57 +20,116 @@ func (s DefaultService) GetPublicDefaultList(param *vo.DefaultSearchParam) (vo.R
 		param.PageSize = 10
 	}
 	var result vo.ResultVO
-	// 以下代码只考虑了种草
-	reTaskDefaultPublics, total, err := (&dao.ProjectDAO{}).GetProjectPublicList(param)
-	if err != nil {
-		return result, err
-	}
-	for i := range reTaskDefaultPublics {
-		// 获取商品详情字段
-		var creatorName string
-		var productName string
-		var productPrice float64
-		var mainImage string
-		if reTaskDefaultPublics[i].SubAccountId == 0 {
-			enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reTaskDefaultPublics[i].EnterpriseId)
-			if err == nil && enterprise != nil {
-				creatorName = enterprise.BusinessName
+	// 种草
+	if param.TaskType == 1 {
+		reTaskDefaultPublics, total, err := (&dao.ProjectDAO{}).GetProjectPublicList(param)
+		if err != nil {
+			return result, err
+		}
+		for i := range reTaskDefaultPublics {
+			// 获取商品详情字段
+			var creatorName string
+			var productName string
+			var productPrice float64
+			var mainImage string
+			if reTaskDefaultPublics[i].SubAccountId == 0 {
+				enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reTaskDefaultPublics[i].EnterpriseId)
+				if err == nil && enterprise != nil {
+					creatorName = enterprise.BusinessName
+				}
+			} else {
+				subAccount, err := dao.SubAccountDao{}.GetSubAccount(reTaskDefaultPublics[i].SubAccountId)
+				if err == nil && subAccount != nil {
+					creatorName = subAccount.SubAccountName
+				}
 			}
-		} else {
-			subAccount, err := dao.SubAccountDao{}.GetSubAccount(reTaskDefaultPublics[i].SubAccountId)
-			if err == nil && subAccount != nil {
-				creatorName = subAccount.SubAccountName
+			product, err := dao.ProductDAO{}.GetProductByID(reTaskDefaultPublics[i].ProductId)
+			if err == nil && product != nil {
+				productName = product.ProductName
+				productPrice = product.ProductPrice
 			}
+			mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(reTaskDefaultPublics[i].ProductId)
+			reTaskDefaultPublics[i].CreatorName = creatorName
+			reTaskDefaultPublics[i].ProductName = productName
+			reTaskDefaultPublics[i].ProductPrice = productPrice
+			reTaskDefaultPublics[i].MainImage = mainImage
+			// 获取未传数量字段	0-10分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约、解约待处理、解约
+			projectId := reTaskDefaultPublics[i].TaskId
+			noSketchNum := dao.ProjectTaskInfoDao{}.CountByDefaultType(projectId, 4)
+			noLinkNum := dao.ProjectTaskInfoDao{}.CountByDefaultType(projectId, 6)
+			noDataNum := dao.ProjectTaskInfoDao{}.CountByDefaultType(projectId, 8)
+			// 终止合作还是解约字段待确认
+			endCooperationNum := dao.ProjectTaskInfoDao{}.CountByTaskStage(projectId, 16)
+			reTaskDefaultPublics[i].NoSketchNum = noSketchNum
+			reTaskDefaultPublics[i].NoLinkNum = noLinkNum
+			reTaskDefaultPublics[i].NoDataNum = noDataNum
+			reTaskDefaultPublics[i].EndCooperationNum = endCooperationNum
 		}
-		product, err := dao.ProductDAO{}.GetProductByID(reTaskDefaultPublics[i].ProductId)
-		if err == nil && product != nil {
-			productName = product.ProductName
-			productPrice = product.ProductPrice
+		result = vo.ResultVO{
+			Page:     param.Page,
+			PageSize: param.PageSize,
+			Total:    total,
+			Data:     reTaskDefaultPublics,
 		}
-		mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(reTaskDefaultPublics[i].ProductId)
-		reTaskDefaultPublics[i].CreatorName = creatorName
-		reTaskDefaultPublics[i].ProductName = productName
-		reTaskDefaultPublics[i].ProductPrice = productPrice
-		reTaskDefaultPublics[i].MainImage = mainImage
-		// 获取未传数量字段	0-10分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约、解约待处理、解约
-		projectId := reTaskDefaultPublics[i].TaskId
-		noSketchNum := dao.ProjectTaskInfoDao{}.CountByDefaultType(projectId, 4)
-		noLinkNum := dao.ProjectTaskInfoDao{}.CountByDefaultType(projectId, 6)
-		noDataNum := dao.ProjectTaskInfoDao{}.CountByDefaultType(projectId, 8)
-		// 终止合作还是解约字段待确认
-		endCooperationNum := dao.ProjectTaskInfoDao{}.CountByTaskStage(projectId, 16)
-		reTaskDefaultPublics[i].NoSketchNum = noSketchNum
-		reTaskDefaultPublics[i].NoLinkNum = noLinkNum
-		reTaskDefaultPublics[i].NoDataNum = noDataNum
-		reTaskDefaultPublics[i].EndCooperationNum = endCooperationNum
-	}
-	result = vo.ResultVO{
-		Page:     param.Page,
-		PageSize: param.PageSize,
-		Total:    total,
-		Data:     reTaskDefaultPublics,
+		return result, nil
+		// 本地生活
+	} else if param.TaskType == 2 {
+		reTaskDefaultPublics, total, err := (&dao.ProjectDAO{}).GetProjectPublicList(param)
+		if err != nil {
+			return result, err
+		}
+		for i := range reTaskDefaultPublics {
+			// 获取商品详情字段
+			var creatorName string
+			var storeName string
+			var storeLocation string
+			//var productPrice float64
+			var mainImage string
+			if reTaskDefaultPublics[i].SubAccountId == 0 {
+				enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reTaskDefaultPublics[i].EnterpriseId)
+				if err == nil && enterprise != nil {
+					creatorName = enterprise.BusinessName
+				}
+			} else {
+				subAccount, err := dao.SubAccountDao{}.GetSubAccount(reTaskDefaultPublics[i].SubAccountId)
+				if err == nil && subAccount != nil {
+					creatorName = subAccount.SubAccountName
+				}
+			}
+			store, err := dao.StoreDao{}.GetStoreByID(reTaskDefaultPublics[i].StoreId)
+			if err == nil && store != nil {
+				storeName = store.StoreName
+				storeLocation = store.StoreLocation
+			}
+			mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(reTaskDefaultPublics[i].StoreId)
+			reTaskDefaultPublics[i].CreatorName = creatorName
+			reTaskDefaultPublics[i].StoreName = storeName
+			reTaskDefaultPublics[i].StoreLocation = storeLocation
+			reTaskDefaultPublics[i].MainImage = mainImage
+			// 获取未传数量字段	0-10分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约、解约待处理、解约
+			localId := reTaskDefaultPublics[i].TaskId
+			noSketchNum := dao.LocalLifeTaskInfoDao{}.CountByDefaultType(localId, 4)
+			noLinkNum := dao.LocalLifeTaskInfoDao{}.CountByDefaultType(localId, 6)
+			noDataNum := dao.LocalLifeTaskInfoDao{}.CountByDefaultType(localId, 8)
+			// 终止合作还是解约字段待确认
+			endCooperationNum := dao.LocalLifeTaskInfoDao{}.CountByTaskStage(localId, 16)
+			reTaskDefaultPublics[i].NoSketchNum = noSketchNum
+			reTaskDefaultPublics[i].NoLinkNum = noLinkNum
+			reTaskDefaultPublics[i].NoDataNum = noDataNum
+			reTaskDefaultPublics[i].EndCooperationNum = endCooperationNum
+		}
+		result = vo.ResultVO{
+			Page:     param.Page,
+			PageSize: param.PageSize,
+			Total:    total,
+			Data:     reTaskDefaultPublics,
+		}
+		return result, nil
+
+	} else {
+		return result, nil
 	}
-	return result, nil
+
 }
 
 // 违约管理——违约定向任务列表
@@ -137,101 +196,238 @@ func (s DefaultService) GetPublicDefaultTalentList(param *vo.DefaultSearchParam)
 	}
 	var result vo.ResultVO
 	var reTalentDefaults []*vo.ReTalentDefault
-	// 以下代码只考虑了种草
-	var projectTaskInfos []entity.ProjectTaskInfo
-	var total int64
-	var err error
-	var cutRate int64
-	defaultType := param.DefaultType
-	if defaultType == 1 { // 未传初稿
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListBySketchDefault(param)
-		autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
-		cutRate = dao.InfoAutoDefaultDao{}.GetValueByIdFieldName(*autoDefaultId, "sketch_replace_not_upload")
-	} else if defaultType == 2 { // 未发作品
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByLinkDefault(param)
-		autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
-		cutRate = dao.InfoAutoDefaultDao{}.GetValueByIdFieldName(*autoDefaultId, "link_replace_not_upload")
-	} else if defaultType == 3 { // 未传数据
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByDataDefault(param)
-		autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
-		cutRate = dao.InfoAutoDefaultDao{}.GetValueByIdFieldName(*autoDefaultId, "data_replace_not_upload")
-	} else if defaultType == 4 { // 终止合作
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTerminateDefault(param)
-	} else if defaultType == 5 { // 已解约
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByCancelDefault(param)
-	}
-	if err != nil {
-		return result, err
-	}
-	for _, projectTaskInfo := range projectTaskInfos {
-		talentId := projectTaskInfo.TalentID
-		talentPhone, _ := dao.TalentInfoDao{}.SelectTalentPhone(talentId)
-		platformKuaishouUserInfo, _ := dao.PlatformKuaishouUserInfoDao{}.SelectUserInfo(talentId)
-		reTalentDefault := &vo.ReTalentDefault{
-			TalentId:    talentId,
-			TalentPhone: *talentPhone,
-			TaskId:      projectTaskInfo.TaskID,
-			DraftFee:    projectTaskInfo.DraftFee,
-			OpenId:      platformKuaishouUserInfo.OpenId,
-			NickName:    platformKuaishouUserInfo.NickName,
-			HeadUri:     platformKuaishouUserInfo.HeadUri,
-			City:        "-",
+	// 种草
+	if param.TaskType == 1 {
+		var projectTaskInfos []entity.ProjectTaskInfo
+		var total int64
+		var err error
+		var cutRate int64 // 违约扣款比例
+		defaultType := param.DefaultType
+		if defaultType == 1 { // 未传初稿
+			projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListBySketchDefault(param)
+			autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
+			infoAutoDefault, _ := dao.InfoAutoDefaultDao{}.GetValueById(*autoDefaultId)
+			cutRate = infoAutoDefault.SketchOtherNotUpload
+		} else if defaultType == 2 { // 未发作品
+			projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByLinkDefault(param)
+			autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
+			infoAutoDefault, _ := dao.InfoAutoDefaultDao{}.GetValueById(*autoDefaultId)
+			cutRate = infoAutoDefault.LinkReplaceNotUpload
+		} else if defaultType == 3 { // 未传数据
+			projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByDataDefault(param)
+			autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
+			infoAutoDefault, _ := dao.InfoAutoDefaultDao{}.GetValueById(*autoDefaultId)
+			cutRate = infoAutoDefault.DataReplaceNotUpload
+		} else if defaultType == 4 { // 终止合作
+			projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTerminateDefault(param)
+		} else if defaultType == 5 { // 已解约
+			projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByCancelDefault(param)
 		}
-		if defaultType == 1 {
-			reTalentDefault.DefaultTime = projectTaskInfo.SketchMissingTime.Format("2006-01-02 15:04:05")
-			reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
-		} else if defaultType == 2 {
-			reTalentDefault.DefaultTime = projectTaskInfo.LinkMissingTime.Format("2006-01-02 15:04:05")
-			reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
-		} else if defaultType == 3 {
-			reTalentDefault.DefaultTime = projectTaskInfo.DataMissingTime.Format("2006-01-02 15:04:05")
-			reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
-		} else if defaultType == 4 {
-			reTalentDefault.DefaultTime = projectTaskInfo.TerminateTime.Format("2006-01-02 15:04:05")
-			reTalentDefault.Reason = projectTaskInfo.TerminateReason
-			terminateOperatorType := projectTaskInfo.TerminateOperatorType
-			if terminateOperatorType == 1 {
-				enterprise, _ := dao.EnterpriseDao{}.GetEnterprise(projectTaskInfo.TerminateOperator)
-				reTalentDefault.OperatorName = enterprise.BusinessName
-			} else if terminateOperatorType == 2 {
-				operatorId, _ := strconv.ParseInt(projectTaskInfo.TerminateOperator, 10, 64)
-				subAccount, _ := dao.SubAccountDao{}.GetSubAccount(operatorId)
-				reTalentDefault.OperatorName = subAccount.SubAccountName
-			} else if terminateOperatorType == 3 {
-				operatorId, _ := strconv.ParseInt(projectTaskInfo.TerminateOperator, 10, 64)
-				userName, _ := dao.UserDao{}.GetNameByUserId(operatorId)
-				reTalentDefault.OperatorName = userName
+		if err != nil {
+			return result, err
+		}
+		for _, projectTaskInfo := range projectTaskInfos {
+			talentId := projectTaskInfo.TalentID
+			talentInfo, _ := dao.TalentInfoDao{}.SelectTalentInfo(talentId)
+			platformKuaishouUserInfo, _ := dao.PlatformKuaishouUserInfoDao{}.SelectUserInfo(talentId)
+			reTalentDefault := &vo.ReTalentDefault{
+				TalentId:    talentId,
+				TalentPhone: talentInfo.TalentPhoneNumber,
+				TaskId:      projectTaskInfo.TaskID,
+				DraftFee:    projectTaskInfo.DraftFee,
+				OpenId:      platformKuaishouUserInfo.OpenId,
+				NickName:    platformKuaishouUserInfo.NickName,
+				HeadUri:     platformKuaishouUserInfo.HeadUri,
+				City:        platformKuaishouUserInfo.City,
+				Gender:      talentInfo.Sex,
 			}
-		} else if defaultType == 5 {
-			reTalentDefault.DefaultTime = projectTaskInfo.CancelTime.Format("2006-01-02 15:04:05")
-			reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
-			reTalentDefault.Reason = projectTaskInfo.CancelReason
-			cancelOperatorType := projectTaskInfo.CancelOperatorType
-			if cancelOperatorType == 1 {
-				enterprise, _ := dao.EnterpriseDao{}.GetEnterprise(projectTaskInfo.CancelOperator)
-				reTalentDefault.OperatorName = enterprise.BusinessName
-			} else if cancelOperatorType == 2 {
-				operatorId, _ := strconv.ParseInt(projectTaskInfo.CancelOperator, 10, 64)
-				subAccount, _ := dao.SubAccountDao{}.GetSubAccount(operatorId)
-				reTalentDefault.OperatorName = subAccount.SubAccountName
-			} else if cancelOperatorType == 3 {
-				operatorId, _ := strconv.ParseInt(projectTaskInfo.CancelOperator, 10, 64)
-				userName, _ := dao.UserDao{}.GetNameByUserId(operatorId)
-				reTalentDefault.OperatorName = userName
+			if defaultType == 1 {
+				reTalentDefault.DefaultTime = projectTaskInfo.SketchMissingTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
+			} else if defaultType == 2 {
+				reTalentDefault.DefaultTime = projectTaskInfo.LinkMissingTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
+			} else if defaultType == 3 {
+				reTalentDefault.DefaultTime = projectTaskInfo.DataMissingTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
+			} else if defaultType == 4 {
+				reTalentDefault.DefaultTime = projectTaskInfo.TerminateTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.Reason = projectTaskInfo.TerminateReason
+				terminateOperatorType := projectTaskInfo.TerminateOperatorType
+				if terminateOperatorType == 1 {
+					enterprise, _ := dao.EnterpriseDao{}.GetEnterprise(projectTaskInfo.TerminateOperator)
+					reTalentDefault.OperatorName = enterprise.BusinessName
+				} else if terminateOperatorType == 2 {
+					operatorId, _ := strconv.ParseInt(projectTaskInfo.TerminateOperator, 10, 64)
+					subAccount, _ := dao.SubAccountDao{}.GetSubAccount(operatorId)
+					reTalentDefault.OperatorName = subAccount.SubAccountName
+				} else if terminateOperatorType == 3 {
+					operatorId, _ := strconv.ParseInt(projectTaskInfo.TerminateOperator, 10, 64)
+					userName, _ := dao.UserDao{}.GetNameByUserId(operatorId)
+					reTalentDefault.OperatorName = userName
+				}
+			} else if defaultType == 5 {
+				reTalentDefault.DefaultTime = projectTaskInfo.CancelTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = projectTaskInfo.SettleAmount
+				reTalentDefault.Reason = projectTaskInfo.CancelReason
+				cancelOperatorType := projectTaskInfo.CancelOperatorType
+				if cancelOperatorType == 1 {
+					enterprise, _ := dao.EnterpriseDao{}.GetEnterprise(projectTaskInfo.CancelOperator)
+					reTalentDefault.OperatorName = enterprise.BusinessName
+				} else if cancelOperatorType == 2 {
+					operatorId, _ := strconv.ParseInt(projectTaskInfo.CancelOperator, 10, 64)
+					subAccount, _ := dao.SubAccountDao{}.GetSubAccount(operatorId)
+					reTalentDefault.OperatorName = subAccount.SubAccountName
+				} else if cancelOperatorType == 3 {
+					operatorId, _ := strconv.ParseInt(projectTaskInfo.CancelOperator, 10, 64)
+					userName, _ := dao.UserDao{}.GetNameByUserId(operatorId)
+					reTalentDefault.OperatorName = userName
+				}
 			}
+			reTalentDefaults = append(reTalentDefaults, reTalentDefault)
 		}
-		reTalentDefaults = append(reTalentDefaults, reTalentDefault)
+		resultMap := make(map[string]interface{})
+		resultMap["cutRate"] = cutRate
+		resultMap["reTalentDefaults"] = reTalentDefaults
+		result = vo.ResultVO{
+			Page:     param.Page,
+			PageSize: param.PageSize,
+			Total:    total,
+			Data:     resultMap,
+		}
+		return result, nil
+		// 本地生活
+	} else if param.TaskType == 2 {
+		var localLifeTaskInfos []entity.LocalLifeTaskInfo
+		var total int64
+		var err error
+		var cutRate int64 // 违约扣款比例
+		defaultType := param.DefaultType
+		if defaultType == 1 { // 未传初稿
+			localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListBySketchDefault(param)
+			autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
+			infoAutoDefault, _ := dao.InfoAutoDefaultDao{}.GetValueById(*autoDefaultId)
+			cutRate = infoAutoDefault.SketchOtherNotUpload
+		} else if defaultType == 2 { // 未发作品
+			localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByLinkDefault(param)
+			autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
+			infoAutoDefault, _ := dao.InfoAutoDefaultDao{}.GetValueById(*autoDefaultId)
+			cutRate = infoAutoDefault.LinkReplaceNotUpload
+		} else if defaultType == 3 { // 未传数据
+			localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByDataDefault(param)
+			autoDefaultId, _ := dao.ProjectDAO{}.GetAutoDefaultId(param.TaskId)
+			infoAutoDefault, _ := dao.InfoAutoDefaultDao{}.GetValueById(*autoDefaultId)
+			cutRate = infoAutoDefault.DataReplaceNotUpload
+		} else if defaultType == 4 { // 终止合作
+			localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTerminateDefault(param)
+		} else if defaultType == 5 { // 已解约
+			localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByCancelDefault(param)
+		}
+		if err != nil {
+			return result, err
+		}
+		for _, localLifeTaskInfo := range localLifeTaskInfos {
+			talentId := localLifeTaskInfo.TalentID
+			talentInfo, _ := dao.TalentInfoDao{}.SelectTalentInfo(talentId)
+			platformKuaishouUserInfo, _ := dao.PlatformKuaishouUserInfoDao{}.SelectUserInfo(talentId)
+			reTalentDefault := &vo.ReTalentDefault{
+				TalentId:    talentId,
+				TalentPhone: talentInfo.TalentPhoneNumber,
+				TaskId:      localLifeTaskInfo.TaskID,
+				DraftFee:    localLifeTaskInfo.DraftFee,
+				OpenId:      platformKuaishouUserInfo.OpenId,
+				NickName:    platformKuaishouUserInfo.NickName,
+				HeadUri:     platformKuaishouUserInfo.HeadUri,
+				City:        platformKuaishouUserInfo.City,
+				Gender:      talentInfo.Sex,
+			}
+			if defaultType == 1 {
+				reTalentDefault.DefaultTime = localLifeTaskInfo.SketchMissingTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = localLifeTaskInfo.SettleAmount
+			} else if defaultType == 2 {
+				reTalentDefault.DefaultTime = localLifeTaskInfo.LinkMissingTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = localLifeTaskInfo.SettleAmount
+			} else if defaultType == 3 {
+				reTalentDefault.DefaultTime = localLifeTaskInfo.DataMissingTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = localLifeTaskInfo.SettleAmount
+			} else if defaultType == 4 {
+				reTalentDefault.DefaultTime = localLifeTaskInfo.TerminateTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.Reason = localLifeTaskInfo.TerminateReason
+				terminateOperatorType := localLifeTaskInfo.TerminateOperatorType
+				if terminateOperatorType == 1 {
+					enterprise, _ := dao.EnterpriseDao{}.GetEnterprise(localLifeTaskInfo.TerminateOperator)
+					reTalentDefault.OperatorName = enterprise.BusinessName
+				} else if terminateOperatorType == 2 {
+					operatorId, _ := strconv.ParseInt(localLifeTaskInfo.TerminateOperator, 10, 64)
+					subAccount, _ := dao.SubAccountDao{}.GetSubAccount(operatorId)
+					reTalentDefault.OperatorName = subAccount.SubAccountName
+				} else if terminateOperatorType == 3 {
+					operatorId, _ := strconv.ParseInt(localLifeTaskInfo.TerminateOperator, 10, 64)
+					userName, _ := dao.UserDao{}.GetNameByUserId(operatorId)
+					reTalentDefault.OperatorName = userName
+				}
+			} else if defaultType == 5 {
+				reTalentDefault.DefaultTime = localLifeTaskInfo.CancelTime.Format("2006-01-02 15:04:05")
+				reTalentDefault.SettleAmount = localLifeTaskInfo.SettleAmount
+				reTalentDefault.Reason = localLifeTaskInfo.CancelReason
+				cancelOperatorType := localLifeTaskInfo.CancelOperatorType
+				if cancelOperatorType == 1 {
+					enterprise, _ := dao.EnterpriseDao{}.GetEnterprise(localLifeTaskInfo.CancelOperator)
+					reTalentDefault.OperatorName = enterprise.BusinessName
+				} else if cancelOperatorType == 2 {
+					operatorId, _ := strconv.ParseInt(localLifeTaskInfo.CancelOperator, 10, 64)
+					subAccount, _ := dao.SubAccountDao{}.GetSubAccount(operatorId)
+					reTalentDefault.OperatorName = subAccount.SubAccountName
+				} else if cancelOperatorType == 3 {
+					operatorId, _ := strconv.ParseInt(localLifeTaskInfo.CancelOperator, 10, 64)
+					userName, _ := dao.UserDao{}.GetNameByUserId(operatorId)
+					reTalentDefault.OperatorName = userName
+				}
+			}
+			reTalentDefaults = append(reTalentDefaults, reTalentDefault)
+		}
+		resultMap := make(map[string]interface{})
+		resultMap["cutRate"] = cutRate
+		resultMap["reTalentDefaults"] = reTalentDefaults
+		result = vo.ResultVO{
+			Page:     param.Page,
+			PageSize: param.PageSize,
+			Total:    total,
+			Data:     resultMap,
+		}
+		return result, nil
+
+	} else {
+		return result, nil
 	}
-	resultMap := make(map[string]interface{})
-	resultMap["cutRate"] = cutRate
-	resultMap["reTalentDefaults"] = reTalentDefaults
-	result = vo.ResultVO{
-		Page:     param.Page,
-		PageSize: param.PageSize,
-		Total:    total,
-		Data:     resultMap,
+}
+
+// 违约管理——公开任务-违约达人列表角标
+func (s DefaultService) GetPublicDefaultTalentCount(param *vo.DefaultSearchParam) (map[string]int64, error) {
+	res := make(map[string]int64)
+	var noSketchNum int64
+	var noLinkNum int64
+	var noDataNum int64
+	var endCooperationNum int64
+	if param.TaskType == 1 {
+		noSketchNum = dao.ProjectTaskInfoDao{}.CountByDefaultType(param.TaskId, 4)
+		noLinkNum = dao.ProjectTaskInfoDao{}.CountByDefaultType(param.TaskId, 6)
+		noDataNum = dao.ProjectTaskInfoDao{}.CountByDefaultType(param.TaskId, 8)
+		// 终止合作还是解约字段待确认
+		endCooperationNum = dao.ProjectTaskInfoDao{}.CountByTaskStage(param.TaskId, 16)
+	} else {
+		noSketchNum = dao.LocalLifeTaskInfoDao{}.CountByDefaultType(param.TaskId, 4)
+		noLinkNum = dao.LocalLifeTaskInfoDao{}.CountByDefaultType(param.TaskId, 6)
+		noDataNum = dao.LocalLifeTaskInfoDao{}.CountByDefaultType(param.TaskId, 8)
+		// 终止合作还是解约字段待确认
+		endCooperationNum = dao.LocalLifeTaskInfoDao{}.CountByTaskStage(param.TaskId, 16)
 	}
-	return result, nil
+	res["noSketchNum"] = noSketchNum
+	res["noLinkNum"] = noLinkNum
+	res["noDataNum"] = noDataNum
+	res["endCooperationNum"] = endCooperationNum
+
+	return res, nil
 }
 
 // 违约管理——定向任务-违约达人列表

+ 24 - 4
app/service/local_life_service.go

@@ -142,8 +142,8 @@ func (s LocalLifeService) CreateLocalLife(localCreateParam *vo.LocalCreateParam)
 				totalRecruitNum += strategy.RecruitNumber
 				if strategy.FeeForm == 2 {
 					recruitStrategy.Offer = strategy.Offer
-					recruitStrategy.ServiceCharge = strategy.Offer * localCreateParam.ServiceChargeRate
-					recruitStrategy.TOffer = strategy.Offer * (1 - localCreateParam.ServiceChargeRate)
+					recruitStrategy.ServiceCharge = strategy.Offer * localCreateParam.ServiceChargeRate * 0.01
+					recruitStrategy.TOffer = strategy.Offer * (1 - localCreateParam.ServiceChargeRate*0.01)
 				}
 				recruits = append(recruits, recruitStrategy)
 			}
@@ -203,8 +203,8 @@ func (s LocalLifeService) UpdateLocal(localUpdateParam *vo.LocalUpdateParam) (*s
 				totalRecruitNum += strategy.RecruitNumber
 				if strategy.FeeForm == 2 {
 					recruitStrategy.Offer = strategy.Offer
-					recruitStrategy.ServiceCharge = strategy.Offer * localUpdateParam.ServiceChargeRate
-					recruitStrategy.TOffer = strategy.Offer * (1 - localUpdateParam.ServiceChargeRate)
+					recruitStrategy.ServiceCharge = strategy.Offer * localUpdateParam.ServiceChargeRate * 0.01
+					recruitStrategy.TOffer = strategy.Offer * (1 - localUpdateParam.ServiceChargeRate*0.01)
 				}
 				recruits = append(recruits, recruitStrategy)
 			}
@@ -1127,6 +1127,7 @@ func (s LocalLifeService) GetStoreExploreInfo(param *vo.StoreExploreParam) (*vo.
 			TalentName:  talentInfo.TalentWxNickname,
 			Account:     "",
 			Location:    regionName,
+			Gender:      talentInfo.Sex,
 		}
 		reStoreExploreTalent := &vo.ReStoreExploreTalent{
 			ReTalentPreview: talentPreview,
@@ -1154,6 +1155,25 @@ func (s LocalLifeService) GetStoreExploreInfo(param *vo.StoreExploreParam) (*vo.
 	return &result, nil
 }
 
+// 探店达人列表角标
+func (t LocalLifeService) StoreExploreInfoCount(param *vo.StoreExploreParam) map[string]int64 {
+	res := make(map[string]int64)
+	var needBook int64
+	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 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
+	res["needConfirm"] = needConfirm
+	res["needExplore"] = needExplore
+	res["explored"] = explored
+
+	return res
+}
+
 // 终止合作
 func (s LocalLifeService) StoreExploreOver(param *vo.LocalTalentOperateParam) (*string, error) {
 	taskId := param.TaskId

+ 20 - 0
app/service/product_service.go

@@ -209,6 +209,26 @@ func (p ProductService) DeleteProduct(param *vo.ProductUpdateParam) (int64, erro
 	return param.ProductId, nil
 }
 
+// 商品列表-角标
+func (t ProductService) CountProduct(param *vo.GetAllProductParam) map[string]int64 {
+	res := make(map[string]int64)
+	var commonProduct int64
+	var kuaishouProduct int64
+	if param.ProductTitle != "" {
+		dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0 and product_name LIKE ?", param.EnterpriseId, param.SubAccountId, 0, "%"+param.ProductTitle+"%").Count(&commonProduct)
+		dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0 and product_name LIKE ?", param.EnterpriseId, param.SubAccountId, 1, "%"+param.ProductTitle+"%").Count(&kuaishouProduct)
+
+	} else {
+		dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0", param.EnterpriseId, param.SubAccountId, 0).Count(&commonProduct)
+		dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0", param.EnterpriseId, param.SubAccountId, 1).Count(&kuaishouProduct)
+
+	}
+	res["commonProduct"] = commonProduct
+	res["kuaishouProduct"] = kuaishouProduct
+
+	return res
+}
+
 // 获取商品类目
 func (p ProductService) GetProductCategorys() ([]string, error) {
 	var categorys []string

+ 4 - 4
app/service/project_service.go

@@ -143,8 +143,8 @@ func (s ProjectService) CreateProject(projectCreateParam *vo.ProjectCreateParam)
 				totalRecruitNum += strategy.RecruitNumber
 				if strategy.FeeForm == 2 {
 					recruitStrategy.Offer = strategy.Offer
-					recruitStrategy.ServiceCharge = strategy.Offer * projectCreateParam.ServiceChargeRate
-					recruitStrategy.TOffer = strategy.Offer * (1 - projectCreateParam.ServiceChargeRate)
+					recruitStrategy.ServiceCharge = strategy.Offer * projectCreateParam.ServiceChargeRate * 0.01
+					recruitStrategy.TOffer = strategy.Offer * (1 - projectCreateParam.ServiceChargeRate*0.01)
 				}
 				recruits = append(recruits, recruitStrategy)
 			}
@@ -207,8 +207,8 @@ func (s ProjectService) UpdateProject(projectUpdateParam *vo.ProjectUpdateParam)
 				totalRecruitNum += strategy.RecruitNumber
 				if strategy.FeeForm == 2 {
 					recruitStrategy.Offer = strategy.Offer
-					recruitStrategy.ServiceCharge = strategy.Offer * projectUpdateParam.ServiceChargeRate
-					recruitStrategy.TOffer = strategy.Offer * (1 - projectUpdateParam.ServiceChargeRate)
+					recruitStrategy.ServiceCharge = strategy.Offer * projectUpdateParam.ServiceChargeRate * 0.01
+					recruitStrategy.TOffer = strategy.Offer * (1 - projectUpdateParam.ServiceChargeRate*0.01)
 				}
 				recruits = append(recruits, recruitStrategy)
 			}

+ 42 - 6
app/service/recharge_service.go

@@ -339,6 +339,26 @@ func (s RechargeService) FrozenInfoList(param *vo.BalanceParam) (vo.ResultVO, er
 	return result, nil
 }
 
+// 余额管理——冻结记录-角标
+func (t RechargeService) FrozenInfoCount(param *vo.BalanceParam) map[string]int64 {
+	res := make(map[string]int64)
+	var blockNum1 int64
+	var blockNum2 int64
+	var blockReleaseNum1 int64
+	var blockReleaseNum2 int64
+	// 冻结中
+	dao.Db.Model(entity.SelectionInfo{}).Where(fmt.Sprintf("enterprise_id = ? AND (selection_status between 5 and 6) "), param.EnterpriseId).Count(&blockNum1)
+	dao.Db.Model(entity.Project{}).Where(fmt.Sprintf("enterprise_id = ? AND (project_status between 7 and 8) "), param.EnterpriseId).Count(&blockNum2)
+	// 冻结解除
+	dao.Db.Model(entity.SelectionInfo{}).Where(fmt.Sprintf("enterprise_id = ? AND (selection_status between 7 and 8) "), param.EnterpriseId).Count(&blockReleaseNum1)
+	dao.Db.Model(entity.Project{}).Where(fmt.Sprintf("enterprise_id = ? AND (project_status between 9 and 10) "), param.EnterpriseId).Count(&blockReleaseNum2)
+
+	res["blockNum"] = blockNum1 + blockNum2
+	res["blockReleaseNum"] = blockReleaseNum1 + blockReleaseNum2
+
+	return res
+}
+
 // 充值管理——累计充值金额、确认中金额
 func (s RechargeService) ShowRecharge(param *vo.RechargeParam) (*vo.ReRechargeShow, error) {
 	reRechargeShow := new(vo.ReRechargeShow)
@@ -393,13 +413,13 @@ func (s RechargeService) RechargeInfoList(param *vo.RechargeParam) (vo.ResultVO,
 		}
 		reRechargeInfos = append(reRechargeInfos, reRechargeInfo)
 	}
-	rechargingNum, _ := dao.RechargeRecordDao{}.RechargeStatusCount(param.EnterpriseId, 1)
-	rechargedNum, _ := dao.RechargeRecordDao{}.RechargeStatusCount(param.EnterpriseId, 2)
-	failNum, _ := dao.RechargeRecordDao{}.RechargeStatusCount(param.EnterpriseId, 3)
+	//rechargingNum, _ := dao.RechargeRecordDao{}.RechargeStatusCount(param.EnterpriseId, 1)
+	//rechargedNum, _ := dao.RechargeRecordDao{}.RechargeStatusCount(param.EnterpriseId, 2)
+	//failNum, _ := dao.RechargeRecordDao{}.RechargeStatusCount(param.EnterpriseId, 3)
 	resMap := make(map[string]interface{})
-	resMap["rechargingNum"] = rechargingNum
-	resMap["rechargedNum"] = rechargedNum
-	resMap["failNum"] = failNum
+	//resMap["rechargingNum"] = rechargingNum
+	//resMap["rechargedNum"] = rechargedNum
+	//resMap["failNum"] = failNum
 	resMap["reRechargeInfos"] = reRechargeInfos
 	result = vo.ResultVO{
 		Page:     param.Page,
@@ -410,6 +430,22 @@ func (s RechargeService) RechargeInfoList(param *vo.RechargeParam) (vo.ResultVO,
 	return result, nil
 }
 
+// 余额管理——冻结记录-角标
+func (t RechargeService) RechargeInfoCount(param *vo.RechargeParam) map[string]int64 {
+	res := make(map[string]int64)
+	var rechargeConfirming int64
+	var recharged int64
+	var rechargeFail int64
+	dao.Db.Model(&entity.RechargeRecord{}).Where("enterprise_id = ? AND status = ?", param.EnterpriseId, 1).Count(&rechargeConfirming)
+	dao.Db.Model(&entity.RechargeRecord{}).Where("enterprise_id = ? AND status = ?", param.EnterpriseId, 2).Count(&recharged)
+	dao.Db.Model(&entity.RechargeRecord{}).Where("enterprise_id = ? AND status = ?", param.EnterpriseId, 3).Count(&rechargeFail)
+	res["rechargeConfirming"] = rechargeConfirming
+	res["recharged"] = recharged
+	res["rechargeFail"] = rechargeFail
+
+	return res
+}
+
 // 财务待办——充值确认中金额
 func (s RechargeService) GetFinance(param *vo.CommonParam) (float64, error) {
 	confirmingRecharge, err := dao.RechargeRecordDao{}.GetRechargeAmount(param.EnterpriseId, 1)

+ 17 - 1
app/service/selection_info_service.go

@@ -881,7 +881,7 @@ func (s SelectionInfoService) GetSelectionTaskList(param *vo.SelectionSearchPara
 func (s SelectionInfoService) DeleteSelection(selectionId string) (*string, error) {
 	res, err := dao.SelectionInfoDAO{}.DeleteSelection(selectionId)
 	if err != nil {
-		logrus.Errorf("[projectDB service] call DeleteSelection error,err:%+v", err)
+		logrus.Errorf("[selectionDB service] call DeleteSelection error,err:%+v", err)
 		return res, err
 	}
 	return res, nil
@@ -897,6 +897,22 @@ func (s SelectionInfoService) CloseSelection(selectionId string) (*string, error
 	return &selectionId, err
 }
 
+// 电商带货选达人角标 未处理、同意合作、拒绝合作
+func (s SelectionInfoService) SelectionTalentCount(selectionId string) map[string]int64 {
+	res := make(map[string]int64)
+	var unhandledNum int64
+	var agreeNum int64
+	var refuseNum int64
+	dao.Db.Model(&entity.SelectionTaskInfo{}).Where("selection_id = ? AND free_stage in ?", selectionId, []int{1}).Count(&unhandledNum)
+	dao.Db.Model(&entity.ProjectTaskInfo{}).Where("selection_id = ? AND free_stage in ?", selectionId, []int{3, 4, 5}).Count(&agreeNum)
+	dao.Db.Model(&entity.ProjectTaskInfo{}).Where("selection_id = ? AND free_stage in ?", selectionId, []int{2}).Count(&refuseNum)
+	res["unhandledNum"] = unhandledNum
+	res["agreeNum"] = agreeNum
+	res["refuseNum"] = refuseNum
+
+	return res
+}
+
 // 草稿箱——电商带货
 func (s SelectionInfoService) GetSelectionDraftList(param *vo.SelectionDraftParam) (vo.ResultVO, error) {
 	if param.Page == 0 {

+ 36 - 3
app/service/task_info_service.go

@@ -8,6 +8,22 @@ import (
 
 type TaskInfoService struct{}
 
+// 带货待发货、待签收、已签收统计
+func (t TaskInfoService) LogisticsSelectionTalentCount(param *vo.LogisticsSelectionTalentParam) map[string]int64 {
+	res := make(map[string]int64)
+	var needDelivery int64
+	var needReceive int64
+	var received int64
+	dao.Db.Model(&entity.SelectionTaskInfo{}).Where("selection_id = ? AND free_stage = ?", param.SelectionId, 3).Count(&needDelivery)
+	dao.Db.Model(&entity.SelectionTaskInfo{}).Where("selection_id = ? AND free_stage = ?", param.SelectionId, 4).Count(&needReceive)
+	dao.Db.Model(&entity.SelectionTaskInfo{}).Where("selection_id = ? AND free_stage = ?", param.SelectionId, 5).Count(&received)
+	res["needDelivery"] = needDelivery
+	res["needReceive"] = needReceive
+	res["received"] = received
+
+	return res
+}
+
 // 达人物流管理
 func (t TaskInfoService) LogisticsTalentList(param *vo.LogisticsTalentParam) (*vo.ResultVO, error) {
 	if param.Page <= 0 {
@@ -28,11 +44,11 @@ func (t TaskInfoService) LogisticsTalentList(param *vo.LogisticsTalentParam) (*v
 	var err error
 	projectId := param.ProjectId
 	if param.Status == 1 { // 待发货
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTaskStage(projectId, 4, "", param.Page, param.PageSize)
+		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTaskStage(projectId, 4, "", param.Page, param.PageSize, param.Nickname)
 	} else if param.Status == 2 { // 待签收
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTaskStage(projectId, 5, param.DeliveryTime, param.Page, param.PageSize)
+		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTaskStage(projectId, 5, param.DeliveryTime, param.Page, param.PageSize, param.Nickname)
 	} else if param.Status == 3 { // 已签收
-		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTaskStage(projectId, 6, "", param.Page, param.PageSize)
+		projectTaskInfos, total, err = dao.ProjectTaskInfoDao{}.GetListByTaskStage(projectId, 6, "", param.Page, param.PageSize, param.Nickname)
 	}
 	if err != nil {
 		return nil, err
@@ -57,6 +73,7 @@ func (t TaskInfoService) LogisticsTalentList(param *vo.LogisticsTalentParam) (*v
 			TalentName:  talentInfo.TalentWxNickname,
 			Account:     "",
 			Location:    regionName,
+			Gender:      talentInfo.Sex,
 		}
 		reLogisticsTalent := &vo.ReLogisticsTalent{
 			TalentPostAddrSnap: projectTaskInfo.TalentPostAddrSnap,
@@ -85,6 +102,22 @@ func (t TaskInfoService) LogisticsTalentList(param *vo.LogisticsTalentParam) (*v
 	return &result, nil
 }
 
+// 种草待发货、待签收、已签收统计
+func (t TaskInfoService) LogisticsTalentCount(param *vo.LogisticsTalentParam) map[string]int64 {
+	res := make(map[string]int64)
+	var needDelivery int64
+	var needReceive int64
+	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)
+	res["needDelivery"] = needDelivery
+	res["needReceive"] = needReceive
+	res["received"] = received
+
+	return res
+}
+
 func (t TaskInfoService) SelectionRewardCashDetail(param *vo.SelectionRewardCashParam) (*vo.ReSelectionRewardCash, error) {
 	if param.Page == 0 {
 		param.Page = 1

+ 2 - 2
app/vo/default_search_param.go

@@ -6,10 +6,10 @@ type DefaultSearchParam struct {
 	Page         int    `json:"page"`
 	PageSize     int    `json:"page_size"`
 	Platform     int64  `json:"platform"`
-	ProjectType  int64  `json:"project_type"` // 任务类型,0全部 1品牌种草,2本地生活
+	TaskType     int64  `json:"task_type"`    // 任务类型,0全部 1品牌种草,2本地生活
 	DefaultType  int64  `json:"default_type"` // 违约类型 1未传初稿 2未发作品 3未传数据 4终止合作 5已解约
+	Others       string `json:"others"`       // 任务标题/任务ID/创建者
 
 	TaskId     string `json:"task_id"`     // 任务ID
-	Others     string `json:"others"`      // 任务标题/任务ID/创建者
 	TalentName string `json:"talent_name"` // 达人昵称
 }

+ 1 - 1
app/vo/local_draft_param.go

@@ -8,5 +8,5 @@ type LocalDraftParam struct {
 	LocalPlatform int64  `json:"local_platform"` // 平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
 	LocalType     int64  `json:"local_type"`     // 项目类型 1全流程 2专项
 
-	//ProjectId string `json:"project_id"` // 任务ID
+	Others string `json:"others"` // 任务标题/任务ID/创建者
 }

+ 10 - 0
app/vo/logistics_selection_talent_param.go

@@ -0,0 +1,10 @@
+package vo
+
+type LogisticsSelectionTalentParam struct {
+	SelectionId  string `json:"selection_id"`
+	Status       int64  `json:"status"`        // 1待发货 2待签收 3已签收
+	DeliveryTime string `json:"delivery_time"` // 发货时间
+	Nickname     string `json:"nickname"`      // 达人昵称
+	Page         int    `json:"page"`
+	PageSize     int    `json:"page_size"`
+}

+ 3 - 3
app/vo/logistics_talent_param.go

@@ -4,7 +4,7 @@ type LogisticsTalentParam struct {
 	ProjectId    string `json:"project_id"`
 	Status       int64  `json:"status"`        // 1待发货 2待签收 3已签收
 	DeliveryTime string `json:"delivery_time"` // 发货时间
-	//Nickname  string `json:"nickname"` // 达人昵称
-	Page     int `json:"page"`
-	PageSize int `json:"page_size"`
+	Nickname     string `json:"nickname"`      // 达人昵称
+	Page         int    `json:"page"`
+	PageSize     int    `json:"page_size"`
 }

+ 1 - 1
app/vo/project_draft_param.go

@@ -8,5 +8,5 @@ type ProjectDraftParam struct {
 	ProjectPlatform int64  `json:"project_platform"` // 平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
 	ProjectType     int64  `json:"project_type"`     // 项目类型 1全流程 2专项
 
-	//ProjectId string `json:"project_id"` // 任务ID
+	Others string `json:"others"` // 任务标题/任务ID/创建者
 }

+ 1 - 0
app/vo/re_logistics_talent.go

@@ -17,4 +17,5 @@ type TalentPreview struct {
 	TalentName  string `json:"talentName"`
 	Account     string `json:"account"`
 	Location    string `json:"location"`
+	Gender      int64  `json:"gender"`
 }

+ 4 - 2
app/vo/re_talent_default.go

@@ -6,11 +6,13 @@ type ReTalentDefault struct {
 	NickName     string  `json:"nickName"`
 	HeadUri      string  `json:"headUri"`
 	City         string  `json:"city"`
+	Gender       int64   `json:"gender"`       // 0未知 1男 2女
 	TalentPhone  string  `json:"talentPhone"`  // 表youngee_talent_info
 	TaskId       string  `json:"taskId"`       // 任务id
 	DraftFee     float64 `json:"draftFee"`     // 稿费价格
 	SettleAmount float64 `json:"settleAmount"` // 结算金额
 	DefaultTime  string  `json:"defaultTime"`  // 违约时间
-	Reason       string  `json:"reason"`       // 终止理由或解约原因
-	OperatorName string  `json:"operatorName"` // 操作人
+
+	Reason       string `json:"reason"`       // 终止理由或解约原因
+	OperatorName string `json:"operatorName"` // 操作人
 }

+ 5 - 0
app/vo/re_task_default_public.go

@@ -6,6 +6,11 @@ type ReTaskDefaultPublic struct {
 	ProductName  string  `json:"productName"`
 	ProductPrice float64 `json:"productPrice"`
 
+	StoreName     string `json:"storeName"`
+	StoreLocation string `json:"storeLocation"`
+	StoreId       int64  `json:"storeId"`
+	TeamBuyingId  int64  `json:"teamBuyingId"`
+
 	EnterpriseId      string `json:"enterpriseId"`
 	SubAccountId      int64  `json:"subAccountId"`
 	TaskId            string `json:"taskId"`

+ 1 - 1
app/vo/selection_draft_param.go

@@ -7,5 +7,5 @@ type SelectionDraftParam struct {
 	PageSize          int    `json:"page_size"`
 	SelectionPlatform int64  `json:"selection_platform"` // 平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
 
-	//SelectionId string `json:"selection_id"` // 任务ID
+	Others string `json:"others"` // 任务标题/任务ID/创建者
 }

+ 417 - 44
db/locallife_task.go

@@ -14,11 +14,71 @@ import (
 	"youngee_b_api/model/http_model"
 )
 
+func GetLocalRecruittime(ctx context.Context, request http_model.GetLocalRecruitTimeRequest) (*http_model.GetLocalRecruitTimeResponse, error) {
+	db := GetReadDB(ctx)
+	var localinfo gorm_model.YounggeeLocalLifeInfo
+	err := db.Model(&gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", request.ProjectId).Find(&localinfo).Error
+	var result http_model.GetLocalRecruitTimeResponse
+	if err != nil {
+		return &result, err
+	}
+	result.RecruitTime = localinfo.RecruitDdl.Format("2006-01-02 15:04:05")
+	return &result, nil
+}
+
+func GetLocalTalentstatusCount(db *gorm.DB, request http_model.GetLocalTalentstatusNumRequest, status int) (int64, error) {
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("project_id = ? AND task_status = ?", request.ProjectId, status)
+
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return 0, err
+	}
+	return total, nil
+}
+
+func GetLocalTalentstatusNumCount(ctx context.Context, request http_model.GetLocalTalentstatusNumRequest) (*http_model.GetLocalTalentstatusNumResponse, error) {
+	db := GetReadDB(ctx)
+	var unoperatenum, agreetalentnum, refusetalentnum int64
+	unoperatenum, _ = GetLocalTalentstatusCount(db, request, 1)
+	agreetalentnum, _ = GetLocalTalentstatusCount(db, request, 2)
+	refusetalentnum, _ = GetLocalTalentstatusCount(db, request, 3)
+	count := &http_model.GetLocalTalentstatusNumResponse{
+		UnoperateTalentnum: unoperatenum,
+		AgreeTalentnum:     agreetalentnum,
+		RefuseTalentnum:    refusetalentnum,
+	}
+	return count, nil
+}
+
+func GetLocalTalentstatusNum(db *gorm.DB, request http_model.GetLocalTalentstatusCountRequest, status int) (int64, error) {
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, status)
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return 0, err
+	}
+	return total, nil
+}
+
+func GetLocalTalentstatusCountNum(ctx context.Context, request http_model.GetLocalTalentstatusCountRequest) (*http_model.GetLocalTalentstatusCountResponse, error) {
+	db := GetReadDB(ctx)
+	var unoperatenum, agreetalentnum, refusetalentnum int64
+	unoperatenum, _ = GetLocalTalentstatusNum(db, request, request.TaskStage)
+	agreetalentnum, _ = GetLocalTalentstatusNum(db, request, request.TaskStage+1)
+	refusetalentnum, _ = GetLocalTalentstatusNum(db, request, request.TaskStage+2)
+	count := &http_model.GetLocalTalentstatusCountResponse{
+		UnoperateTalentnum: unoperatenum,
+		AgreeTalentnum:     agreetalentnum,
+		RefuseTalentnum:    refusetalentnum,
+	}
+	return count, nil
+}
+
 func GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskListRequest) (*http_model.GetLocalTaskListData, error) {
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
 	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_status = ?", request.ProjectId, request.CoopType)
-	fmt.Println(query)
+
 	// 构建查询条件
 	if request.FeeFrom != nil {
 		query = query.Where("fee_form = ?", request.FeeFrom)
@@ -32,8 +92,8 @@ func GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskLi
 		}
 	}
 	if request.TalentFromList != "" {
-		citylist := strings.Split(request.TalentFromList, ",")
-		query = query.Where("city in ?", citylist)
+		provinceList := strings.Split(request.TalentFromList, ",")                // 解析传入的省份列表
+		query = query.Where("SUBSTRING_INDEX(city, ' ', 1) IN (?)", provinceList) // 提取城市字段中的省份并进行匹配
 	}
 	// 计算总数
 	var total int64
@@ -51,7 +111,42 @@ func GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskLi
 		pageNum = 1
 	}
 	offset := (pageNum - 1) * pageSize
-
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	// 执行分页查询
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
@@ -68,25 +163,30 @@ func GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskLi
 			Time = task.CompleteDate
 		}
 		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
-		nickname, headurl := getTalentinfo(db, task.TalentId)
+		nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.TalentId)
 		Iscoop := getIscoop(db, task.TalentId, request.EnterPriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		response := &http_model.LocaLTaskInfo{
 			TaskId:             task.TaskId,
 			ProjectId:          task.LocalId,
 			TalentId:           task.TalentId,
-			FansNum:            task.FansNum,
+			FansNum:            fans,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			Boperator:          boperator,
-			CreateAt:           Time,
+			CreateAt:           Time.Format("2006-01-02 15:04:05"),
 			NickName:           nickname,
 			HeadUrl:            headurl,
 			ISCoop:             Iscoop,
+			Gender:             gender,
 			Sprojectid:         task.SLocalLifeId,
 			City:               task.City,
 		}
@@ -102,10 +202,9 @@ func GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskLi
 func PassLocalTaskCoop(ctx context.Context, req http_model.PasslocalTaskCoopRequest) (bool, error) {
 	db := GetReadDB(ctx)
 	var count int64
-	fmt.Println("task_ids: ", req.TaskIds)
+
 	err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Count(&count).Error
 
-	fmt.Println("count: ", count)
 	if err != nil {
 		return false, err
 	}
@@ -442,6 +541,9 @@ func GetLocalPreSketchList(ctx context.Context, request http_model.LocalPreSketc
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
 	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -459,34 +561,77 @@ func GetLocalPreSketchList(ctx context.Context, request http_model.LocalPreSketc
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
+
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.LocalTasksketchInfo, 0, len(projecrtaskinfo))
 
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentId)
+		nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.TalentId)
 		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.LocaLTaskInfo{
 			TaskId:             task.TaskId,
 			ProjectId:          task.LocalId,
 			TalentId:           task.TalentId,
-			FansNum:            task.FansNum,
+			FansNum:            fans,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
 			HeadUrl:            headurl,
+			Gender:             gender,
+			CollectNum:         0,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
 		response := &http_model.LocalTasksketchInfo{
 			Task: taskinfo,
-			DDl:  task.CurBreakAt,
+			DDl:  task.CurBreakAt.Format("2006-01-02 15:04:05"),
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
 
@@ -501,6 +646,11 @@ func GetLocalSketchList(ctx context.Context, request http_model.LocalTasksketchl
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
 	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -518,25 +668,66 @@ func GetLocalSketchList(ctx context.Context, request http_model.LocalTasksketchl
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.LocalTasksketchinfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentId)
+		nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.TalentId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.LocaLTaskInfo{
 			TaskId:             task.TaskId,
 			ProjectId:          task.LocalId,
 			TalentId:           task.TalentId,
-			FansNum:            task.FansNum,
+			FansNum:            fans,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
+			SType:              s_type,
+			SName:              s_name,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			City:               task.City,
 		}
@@ -549,8 +740,8 @@ func GetLocalSketchList(ctx context.Context, request http_model.LocalTasksketchl
 		response := &http_model.LocalTasksketchinfo{
 			Task:     taskinfo,
 			SketchId: sketchinfo.SketchID,
-			SubmitAt: sketchinfo.SubmitAt,
-			AgreeAt:  sketchinfo.AgreeAt,
+			SubmitAt: sketchinfo.SubmitAt.Format("2006-01-02 15:04:05"),
+			AgreeAt:  sketchinfo.AgreeAt.Format("2006-01-02 15:04:05"),
 			Operator: boperator,
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
@@ -566,6 +757,11 @@ func GetLocalPreLinkList(ctx context.Context, request http_model.LocalPreLinkLis
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
 	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -583,33 +779,74 @@ func GetLocalPreLinkList(ctx context.Context, request http_model.LocalPreLinkLis
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.LocalTasklinkinfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentId)
+		nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.TalentId)
 		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.LocaLTaskInfo{
 			TaskId:             task.TaskId,
 			ProjectId:          task.LocalId,
 			TalentId:           task.TalentId,
-			FansNum:            task.FansNum,
+			FansNum:            fans,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
 			HeadUrl:            headurl,
+			Gender:             gender,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
 		response := &http_model.LocalTasklinkinfo{
 			Task: taskinfo,
-			DDl:  task.CurBreakAt,
+			DDl:  task.CurBreakAt.Format("2006-01-02 15:04:05"),
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
 
@@ -624,6 +861,11 @@ func GetLocalLinkList(ctx context.Context, request http_model.LocalTaskLinklistR
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
 	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -641,27 +883,68 @@ func GetLocalLinkList(ctx context.Context, request http_model.LocalTaskLinklistR
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.LocalTaskLinkinfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentId)
+		nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.TalentId)
 		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.LocaLTaskInfo{
 			TaskId:             task.TaskId,
 			ProjectId:          task.LocalId,
 			TalentId:           task.TalentId,
-			FansNum:            task.FansNum,
+			FansNum:            fans,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
 			HeadUrl:            headurl,
+			Gender:             gender,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
@@ -674,8 +957,8 @@ func GetLocalLinkList(ctx context.Context, request http_model.LocalTaskLinklistR
 		response := &http_model.LocalTaskLinkinfo{
 			Task:     taskinfo,
 			LinkId:   linkinfo.LinkID,
-			SubmitAt: linkinfo.SubmitAt,
-			AgreeAt:  linkinfo.AgreeAt,
+			SubmitAt: linkinfo.SubmitAt.Format("2006-01-02 15:04:05"),
+			AgreeAt:  linkinfo.AgreeAt.Format("2006-01-02 15:04:05"),
 			LinkUrl:  linkinfo.LinkUrl,
 			PhotoUrl: linkinfo.PhotoUrl,
 			Operator: boperator,
@@ -693,6 +976,9 @@ func GetLocalPreDataList(ctx context.Context, request http_model.LocalPreDataLis
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
 	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -710,33 +996,74 @@ func GetLocalPreDataList(ctx context.Context, request http_model.LocalPreDataLis
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.LocalTaskdatainfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentId)
+		nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.TalentId)
 		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.LocaLTaskInfo{
 			TaskId:             task.TaskId,
 			ProjectId:          task.LocalId,
 			TalentId:           task.TalentId,
-			FansNum:            task.FansNum,
+			FansNum:            fans,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
 			HeadUrl:            headurl,
+			Gender:             gender,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
 		response := &http_model.LocalTaskdatainfo{
 			Task: taskinfo,
-			DDl:  task.CurBreakAt,
+			DDl:  task.CurBreakAt.Format("2006-01-02 15:04:05"),
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
 
@@ -751,6 +1078,11 @@ func GetLocalDataList(ctx context.Context, request http_model.LocalTaskDatalistR
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
 	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -768,27 +1100,68 @@ func GetLocalDataList(ctx context.Context, request http_model.LocalTaskDatalistR
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.LocalTaskDatainfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentId)
+		nickname, headurl, gender, fans, voteavg := getTalentinfo(db, task.TalentId)
 		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.LocaLTaskInfo{
 			TaskId:             task.TaskId,
 			ProjectId:          task.LocalId,
 			TalentId:           task.TalentId,
-			FansNum:            task.FansNum,
+			FansNum:            fans,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
 			HeadUrl:            headurl,
+			Gender:             gender,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
@@ -801,8 +1174,8 @@ func GetLocalDataList(ctx context.Context, request http_model.LocalTaskDatalistR
 		response := &http_model.LocalTaskDatainfo{
 			Task:          taskinfo,
 			DataId:        datainfo.DataID,
-			SubmitAt:      datainfo.SubmitAt,
-			AgreeAt:       datainfo.AgreeAt,
+			SubmitAt:      datainfo.SubmitAt.Format("2006-01-02 15:04:05"),
+			AgreeAt:       datainfo.AgreeAt.Format("2006-01-02 15:04:05"),
 			PhotoUrl:      datainfo.PhotoUrl,
 			PlayNumber:    datainfo.PlayNumber,
 			LikeNumber:    datainfo.LikeNumber,

+ 35 - 0
db/platform_kuaishou_user.go

@@ -2,7 +2,9 @@ package db
 
 import (
 	"context"
+	"strings"
 	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
 )
 
 func FindUserInfoByTalentId(ctx context.Context, talentId string) (*gorm_model.PlatformKuaishouUserInfo, error) {
@@ -25,3 +27,36 @@ func FindUserInfoByOpenId(ctx context.Context, openId string) (*gorm_model.Platf
 	}
 	return &userInfo, nil
 }
+
+func GetProvince(ctx context.Context, request http_model.GetProviceRequest) (*http_model.GetProviceResponse, error) {
+	db := GetReadDB(ctx)
+	var userInfo []gorm_model.PlatformKuaishouUserInfo
+	// 从数据库中获取所有 city 字段的数据
+	err := db.Model(&gorm_model.PlatformKuaishouUserInfo{}).Pluck("city", &userInfo).Error
+	if err != nil {
+		return nil, err
+	}
+
+	// 使用 map 来去重省份
+	provinceMap := make(map[string]struct{})
+	for _, user := range userInfo {
+		if user.City != "" {
+			// 按照空格分割 city 字段,取第一个部分作为省份
+			cityParts := strings.Split(user.City, " ")
+			if len(cityParts) > 0 {
+				provinceMap[cityParts[0]] = struct{}{} // 使用空结构体来去重
+			}
+		}
+	}
+
+	// 将 map 中的省份名称放入切片
+	var provinces []string
+	for province := range provinceMap {
+		provinces = append(provinces, province)
+	}
+
+	// 返回省份列表
+	return &http_model.GetProviceResponse{
+		Provices: provinces,
+	}, nil
+}

+ 420 - 55
db/project_task.go

@@ -13,6 +13,66 @@ import (
 	"youngee_b_api/model/http_model"
 )
 
+func GetRecruittime(ctx context.Context, request http_model.GetRecruitTimeRequest) (*http_model.GetRecruitTimeResponse, error) {
+	db := GetReadDB(ctx)
+	var info gorm_model.ProjectInfo
+	err := db.Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", request.ProjectId).Find(&info).Error
+	var result http_model.GetRecruitTimeResponse
+	if err != nil {
+		return &result, err
+	}
+	result.RecruitTime = info.RecruitDdl.Format("2006-01-02 15:04:05")
+	return &result, nil
+}
+
+func GetTalentstatusCount(db *gorm.DB, request http_model.GetTalentstatusNumRequest, status int) (int64, error) {
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ?", request.ProjectId, status)
+
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return 0, err
+	}
+	return total, nil
+}
+
+func GetTalentstatusNum(db *gorm.DB, request http_model.GetTalentstatusCountRequest, status int) (int64, error) {
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, status)
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return 0, err
+	}
+	return total, nil
+}
+
+func GetTalentstatusCountNum(ctx context.Context, request http_model.GetTalentstatusCountRequest) (*http_model.GetTalentstatusCountResponse, error) {
+	db := GetReadDB(ctx)
+	var unoperatenum, agreetalentnum, refusetalentnum int64
+	unoperatenum, _ = GetTalentstatusNum(db, request, request.TaskStage)
+	agreetalentnum, _ = GetTalentstatusNum(db, request, request.TaskStage+1)
+	refusetalentnum, _ = GetTalentstatusNum(db, request, request.TaskStage+2)
+	count := &http_model.GetTalentstatusCountResponse{
+		UnoperateTalentnum: unoperatenum,
+		AgreeTalentnum:     agreetalentnum,
+		RefuseTalentnum:    refusetalentnum,
+	}
+	return count, nil
+}
+
+func GetTalentstatusNumCount(ctx context.Context, request http_model.GetTalentstatusNumRequest) (*http_model.GetTalentStatusNumResponse, error) {
+	db := GetReadDB(ctx)
+	var unoperatenum, agreetalentnum, refusetalentnum int64
+	unoperatenum, _ = GetTalentstatusCount(db, request, 1)
+	agreetalentnum, _ = GetTalentstatusCount(db, request, 2)
+	refusetalentnum, _ = GetTalentstatusCount(db, request, 3)
+	count := &http_model.GetTalentStatusNumResponse{
+		UnoperateTalentnum: unoperatenum,
+		AgreeTalentnum:     agreetalentnum,
+		RefuseTalentnum:    refusetalentnum,
+	}
+	return count, nil
+}
+
 func GetProjecttaskList(ctx context.Context, request http_model.GetTaskListRequest) (*http_model.GetTaskListData, error) {
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
@@ -48,6 +108,42 @@ func GetProjecttaskList(ctx context.Context, request http_model.GetTaskListReque
 	}
 	offset := (pageNum - 1) * pageSize
 
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	// 执行分页查询
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
@@ -65,24 +161,28 @@ func GetProjecttaskList(ctx context.Context, request http_model.GetTaskListReque
 			Time = task.CompleteDate
 		}
 		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
-		nickname, headurl := getTalentinfo(db, task.TalentID)
+		nickname, headurl, gender, fansnum, voteavg := getTalentinfo(db, task.OpenId)
 		Iscoop := getIscoop(db, task.TalentID, request.EnterPriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		response := &http_model.TaskInfo{
 			TaskId:             task.TaskID,
 			ProjectId:          task.ProjectID,
 			TalentId:           task.TalentID,
-			FansNum:            task.FansNum,
+			FansNum:            fansnum,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0, //暂时获取不到
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
-			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			Boperator:          boperator,
-			CreateAt:           Time,
+			CreateAt:           Time.Format("2006-01-02 15:04:05"),
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			ISCoop:             Iscoop,
 			Sprojectid:         task.SprojectId,
@@ -121,12 +221,13 @@ func getBOperator(db *gorm.DB, bOperatorID string, bOperatorType int) string {
 	return ""
 }
 
-func getTalentinfo(db *gorm.DB, talentID string) (string, string) {
+func getTalentinfo(db *gorm.DB, OpenId string) (string, string, string, int, int) {
 	var talentinfo gorm_model.PlatformKuaishouUserInfo
-	if err := db.Where(gorm_model.PlatformKuaishouUserInfo{TalentId: talentID}).First(&talentinfo).Error; err != nil {
-		return "", ""
+	if err := db.Where(gorm_model.PlatformKuaishouUserInfo{OpenId: OpenId}).First(&talentinfo).Error; err != nil {
+		return "", "", "", 0, 0
 	}
-	return talentinfo.NickName, talentinfo.HeadUri
+	fan, _ := conv.Int(talentinfo.Fan)
+	return talentinfo.NickName, talentinfo.HeadUri, talentinfo.Gender, fan, talentinfo.LikeNum
 }
 
 func getIscoop(db *gorm.DB, talentid string, enterpriseid string) int {
@@ -144,24 +245,22 @@ func determineFrom(supplierID, supplierStatus int) int {
 	return 1
 }
 
-func stype(db *gorm.DB, supplierID, supplierStatus int) int {
+func stype(db *gorm.DB, supplierID, supplierStatus int) (int, string) {
 	if supplierID != 0 && supplierStatus == 2 {
 		var supplierinfo gorm_model.Supplier
 		err := db.Model(gorm_model.Supplier{}).Where("supplier_id = ?", supplierID).First(&supplierinfo).Error
 		if err != nil {
-			return 0
+			return 0, "公海"
 		}
-		return supplierinfo.SupplierType
+		return supplierinfo.SupplierType, supplierinfo.SupplierName
 	}
-	return 0
+	return 0, "公海"
 }
 func PassProTaskCoop(ctx context.Context, projectId string, taskIds []string, operatorid string, operatetype int, Isspecial int, req http_model.PassproTaskCoopRequest) (bool, error) {
 	db := GetReadDB(ctx)
 	var count int64
-	fmt.Println("task_ids: ", taskIds)
 	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Count(&count).Error
 
-	fmt.Println("count: ", count)
 	if err != nil {
 		return false, err
 	}
@@ -380,6 +479,11 @@ func GetPreSketchList(ctx context.Context, request http_model.PreSketchListReque
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
 	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -397,35 +501,75 @@ func GetPreSketchList(ctx context.Context, request http_model.PreSketchListReque
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.TasksketchInfo, 0, len(projecrtaskinfo))
 
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentID)
+		nickname, headurl, gender, fansnum, voteavg := getTalentinfo(db, task.OpenId)
 		Iscoop := getIscoop(db, task.TalentID, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.TaskInfo{
 			TaskId:             task.TaskID,
 			ProjectId:          task.ProjectID,
 			TalentId:           task.TalentID,
-			FansNum:            task.FansNum,
+			FansNum:            fansnum,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
-			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
 		response := &http_model.TasksketchInfo{
 			Task: taskinfo,
-			DDl:  task.CurBreakAt,
+			DDl:  task.CurBreakAt.Format("2006-01-02 15:04:05"),
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
 
@@ -440,6 +584,11 @@ func GetSketchList(ctx context.Context, request http_model.TasksketchlistRequest
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
 	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -457,26 +606,66 @@ func GetSketchList(ctx context.Context, request http_model.TasksketchlistRequest
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.Tasksketchinfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentID)
+		nickname, headurl, gender, fansnum, voteavg := getTalentinfo(db, task.OpenId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.TaskInfo{
 			TaskId:             task.TaskID,
 			ProjectId:          task.ProjectID,
 			TalentId:           task.TalentID,
-			FansNum:            task.FansNum,
+			FansNum:            fansnum,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
-			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			City:               task.City,
 		}
@@ -489,8 +678,8 @@ func GetSketchList(ctx context.Context, request http_model.TasksketchlistRequest
 		response := &http_model.Tasksketchinfo{
 			Task:     taskinfo,
 			SketchId: sketchinfo.SketchID,
-			SubmitAt: sketchinfo.SubmitAt,
-			AgreeAt:  sketchinfo.AgreeAt,
+			SubmitAt: sketchinfo.SubmitAt.Format("2006-01-02 15:04:05"),
+			AgreeAt:  sketchinfo.AgreeAt.Format("2006-01-02 15:04:05"),
 			Operator: boperator,
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
@@ -506,6 +695,11 @@ func GetPreLinkList(ctx context.Context, request http_model.PreLinkListRequest)
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
 	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -523,34 +717,74 @@ func GetPreLinkList(ctx context.Context, request http_model.PreLinkListRequest)
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.Tasklinkinfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentID)
+		nickname, headurl, gender, fansnum, voteavg := getTalentinfo(db, task.OpenId)
 		Iscoop := getIscoop(db, task.TalentID, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.TaskInfo{
 			TaskId:             task.TaskID,
 			ProjectId:          task.ProjectID,
 			TalentId:           task.TalentID,
-			FansNum:            task.FansNum,
+			FansNum:            fansnum,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
-			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
 		response := &http_model.Tasklinkinfo{
 			Task: taskinfo,
-			DDl:  task.CurBreakAt,
+			DDl:  task.CurBreakAt.Format("2006-01-02 15:04:05"),
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
 
@@ -565,6 +799,11 @@ func GetLinkList(ctx context.Context, request http_model.TaskLinklistRequest) (*
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
 	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
+
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -582,27 +821,67 @@ func GetLinkList(ctx context.Context, request http_model.TaskLinklistRequest) (*
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.TaskLinkinfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentID)
+		nickname, headurl, gender, fansnum, voteavg := getTalentinfo(db, task.OpenId)
 		Iscoop := getIscoop(db, task.TalentID, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.TaskInfo{
 			TaskId:             task.TaskID,
 			ProjectId:          task.ProjectID,
 			TalentId:           task.TalentID,
-			FansNum:            task.FansNum,
+			FansNum:            fansnum,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
-			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			ISCoop:             Iscoop,
 			City:               task.City,
@@ -616,8 +895,8 @@ func GetLinkList(ctx context.Context, request http_model.TaskLinklistRequest) (*
 		response := &http_model.TaskLinkinfo{
 			Task:     taskinfo,
 			LinkId:   linkinfo.LinkID,
-			SubmitAt: linkinfo.SubmitAt,
-			AgreeAt:  linkinfo.AgreeAt,
+			SubmitAt: linkinfo.SubmitAt.Format("2006-01-02 15:04:05"),
+			AgreeAt:  linkinfo.AgreeAt.Format("2006-01-02 15:04:05"),
 			LinkUrl:  linkinfo.LinkUrl,
 			PhotoUrl: linkinfo.PhotoUrl,
 			Operator: boperator,
@@ -635,6 +914,9 @@ func GetPreDataList(ctx context.Context, request http_model.PreDataListRequest)
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
 	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -652,34 +934,74 @@ func GetPreDataList(ctx context.Context, request http_model.PreDataListRequest)
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.Taskdatainfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentID)
+		nickname, headurl, gender, fansnum, voteavg := getTalentinfo(db, task.OpenId)
 		Iscoop := getIscoop(db, task.TalentID, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.TaskInfo{
 			TaskId:             task.TaskID,
 			ProjectId:          task.ProjectID,
 			TalentId:           task.TalentID,
-			FansNum:            task.FansNum,
+			FansNum:            fansnum,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
-			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			ISCoop:             Iscoop,
 			City:               task.City,
 		}
 		response := &http_model.Taskdatainfo{
 			Task: taskinfo,
-			DDl:  task.CurBreakAt,
+			DDl:  task.CurBreakAt.Format("2006-01-02 15:04:05"),
 		}
 		taskInfoPointers = append(taskInfoPointers, response)
 
@@ -694,6 +1016,9 @@ func GetDataList(ctx context.Context, request http_model.TaskDatalistRequest) (*
 	db := GetReadDB(ctx)
 	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
 	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	if request.Others != "" {
+		query = query.Where("talent_name LIKE ? OR s_operate_name LIKE ?", "%"+request.Others+"%", "%"+request.Others+"%")
+	}
 	// 计算总数
 	var total int64
 	if err := query.Count(&total).Error; err != nil {
@@ -711,27 +1036,67 @@ func GetDataList(ctx context.Context, request http_model.TaskDatalistRequest) (*
 	}
 	offset := (pageNum - 1) * pageSize
 	// 执行分页查询
+	// 处理多字段排序逻辑
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			field := request.SortField[i]
+			order := request.SortOrder[i]
+			switch field {
+			case "fansnum":
+				if order == "asc" {
+					query = query.Order("fans_num asc")
+				} else {
+					query = query.Order("fans_num desc")
+				}
+			case "voteavg":
+				if order == "asc" {
+					query = query.Order("vote_avg asc")
+				} else {
+					query = query.Order("vote_avg desc")
+				}
+			case "commentavg":
+				if order == "asc" {
+					query = query.Order("commit_avg asc")
+				} else {
+					query = query.Order("commit_avg desc")
+				}
+			case "collectnum":
+				if order == "asc" {
+					query = query.Order("view_num asc")
+				} else {
+					query = query.Order("view_num desc")
+				}
+			}
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("task_status asc").Order("task_stage asc")
+	}
 	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
 		return nil, err
 	}
 	taskInfoPointers := make([]*http_model.TaskDatainfo, 0, len(projecrtaskinfo))
 	for _, task := range projecrtaskinfo {
-		nickname, headurl := getTalentinfo(db, task.TalentID)
+		nickname, headurl, gender, fansnum, voteavg := getTalentinfo(db, task.OpenId)
 		Iscoop := getIscoop(db, task.TalentID, request.EnterpriseId)
+		s_type, s_name := stype(db, task.SupplierId, task.SupplierStatus)
 		taskinfo := &http_model.TaskInfo{
 			TaskId:             task.TaskID,
 			ProjectId:          task.ProjectID,
 			TalentId:           task.TalentID,
-			FansNum:            task.FansNum,
+			FansNum:            fansnum,
 			DraftFee:           task.DraftFee,
-			Voteavg:            task.VoteAvg,
+			Voteavg:            voteavg,
 			FeeFrom:            task.FeeForm,
 			TaskStage:          task.TaskStage,
-			Commentavg:         task.CommitAvg,
+			Commentavg:         0,
+			CollectNum:         0,
 			CurrentDefaultType: task.CurDefaultType,
 			From:               determineFrom(task.SupplierId, task.SupplierStatus),
-			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			SType:              s_type,
+			SName:              s_name,
 			NickName:           nickname,
+			Gender:             gender,
 			HeadUrl:            headurl,
 			ISCoop:             Iscoop,
 			City:               task.City,
@@ -745,8 +1110,8 @@ func GetDataList(ctx context.Context, request http_model.TaskDatalistRequest) (*
 		response := &http_model.TaskDatainfo{
 			Task:          taskinfo,
 			DataId:        datainfo.DataID,
-			SubmitAt:      datainfo.SubmitAt,
-			AgreeAt:       datainfo.AgreeAt,
+			SubmitAt:      datainfo.SubmitAt.Format("2006-01-02 15:04:05"),
+			AgreeAt:       datainfo.AgreeAt.Format("2006-01-02 15:04:05"),
 			PhotoUrl:      datainfo.PhotoUrl,
 			PlayNumber:    datainfo.PlayNumber,
 			LikeNumber:    datainfo.LikeNumber,

+ 345 - 0
db/talent.go

@@ -0,0 +1,345 @@
+package db
+
+import (
+	"context"
+	"github.com/issue9/conv"
+	"gorm.io/gorm"
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+)
+
+func GetGoodstalentList(ctx context.Context, request http_model.GetGoodsTalentRequest) (*http_model.GetGoodsTalentListData, error) {
+	db := GetReadDB(ctx)
+
+	// 存储达人信息
+	var etcoopinfo []gorm_model.EnterpriseTalentCooperate
+	query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 1)
+
+	// 根据平台筛选
+	if request.Platform != nil {
+		query.Where("platform = ?", request.Platform)
+	}
+
+	// 根据达人名称筛选
+	if request.TalentName != "" {
+		query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
+	}
+
+	if request.Productcategory != nil {
+		query = query.Where("FIND_IN_SET(?, product_category) > 0", request.Productcategory)
+	}
+	// 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
+	query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
+
+	// 根据30天销量区间筛选
+	if request.SalesRange != nil {
+		if *request.SalesRange == "0-30" {
+			query = query.Where("pkui.sale_num_30day BETWEEN ? AND ?", 0, 30)
+		} else if *request.SalesRange == "30-100" {
+			query = query.Where("pkui.sale_num_30day BETWEEN ? AND ?", 30, 100)
+		} else if *request.SalesRange == "100+" {
+			query = query.Where("pkui.sale_num_30day > ?", 100)
+		}
+	}
+
+	// 根据排序字段和排序顺序进行排序
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			sortField := request.SortField[i]
+			sortOrder := request.SortOrder[i]
+			switch sortField {
+			case "fan":
+				if sortOrder == "asc" {
+					query = query.Order("fan asc")
+				} else {
+					query = query.Order("fan desc")
+				}
+
+			case "sale_num_30day":
+				if sortOrder == "asc" {
+					query = query.Order("sale_num_30day asc")
+				} else {
+					query = query.Order("sale_num_30day desc")
+				}
+
+			case "sale_num_total":
+				if sortOrder == "asc" {
+					query = query.Order("sale_num_total asc")
+				} else {
+					query = query.Order("sale_num_total desc")
+				}
+
+			case "cooperate_num":
+				if sortOrder == "asc" {
+					query = query.Order("cooperate_num asc")
+				} else {
+					query = query.Order("cooperate_num desc")
+				}
+			}
+
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("create_at asc")
+	}
+
+	// 分页查询
+	offset := (request.PageNum - 1) * request.PageSize
+	query = query.Limit(request.PageSize).Offset(offset)
+
+	// 执行查询
+	if err := query.Find(&etcoopinfo).Error; err != nil {
+		return nil, err
+	}
+
+	// 生成返回的数据
+	result := &http_model.GetGoodsTalentListData{
+		Total:      conv.MustString(len(etcoopinfo), ""),
+		TalentList: make([]*http_model.GoodsTalentInfo, 0),
+	}
+
+	for _, item := range etcoopinfo {
+
+		var salesInfo gorm_model.PlatformKuaishouUserInfo
+		if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
+			return nil, err
+		}
+		fans, _ := conv.Int(salesInfo.Fan)
+		result.TalentList = append(result.TalentList, &http_model.GoodsTalentInfo{
+			TalentId:    item.TalentId,
+			Nickname:    item.TalentName,
+			City:        salesInfo.City,
+			HeadUrl:     salesInfo.HeadUri,
+			FansNum:     fans,
+			ThirtySales: conv.MustString(salesInfo.SaleNum30Day, ""),
+			AccSales:    conv.MustString(salesInfo.SaleNum30Day, ""),
+			ActualSales: conv.MustString(salesInfo.SaleNumTotal, ""),
+			AccCoopTime: item.CooperateNum,
+			FirCoopFrom: "公海",
+		})
+	}
+
+	return result, nil
+}
+
+func GetProjecttalentList(ctx context.Context, request http_model.GetProjectTalentRequest) (*http_model.GetProjectTalentListData, error) {
+	db := GetReadDB(ctx)
+	// 存储达人信息
+	var etcoopinfo []gorm_model.EnterpriseTalentCooperate
+	query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 2)
+
+	// 根据平台筛选
+	if request.Platform != nil {
+		query.Where("platform = ?", request.Platform)
+	}
+
+	// 根据达人名称筛选
+	if request.TalentName != "" {
+		query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
+	}
+
+	// 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
+	query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
+
+	// 根据排序字段和排序顺序进行排序
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			sortField := request.SortField[i]
+			sortOrder := request.SortOrder[i]
+			switch sortField {
+			case "fan":
+				if sortOrder == "asc" {
+					query = query.Order("fan asc")
+				} else {
+					query = query.Order("fan desc")
+				}
+
+			case "like_num":
+				if sortOrder == "asc" {
+					query = query.Order("like_num asc")
+				} else {
+					query = query.Order("like_num desc")
+				}
+
+			case "sale_num_total":
+				if sortOrder == "asc" {
+					query = query.Order("sale_num_total asc")
+				} else {
+					query = query.Order("sale_num_total desc")
+				}
+
+			case "cooperate_num":
+				if sortOrder == "asc" {
+					query = query.Order("cooperate_num asc")
+				} else {
+					query = query.Order("cooperate_num desc")
+				}
+			}
+
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("create_at asc")
+	}
+
+	// 分页查询
+	offset := (request.PageNum - 1) * request.PageSize
+	query = query.Limit(request.PageSize).Offset(offset)
+
+	// 执行查询
+	if err := query.Find(&etcoopinfo).Error; err != nil {
+		return nil, err
+	}
+
+	// 生成返回的数据
+	result := &http_model.GetProjectTalentListData{
+		Total:      conv.MustString(len(etcoopinfo), ""),
+		TalentList: make([]*http_model.ProjectTalentInfo, 0),
+	}
+
+	for _, item := range etcoopinfo {
+
+		var salesInfo gorm_model.PlatformKuaishouUserInfo
+		if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
+			return nil, err
+		}
+		fans, _ := conv.Int(salesInfo.Fan)
+		result.TalentList = append(result.TalentList, &http_model.ProjectTalentInfo{
+			TalentId:    item.TalentId,
+			Nickname:    item.TalentName,
+			City:        salesInfo.City,
+			HeadUrl:     salesInfo.HeadUri,
+			FansNum:     fans,
+			ThirtySales: conv.MustString(salesInfo.SaleNum30Day, ""),
+			AccSales:    conv.MustString(salesInfo.SaleNum30Day, ""),
+			ActualSales: conv.MustString(salesInfo.SaleNumTotal, ""),
+			AccCoopTime: item.CooperateNum,
+			FirCoopFrom: "公海",
+		})
+	}
+
+	return result, nil
+}
+
+func GetLocallifetalentList(ctx context.Context, request http_model.GetLocallifeTalentRequest) (*http_model.GetLocallifeTalentListData, error) {
+	db := GetReadDB(ctx)
+	// 存储达人信息
+	var etcoopinfo []gorm_model.EnterpriseTalentCooperate
+	query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, 2)
+
+	// 根据平台筛选
+	if request.Platform != nil {
+		query.Where("platform = ?", request.Platform)
+	}
+
+	// 根据达人名称筛选
+	if request.TalentName != "" {
+		query = query.Where("talent_name LIKE ?", "%"+request.TalentName+"%")
+	}
+
+	// 获取相关的销量信息,可以通过join连接platform_kuaishou_user_info表
+	query = query.Joins("JOIN platform_kuaishou_user_info pkui ON pkui.id = enterprise_talent_cooperate.platform_user_id")
+
+	// 根据排序字段和排序顺序进行排序
+	if len(request.SortField) > 0 && len(request.SortOrder) > 0 && len(request.SortField) == len(request.SortOrder) {
+		for i := 0; i < len(request.SortField); i++ {
+			sortField := request.SortField[i]
+			sortOrder := request.SortOrder[i]
+			switch sortField {
+			case "fan":
+				if sortOrder == "asc" {
+					query = query.Order("fan asc")
+				} else {
+					query = query.Order("fan desc")
+				}
+
+			case "like_num":
+				if sortOrder == "asc" {
+					query = query.Order("like_num asc")
+				} else {
+					query = query.Order("like_num desc")
+				}
+
+			case "sale_num_total":
+				if sortOrder == "asc" {
+					query = query.Order("sale_num_total asc")
+				} else {
+					query = query.Order("sale_num_total desc")
+				}
+
+			case "cooperate_num":
+				if sortOrder == "asc" {
+					query = query.Order("cooperate_num asc")
+				} else {
+					query = query.Order("cooperate_num desc")
+				}
+			}
+
+		}
+	} else {
+		// Default sorting if no valid sort parameters
+		query = query.Order("create_at asc")
+	}
+
+	// 分页查询
+	offset := (request.PageNum - 1) * request.PageSize
+	query = query.Limit(request.PageSize).Offset(offset)
+
+	// 执行查询
+	if err := query.Find(&etcoopinfo).Error; err != nil {
+		return nil, err
+	}
+
+	// 生成返回的数据
+	result := &http_model.GetLocallifeTalentListData{
+		Total:      conv.MustString(len(etcoopinfo), ""),
+		TalentList: make([]*http_model.LocallifeTalentInfo, 0),
+	}
+
+	for _, item := range etcoopinfo {
+
+		var salesInfo gorm_model.PlatformKuaishouUserInfo
+		if err := db.Where("id = ?", item.PlatformUserID).First(&salesInfo).Error; err != nil {
+			return nil, err
+		}
+		fans, _ := conv.Int(salesInfo.Fan)
+		result.TalentList = append(result.TalentList, &http_model.LocallifeTalentInfo{
+			TalentId:    item.TalentId,
+			Nickname:    item.TalentName,
+			City:        salesInfo.City,
+			HeadUrl:     salesInfo.HeadUri,
+			FansNum:     fans,
+			ThirtySales: conv.MustString(salesInfo.SaleNum30Day, ""),
+			AccSales:    conv.MustString(salesInfo.SaleNum30Day, ""),
+			ActualSales: conv.MustString(salesInfo.SaleNumTotal, ""),
+			AccCoopTime: item.CooperateNum,
+			FirCoopFrom: "公海",
+		})
+	}
+
+	return result, nil
+}
+
+func GetTalentNum(ctx context.Context, request http_model.GetTalentNumRequest) (*http_model.GetTalentNumResponse, error) {
+	db := GetReadDB(ctx)
+	var sectalent, projtalent, localtalent int64
+	sectalent, _ = GetTalentnum(db, request, 1)
+	projtalent, _ = GetTalentnum(db, request, 2)
+	localtalent, _ = GetTalentnum(db, request, 3)
+	count := &http_model.GetTalentNumResponse{
+		SecTalentnum:     sectalent,
+		ProjectTalentnum: projtalent,
+		LocalTalentnum:   localtalent,
+	}
+	return count, nil
+}
+
+func GetTalentnum(db *gorm.DB, request http_model.GetTalentNumRequest, cooptype int) (int64, error) {
+	query := db.Model(&gorm_model.EnterpriseTalentCooperate{}).Where("enterprise_id = ? AND cooperate_type = ?", request.EnterpriseId, cooptype)
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return 0, err
+	}
+	return total, nil
+
+}

+ 60 - 0
handler/gatlocaltalentstatuscountnum.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetLocalTalentstatusCountHandler(ctx *gin.Context) {
+	handler := newGetLocalTalentstatusCountHandler(ctx)
+	baseRun(handler)
+}
+
+type GetLocalTalentstatusCount struct {
+	ctx  *gin.Context
+	req  *http_model.GetLocalTalentstatusCountRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetLocalTalentstatusCount) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetLocalTalentstatusCount) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetLocalTalentstatusCount) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetLocalTalentstatusCount) run() {
+	data := http_model.GetLocalTalentstatusCountRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalTalentstatusCount(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalTalentstatusCount] call GetLocalTalentstatusCount err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetLocalTalentstatusCount fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询达人状态数量"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetLocalTalentstatusCount) checkParam() error {
+	return nil
+}
+
+func newGetLocalTalentstatusCountHandler(ctx *gin.Context) *GetLocalTalentstatusCount {
+	return &GetLocalTalentstatusCount{
+		ctx:  ctx,
+		req:  http_model.NewGetLocalTalentstatusCountRequest(),
+		resp: http_model.NewGetLocalTalentstatusCountResponse(),
+	}
+}

+ 60 - 0
handler/getgoodstalent.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetGoodsTalentHandler(ctx *gin.Context) {
+	handler := newGetGoodsTalentHandler(ctx)
+	baseRun(handler)
+}
+
+type GetGoodsTalent struct {
+	ctx  *gin.Context
+	req  *http_model.GetGoodsTalentRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetGoodsTalent) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetGoodsTalent) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetGoodsTalent) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetGoodsTalent) run() {
+	data := http_model.GetGoodsTalentRequest{}
+	data = *c.req
+	res, err := service.Talent.GetGoodsTalentList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetGoodsTalentList] call GetGoodsTalentList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetGoodsTalentList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询带货达人"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetGoodsTalent) checkParam() error {
+	return nil
+}
+
+func newGetGoodsTalentHandler(ctx *gin.Context) *GetGoodsTalent {
+	return &GetGoodsTalent{
+		ctx:  ctx,
+		req:  http_model.NewGetGoodsTalentRequest(),
+		resp: http_model.NewGetGoodsTalentResponse(),
+	}
+}

+ 60 - 0
handler/getlocallife.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetLocallifeTalentHandler(ctx *gin.Context) {
+	handler := newGetLocallifeTalentHandler(ctx)
+	baseRun(handler)
+}
+
+type GetLocallifeTalent struct {
+	ctx  *gin.Context
+	req  *http_model.GetLocallifeTalentRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetLocallifeTalent) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetLocallifeTalent) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetLocallifeTalent) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetLocallifeTalent) run() {
+	data := http_model.GetLocallifeTalentRequest{}
+	data = *c.req
+	res, err := service.Talent.GetLocallifeTalentList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocallifeTalentList] call GetLocallifeTalentList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetLocallifeTalentList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询本地生活达人"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetLocallifeTalent) checkParam() error {
+	return nil
+}
+
+func newGetLocallifeTalentHandler(ctx *gin.Context) *GetLocallifeTalent {
+	return &GetLocallifeTalent{
+		ctx:  ctx,
+		req:  http_model.NewGetLocallifeTalentRequest(),
+		resp: http_model.NewGetLocallifeTalentResponse(),
+	}
+}

+ 60 - 0
handler/getlocalrecruittime.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetLocalRecruitTimeHandler(ctx *gin.Context) {
+	handler := newGetLocalRecruitTimeHandler(ctx)
+	baseRun(handler)
+}
+
+type GetLocalRecruitTime struct {
+	ctx  *gin.Context
+	req  *http_model.GetLocalRecruitTimeRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetLocalRecruitTime) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetLocalRecruitTime) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetLocalRecruitTime) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetLocalRecruitTime) run() {
+	data := http_model.GetLocalRecruitTimeRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalRecruitTime(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalRecruitTime] call GetLocalRecruitTime err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetLocalRecruitTime fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询招募截止时间"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetLocalRecruitTime) checkParam() error {
+	return nil
+}
+
+func newGetLocalRecruitTimeHandler(ctx *gin.Context) *GetLocalRecruitTime {
+	return &GetLocalRecruitTime{
+		ctx:  ctx,
+		req:  http_model.NewGetLocalRecruitTimeRequest(),
+		resp: http_model.NewGetLocalRecruitTimeResponse(),
+	}
+}

+ 60 - 0
handler/getlocaltalentstatusnum.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetLocalTalentstatusNumHandler(ctx *gin.Context) {
+	handler := newGetLocalTalentstatusNumHandler(ctx)
+	baseRun(handler)
+}
+
+type GetLocalTalentstatusNum struct {
+	ctx  *gin.Context
+	req  *http_model.GetLocalTalentstatusNumRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetLocalTalentstatusNum) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetLocalTalentstatusNum) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetLocalTalentstatusNum) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetLocalTalentstatusNum) run() {
+	data := http_model.GetLocalTalentstatusNumRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalTalentstatusNum(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalTalentstatusNum] call GetLocalTalentstatusNum err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetLocalTalentstatusNum fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询达人状态数量"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetLocalTalentstatusNum) checkParam() error {
+	return nil
+}
+
+func newGetLocalTalentstatusNumHandler(ctx *gin.Context) *GetLocalTalentstatusNum {
+	return &GetLocalTalentstatusNum{
+		ctx:  ctx,
+		req:  http_model.NewGetLocalTalentstatusNumRequest(),
+		resp: http_model.NewGetLocalTalentstatusNumResponse(),
+	}
+}

+ 60 - 0
handler/getprojecttalent.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetProjectTalentHandler(ctx *gin.Context) {
+	handler := newGetProjectTalentHandler(ctx)
+	baseRun(handler)
+}
+
+type GetProjectTalent struct {
+	ctx  *gin.Context
+	req  *http_model.GetProjectTalentRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetProjectTalent) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetProjectTalent) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetProjectTalent) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetProjectTalent) run() {
+	data := http_model.GetProjectTalentRequest{}
+	data = *c.req
+	res, err := service.Talent.GetProjectTalentList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetProjectTalentList] call GetProjectTalentList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetProjectTalentList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询种草达人"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetProjectTalent) checkParam() error {
+	return nil
+}
+
+func newGetProjectTalentHandler(ctx *gin.Context) *GetProjectTalent {
+	return &GetProjectTalent{
+		ctx:  ctx,
+		req:  http_model.NewGetProjectTalentRequest(),
+		resp: http_model.NewGetProjectTalentResponse(),
+	}
+}

+ 60 - 0
handler/getprovince.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/db"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/util"
+)
+
+func WrapGetProviceHandler(ctx *gin.Context) {
+	handler := newGetProviceHandler(ctx)
+	baseRun(handler)
+}
+
+type GetProvice struct {
+	ctx  *gin.Context
+	req  *http_model.GetProviceRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetProvice) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetProvice) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetProvice) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetProvice) run() {
+	data := http_model.GetProviceRequest{}
+	data = *c.req
+	res, err := db.GetProvince(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetProvice] call GetProvice err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetProvice fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询达人省份"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetProvice) checkParam() error {
+	return nil
+}
+
+func newGetProviceHandler(ctx *gin.Context) *GetProvice {
+	return &GetProvice{
+		ctx:  ctx,
+		req:  http_model.NewGetProviceRequest(),
+		resp: http_model.NewGetProviceResponse(),
+	}
+}

+ 60 - 0
handler/getrecruittime.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetRecruitTimeHandler(ctx *gin.Context) {
+	handler := newGetRecruitTimeHandler(ctx)
+	baseRun(handler)
+}
+
+type GetRecruitTime struct {
+	ctx  *gin.Context
+	req  *http_model.GetRecruitTimeRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetRecruitTime) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetRecruitTime) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetRecruitTime) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetRecruitTime) run() {
+	data := http_model.GetRecruitTimeRequest{}
+	data = *c.req
+	res, err := service.Task.GetRecruitTime(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetRecruitTime] call GetRecruitTime err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetRecruitTime fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询招募截止时间"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetRecruitTime) checkParam() error {
+	return nil
+}
+
+func newGetRecruitTimeHandler(ctx *gin.Context) *GetRecruitTime {
+	return &GetRecruitTime{
+		ctx:  ctx,
+		req:  http_model.NewGetRecruitTimeRequest(),
+		resp: http_model.NewGetRecruitTimeResponse(),
+	}
+}

+ 60 - 0
handler/gettalentnum.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/db"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/util"
+)
+
+func WrapGetTalentNumHandler(ctx *gin.Context) {
+	handler := newGetTalentNumHandler(ctx)
+	baseRun(handler)
+}
+
+type GetTalentNum struct {
+	ctx  *gin.Context
+	req  *http_model.GetTalentNumRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetTalentNum) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetTalentNum) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetTalentNum) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetTalentNum) run() {
+	data := http_model.GetTalentNumRequest{}
+	data = *c.req
+	res, err := db.GetTalentNum(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTalentNum] call GetTalentNum err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetTalentNum fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询达人数量"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetTalentNum) checkParam() error {
+	return nil
+}
+
+func newGetTalentNumHandler(ctx *gin.Context) *GetTalentNum {
+	return &GetTalentNum{
+		ctx:  ctx,
+		req:  http_model.NewGetTalentNumRequest(),
+		resp: http_model.NewGetTalentNumResponse(),
+	}
+}

+ 60 - 0
handler/gettalentstatuscountnum.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetTalentstatusCountHandler(ctx *gin.Context) {
+	handler := newGetTalentstatusCountHandler(ctx)
+	baseRun(handler)
+}
+
+type GetTalentstatusCount struct {
+	ctx  *gin.Context
+	req  *http_model.GetTalentstatusCountRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetTalentstatusCount) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetTalentstatusCount) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetTalentstatusCount) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetTalentstatusCount) run() {
+	data := http_model.GetTalentstatusCountRequest{}
+	data = *c.req
+	res, err := service.Task.GetTalentstatusCount(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTalentstatusCount] call GetTalentstatusCount err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetTalentstatusCount fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询达人状态数量"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetTalentstatusCount) checkParam() error {
+	return nil
+}
+
+func newGetTalentstatusCountHandler(ctx *gin.Context) *GetTalentstatusCount {
+	return &GetTalentstatusCount{
+		ctx:  ctx,
+		req:  http_model.NewGetTalentstatusCountRequest(),
+		resp: http_model.NewGetTalentstatusCountResponse(),
+	}
+}

+ 60 - 0
handler/gettalentstatusnum.go

@@ -0,0 +1,60 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetTalentstatusNumHandler(ctx *gin.Context) {
+	handler := newGetTalentstatusNumHandler(ctx)
+	baseRun(handler)
+}
+
+type GetTalentstatusNum struct {
+	ctx  *gin.Context
+	req  *http_model.GetTalentstatusNumRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetTalentstatusNum) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetTalentstatusNum) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetTalentstatusNum) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetTalentstatusNum) run() {
+	data := http_model.GetTalentstatusNumRequest{}
+	data = *c.req
+	res, err := service.Task.GetTalentstatusNum(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTalentstatusNum] call GetTalentstatusNum err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorParamCheck, "")
+		logrus.Info("GetTalentstatusNum fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询达人状态数量"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetTalentstatusNum) checkParam() error {
+	return nil
+}
+
+func newGetTalentstatusNumHandler(ctx *gin.Context) *GetTalentstatusNum {
+	return &GetTalentstatusNum{
+		ctx:  ctx,
+		req:  http_model.NewGetTalentstatusNumRequest(),
+		resp: http_model.NewGetTalentStatusNumResponse(),
+	}
+}

+ 16 - 7
model/gorm_model/enterprise_talent_cooperate.go

@@ -1,13 +1,22 @@
 package gorm_model
 
+import "time"
+
 type EnterpriseTalentCooperate struct {
-	CooperateId   int    `gorm:"column:cooperate_id;type:int(11);primary_key;AUTO_INCREMENT;comment:主键ID" json:"cooperate_id"`
-	EnterpriseId  string `gorm:"column:enterprise_id;type:varchar(255);comment:商家ID" json:"enterprise_id"`
-	TalentId      string `gorm:"column:talent_id;type:varchar(255);comment:达人ID" json:"talent_id"`
-	SupplierId    int    `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
-	TalentOrigin  int    `gorm:"column:talent_origin;type:int(11);comment:达人来源,1公海,2服务商" json:"talent_origin"`
-	CooperateType int    `gorm:"column:cooperate_type;type:int(11);comment:合作关系类型,1带货达人,2种草达人,3本地生活达人" json:"cooperate_type"`
-	CooperateNum  int    `gorm:"column:cooperate_num;type:int(11);comment:累计合作次数" json:"cooperate_num"`
+	CooperateId    int       `gorm:"column:cooperate_id;type:int(11);primary_key;AUTO_INCREMENT;comment:主键ID" json:"cooperate_id"`
+	EnterpriseId   string    `gorm:"column:enterprise_id;type:varchar(255);comment:商家ID" json:"enterprise_id"`
+	TalentId       string    `gorm:"column:talent_id;type:varchar(255);comment:达人ID" json:"talent_id"`
+	SupplierId     int       `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	TalentOrigin   int       `gorm:"column:talent_origin;type:int(11);comment:达人来源,1公海,2服务商" json:"talent_origin"`
+	CooperateType  int       `gorm:"column:cooperate_type;type:int(11);comment:合作关系类型,1带货达人,2种草达人,3本地生活达人" json:"cooperate_type"`
+	CooperateNum   int       `gorm:"column:cooperate_num;type:int(11);comment:累计合作次数" json:"cooperate_num"`
+	SecTaskID      string    `gorm:"column:sec_task_id"`      // 带货子任务ID
+	ProjectTaskID  string    `gorm:"column:project_task_id"`  // 种草子任务ID
+	LocalTaskID    string    `gorm:"column:local_task_id"`    // 本地生活子任务ID
+	Platform       int       `gorm:"column:platform"`         // 平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	PlatformUserID int       `gorm:"column:platform_user_id"` // 第三方平台ID
+	CreateAt       time.Time `gorm:"column:create_at"`        // 创建时间
+	TalentName     string    `gorm:"column:talent_name"`
 }
 
 func (m *EnterpriseTalentCooperate) TableName() string {

+ 2 - 0
model/gorm_model/locallife_task_info.go

@@ -79,6 +79,8 @@ type YoungeeLocalTaskInfo struct {
 	CancelTime             time.Time `gorm:"column:cancel_time;type:datetime;comment:解约时间" json:"cancel_time"`
 	PlatformId             int       `gorm:"column:platform_id;type:int(11);comment:平台" json:"platform_id"`
 	City                   string    `gorm:"column:city;type:varchar(255);comment:城市" json:"city"`
+	SOperatename           string    `gorm:"column:s_operate_name;type:varchar(255);comment:提报达人服务商名称" json:"s_operate_name"` //提报达人服务商名称
+	TalentName             string    `gorm:"column:talent_name"`
 }
 
 func (m *YoungeeLocalTaskInfo) TableName() string {

+ 3 - 1
model/gorm_model/project_task.go

@@ -71,7 +71,9 @@ type YoungeeTaskInfo struct {
 	CancelOperator         string    `gorm:"column:cancel_operator;type:varchar(255);comment:解约操作人ID" json:"cancel_operator"`
 	CancelReason           string    `gorm:"column:cancel_reason;type:varchar(255);comment:解约原因" json:"cancel_reason"`
 	CancelTime             time.Time `gorm:"column:cancel_time;type:datetime;comment:解约时间" json:"cancel_time"`
-	City                   string    `gorm:"column:city"` //报名达人的所在城市
+	City                   string    `gorm:"column:city"`                                                                     //报名达人的所在城市
+	SOperatename           string    `gorm:"column:s_operate_name;type:varchar(255);comment:提报达人服务商名称" json:"s_operate_name"` //提报达人服务商名称
+	TalentName             string    `gorm:"column:talent_name"`                                                              //达人昵称
 }
 
 func (m *YoungeeTaskInfo) TableName() string {

+ 9 - 8
model/http_model/LocalPrelinkList.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type LocalPreLinkListRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	LinkStatus   string `json:"link_status"` // 链接状态,11待传链接
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	LinkStatus   string   `json:"link_status"` // 链接状态,11待传链接
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetLocalPreLinkListData struct {
@@ -17,7 +18,7 @@ type GetLocalPreLinkListData struct {
 
 type LocalTasklinkinfo struct {
 	Task *LocaLTaskInfo `json:"task_info"`
-	DDl  time.Time      `json:"ddl"` // 提交时间
+	DDl  string         `json:"ddl"` // 提交时间
 }
 
 func NewLocalPreLinkListRequest() *LocalPreLinkListRequest {

+ 9 - 8
model/http_model/PreLinkList.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type PreLinkListRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	LinkStatus   string `json:"link_status"` // 链接状态,11待传链接
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	LinkStatus   string   `json:"link_status"` // 链接状态,11待传链接
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetprelinkListData struct {
@@ -17,7 +18,7 @@ type GetprelinkListData struct {
 
 type Tasklinkinfo struct {
 	Task *TaskInfo `json:"task_info"`
-	DDl  time.Time `json:"ddl"` // 提交时间
+	DDl  string    `json:"ddl"` // 提交时间
 }
 
 func NewPreLinkListRequest() *PreLinkListRequest {

+ 41 - 0
model/http_model/getgoodstalentrequest.go

@@ -0,0 +1,41 @@
+package http_model
+
+type GetGoodsTalentRequest struct {
+	PageSize        int      `json:"page_size"`
+	PageNum         int      `json:"page_num"`
+	SortField       []string `json:"sort_field,omitempty"`
+	SortOrder       []string `json:"sort_order,omitempty"` //粉丝数,实际带货销量,近30天销量,累计合作次数
+	SalesRange      *string  `json:"sales_range,omitempty"`
+	Platform        *int     `json:"platform,omitempty"`
+	Productcategory *string  `json:"productcategory,omitempty"`
+	TalentName      string   `json:"talent_name,omitempty"`
+	EnterpriseId    string   `json:"enterprise_id"`
+}
+
+type GetGoodsTalentListData struct {
+	TalentList []*GoodsTalentInfo `json:"talent_list"`
+	Total      string             `json:"total"`
+}
+
+type GoodsTalentInfo struct {
+	TalentId    string `json:"talent_id"`
+	Nickname    string `json:"nickname"`
+	City        string `json:"city"`
+	HeadUrl     string `json:"head_url"`
+	FansNum     int    `json:"fans_num"`
+	ThirtySales string `json:"thirty_sales"`
+	AccSales    string `json:"acc_sales"`
+	ActualSales string `json:"actual_sales"`
+	AccCoopTime int    `json:"acc_coop_time"`
+	FirCoopFrom string `json:"fir_coop_from"`
+}
+
+func NewGetGoodsTalentRequest() *GetGoodsTalentRequest {
+	return new(GetGoodsTalentRequest)
+}
+
+func NewGetGoodsTalentResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetGoodsTalentListData)
+	return resp
+}

+ 39 - 0
model/http_model/getlocallifetalentrequest.go

@@ -0,0 +1,39 @@
+package http_model
+
+type GetLocallifeTalentRequest struct {
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"` //粉丝数,实际带货销量,近30天销量,累计合作次数
+	Platform     *string  `json:"platform,omitempty"`
+	TalentName   string   `json:"talent_name"`
+	EnterpriseId string   `json:"enterprise_id"`
+}
+
+type GetLocallifeTalentListData struct {
+	TalentList []*LocallifeTalentInfo `json:"talent_list"`
+	Total      string                 `json:"total"`
+}
+
+type LocallifeTalentInfo struct {
+	TalentId    string `json:"talent_id"`
+	Nickname    string `json:"nickname"`
+	City        string `json:"city"`
+	HeadUrl     string `json:"head_url"`
+	FansNum     int    `json:"fans_num"`
+	ThirtySales string `json:"thirty_sales"`
+	AccSales    string `json:"acc_sales"`
+	ActualSales string `json:"actual_sales"`
+	AccCoopTime int    `json:"acc_coop_time"`
+	FirCoopFrom string `json:"fir_coop_from"`
+}
+
+func NewGetLocallifeTalentRequest() *GetLocallifeTalentRequest {
+	return new(GetLocallifeTalentRequest)
+}
+
+func NewGetLocallifeTalentResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetLocallifeTalentListData)
+	return resp
+}

+ 22 - 0
model/http_model/getlocaltalentstatuscountrequest.go

@@ -0,0 +1,22 @@
+package http_model
+
+type GetLocalTalentstatusCountRequest struct {
+	ProjectId string `json:"project_id"`
+	TaskStage int    `json:"task_stage"`
+}
+
+type GetLocalTalentstatusCountResponse struct {
+	UnoperateTalentnum int64 `json:"unoperate_talentnum"`
+	AgreeTalentnum     int64 `json:"agree_talentnum"`
+	RefuseTalentnum    int64 `json:"refuse_talentnum"`
+}
+
+func NewGetLocalTalentstatusCountRequest() *GetLocalTalentstatusCountRequest {
+	return new(GetLocalTalentstatusCountRequest)
+}
+
+func NewGetLocalTalentstatusCountResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetLocalTalentstatusCountResponse)
+	return resp
+}

+ 21 - 0
model/http_model/getlocaltalentstatusnumrequest.go

@@ -0,0 +1,21 @@
+package http_model
+
+type GetLocalTalentstatusNumRequest struct {
+	ProjectId string `json:"project_id"`
+}
+
+type GetLocalTalentstatusNumResponse struct {
+	UnoperateTalentnum int64 `json:"unoperate_talentnum"`
+	AgreeTalentnum     int64 `json:"agree_talentnum"`
+	RefuseTalentnum    int64 `json:"refuse_talentnum"`
+}
+
+func NewGetLocalTalentstatusNumRequest() *GetLocalTalentstatusNumRequest {
+	return new(GetLocalTalentstatusNumRequest)
+}
+
+func NewGetLocalTalentstatusNumResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetLocalTalentstatusNumResponse)
+	return resp
+}

+ 19 - 16
model/http_model/getlocaltasklist.go

@@ -1,16 +1,16 @@
 package http_model
 
-import "time"
-
 type GetLocalTaskListRequest struct {
-	PageSize       int    `json:"page_size"`
-	PageNum        int    `json:"page_num"`
-	TalentFromList string `json:"talent_from_list"`
-	FeeFrom        *int   `json:"fee_from,omitempty"`
-	Type           *int   `json:"type,omitempty"` // 查询类型,1、2分别表示达人来源于公海(商家端),服务商
-	ProjectId      string `json:"project_id"`
-	CoopType       int    `json:"coop_type"` //1未处理,2同意,3拒绝
-	EnterPriseId   string `json:"enterprise_id"`
+	PageSize       int      `json:"page_size"`
+	PageNum        int      `json:"page_num"`
+	TalentFromList string   `json:"talent_from_list"`
+	FeeFrom        *int     `json:"fee_from,omitempty"`
+	Type           *int     `json:"type,omitempty"` // 查询类型,1、2分别表示达人来源于公海(商家端),服务商
+	ProjectId      string   `json:"project_id"`
+	CoopType       int      `json:"coop_type"` //1未处理,2同意,3拒绝
+	EnterPriseId   string   `json:"enterprise_id"`
+	SortField      []string `json:"sort_field,omitempty"`
+	SortOrder      []string `json:"sort_order,omitempty"`
 }
 
 type GetLocalTaskListData struct {
@@ -28,17 +28,20 @@ type LocaLTaskInfo struct {
 	TaskStage          int     `json:"task_stage"`
 	Voteavg            int     `json:"vote_avg"`
 	Commentavg         int     `json:"commit_avg"`
+	CollectNum         int     `json:"collect_num"`
 	CurrentDefaultType int     `json:"current_default_type"`
 	From               int     `json:"from"`   //1公海,2服务商
 	SType              int     `json:"s_type"` //1个人,2机构
+	SName              string  `json:"sname"`
 	Boperator          string  `json:"b_operator"`
 	//SettleAmount       float64   `json:"settle_amount"`
-	CreateAt   time.Time `json:"create_time"`
-	ISCoop     int       `json:"is_coop"`
-	NickName   string    `json:"nick_name"`
-	HeadUrl    string    `json:"head_url"`
-	Sprojectid int       `json:"sprojectid"`
-	City       string    `json:"city"`
+	CreateAt   string `json:"create_time"`
+	ISCoop     int    `json:"is_coop"`
+	Gender     string `json:"gender"`
+	NickName   string `json:"nick_name"`
+	HeadUrl    string `json:"head_url"`
+	Sprojectid int    `json:"sprojectid"`
+	City       string `json:"city"`
 }
 
 func NewGetLocalTaskListRequest() *GetLocalTaskListRequest {

+ 39 - 0
model/http_model/getprojecttalentrequest.go

@@ -0,0 +1,39 @@
+package http_model
+
+type GetProjectTalentRequest struct {
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"` //粉丝数,实际带货销量,近30天销量,累计合作次数
+	Platform     *string  `json:"platform,omitempty"`
+	TalentName   string   `json:"talent_name"`
+	EnterpriseId string   `json:"enterprise_id"`
+}
+
+type GetProjectTalentListData struct {
+	TalentList []*ProjectTalentInfo `json:"talent_list"`
+	Total      string               `json:"total"`
+}
+
+type ProjectTalentInfo struct {
+	TalentId    string `json:"talent_id"`
+	Nickname    string `json:"nickname"`
+	City        string `json:"city"`
+	HeadUrl     string `json:"head_url"`
+	FansNum     int    `json:"fans_num"`
+	ThirtySales string `json:"thirty_sales"`
+	AccSales    string `json:"acc_sales"`
+	ActualSales string `json:"actual_sales"`
+	AccCoopTime int    `json:"acc_coop_time"`
+	FirCoopFrom string `json:"fir_coop_from"`
+}
+
+func NewGetProjectTalentRequest() *GetProjectTalentRequest {
+	return new(GetProjectTalentRequest)
+}
+
+func NewGetProjectTalentResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetProjectTalentListData)
+	return resp
+}

+ 18 - 0
model/http_model/getprovincerequest.go

@@ -0,0 +1,18 @@
+package http_model
+
+type GetProviceRequest struct {
+}
+
+type GetProviceResponse struct {
+	Provices []string `json:"provinces"`
+}
+
+func NewGetProviceRequest() *GetProviceRequest {
+	return new(GetProviceRequest)
+}
+
+func NewGetProviceResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetProviceResponse)
+	return resp
+}

+ 19 - 0
model/http_model/getrecruittimerequest.go

@@ -0,0 +1,19 @@
+package http_model
+
+type GetRecruitTimeRequest struct {
+	ProjectId string `json:"project_id"`
+}
+
+type GetRecruitTimeResponse struct {
+	RecruitTime string `json:"recruit_time"`
+}
+
+func NewGetRecruitTimeRequest() *GetRecruitTimeRequest {
+	return new(GetRecruitTimeRequest)
+}
+
+func NewGetRecruitTimeResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetRecruitTimeResponse)
+	return resp
+}

+ 19 - 0
model/http_model/getrlocalrecruittimerequest.go

@@ -0,0 +1,19 @@
+package http_model
+
+type GetLocalRecruitTimeRequest struct {
+	ProjectId string `json:"project_id"`
+}
+
+type GetLocalRecruitTimeResponse struct {
+	RecruitTime string `json:"recruit_time"`
+}
+
+func NewGetLocalRecruitTimeRequest() *GetLocalRecruitTimeRequest {
+	return new(GetLocalRecruitTimeRequest)
+}
+
+func NewGetLocalRecruitTimeResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetLocalRecruitTimeResponse)
+	return resp
+}

+ 21 - 0
model/http_model/gettalentnumrequest.go

@@ -0,0 +1,21 @@
+package http_model
+
+type GetTalentNumRequest struct {
+	EnterpriseId string `json:"enterpriseId"`
+}
+
+type GetTalentNumResponse struct {
+	SecTalentnum     int64 `json:"Sec_talentnum"`
+	ProjectTalentnum int64 `json:"project_talentnum"`
+	LocalTalentnum   int64 `json:"local_talentnum"`
+}
+
+func NewGetTalentNumRequest() *GetTalentNumRequest {
+	return new(GetTalentNumRequest)
+}
+
+func NewGetTalentNumResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetTalentNumResponse)
+	return resp
+}

+ 22 - 0
model/http_model/gettalentstatuscountrequset.go

@@ -0,0 +1,22 @@
+package http_model
+
+type GetTalentstatusCountRequest struct {
+	ProjectId string `json:"project_id"`
+	TaskStage int    `json:"task_stage"`
+}
+
+type GetTalentstatusCountResponse struct {
+	UnoperateTalentnum int64 `json:"unoperate_talentnum"`
+	AgreeTalentnum     int64 `json:"agree_talentnum"`
+	RefuseTalentnum    int64 `json:"refuse_talentnum"`
+}
+
+func NewGetTalentstatusCountRequest() *GetTalentstatusCountRequest {
+	return new(GetTalentstatusCountRequest)
+}
+
+func NewGetTalentstatusCountResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetTalentstatusCountResponse)
+	return resp
+}

+ 23 - 0
model/http_model/gettalentstatusnumrequest.go

@@ -0,0 +1,23 @@
+package http_model
+
+type GetTalentstatusNumRequest struct {
+	ProjectId string `json:"project_id"`
+	//FeeFrom   *int   `json:"fee_from,omitempty"`
+	//Type      *int   `json:"type,omitempty"` // 查询类型,1、2分别表示达人来源于公海(商家端),服务商
+}
+
+type GetTalentStatusNumResponse struct {
+	UnoperateTalentnum int64 `json:"unoperate_talentnum"`
+	AgreeTalentnum     int64 `json:"agree_talentnum"`
+	RefuseTalentnum    int64 `json:"refuse_talentnum"`
+}
+
+func NewGetTalentstatusNumRequest() *GetTalentstatusNumRequest {
+	return new(GetTalentstatusNumRequest)
+}
+
+func NewGetTalentStatusNumResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetTalentStatusNumResponse)
+	return resp
+}

+ 18 - 15
model/http_model/gettasklist.go

@@ -1,15 +1,15 @@
 package http_model
 
-import "time"
-
 type GetTaskListRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	FeeFrom      *int   `json:"fee_from,omitempty"`
-	Type         *int   `json:"type,omitempty"` // 查询类型,1、2分别表示达人来源于公海(商家端),服务商
-	ProjectId    string `json:"project_id"`
-	CoopType     int    `json:"coop_type"` //1未处理,2同意,3拒绝
-	EnterPriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	FeeFrom      *int     `json:"fee_from,omitempty"`
+	Type         *int     `json:"type,omitempty"` // 查询类型,1、2分别表示达人来源于公海(商家端),服务商
+	ProjectId    string   `json:"project_id"`
+	CoopType     int      `json:"coop_type"` //1未处理,2同意,3拒绝
+	EnterPriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
 }
 
 type GetTaskListData struct {
@@ -27,17 +27,20 @@ type TaskInfo struct {
 	TaskStage          int     `json:"task_stage"`
 	Voteavg            int     `json:"vote_avg"`
 	Commentavg         int     `json:"commit_avg"`
+	CollectNum         int     `json:"collect_num"`
 	CurrentDefaultType int     `json:"current_default_type"`
 	From               int     `json:"from"`   //1公海,2服务商
 	SType              int     `json:"s_type"` //1个人,2机构
+	SName              string  `json:"sname"`
 	Boperator          string  `json:"b_operator"`
 	//SettleAmount       float64   `json:"settle_amount"`
-	CreateAt   time.Time `json:"create_time"`
-	ISCoop     int       `json:"is_coop"`
-	NickName   string    `json:"nick_name"`
-	HeadUrl    string    `json:"head_url"`
-	City       string    `json:"city"`
-	Sprojectid int       `json:"sprojectid"`
+	CreateAt   string `json:"create_time"`
+	ISCoop     int    `json:"is_coop"`
+	NickName   string `json:"nick_name"`
+	Gender     string `json:"gender"`
+	HeadUrl    string `json:"head_url"`
+	City       string `json:"city"`
+	Sprojectid int    `json:"sprojectid"`
 }
 
 func NewGetTaskListRequest() *GetTaskListRequest {

+ 9 - 8
model/http_model/localpredatalist.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type LocalPreDataListRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	DataStatus   string `json:"data_status"` // 数据状态,13待传数据
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	DataStatus   string   `json:"data_status"` // 数据状态,13待传数据
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetLocalPreDataListData struct {
@@ -17,7 +18,7 @@ type GetLocalPreDataListData struct {
 
 type LocalTaskdatainfo struct {
 	Task *LocaLTaskInfo `json:"task_info"`
-	DDl  time.Time      `json:"ddl"` // 截止时间
+	DDl  string         `json:"ddl"` // 截止时间
 }
 
 func NewLocalPreDataListRequest() *LocalPreDataListRequest {

+ 9 - 8
model/http_model/localpresketchlistrequest.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type LocalPreSketchListRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`    // 项目ID
-	ScriptStatus int    `json:"script_status"` // 稿件状态,10初稿待审
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`    // 项目ID
+	ScriptStatus int      `json:"script_status"` // 稿件状态,10初稿待审
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetLocalSketchTaskListData struct {
@@ -17,7 +18,7 @@ type GetLocalSketchTaskListData struct {
 
 type LocalTasksketchInfo struct {
 	Task *LocaLTaskInfo `json:"task_info"`
-	DDl  time.Time      `json:"ddl"`
+	DDl  string         `json:"ddl"`
 }
 
 func NewLocalPreSketchListRequest() *LocalPreSketchListRequest {

+ 10 - 9
model/http_model/localtaskdatalist.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type LocalTaskDatalistRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	DataStatus   string `json:"data_status"` // 链接状态,14
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	DataStatus   string   `json:"data_status"` // 链接状态,14
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetLocalTaskDatalistData struct {
@@ -17,8 +18,8 @@ type GetLocalTaskDatalistData struct {
 
 type LocalTaskDatainfo struct {
 	Task          *LocaLTaskInfo `json:"task_info"`
-	SubmitAt      time.Time      `json:"submit_at"` // 提交时间
-	AgreeAt       time.Time      `json:"agree_at"`
+	SubmitAt      string         `json:"submit_at"` // 提交时间
+	AgreeAt       string         `json:"agree_at"`
 	DataId        int            `json:"data_id"` //初稿ID
 	PhotoUrl      string         `json:"photo_url"`
 	PlayNumber    int            `json:"play_number"`

+ 10 - 9
model/http_model/localtasklinklist.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type LocalTaskLinklistRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	LinkStatus   string `json:"link_status"` // 链接状态,12待审
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	LinkStatus   string   `json:"link_status"` // 链接状态,12待审
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetLocalTaskLinkListData struct {
@@ -17,8 +18,8 @@ type GetLocalTaskLinkListData struct {
 
 type LocalTaskLinkinfo struct {
 	Task     *LocaLTaskInfo `json:"task_info"`
-	SubmitAt time.Time      `json:"submit_at"` // 提交时间
-	AgreeAt  time.Time      `json:"agree_at"`
+	SubmitAt string         `json:"submit_at"` // 提交时间
+	AgreeAt  string         `json:"agree_at"`
 	LinkId   int            `json:"link_id"` //初稿ID
 	LinkUrl  string         `json:"link_url"`
 	PhotoUrl string         `json:"photo_url"`

+ 9 - 8
model/http_model/localtasksketchlist.go

@@ -1,12 +1,13 @@
 package http_model
 
-import "time"
-
 type LocalTasksketchlistRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`    // 项目ID
-	ScriptStatus int    `json:"script_status"` // 稿件状态
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`    // 项目ID
+	ScriptStatus int      `json:"script_status"` // 稿件状态
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetsketchlocaltaskListData struct {
@@ -16,8 +17,8 @@ type GetsketchlocaltaskListData struct {
 
 type LocalTasksketchinfo struct {
 	Task     *LocaLTaskInfo `json:"task_info"`
-	SubmitAt time.Time      `json:"submit_at"` // 提交时间
-	AgreeAt  time.Time      `json:"agree_at"`
+	SubmitAt string         `json:"submit_at"` // 提交时间
+	AgreeAt  string         `json:"agree_at"`
 	Operator string         `json:"operator"`
 	SketchId int            `json:"sketch_id"` //初稿ID
 }

+ 9 - 8
model/http_model/predatalist.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type PreDataListRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	DataStatus   string `json:"data_status"` // 数据状态,13待传数据
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	DataStatus   string   `json:"data_status"` // 数据状态,13待传数据
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetPreDataListData struct {
@@ -17,7 +18,7 @@ type GetPreDataListData struct {
 
 type Taskdatainfo struct {
 	Task *TaskInfo `json:"task_info"`
-	DDl  time.Time `json:"ddl"` // 截止时间
+	DDl  string    `json:"ddl"` // 截止时间
 }
 
 func NewPreDataListRequest() *PreDataListRequest {

+ 9 - 8
model/http_model/presketchlist.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type PreSketchListRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`    // 项目ID
-	ScriptStatus int    `json:"script_status"` // 稿件状态,10初稿待审
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`    // 项目ID
+	ScriptStatus int      `json:"script_status"` // 稿件状态,10初稿待审
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetSketchTaskListData struct {
@@ -17,7 +18,7 @@ type GetSketchTaskListData struct {
 
 type TasksketchInfo struct {
 	Task *TaskInfo `json:"task_info"`
-	DDl  time.Time `json:"ddl"`
+	DDl  string    `json:"ddl"`
 }
 
 func NewPreSketchListRequest() *PreSketchListRequest {

+ 2 - 4
model/http_model/sktech_info.go

@@ -1,7 +1,5 @@
 package http_model
 
-import "time"
-
 type GetSketchInfoRequest struct {
 	TaskID string `json:"task_id"`
 }
@@ -16,8 +14,8 @@ type GetSketchInfoData struct {
 	SketchPhotos   []SketchPhotoInfo `json:"sketch_photos"` //初稿图片以及视频
 	Title          string            `json:"title"`
 	Content        string            `json:"content"`
-	Agreeat        time.Time         `json:"agree_at"`
-	Submitat       time.Time         `json:"submit_at"`
+	Agreeat        string            `json:"agree_at"`
+	Submitat       string            `json:"submit_at"`
 	ReverseOpinion string            `json:"reverse_opinion"`
 }
 

+ 10 - 9
model/http_model/taskdatalist.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type TaskDatalistRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	DataStatus   string `json:"data_status"` // 链接状态,14
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	DataStatus   string   `json:"data_status"` // 链接状态,14
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetTaskDatalistData struct {
@@ -17,8 +18,8 @@ type GetTaskDatalistData struct {
 
 type TaskDatainfo struct {
 	Task          *TaskInfo `json:"task_info"`
-	SubmitAt      time.Time `json:"submit_at"` // 提交时间
-	AgreeAt       time.Time `json:"agree_at"`
+	SubmitAt      string    `json:"submit_at"` // 提交时间
+	AgreeAt       string    `json:"agree_at"`
 	DataId        int       `json:"data_id"` //初稿ID
 	PhotoUrl      string    `json:"photo_url"`
 	PlayNumber    int       `json:"play_number"`

+ 10 - 9
model/http_model/tasklinklist.go

@@ -1,13 +1,14 @@
 package http_model
 
-import "time"
-
 type TaskLinklistRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`  // 项目ID
-	LinkStatus   string `json:"link_status"` // 链接状态,12待审
-	EnterpriseId string `json:"enterprise_id"`
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`  // 项目ID
+	LinkStatus   string   `json:"link_status"` // 链接状态,12待审
+	EnterpriseId string   `json:"enterprise_id"`
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GettasklinkListData struct {
@@ -17,8 +18,8 @@ type GettasklinkListData struct {
 
 type TaskLinkinfo struct {
 	Task     *TaskInfo `json:"task_info"`
-	SubmitAt time.Time `json:"submit_at"` // 提交时间
-	AgreeAt  time.Time `json:"agree_at"`
+	SubmitAt string    `json:"submit_at"` // 提交时间
+	AgreeAt  string    `json:"agree_at"`
 	LinkId   int       `json:"link_id"` //初稿ID
 	LinkUrl  string    `json:"link_url"`
 	PhotoUrl string    `json:"photo_url"`

+ 9 - 8
model/http_model/tasksketchlist.go

@@ -1,12 +1,13 @@
 package http_model
 
-import "time"
-
 type TasksketchlistRequest struct {
-	PageSize     int    `json:"page_size"`
-	PageNum      int    `json:"page_num"`
-	ProjectId    string `json:"project_id"`    // 项目ID
-	ScriptStatus int    `json:"script_status"` // 稿件状态
+	PageSize     int      `json:"page_size"`
+	PageNum      int      `json:"page_num"`
+	ProjectId    string   `json:"project_id"`    // 项目ID
+	ScriptStatus int      `json:"script_status"` // 稿件状态
+	SortField    []string `json:"sort_field,omitempty"`
+	SortOrder    []string `json:"sort_order,omitempty"`
+	Others       string   `json:"others,omitempty"`
 }
 
 type GetsketchtaskListData struct {
@@ -16,8 +17,8 @@ type GetsketchtaskListData struct {
 
 type Tasksketchinfo struct {
 	Task     *TaskInfo `json:"task_info"`
-	SubmitAt time.Time `json:"submit_at"` // 提交时间
-	AgreeAt  time.Time `json:"agree_at"`
+	SubmitAt string    `json:"submit_at"` // 提交时间
+	AgreeAt  string    `json:"agree_at"`
 	Operator string    `json:"operator"`
 	SketchId int       `json:"sketch_id"` //初稿ID
 }

+ 67 - 39
route/init.go

@@ -189,14 +189,16 @@ func InitRoute(r *gin.Engine) {
 		task.POST("/product/findAll", controller.TaskController{}.GetAllProduct) // 关联商品-已有商品展示
 		task.POST("/product/create", controller.TaskController{}.CreateProduct)  // 关联商品-新建商品
 
-		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)                   // 删除带货任务
-		task.POST("/selection/close", controller.TaskController{}.SelectionClose)               // 结束带货任务
+		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)            // 删除带货任务
+		task.POST("/selection/close", controller.TaskController{}.SelectionClose)        // 结束带货任务
+		// 电商带货选达人列表 见/youngee/b/selection/task/list
+		task.POST("/selection/talent/count", controller.TaskController{}.SelectionTalentCount)  // 电商带货选达人角标
 		task.POST("/selection/data/talent", controller.TaskController{}.TalentDataDetail)       // 电商带货看数据-达人数据
 		task.POST("/selection/data/sample", controller.TaskController{}.SampleDataDetail)       // 电商带货看数据-领样数据
 		task.POST("/selection/data/selection", controller.TaskController{}.SelectionDataDetail) // 电商带货看数据-带货数据
@@ -230,20 +232,23 @@ func InitRoute(r *gin.Engine) {
 		task.POST("/localLife/close", controller.TaskController{}.LocalLifeClose)                // 结束本地生活
 
 		// 招募中、执行中
-		task.POST("/project/getTasklist", handler.WrapGetTaskListHandler)            //种草招募中选达人列表/查名单
-		task.POST("/project/task/coop/pass", handler.WrapPassproTaskCoopHandler)     // 种草同意任务合作
-		task.POST("/project/task/coop/refuse", handler.WrapRefuseproTaskCoopHandler) // 种草拒绝任务合作
+		task.POST("/project/getrecuritddl", handler.WrapGetRecruitTimeHandler)          //本地生活招募截止时间
+		task.POST("/project/gettalentstatusnum", handler.WrapGetTalentstatusNumHandler) //达人状态数量
+		task.POST("/project/getTasklist", handler.WrapGetTaskListHandler)               //种草招募中选达人列表/查名单
+		task.POST("/project/task/coop/pass", handler.WrapPassproTaskCoopHandler)        // 种草同意任务合作
+		task.POST("/project/task/coop/refuse", handler.WrapRefuseproTaskCoopHandler)    // 种草拒绝任务合作
 
 		task.POST("/project/projectdata", handler.WrapProjectDataHandler) //种草看数据
 		task.POST("/project/endtask", handler.WrapEndTaskHandler)         //种草暂时终止
 
-		task.POST("/project/presketchlist", handler.WrapPreSketchListHandler)     //种草初稿待传列表
-		task.POST("/project/tasksketchlist", handler.WrapTasksketchlistHandler)   //种草初稿待审列表.审核通过
-		task.POST("/project/sketchopinion", handler.WrapSketchOpinionHandler)     //种草初稿审核意见提交
-		task.POST("/project/acceptsketch", handler.WrapAcceptSketchHandler)       //种草同意初稿
-		task.POST("/project/rejectsketch", handler.WrapRejectSketchHandler)       //种草拒绝初稿
-		task.POST("/project/findsketchphoto", handler.WrapFindSketchPhotoHandler) //种草查询脚本配图和视频demo
-		task.POST("/project/getsketchinfo", handler.WrapGetSketchInfoHandler)     //种草获取初稿
+		task.POST("/project/gettalentstatuscount", handler.WrapGetTalentstatusCountHandler) //达人状态统计
+		task.POST("/project/presketchlist", handler.WrapPreSketchListHandler)               //种草初稿待传列表
+		task.POST("/project/tasksketchlist", handler.WrapTasksketchlistHandler)             //种草初稿待审列表.审核通过
+		task.POST("/project/sketchopinion", handler.WrapSketchOpinionHandler)               //种草初稿审核意见提交
+		task.POST("/project/acceptsketch", handler.WrapAcceptSketchHandler)                 //种草同意初稿
+		task.POST("/project/rejectsketch", handler.WrapRejectSketchHandler)                 //种草拒绝初稿
+		task.POST("/project/findsketchphoto", handler.WrapFindSketchPhotoHandler)           //种草查询脚本配图和视频demo
+		task.POST("/project/getsketchinfo", handler.WrapGetSketchInfoHandler)               //种草获取初稿
 
 		task.POST("/project/prelinklist", handler.WrapPreLinkListHandler)   //种草待传链接列表
 		task.POST("/project/tasklinklist", handler.WrapTaskLinklistHandler) //种草链接待审列表,通过
@@ -260,17 +265,20 @@ func InitRoute(r *gin.Engine) {
 		task.POST("/project/executedata", handler.WrapExecuteDataHandler) //看数据
 		task.POST("/project/data", handler.WrapDataHandler)               //暂未
 
-		task.POST("/locallife/getTasklist", handler.WrapGetLocalTaskListHandler)         //本地生活招募中选大人列表/查名单
-		task.POST("/locallife/task/coop/pass", handler.WrapPasslocalTaskCoopHandler)     // 本地生活同意任务合作
-		task.POST("/locallife/task/coop/refuse", handler.WrapRefuselocalTaskCoopHandler) // 本地生活拒绝任务合作
+		task.POST("/locallife/getrecuritddl", handler.WrapGetLocalRecruitTimeHandler)          //本地生活招募截止时间
+		task.POST("/locallife/gettalentstatusnum", handler.WrapGetLocalTalentstatusNumHandler) //达人状态数量
+		task.POST("/locallife/getTasklist", handler.WrapGetLocalTaskListHandler)               //本地生活招募中选大人列表/查名单
+		task.POST("/locallife/task/coop/pass", handler.WrapPasslocalTaskCoopHandler)           // 本地生活同意任务合作
+		task.POST("/locallife/task/coop/refuse", handler.WrapRefuselocalTaskCoopHandler)       // 本地生活拒绝任务合作
 
 		task.POST("/locallife/locallifedata", handler.WrapLocallifeDataHandler) //本地看数据
 
-		task.POST("/locallife/presketchlist", handler.WrapLocalPreSketchListHandler)   //本地生活初稿待传列表
-		task.POST("/locallife/tasksketchlist", handler.WrapLocalTasksketchlistHandler) //本地生活初稿待审列表.审核通过
-		task.POST("/locallife/sketchopinion", handler.WrapLocalSketchOpinionHandler)   //本地生活初稿审核意见提交
-		task.POST("/locallife/acceptsketch", handler.WrapLocalAcceptSketchHandler)     //本地生活同意初稿
-		task.POST("/locallife/rejectsketch", handler.WrapLocalRejectSketchHandler)     //本地生活拒绝初稿
+		task.POST("/locallife/getlocaltalentstatuscount", handler.WrapGetLocalTalentstatusCountHandler) //达人状态统计
+		task.POST("/locallife/presketchlist", handler.WrapLocalPreSketchListHandler)                    //本地生活初稿待传列表
+		task.POST("/locallife/tasksketchlist", handler.WrapLocalTasksketchlistHandler)                  //本地生活初稿待审列表.审核通过
+		task.POST("/locallife/sketchopinion", handler.WrapLocalSketchOpinionHandler)                    //本地生活初稿审核意见提交
+		task.POST("/locallife/acceptsketch", handler.WrapLocalAcceptSketchHandler)                      //本地生活同意初稿
+		task.POST("/locallife/rejectsketch", handler.WrapLocalRejectSketchHandler)                      //本地生活拒绝初稿
 
 		task.POST("/locallife/prelinklist", handler.WrapLocalPreLinkListHandler)   //本地生活待传链接列表
 		task.POST("/locallife/tasklinklist", handler.WrapLocalTaskLinklistHandler) //本地生活链接待审列表,通过
@@ -290,25 +298,30 @@ func InitRoute(r *gin.Engine) {
 		task.POST("/draft/localLife/list", controller.TaskController{}.GetLocalLifeDraftList) // 草稿箱——本地生活列表
 
 		// 违约管理
-		task.POST("/default/public/list", controller.TaskController{}.GetPublicDefaultList)              // 违约管理——公开任务列表
-		task.POST("/default/public/talent/list", controller.TaskController{}.GetPublicDefaultTalentList) // 违约管理——公开任务-违约达人列表
-		task.POST("/default/target/list", controller.TaskController{}.GetTargetDefaultList)              // 违约管理——定向任务列表
-		task.POST("/default/target/talent/list", controller.TaskController{}.GetTargetDefaultTalentList) // 违约管理——定向任务-违约达人列表
-		task.POST("/default/talent/cancel", controller.TaskController{}.CancelTalent)                    // 违约管理——达人解约
-		task.POST("/default/talent/cancel/list", controller.TaskController{}.CancelTalentList)           // 违约管理——达人批量解约
+		task.POST("/default/public/list", controller.TaskController{}.GetPublicDefaultList)                // 违约管理——公开任务列表
+		task.POST("/default/public/talent/list", controller.TaskController{}.GetPublicDefaultTalentList)   // 违约管理——公开任务-违约达人列表
+		task.POST("/default/public/talent/count", controller.TaskController{}.GetPublicDefaultTalentCount) // 违约管理——公开任务-违约达人列表角标
+		task.POST("/default/target/list", controller.TaskController{}.GetTargetDefaultList)                // 违约管理——定向任务列表
+		task.POST("/default/target/talent/list", controller.TaskController{}.GetTargetDefaultTalentList)   // 违约管理——定向任务-违约达人列表
+		task.POST("/default/talent/cancel", controller.TaskController{}.CancelTalent)                      // 违约管理——达人解约
+		task.POST("/default/talent/cancel/list", controller.TaskController{}.CancelTalentList)             // 违约管理——达人批量解约
 
 		// 寄样管理
-		task.POST("/logistics/talent/list", controller.TaskController{}.LogisticsTalentList) // 达人物流列表
+		task.POST("/logistics/selection/talent/count", controller.TaskController{}.LogisticsSelectionTalentCount) // 带货待发货、待签收、已签收角标
+		task.POST("/logistics/talent/list", controller.TaskController{}.LogisticsTalentList)                      // 种草达人物流列表
+		task.POST("/logistics/talent/count", controller.TaskController{}.LogisticsTalentCount)                    // 种草待发货、待签收、已签收角标
 
 		// 探店管理
-		task.POST("/store/explore/list", controller.TaskController{}.StoreExploreList)       // 探店本地生活列表
-		task.POST("/store/explore/info", controller.TaskController{}.StoreExploreInfo)       // 探店达人详情
-		task.POST("/store/explore/over", controller.TaskController{}.StoreExploreOver)       // 终止合作
-		task.POST("/store/explore/operate", controller.TaskController{}.StoreExploreOperate) // 预约时间批量同意/驳回
+		task.POST("/store/explore/list", controller.TaskController{}.StoreExploreList)            // 探店本地生活列表
+		task.POST("/store/explore/info", controller.TaskController{}.StoreExploreInfo)            // 探店达人列表
+		task.POST("/store/explore/info/count", controller.TaskController{}.StoreExploreInfoCount) // 探店达人列表角标
+		task.POST("/store/explore/over", controller.TaskController{}.StoreExploreOver)            // 终止合作
+		task.POST("/store/explore/operate", controller.TaskController{}.StoreExploreOperate)      // 预约时间批量同意/驳回
 
 		// 服务商合作(其中品牌种草、本地生活列表限制类型为定向即可)
-		task.POST("/supplier/list", controller.TaskController{}.GetSupplierInTargetTaskList) // 服务商合作-服务商列表
-		task.POST("/supplier/invite", controller.TaskController{}.InviteSupplier)            // 服务商合作-邀约合作
+		task.POST("/supplier/list", controller.TaskController{}.GetSupplierInTargetTaskList)    // 服务商合作-服务商列表
+		task.POST("/supplier/list/count", controller.TaskController{}.GetSupplierInTargetCount) // 服务商合作-服务商列表角标
+		task.POST("/supplier/invite", controller.TaskController{}.InviteSupplier)               // 服务商合作-邀约合作
 	}
 	// 财务结算相关接口
 	finance := r.Group("/youngee/b/finance")
@@ -319,8 +332,10 @@ func InitRoute(r *gin.Engine) {
 		finance.POST("/pay/queryOrderByTradeId", controller.FinanceController{}.QueryOrderByTradeId) // 根据交易id查询微信是否扫码付款
 		finance.POST("/balance/show", controller.FinanceController{}.ShowBalance)                    // 余额管理——总金额、可用余额、冻结金额
 		finance.POST("/balance/frozen/info", controller.FinanceController{}.FrozenInfoList)          // 余额管理——冻结记录
+		finance.POST("/balance/frozen/count", controller.FinanceController{}.FrozenInfoCount)        // 余额管理——冻结记录-角标
 		finance.POST("/recharge/show", controller.FinanceController{}.ShowRecharge)                  // 充值管理——累计充值金额、确认中金额
 		finance.POST("/recharge/info", controller.FinanceController{}.RechargeInfoList)              // 充值管理——充值记录
+		finance.POST("/recharge/count", controller.FinanceController{}.RechargeInfoCount)            // 充值管理——充值记录-角标
 		// YG官方汇款账号
 
 		finance.POST("/invoice/default/update", controller.FinanceController{}.UpdateInvoiceDefault) // 设置默认开票抬头
@@ -346,6 +361,7 @@ func InitRoute(r *gin.Engine) {
 		cooperation.POST("/invite", controller.CooperationController{}.InviteSupplier)                // 服务商入库批量邀请
 		cooperation.POST("/inPool", controller.CooperationController{}.GetEnterprisePoolList)         // 在库服务商列表
 		cooperation.POST("/confirming", controller.CooperationController{}.GetSupplierConfirmingList) // 邀请待确认服务商列表
+		cooperation.POST("/count", controller.CooperationController{}.GetSupplierCount)               // 服务商管理-角标
 	}
 	// 推广合作-商品管理相关接口
 	product := r.Group("/youngee/b/cooperation/product")
@@ -354,6 +370,7 @@ func InitRoute(r *gin.Engine) {
 		product.POST("/detail", controller.CooperationController{}.GetProductDetail) // 商品详情
 		product.POST("/update", controller.CooperationController{}.UpdateProduct)    // 更新商品
 		product.POST("/del", controller.CooperationController{}.DeleteProduct)       // 删除商品
+		product.POST("/count", controller.CooperationController{}.CountProduct)      // 商品列表-角标
 	}
 	// 推广合作-门店管理相关接口
 	store := r.Group("/youngee/b/cooperation/store")
@@ -366,6 +383,16 @@ func InitRoute(r *gin.Engine) {
 		store.POST("/teamBuying/update", controller.CooperationController{}.UpdateTeamBuying)    // 更新团购
 		store.POST("/teamBuying/del", controller.CooperationController{}.DeleteTeamBuying)       // 删除团购
 	}
+	//推广合作-达人管理
+	talent := r.Group("/youngee/b/cooperation/talent")
+	{
+		talent.Use(middleware.LoginAuthMiddleware)
+		talent.POST("/talentnum", handler.WrapGetTalentNumHandler)             //达人数统计
+		talent.POST("/goodstalent", handler.WrapGetGoodsTalentHandler)         //带货达人列表
+		talent.POST("/projecttalent", handler.WrapGetProjectTalentHandler)     //种草达人
+		talent.POST("/locallifetalent", handler.WrapGetLocallifeTalentHandler) //本地生活达人
+
+	}
 	// 账号管理
 	account := r.Group("/youngee/b/account")
 	{
@@ -381,5 +408,6 @@ func InitRoute(r *gin.Engine) {
 	{
 		common.POST("/platform", controller.CommonController{}.CooperationPlatform)     // 获取合作平台icon
 		common.POST("/product/category", controller.CommonController{}.ProductCategory) // 获取商品类目
+		common.POST("/talent/province", handler.WrapGetProviceHandler)                  //获取达人省份
 	}
 }

+ 27 - 0
service/Localtask.go

@@ -12,6 +12,33 @@ var LocalTask *localtask
 type localtask struct {
 }
 
+func (*localtask) GetLocalRecruitTime(ctx context.Context, request http_model.GetLocalRecruitTimeRequest) (*http_model.GetLocalRecruitTimeResponse, error) {
+	recruit, err := db.GetLocalRecruittime(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[localtask service] call GetLocalRecruitTime error,err:%+v", err)
+		return nil, err
+	}
+	return recruit, nil
+}
+
+func (*localtask) GetLocalTalentstatusNum(ctx context.Context, request http_model.GetLocalTalentstatusNumRequest) (*http_model.GetLocalTalentstatusNumResponse, error) {
+	statusnum, err := db.GetLocalTalentstatusNumCount(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[localtask service] call GetLocalTalentstatusNum error,err:%+v", err)
+		return nil, err
+	}
+	return statusnum, nil
+}
+
+func (*localtask) GetLocalTalentstatusCount(ctx context.Context, request http_model.GetLocalTalentstatusCountRequest) (*http_model.GetLocalTalentstatusCountResponse, error) {
+	statusnum, err := db.GetLocalTalentstatusCountNum(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[localtask service] call GetTalentstatusNum error,err:%+v", err)
+		return nil, err
+	}
+	return statusnum, nil
+}
+
 func (*localtask) GetLocalList(ctx context.Context, request http_model.GetLocalTaskListRequest) (*http_model.GetLocalTaskListData, error) {
 	localTaskList, err := db.GetLocallifetaskList(ctx, request)
 	if err != nil {

+ 26 - 0
service/Task.go

@@ -12,6 +12,23 @@ var Task *task
 type task struct {
 }
 
+func (*task) GetRecruitTime(ctx context.Context, request http_model.GetRecruitTimeRequest) (*http_model.GetRecruitTimeResponse, error) {
+	recruit, err := db.GetRecruittime(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[localtask service] call GetRecruitTime error,err:%+v", err)
+		return nil, err
+	}
+	return recruit, nil
+}
+func (*task) GetTalentstatusNum(ctx context.Context, request http_model.GetTalentstatusNumRequest) (*http_model.GetTalentStatusNumResponse, error) {
+	statusnum, err := db.GetTalentstatusNumCount(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetTalentstatusNum error,err:%+v", err)
+		return nil, err
+	}
+	return statusnum, nil
+}
+
 func (*task) GetList(ctx context.Context, request http_model.GetTaskListRequest) (*http_model.GetTaskListData, error) {
 	secTaskList, err := db.GetProjecttaskList(ctx, request)
 	if err != nil {
@@ -46,6 +63,15 @@ func (*task) RefuseCoop(ctx context.Context, request http_model.RefuseproTaskCoo
 	return &projectListData, nil
 }
 
+func (*task) GetTalentstatusCount(ctx context.Context, request http_model.GetTalentstatusCountRequest) (*http_model.GetTalentstatusCountResponse, error) {
+	statusnum, err := db.GetTalentstatusCountNum(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetTalentstatusNum error,err:%+v", err)
+		return nil, err
+	}
+	return statusnum, nil
+}
+
 func (*task) GetPreSketchList(ctx context.Context, request http_model.PreSketchListRequest) (*http_model.GetSketchTaskListData, error) {
 	secTaskList, err := db.GetPreSketchList(ctx, request)
 	if err != nil {

+ 2 - 2
service/sketch.go

@@ -190,8 +190,8 @@ func (*sketch) GetSketchInfo(ctx context.Context, request http_model.GetSketchIn
 		Title:          SketchInfo.Title,
 		Content:        SketchInfo.Content,
 		SketchPhotos:   SketchPhotos,
-		Agreeat:        SketchInfo.AgreeAt,
-		Submitat:       SketchInfo.SubmitAt,
+		Agreeat:        SketchInfo.AgreeAt.Format("2006-01-02 15:04:05"),
+		Submitat:       SketchInfo.SubmitAt.Format("2006-01-02 15:04:05"),
 		ReverseOpinion: SketchInfo.ReviseOpinion,
 	}
 	return &SketchInfoData, nil

+ 40 - 0
service/talent.go

@@ -0,0 +1,40 @@
+package service
+
+import (
+	"context"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/db"
+	"youngee_b_api/model/http_model"
+)
+
+var Talent *talent
+
+type talent struct {
+}
+
+func (*talent) GetGoodsTalentList(ctx context.Context, request http_model.GetGoodsTalentRequest) (*http_model.GetGoodsTalentListData, error) {
+	res, err := db.GetGoodstalentList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[talent service] call GetGoodsTalentList error,err:%+v", err)
+		return nil, err
+	}
+	return res, nil
+}
+
+func (*talent) GetProjectTalentList(ctx context.Context, request http_model.GetProjectTalentRequest) (*http_model.GetProjectTalentListData, error) {
+	res, err := db.GetProjecttalentList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[talent service] call GetProjectTalentList error,err:%+v", err)
+		return nil, err
+	}
+	return res, nil
+}
+
+func (*talent) GetLocallifeTalentList(ctx context.Context, request http_model.GetLocallifeTalentRequest) (*http_model.GetLocallifeTalentListData, error) {
+	res, err := db.GetLocallifetalentList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[talent service] call GetLocallifeTalentList error,err:%+v", err)
+		return nil, err
+	}
+	return res, nil
+}