123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- package youngee_talent_service
- import (
- "context"
- "fmt"
- "youngmini_server/app/dao"
- "youngmini_server/app/model"
- "youngmini_server/app/model/youngee_talent_model"
- "youngmini_server/app/utils"
- "github.com/gogf/gf/database/gdb"
- "github.com/gogf/gf/encoding/gjson"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/net/ghttp"
- "github.com/gogf/gf/os/gtime"
- )
- // 新建任务service
- func SignUpTask(r *ghttp.Request) *TalentHttpResult {
- tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
- }
- var signTaskInfo *youngee_talent_model.SignTaskInfo
- err = r.ParseForm(&signTaskInfo)
- if err != nil {
- return &TalentHttpResult{Code: -2, Msg: err.Error()}
- }
- var projectDetail *youngee_talent_model.ProjectDetail
- err = g.DB().Model(youngee_talent_model.ProjectDetail{}).WithAll().Where("project_id", signTaskInfo.ProjectId).Scan(&projectDetail)
- if err != nil {
- return &TalentHttpResult{Code: -3, Msg: "data query failed"}
- }
- var talentInfo *youngee_talent_model.TalentInfo
- err = g.DB().Model("youngee_talent_info").WithAll().Where("id", tid).Scan(&talentInfo)
- if err != nil {
- return &TalentHttpResult{Code: -4, Msg: "Get talent info failed"}
- }
- var accountInfo *youngee_talent_model.PlatformAccountInfo
- err = g.DB().Model("youngee_platform_account_info").WithAll().Where("talent_id = ? and platform_id = ?", tid, projectDetail.ProjectPlatform).Scan(&accountInfo)
- if err != nil {
- return &TalentHttpResult{Code: -5, Msg: err.Error()}
- }
- address, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).One("talent_id = ? and address_id = ?", tid, signTaskInfo.AddressId)
- if err != nil {
- return &TalentHttpResult{Code: -6, Msg: err.Error()}
- }
- // 生成达人平台账号信息快照
- accountSnap, err := gjson.Encode(accountInfo)
- if err != nil {
- return &TalentHttpResult{Code: -7, Msg: "encode platform snap failed"}
- }
- // 生成达人信息快照
- talentSnap, err := gjson.Encode(talentInfo)
- if err != nil {
- return &TalentHttpResult{Code: -8, Msg: "encode talent info snap failed"}
- }
- // 生成收货地址快照
- addrSnap, err := gjson.Encode(address)
- if err != nil {
- return &TalentHttpResult{Code: -9, Msg: "encode delivery address snap failed"}
- }
- // 计算平台服务费
- // 先获取稿费形式
- var strategy *youngee_talent_model.RecruitStrategy
- err = g.DB().Model("recruit_strategy").WithAll().Where("strategy_id = ? and project_id= ?", signTaskInfo.StrategyId, signTaskInfo.ProjectId).Scan(&strategy)
- if err != nil {
- return &TalentHttpResult{Code: -5, Msg: err.Error()}
- }
- // 根据稿费形式、平台、粉丝数查询服务费
- whereStr1 := fmt.Sprintf("fee_form = %d and platform = %d and fans_low <= %d and fans_up >= %d", strategy.FeeForm, projectDetail.ProjectPlatform, accountInfo.FansCount, accountInfo.FansCount)
- var serviceCharge = 0.0
- var serviceRate = 0
- var allReward = 0.0
- var allPayment = 0.0
- switch strategy.FeeForm {
- case 1: // 产品置换,服务费固定,在项目生成时确定
- serviceCharge = float64(strategy.ServiceCharge)
- allPayment = serviceCharge
- break
- case 2: // 固定稿费,m2 = y2 * r2
- allPayment = float64(strategy.Offer)
- var pricing *model.InfoPricingStrategy
- err = g.DB().Model("info_pricing_strategy").WithAll().Where(whereStr1).Scan(&pricing)
- if err != nil {
- return &TalentHttpResult{Code: -5, Msg: err.Error()}
- }
- serviceRate = pricing.ServiceRate
- serviceCharge = allPayment * float64(serviceRate) / 1000
- allReward = allPayment - serviceCharge
- break
- case 3: // 自报价,m3 = x3 * r3
- allReward = float64(signTaskInfo.Offer)
- var pricing *model.InfoPricingStrategy
- err = g.DB().Model("info_pricing_strategy").WithAll().Where(whereStr1).Scan(&pricing)
- if err != nil {
- return &TalentHttpResult{Code: -5, Msg: err.Error()}
- }
- serviceRate = pricing.ServiceRate
- serviceCharge = allReward * float64(serviceRate) / 1000
- allPayment = allReward + serviceCharge
- break
- default:
- break
- }
- err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
- // 在task_info表中插入任务
- taskId, err1 := tx.Ctx(ctx).Model(dao.YoungeeTaskInfo.Table).Data(model.YoungeeTaskInfo{
- ProjectId: int(signTaskInfo.ProjectId),
- TalentId: tid,
- AccountId: accountInfo.AccountId,
- TalentPlatformInfoSnap: string(accountSnap),
- TalentPersonalInfoSnap: string(talentSnap),
- TalentPostAddrSnap: string(addrSnap),
- StrategyId: signTaskInfo.StrategyId,
- TaskReward: allReward,
- SettleAmount: allReward,
- AllPayment: allPayment,
- TaskStage: 1,
- RealPayment: allPayment,
- Penalty: 0,
- FeeForm: strategy.FeeForm,
- ServiceCharge: serviceCharge,
- ServiceRate: serviceRate,
- TaskStatus: 1,
- CreateDate: gtime.Now(),
- CompleteStatus: 1,
- }).InsertAndGetId()
- if err1 != nil {
- return err1
- }
- // 对应项目的报名人数自增
- _, err1 = tx.Ctx(ctx).Model(dao.ProjectInfo.Table).Where(dao.ProjectInfo.Columns.ProjectId, projectDetail.ProjectId).Increment(dao.ProjectInfo.Columns.ApplyNum, 1)
- if err1 != nil {
- return err1
- }
- fmt.Printf("%+v", taskId)
- return nil
- })
- if err != nil {
- return &TalentHttpResult{Code: -18, Msg: "add Task data failed"}
- }
- return &TalentHttpResult{Code: 0, Msg: "success"}
- }
- // 判断是否已报名任务
- func IsSignUpTask(r *ghttp.Request) *TalentHttpResult {
- projectId := r.GetQueryInt("project_id", -1)
- accountId := r.GetQueryInt("account_id", -1)
- fmt.Printf("%+v\n", projectId)
- fmt.Printf("%+v\n", accountId)
- isSignUp, err := g.Model(dao.YoungeeTaskInfo.Table).Where("project_id = ? and account_id = ?", projectId, accountId).Count()
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: err.Error()}
- }
- return &TalentHttpResult{Code: 0, Msg: "success", Data: isSignUp}
- }
- // 查询所有任务
- func GetTaskBriefList(r *ghttp.Request) *TalentHttpResult {
- tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
- }
- // 构造查询条件
- whereStr := fmt.Sprintf("talent_id = '%s'", tid)
- fmt.Print(whereStr)
- // 获取任务列表
- var taskList []*model.YoungeeTaskInfo
- err = g.Model(dao.YoungeeTaskInfo.Table).Where(whereStr).Scan(&taskList)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get task list failed"}
- }
- // 为每个任务根据项目id查询项目名称和主图
- taskBriefList := youngee_talent_model.TaskInfoBriefList{}
- for _, v := range taskList {
- projectInfo, err := g.Model(dao.ProjectInfo.Table).Where("project_id = ?", v.ProjectId).One()
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get project info failed"}
- }
- mainPhoto, err := g.Model(dao.YounggeeProductPhoto.Table).One("product_id = ? and symbol = 1", projectInfo[dao.ProjectInfo.Columns.ProductId])
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get product mainphoto failed"}
- }
- platform, err := g.Model(dao.InfoThirdPlatform.Table).One("platform_id = ?", projectInfo[dao.ProjectInfo.Columns.ProjectPlatform])
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get platform failed"}
- }
- account, err := g.Model(dao.YoungeePlatformAccountInfo.Table).One("platform_id = ? and talent_id = ?", projectInfo[dao.ProjectInfo.Columns.ProjectPlatform], v.TalentId)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get account info failed"}
- }
- taskInfoBrief := &youngee_talent_model.TaskInfoBrief{
- TaskId: uint64(v.TaskId),
- PlatformIconUrl: platform[dao.InfoThirdPlatform.Columns.PlatformIcon].String(),
- PlatformName: platform[dao.InfoThirdPlatform.Columns.PlatformName].String(),
- PlatformNickName: account[dao.YoungeePlatformAccountInfo.Columns.PlatformNickname].String(),
- ProjectName: projectInfo[dao.ProjectInfo.Columns.ProjectName].String(),
- ProductImgUrl: mainPhoto[dao.YounggeeProductPhoto.Columns.PhotoUrl].String(),
- TaskStatus: v.TaskStatus,
- TaskStage: v.TaskStage,
- }
- taskBriefList.AllTaskInfoList = append(taskBriefList.AllTaskInfoList, taskInfoBrief)
- if v.TaskStage <= 3 {
- taskBriefList.SignUpTaskInfoList = append(taskBriefList.SignUpTaskInfoList, taskInfoBrief)
- } else if v.TaskStage <= 9 && v.TaskStage >= 5 {
- taskBriefList.GoingOnTaskInfoList = append(taskBriefList.GoingOnTaskInfoList, taskInfoBrief)
- } else {
- taskBriefList.CompletedTaskInfoList = append(taskBriefList.CompletedTaskInfoList, taskInfoBrief)
- }
- }
- return &TalentHttpResult{Code: 0, Msg: "success", Data: taskBriefList}
- }
- // 查询所有任务
- func GetExeTaskBriefList(r *ghttp.Request) *TalentHttpResult {
- tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
- }
- // 获取任务列表
- var taskList []*model.YoungeeTaskInfo
- err = g.Model(dao.YoungeeTaskInfo.Table).Where("talent_id = ?", tid).And("task_stage IN(?)", g.Slice{8, 11, 14, 17}).Scan(&taskList)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get task list failed"}
- }
- // 为每个任务根据项目id查询项目名称和主图
- taskBriefList := youngee_talent_model.EXETaskInfoBriefList{}
- for _, v := range taskList {
- projectInfo, err := g.Model(dao.ProjectInfo.Table).Where("project_id = ?", v.ProjectId).One()
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get project info failed"}
- }
- mainPhoto, err := g.Model(dao.YounggeeProductPhoto.Table).One("product_id = ? and symbol = 1", projectInfo[dao.ProjectInfo.Columns.ProductId])
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get product mainphoto failed"}
- }
- platform, err := g.Model(dao.InfoThirdPlatform.Table).One("platform_id = ?", projectInfo[dao.ProjectInfo.Columns.ProjectPlatform])
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get platform failed"}
- }
- account, err := g.Model(dao.YoungeePlatformAccountInfo.Table).One("platform_id = ? and talent_id = ?", projectInfo[dao.ProjectInfo.Columns.ProjectPlatform], v.TalentId)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get account info failed"}
- }
- taskInfoBrief := &youngee_talent_model.TaskInfoBrief{
- TaskId: uint64(v.TaskId),
- PlatformIconUrl: platform[dao.InfoThirdPlatform.Columns.PlatformIcon].String(),
- PlatformName: platform[dao.InfoThirdPlatform.Columns.PlatformName].String(),
- PlatformNickName: account[dao.YoungeePlatformAccountInfo.Columns.PlatformNickname].String(),
- ProjectName: projectInfo[dao.ProjectInfo.Columns.ProjectName].String(),
- ProductImgUrl: mainPhoto[dao.YounggeeProductPhoto.Columns.PhotoUrl].String(),
- TaskStatus: v.TaskStatus,
- TaskStage: v.TaskStage,
- }
- if v.TaskStage == 8 {
- taskBriefList.List1 = append(taskBriefList.List1, taskInfoBrief)
- } else if v.TaskStage == 11 {
- taskBriefList.List2 = append(taskBriefList.List2, taskInfoBrief)
- } else if v.TaskStage == 14 {
- taskBriefList.List3 = append(taskBriefList.List3, taskInfoBrief)
- } else if v.TaskStage == 17 {
- taskBriefList.List4 = append(taskBriefList.List4, taskInfoBrief)
- }
- }
- return &TalentHttpResult{Code: 0, Msg: "success", Data: taskBriefList}
- }
- func GetTaskNum(r *ghttp.Request) *TalentHttpResult {
- tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
- }
- // 构造查询条件
- whereStr1 := fmt.Sprintf("talent_id = '%s'", tid)
- whereStr2 := fmt.Sprintf("talent_id = '%s' and task_stage <= 3", tid)
- whereStr3 := fmt.Sprintf("talent_id = '%s' and task_stage <= 19 and task_stage >= 5", tid)
- whereStr4 := fmt.Sprintf("talent_id = '%s' and (task_stage = 4 or task_stage >= 20)", tid)
- num1, err := g.Model(dao.YoungeeTaskInfo.Table).Where(whereStr1).Count()
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get account info failed"}
- }
- num2, err := g.Model(dao.YoungeeTaskInfo.Table).Where(whereStr2).Count()
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get account info failed"}
- }
- num3, err := g.Model(dao.YoungeeTaskInfo.Table).Where(whereStr3).Count()
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get account info failed"}
- }
- num4, err := g.Model(dao.YoungeeTaskInfo.Table).Where(whereStr4).Count()
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get account info failed"}
- }
- TaskNum := &youngee_talent_model.TaskNum{
- AllNum: num1,
- SignUpNum: num2,
- GoingOnNum: num3,
- CompletedNum: num4,
- }
- return &TalentHttpResult{Code: 0, Msg: "success", Data: TaskNum}
- }
- // 获取任务详情
- func GetTaskDetail(r *ghttp.Request) *TalentHttpResult {
- taskId := r.GetQueryInt("task_id", -1)
- var task *model.YoungeeTaskInfo
- err := g.Model(dao.YoungeeTaskInfo.Table).Where("task_id = ?", taskId).Scan(&task)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get task info failed"}
- }
- var projectDetail *youngee_talent_model.ProjectDetail
- err = g.Model(youngee_talent_model.ProjectDetail{}).WithAll().Where("project_id", task.ProjectId).Scan(&projectDetail)
- if err != nil {
- return &TalentHttpResult{Code: -3, Msg: "data query failed"}
- }
- var productPhoto *model.YounggeeProductPhoto
- err = g.Model(dao.YounggeeProductPhoto.Table).Where("product_id = ? and symbol = 1", projectDetail.ProductId).Scan(&productPhoto)
- if err != nil {
- return &TalentHttpResult{Code: -3, Msg: "data query failed"}
- }
- var strategy *model.RecruitStrategy
- err = g.Model(dao.RecruitStrategy.Table).Where("project_id = ? and strategy_id = ?", task.ProjectId, task.StrategyId).Scan(&strategy)
- if err != nil {
- return &TalentHttpResult{Code: -3, Msg: "data query failed"}
- }
- taskDetail := &youngee_talent_model.TaskDetail{
- TaskInfo: task,
- ProjectDetail: projectDetail,
- ProductPhoto: productPhoto,
- Strategy: strategy,
- }
- return &TalentHttpResult{Code: 0, Msg: "success", Data: taskDetail}
- }
- // 获取物流信息
- func GetTaskLogisticsInfo(r *ghttp.Request) *TalentHttpResult {
- taskId := r.GetQueryInt("task_id", -1)
- var logistics *model.YoungeeTaskLogistics
- err := g.Model(dao.YoungeeTaskLogistics.Table).Where("task_id = ?", taskId).Scan(&logistics)
- if err != nil {
- return &TalentHttpResult{Code: -1, Msg: "Get logistics info failed"}
- }
- return &TalentHttpResult{Code: 0, Msg: "success", Data: logistics}
- }
|