瀏覽代碼

任务日志

Ohio-HYF 2 年之前
父節點
當前提交
ab89a9cb6f

+ 21 - 0
db/info_pricing_strategy.go

@@ -0,0 +1,21 @@
+package db
+
+import (
+	"context"
+	"youngee_b_api/model/gorm_model"
+
+	log "github.com/sirupsen/logrus"
+)
+
+func GetPricingStrategy(ctx context.Context, fans int64, feeForm int64, platForm int64) (*gorm_model.InfoPricingStrategy, error) {
+	db := GetReadDB(context.Background())
+	// 查找最后一个
+	PricingStrategy := gorm_model.InfoPricingStrategy{}
+	err := db.Model(gorm_model.InfoPricingStrategy{}).Where("fee_form = ? and platform = ? and fans_low <= ? and fans_up >= ?", feeForm, platForm, fans, fans).Scan(&PricingStrategy).Error
+	if err != nil {
+		log.Println("DB GetLastAutoDefaultID:", err)
+		return nil, err
+	}
+	//fmt.Printf("auto task %+v %+v", result, LastTask)
+	return &PricingStrategy, nil
+}

+ 25 - 0
db/task.go

@@ -96,6 +96,31 @@ func ChangeTaskStatus(ctx context.Context, taskIds []string, taskStatus string)
 	return recruitStrategysIDs, nil
 }
 
+func ChangeSpecialTaskStatus(ctx context.Context, taskIds []string, taskStatus string, taskStage string) error {
+	db := GetReadDB(ctx)
+	status, err := strconv.Atoi(taskStatus)
+	stage, err := strconv.Atoi(taskStage)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]1 error query mysql total, err:%+v", err)
+		return err
+	}
+	if err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).
+		Updates(gorm_model.YoungeeTaskInfo{TaskStatus: status, TaskStage: stage}).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func UpdateTaskSelectAtByProjectId(ctx context.Context, projectID int64, taskStatus int64) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("select_date", time.Now()).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateTaskStage]2 error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
 func UpdateTaskStageByProjectId(ctx context.Context, projectID int64, taskStatus int64, taskStage int64) error {
 	db := GetReadDB(ctx)
 	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("task_stage", taskStage).Error

+ 24 - 0
db/task_log.go

@@ -0,0 +1,24 @@
+package db
+
+import (
+	"context"
+	"time"
+	"youngee_b_api/model/gorm_model"
+
+	"github.com/sirupsen/logrus"
+)
+
+func CreateTaskLog(ctx context.Context, taskId int64, log string) error {
+	db := GetReadDB(ctx)
+	taskLog := gorm_model.YounggeeTaskLog{
+		TaskID:  taskId,
+		Content: log,
+		LogAt:   time.Now(),
+	}
+	err := db.Model(gorm_model.YounggeeTaskLog{}).Create(&taskLog).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Insert YounggeeTaskLog error,err:%+v", err)
+		return err
+	}
+	return nil
+}

+ 16 - 6
handler/project_change_taskStatus.go

@@ -56,12 +56,22 @@ func (p *ProjectChangeTaskStatusHandler) getRequest() interface{} {
 func (p *ProjectChangeTaskStatusHandler) run() {
 	data := http_model.ProjectChangeTaskStatusRequest{}
 	data = *p.req
-	err := service.Project.ChangeTaskStatus(p.ctx, data)
-	if err != nil {
-		logrus.Errorf("[ChangeTaskStatusHandler] call Create err:%+v\n", err)
-		util.HandlerPackErrorResp(p.resp, consts.ErrorInternal, "")
-		logrus.Info("ChangeTaskStatus fail,req:%+v", p.req)
-		return
+	if data.IsSpecial == "1" {
+		err := service.Project.ChangeSpecialTaskStatus(p.ctx, data)
+		if err != nil {
+			logrus.Errorf("[ChangeTaskStatusHandler] call Create err:%+v\n", err)
+			util.HandlerPackErrorResp(p.resp, consts.ErrorInternal, "")
+			logrus.Info("ChangeTaskStatus fail,req:%+v", p.req)
+			return
+		}
+	} else {
+		err := service.Project.ChangeTaskStatus(p.ctx, data)
+		if err != nil {
+			logrus.Errorf("[ChangeTaskStatusHandler] call Create err:%+v\n", err)
+			util.HandlerPackErrorResp(p.resp, consts.ErrorInternal, "")
+			logrus.Info("ChangeTaskStatus fail,req:%+v", p.req)
+			return
+		}
 	}
 	p.resp.Message = "任务状态更换成功"
 }

+ 28 - 0
model/gorm_model/info_pricing_strategy.go

@@ -0,0 +1,28 @@
+// Code generated by sql2gorm. DO NOT EDIT.
+package gorm_model
+
+import (
+	"time"
+)
+
+type InfoPricingStrategy struct {
+	ID            int64       `gorm:"column:id;primary_key;AUTO_INCREMENT"` //  id
+	ProjectType   int64       `gorm:"column:project_type;NOT NULL"`         // 项目类型,0表示不限,1为全流程项目
+	StrategyId    string    `gorm:"column:strategyId;NOT NULL"`           // 定价策略编号
+	FeeForm       int64       `gorm:"column:fee_form;NOT NULL"`             // 稿费形式,1,2,3分别代表产品置换、固定稿费、自报价
+	Platform      int64       `gorm:"column:platform;NOT NULL"`             // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	FansLow       int64       `gorm:"column:fans_low;NOT NULL"`             // 对应粉丝量下限
+	FansUp        int64       `gorm:"column:fans_up;NOT NULL"`              // 对应粉丝量上限
+	ServiceCharge float64       `gorm:"column:service_charge"`                // 服务费,稿费形式为产品置换时填写,可以为空
+	BaseOffer     float64   `gorm:"column:base_offer"`                    // 基础报价
+	Status        int64       `gorm:"column:status;NOT NULL"`               // 定价策略当前状态,0表示正常,1表示禁用
+	ServiceRate   int64       `gorm:"column:service_rate"`                  // 服务费率*1000,稿费形式为固定稿费和自报价时填写,可以为空
+	UpdateID      int64       `gorm:"column:update_id"`                     // 修改管理人员id,对应user表中主键
+	UpdateAt      time.Time `gorm:"column:update_at"`                     // 修改时间
+	CreateAt      time.Time `gorm:"column:create_at;NOT NULL"`            // 创建时间
+}
+
+func (m *InfoPricingStrategy) TableName() string {
+	return "info_pricing_strategy"
+}
+

+ 23 - 22
model/gorm_model/recruit_strategy.go

@@ -3,28 +3,29 @@ package gorm_model
 
 
 type RecruitStrategy struct {
-	RecruitStrategyID int64 `gorm:"column:recruit_strategy_id;primary_key;AUTO_INCREMENT"` // 招募策略id
-	FeeForm           int64 `gorm:"column:fee_form"`                                       // 稿费形式,1-3分别代表产品置换、固定稿费、自报价
-	StrategyID        int64 `gorm:"column:strategy_id"`                                    // 策略id
-	FollowersLow      int64 `gorm:"column:followers_low"`                                  // 达人粉丝数下限
-	FollowersUp       int64 `gorm:"column:followers_up"`                                   // 达人粉丝数上限
-	RecruitNumber     int64 `gorm:"column:recruit_number"`                                 // 招募数量
-	Offer             int64 `gorm:"column:offer"`                                          // 报价
-	ProjectID         int64 `gorm:"column:project_id"`                                     // 所属项目id
-	ServiceCharge     int64 `gorm:"column:service_charge"`                                 // 平台服务费,稿费形式为产品置换时必填
-	SelectedNumber    int64 `gorm:"column:selected_number;default:0"`                      // 已选数量,被企业选择的达人数量
-	WaitingNumber     int64 `gorm:"column:waiting_number;default:0"`                       // 待发货
-	DeliveredNumber   int64 `gorm:"column:delivered_number;default:0"`                     // 已发货
-	SignedNumber      int64 `gorm:"column:signed_number;default:0"`                        // 已签收
-	MaxOffer          int64 `gorm:"column:max_offer"`                                      // 报价上限
-	MinOffer          int64 `gorm:"column:min_offer"`                                      // 报价下限
-	FanNumber         int64 `gorm:"column:fan_number"`                                     // 总粉丝量
-	PlayNumber        int64 `gorm:"column:play_number"`                                    // 总播放量
-	LikeNumber        int64 `gorm:"column:like_number"`                                    // 总点赞数
-	CollectNumber     int64 `gorm:"column:collect_number"`                                 // 总收藏量
-	CommentNumber     int64 `gorm:"column:comment_number"`                                 // 总评论数
-	FinishNumber      int64 `gorm:"column:finish_number"`                                  // 结案数量
-	TotalOffer        int64 `gorm:"column:total_offer"`                                    // 支付合计
+	RecruitStrategyID int64    `gorm:"column:recruit_strategy_id;primary_key;AUTO_INCREMENT"` // 招募策略id
+	FeeForm           int64    `gorm:"column:fee_form"`                                       // 稿费形式,1-3分别代表产品置换、固定稿费、自报价
+	StrategyID        int64    `gorm:"column:strategy_id"`                                    // 策略id
+	FollowersLow      int64    `gorm:"column:followers_low"`                                  // 达人粉丝数下限
+	FollowersUp       int64    `gorm:"column:followers_up"`                                   // 达人粉丝数上限
+	RecruitNumber     int64    `gorm:"column:recruit_number"`                                 // 招募数量
+	Offer             float64 `gorm:"column:offer"`                                          // 报价
+	TOffer            float64 `gorm:"column:t_offer"`                                        // 达人所见报价
+	ProjectID         int64    `gorm:"column:project_id"`                                     // 所属项目id
+	ServiceCharge     int64    `gorm:"column:service_charge"`                                 // 平台服务费,稿费形式为产品置换时必填
+	SelectedNumber    int64    `gorm:"column:selected_number;default:0"`                      // 已选数量,被企业选择的达人数量
+	WaitingNumber     int64    `gorm:"column:waiting_number;default:0"`                       // 待发货
+	DeliveredNumber   int64    `gorm:"column:delivered_number;default:0"`                     // 已发货
+	SignedNumber      int64    `gorm:"column:signed_number;default:0"`                        // 已签收
+	MaxOffer          int64    `gorm:"column:max_offer;default:0"`                            // 报价上限
+	MinOffer          int64    `gorm:"column:min_offer;default:0"`                            // 报价下限
+	FanNumber         int64    `gorm:"column:fan_number;default:0"`                           // 总粉丝量
+	PlayNumber        int64    `gorm:"column:play_number;default:0"`                          // 总播放量
+	LikeNumber        int64    `gorm:"column:like_number;default:0"`                          // 总点赞数
+	CollectNumber     int64    `gorm:"column:collect_number;default:0"`                       // 总收藏量
+	CommentNumber     int64    `gorm:"column:comment_number;default:0"`                       // 总评论数
+	FinishNumber      int64    `gorm:"column:finish_number;default:0"`                        // 结案数量
+	TotalOffer        int64    `gorm:"column:total_offer;default:0"`                          // 支付合计
 }
 
 func (m *RecruitStrategy) TableName() string {

+ 18 - 0
model/gorm_model/task_log.go

@@ -0,0 +1,18 @@
+// Code generated by sql2gorm. DO NOT EDIT.
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeTaskLog struct {
+	LogID   int64       `gorm:"column:log_id;primary_key;AUTO_INCREMENT"` // 任务日志id
+	TaskID  int64       `gorm:"column:task_id;NOT NULL"`                  // 任务id
+	Content string    `gorm:"column:content;NOT NULL"`                  // 内容
+	LogAt   time.Time `gorm:"column:log_at;NOT NULL"`                   // 时间
+}
+
+func (m *YounggeeTaskLog) TableName() string {
+	return "younggee_task_log"
+}
+

+ 1 - 0
model/http_model/data_accept.go

@@ -8,6 +8,7 @@ type AcceptDataRequest struct {
 
 type AcceptDataData struct {
 	TaskIds []int `json:"taskIds"` //任务id列表
+	IsEnd   int   `json:"is_end"`  // 项目是否结案
 }
 
 func NewAcceptDataRequest() *AcceptDataRequest {

+ 2 - 0
model/http_model/project_change_taskStatus.go

@@ -3,6 +3,8 @@ package http_model
 type ProjectChangeTaskStatusRequest struct {
 	TaskIds    []string `json:"taskIds"`
 	TaskStatus string   `json:"task_status"`
+	TaskStage  string   `json:"task_stage"`
+	IsSpecial  string   `json:"is_special"`
 }
 
 func NewProjectChangeTaskStatusRequst() *ProjectChangeTaskStatusRequest {

+ 7 - 6
model/http_model/project_create.go

@@ -8,12 +8,13 @@ type CreateProjectPhoto struct {
 }
 
 type CreateRecruitStrategy struct {
-	FeeForm       int64 `json:"fee_form"`       // 稿费形式,1-3分别代表自报价、固定稿费、产品置换
-	StrategyID    int64 `json:"strategy_id"`    // 策略id
-	FollowersLow  int64 `json:"followers_low"`  // 达人粉丝数下限
-	FollowersUp   int64 `json:"followers_up"`   // 达人粉丝数上限
-	RecruitNumber int64 `json:"recruit_number"` // 招募数量
-	Offer         int64 `json:"offer"`          // 报价
+	FeeForm       int64   `json:"fee_form"`       // 稿费形式,1-3分别代表自报价、固定稿费、产品置换
+	StrategyID    int64   `json:"strategy_id"`    // 策略id
+	FollowersLow  int64   `json:"followers_low"`  // 达人粉丝数下限
+	FollowersUp   int64   `json:"followers_up"`   // 达人粉丝数上限
+	RecruitNumber int64   `json:"recruit_number"` // 招募数量
+	Offer         float64 `json:"offer"`          // 报价
+	TOffer        float64 `json:"t_offer"`        // 达人所见报价
 }
 
 type CreateProjectRequest struct {

+ 7 - 6
model/http_model/project_update.go

@@ -8,12 +8,13 @@ type UpdateProjectPhoto struct {
 }
 
 type UpdateRecruitStrategy struct {
-	FeeForm       int64 `json:"fee_form"`       // 稿费形式,1-3分别代表自报价、固定稿费、产品置换
-	StrategyID    int64 `json:"strategy_id"`    // 策略id
-	FollowersLow  int64 `json:"followers_low"`  // 达人粉丝数下限
-	FollowersUp   int64 `json:"followers_up"`   // 达人粉丝数上限
-	RecruitNumber int64 `json:"recruit_number"` // 招募数量
-	Offer         int64 `json:"offer"`          // 报价
+	FeeForm       int64   `json:"fee_form"`       // 稿费形式,1-3分别代表自报价、固定稿费、产品置换
+	StrategyID    int64   `json:"strategy_id"`    // 策略id
+	FollowersLow  int64   `json:"followers_low"`  // 达人粉丝数下限
+	FollowersUp   int64   `json:"followers_up"`   // 达人粉丝数上限
+	RecruitNumber int64   `json:"recruit_number"` // 招募数量
+	Offer         float64 `json:"offer"`          // 报价
+	TOffer        float64 `json:"t_offer"`        // 达人所见报价
 }
 
 type UpdateProjectRequest struct {

+ 2 - 0
model/http_model/task_logistics.go

@@ -25,6 +25,7 @@ type TaskLogisticsPreview struct {
 	CompanyName           string    `json:"company_name"`           // 物流公司
 	LogisticsNumber       string    `json:"logistics_number"`       // 物流单号
 	DeliveryTime          string    `json:"delivery_time"`          // 发货时间
+	SignedTime            string    `json:"signed_time"`            // 签收时间
 	ExplorestoreStarttime time.Time `json:"explorestore_starttime"` // 线下探店-探店开始时间
 	ExplorestoreEndtime   time.Time `json:"explorestore_endtime"`   // 线下探店-探店结束时间
 	ExplorestorePeriod    string    `json:"explorestore_period"`    // 线下探店-探店持续时间
@@ -41,6 +42,7 @@ type TaskLogisticsInfo struct {
 	CompanyName           string    `json:"company_name"`           // 物流公司
 	LogisticsNumber       string    `json:"logistics_number"`       // 物流单号
 	DeliveryTime          string    `json:"delivery_time"`          // 发货时间
+	SignedTime            string    `json:"signed_time"`            // 签收时间
 	ExplorestoreStarttime time.Time `json:"explorestore_starttime"` // 线下探店-探店开始时间
 	ExplorestoreEndtime   time.Time `json:"explorestore_endtime"`   // 线下探店-探店结束时间
 	ExplorestorePeriod    string    `json:"explorestore_period"`    // 线下探店-探店持续时间

+ 4 - 2
pack/task_logistics_list.go

@@ -18,8 +18,8 @@ func MGormTaskLogisticsInfoListToHttpTaskLogisticsPreviewList(gormTaskLogisticsI
 }
 
 func MGormTaskLogisticsInfoToHttpTaskLogisticsPreview(TaskLogisticsInfo *http_model.TaskLogisticsInfo) *http_model.TaskLogisticsPreview {
-	deliveryTime := conv.MustString(TaskLogisticsInfo.DeliveryTime)
-	deliveryTime = deliveryTime[0:19]
+	deliveryTime := conv.MustString(TaskLogisticsInfo.DeliveryTime)[0:19]
+	signedTime := conv.MustString(TaskLogisticsInfo.SignedTime)[0:19]
 	return &http_model.TaskLogisticsPreview{
 		TaskID:                conv.MustString(TaskLogisticsInfo.TaskID),
 		PlatformNickname:      conv.MustString(TaskLogisticsInfo.PlatformNickname),
@@ -30,6 +30,7 @@ func MGormTaskLogisticsInfoToHttpTaskLogisticsPreview(TaskLogisticsInfo *http_mo
 		CompanyName:           conv.MustString(TaskLogisticsInfo.CompanyName),
 		LogisticsNumber:       conv.MustString(TaskLogisticsInfo.LogisticsNumber),
 		DeliveryTime:          deliveryTime,
+		SignedTime:            signedTime,
 		ExplorestoreStarttime: TaskLogisticsInfo.ExplorestoreStarttime,
 		ExplorestoreEndtime:   TaskLogisticsInfo.ExplorestoreEndtime,
 		ExplorestorePeriod:    conv.MustString(TaskLogisticsInfo.ExplorestorePeriod),
@@ -58,6 +59,7 @@ func GetTalentInfoStruct(TaskLogistics *http_model.TaskLogistics) *http_model.Ta
 		CompanyName:           TaskLogistics.Logistics.CompanyName,
 		LogisticsNumber:       TaskLogistics.Logistics.LogisticsNumber,
 		DeliveryTime:          conv.MustString(TaskLogistics.Logistics.DeliveryTime),
+		SignedTime:            conv.MustString(TaskLogistics.Logistics.SignedTime),
 		ExplorestoreStarttime: TaskLogistics.Logistics.ExplorestoreStarttime,
 		ExplorestoreEndtime:   TaskLogistics.Logistics.ExplorestoreEndtime,
 		ExplorestorePeriod:    TaskLogistics.Logistics.ExplorestorePeriod,

+ 1 - 1
route/init.go

@@ -84,10 +84,10 @@ func InitRoute(r *gin.Engine) {
 		m.GET("/invoice/getReceiveAddress", handler.WrapGetReceiveAddressHandler)            // 获取收货地址
 		m.GET("/invoice/getReceiveInfo", handler.WrapGetReceiveInfoHandler)                  // 获取发票信息
 		m.POST("/invoice/operateReceiveInfo", handler.WrapOperateReceiveInfoHandler)         // 修改或删除发票信息
-		m.POST("/project/getlogisticsnumberinfo", handler.WrapGetLogisticsNumberInfoHandler) // 获取物流数量
 		m.POST("/invoice/operateReceiveAddress", handler.WrapOperateReceiveAddressHandler)   // 修改或删除发票地址
 		m.POST("/invoice/addInvoiceRecord", handler.WrapAddInvoiceRecordHandler)             // 开票
 		m.POST("/invoice/getInvoiceRecord", handler.WrapGetInvoiceRecordHandler)             // 获取开票记录
+		m.POST("/project/getlogisticsnumberinfo", handler.WrapGetLogisticsNumberInfoHandler) // 获取物流数量
 		m.POST("/project/getlinknumberinfo", handler.WrapGetLinkNumberInfoHandler)           // 获取链接信息
 		m.POST("/project/getdatanumberinfo", handler.WrapGetDataNumberInfoHandler)           // 获取数据信息
 		m.POST("/project/getreviewnumberinfo", handler.WrapGetReviewNumberInfoHandler)       // 获取审稿信息

+ 4 - 2
service/autoTask.go

@@ -9,8 +9,10 @@ import (
 )
 
 func AutoTask() error {
-	c := cron.New()
-	_, err1 := c.AddFunc("@midnight", AutoTaskUpdateStatus)
+	c := cron.New(cron.WithSeconds())
+	// spec := "0 */30 * * * ?" //cron表达式,每半小时执行一次
+	spec := "0 */10 * * * ?" //cron表达式,每1分钟一次
+	_, err1 := c.AddFunc(spec, AutoTaskUpdateStatus)
 	if err1 != nil {
 		log.Println("service [AutoTaskUpdateStatus] error:", err1)
 		return err1

+ 20 - 4
service/data.go

@@ -28,6 +28,12 @@ func (*data) DataOpinion(ctx context.Context, request http_model.DataOpinionRequ
 		logrus.WithContext(ctx).Errorf("[Data service] call CreateData error,err:%+v", err)
 		return nil, err
 	}
+	// 记录任务日志
+	err = db.CreateTaskLog(ctx, int64(Data.TaskID), "数据驳回")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
 
 	res := &http_model.DataOpinionData{
 		TaskID: int64(Data.TaskID),
@@ -51,6 +57,15 @@ func (*data) AcceptData(ctx context.Context, request http_model.AcceptDataReques
 		return nil, err
 	}
 
+	// 记录任务日志
+	for _, taskId := range TaskIDList {
+		err = db.CreateTaskLog(ctx, int64(taskId), "数据通过")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Data service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+	}
+
 	// 2. 更新YoungeeTaskInfo表,将任务结案
 	fmt.Printf("acc request %+v", TaskIDList)
 	err = db.SetTaskFinish(ctx, TaskIDList)
@@ -58,6 +73,10 @@ func (*data) AcceptData(ctx context.Context, request http_model.AcceptDataReques
 		logrus.WithContext(ctx).Errorf("[Data service] call SetTaskFinish error,err:%+v", err)
 		return nil, err
 	}
+	res := &http_model.AcceptDataData{
+		TaskIds: TaskIDList,
+		IsEnd:   0,
+	}
 
 	// 3. 判断是否全部任务已结案,若已全部结案则触发项目结案
 	// 查询task_stage<15的任务数量
@@ -72,10 +91,7 @@ func (*data) AcceptData(ctx context.Context, request http_model.AcceptDataReques
 			logrus.WithContext(ctx).Errorf("[Data service] call SetProjectFinish error,err:%+v", err)
 			return nil, err
 		}
-	}
-
-	res := &http_model.AcceptDataData{
-		TaskIds: TaskIDList,
+		res.IsEnd = 1
 	}
 	return res, nil
 }

+ 14 - 0
service/link.go

@@ -29,6 +29,12 @@ func (*link) LinkOpinion(ctx context.Context, request http_model.LinkOpinionRequ
 		logrus.WithContext(ctx).Errorf("[Link service] call CreateLink error,err:%+v", err)
 		return nil, err
 	}
+	// 记录任务日志
+	err = db.CreateTaskLog(ctx, int64(Link.TaskID), "链接驳回")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
 
 	res := &http_model.LinkOpinionData{
 		TaskID: int64(Link.TaskID),
@@ -49,6 +55,14 @@ func (*link) AcceptLink(ctx context.Context, request http_model.AcceptLinkReques
 		logrus.WithContext(ctx).Errorf("[Link service] call CreateLink error,err:%+v", err)
 		return nil, err
 	}
+	// 记录任务日志
+	for _, taskId := range TaskIDList {
+		err = db.CreateTaskLog(ctx, int64(taskId), "链接通过")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Link service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+	}
 
 	res := &http_model.AcceptLinkData{
 		TaskIds: TaskIDList,

+ 14 - 0
service/logistics.go

@@ -93,6 +93,13 @@ func (*logistics) Create(ctx context.Context, newLogistics http_model.CreateLogi
 
 	// 对应招募策略待发货--,已发货++
 
+	// 记录任务日志-发货
+	err = db.CreateTaskLog(ctx, Logistics.TaskID, "发货时间")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
+
 	res := &http_model.CreateLogisticsData{
 		LogisticsID: *logisticsID,
 	}
@@ -187,6 +194,13 @@ func (*logistics) SignForReceipt(ctx *gin.Context, data http_model.SignForReceip
 			logrus.WithContext(ctx).Errorf("[project service] call UpdateLogisticsNumber error,err:%+v", err)
 			return err
 		}
+
+		// 记录任务日志
+		err = db.CreateTaskLog(ctx, taskId, "签收时间")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[logistics service] call CreateTaskLog error,err:%+v", err)
+			return err
+		}
 	}
 
 	return nil

+ 45 - 3
service/project.go

@@ -109,7 +109,16 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 	// build
 	if newProject.ProjectType == int64(1) {
 		recruitStrategys := []gorm_model.RecruitStrategy{}
-		for _, strategy := range newProject.RecruitStrategys {
+		for _, strategy := range newProject.RecruitStrategys { // 查询对应定价策略
+			pricingStrategy, err := db.GetPricingStrategy(ctx, strategy.FollowersLow, strategy.FeeForm, newProject.ProjectPlatform)
+			if err != nil {
+				return nil, err
+			}
+			// fmt.Printf(" %+v 对应定价策略 %+v", strategy, pricingStrategy)
+			// 根据定价策略计算达人所见报价
+			if strategy.FeeForm == 2 {
+				strategy.TOffer = strategy.Offer * (1 - conv.MustFloat64(pricingStrategy.ServiceRate)/1000)
+			}
 			recruitStrategy := gorm_model.RecruitStrategy{
 				FeeForm:       strategy.FeeForm,
 				StrategyID:    strategy.StrategyID,
@@ -117,6 +126,7 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 				FollowersUp:   strategy.FollowersUp,
 				RecruitNumber: strategy.RecruitNumber,
 				Offer:         strategy.Offer,
+				TOffer:        strategy.TOffer,
 				ProjectID:     *projectID,
 			}
 			recruitStrategys = append(recruitStrategys, recruitStrategy)
@@ -134,6 +144,17 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 }
 func (*project) Update(ctx context.Context, newProject http_model.UpdateProjectRequest, enterpriseID int64) (*http_model.UpdateProjectData, error) {
 	fmt.Println("newproject:", newProject)
+	oldProject, err3 := db.GetProjectDetail(ctx, conv.MustInt64(newProject.ProjectID))
+	if err3 != nil {
+		return nil, err3
+	}
+	feeFrom := []string{}
+	for _, strategy := range newProject.RecruitStrategys {
+		//if strategy.StrategyID
+		feeFrom = append(feeFrom, strconv.FormatInt(strategy.FeeForm, 10))
+		//feeForm += string(strategy.StrategyID)
+	}
+	feeFroms := strings.Join(feeFrom, ",")
 	project := gorm_model.ProjectInfo{
 		ProjectID:     conv.MustInt64(newProject.ProjectID),
 		RecruitDdl:    &newProject.RecruitDdl,
@@ -143,6 +164,7 @@ func (*project) Update(ctx context.Context, newProject http_model.UpdateProjectR
 		ProjectForm:   conv.MustInt64(newProject.ProjectForm),
 		EnterpriseID:  enterpriseID,
 		ProjectStatus: conv.MustInt64(newProject.ProjectStatus),
+		FeeForm:       feeFroms,
 	}
 	projectID, err := db.UpdateProject(ctx, project)
 	if err != nil {
@@ -154,7 +176,7 @@ func (*project) Update(ctx context.Context, newProject http_model.UpdateProjectR
 		return nil, err
 	}
 	fmt.Printf("照片:\t %+v", newProject.ProjectPhotos)
-	if newProject.ProjectPhotos != nil {
+	if len(newProject.ProjectPhotos) != 0 {
 		// 新增图片
 		projectPhotos := []gorm_model.ProjectPhoto{}
 		for _, photo := range newProject.ProjectPhotos {
@@ -180,13 +202,24 @@ func (*project) Update(ctx context.Context, newProject http_model.UpdateProjectR
 		// 新增策略
 		RecruitStrategys := []gorm_model.RecruitStrategy{}
 		for _, Strategy := range newProject.RecruitStrategys {
+			// 查询对应定价策略
+			pricingStrategy, err := db.GetPricingStrategy(ctx, Strategy.FollowersLow, Strategy.FeeForm, oldProject.ProjectPlatform)
+			if err != nil {
+				return nil, err
+			}
+			// 根据定价策略计算达人所见报价
+			if Strategy.FeeForm == 2 {
+				Strategy.TOffer = Strategy.Offer * (1 - conv.MustFloat64(pricingStrategy.ServiceRate)/1000)
+			}
+
 			RecruitStrategy := gorm_model.RecruitStrategy{
 				FeeForm:       conv.MustInt64(Strategy.FeeForm),
 				StrategyID:    conv.MustInt64(Strategy.StrategyID),
 				FollowersLow:  conv.MustInt64(Strategy.FollowersLow),
 				FollowersUp:   conv.MustInt64(Strategy.FollowersUp),
 				RecruitNumber: conv.MustInt64(Strategy.RecruitNumber),
-				Offer:         conv.MustInt64(Strategy.Offer),
+				Offer:         Strategy.Offer,
+				TOffer:        Strategy.TOffer,
 				ProjectID:     project.ProjectID,
 			}
 			fmt.Printf("Offer:\t %+v", Strategy.Offer)
@@ -377,6 +410,15 @@ func (*project) ChangeTaskStatus(ctx *gin.Context, data http_model.ProjectChange
 	return nil
 }
 
+func (*project) ChangeSpecialTaskStatus(ctx *gin.Context, data http_model.ProjectChangeTaskStatusRequest) interface{} {
+	err := db.ChangeSpecialTaskStatus(ctx, data.TaskIds, data.TaskStatus, data.TaskStage)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call ChangeSpecialTaskStatus error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
 func (p *project) GetTaskScriptList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.TaskScriptListData, error) {
 	TaskScripts, total, err := db.GetTaskScriptList(ctx, projectID, pageSize, pageNum, conditions)
 	if err != nil {

+ 6 - 0
service/project_pay.go

@@ -42,6 +42,12 @@ func (*projectPay) Pay(ctx context.Context, projectPay http_model.ProjectPayRequ
 		logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err)
 		return nil, err2
 	}
+	err = db.UpdateTaskSelectAtByProjectId(ctx, conv.MustInt64(projectPay.ProjectID), 2)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
+		return nil, err
+	}
+
 	if project.ProjectForm != 4 {
 		err = db.UpdateTaskStageByProjectId(ctx, conv.MustInt64(projectPay.ProjectID), 2, 4)
 		if err != nil {

+ 14 - 0
service/script.go

@@ -29,6 +29,12 @@ func (*script) ScriptOpinion(ctx context.Context, request http_model.ScriptOpini
 		logrus.WithContext(ctx).Errorf("[Script service] call CreateScript error,err:%+v", err)
 		return nil, err
 	}
+	// 记录任务日志
+	err = db.CreateTaskLog(ctx, int64(Script.TaskID), "脚本驳回")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Script service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
 
 	res := &http_model.ScriptOpinionData{
 		TaskID: int64(Script.TaskID),
@@ -49,6 +55,14 @@ func (*script) AcceptScript(ctx context.Context, request http_model.AcceptScript
 		logrus.WithContext(ctx).Errorf("[Script service] call CreateScript error,err:%+v", err)
 		return nil, err
 	}
+	// 记录任务日志
+	for _, taskId := range TaskIDList {
+		err = db.CreateTaskLog(ctx, int64(taskId), "脚本通过")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Script service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+	}
 
 	res := &http_model.AcceptScriptData{
 		TaskIds: TaskIDList,

+ 14 - 0
service/sketch.go

@@ -30,6 +30,12 @@ func (*sketch) SketchOption(ctx context.Context, request http_model.SketchOpinio
 		return nil, err
 	}
 
+	// 记录任务日志
+	err = db.CreateTaskLog(ctx, int64(Sketch.TaskID), "初稿驳回")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
 	res := &http_model.SketchOpinionData{
 		TaskID: int64(Sketch.TaskID),
 	}
@@ -49,6 +55,14 @@ func (*sketch) AcceptSketch(ctx context.Context, request http_model.AcceptSketch
 		logrus.WithContext(ctx).Errorf("[Sketch service] call CreateSketch error,err:%+v", err)
 		return nil, err
 	}
+	// 记录任务日志
+	for _, taskId := range TaskIDList {
+		err = db.CreateTaskLog(ctx, int64(taskId), "初稿通过")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Sketch service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+	}
 
 	res := &http_model.AcceptSketchData{
 		TaskIds: TaskIDList,