package sectask import ( "context" "fmt" "github.com/gogf/gf/frame/g" "strconv" "youngmini_server/app/dao" "youngmini_server/app/model" "youngmini_server/app/model/youngee_talent_model" "youngmini_server/app/utils" //"youngmini_server/app/model/youngee_talent_model" _ "youngmini_server/app/model/youngee_talent_model" ) var service = new(secTaskService) type secTaskService struct { } func (s *secTaskService) List(ctx context.Context, listSecTaskReq *ListSecTaskReq, tid string) (res ListSecTaskRes, err error) { var taskStageList = g.Slice{} switch listSecTaskReq.TaskStage { case 1: taskStageList = g.Slice{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} break case 2: taskStageList = g.Slice{2, 3} break case 3: taskStageList = g.Slice{6, 7, 8} break case 4: taskStageList = g.Slice{5, 9, 10} break } //根据达人id和任务阶段筛选,含任务信息。 whereCondition := g.Map{ dao.YounggeeSecTaskInfo.Columns.TaskStage: taskStageList, dao.YounggeeSecTaskInfo.Columns.TalentId: tid, } err = dao.YounggeeSecTaskInfo.Ctx(ctx).WithAll().Where(whereCondition).Scan(&res.SecTask) if err != nil { return } res.Count = len(res.SecTask) //键为字符串类型,值为model.InfoThirdPlatform类型 platformMap := make(map[string]model.InfoThirdPlatform) platformInfo := []*model.InfoThirdPlatform{} if res.Count != 0 { err = g.Model(dao.InfoThirdPlatform.Table).Scan(&platformInfo) if err != nil { fmt.Println(err) return } //以便后续根据平台ID快速检索和访问平台信息。 //strconv.Itoa用于将int转为字符串 //ListSecTaskSql中定义了平台表中的属性 for i, _ := range platformInfo { platformMap[strconv.Itoa(platformInfo[i].PlatformId)] = *platformInfo[i] } // 为每个任务根据项目id查询项目名称和主图 for index, v := range res.SecTask { whereCondition1 := g.Map{ dao.YounggeeSelectionInfo.Columns.SelectionId: v.SelectionId, } var selection *model.YounggeeSelectionInfo err = g.Model(dao.YounggeeSelectionInfo.Table).Where(whereCondition1).Scan(&selection) if err != nil || selection == nil { if err == nil { fmt.Println("没查到选品") } else { return } } whereCondition1 = g.Map{ dao.YoungeePlatformAccountInfo.Columns.PlatformId: selection.Platform, dao.YoungeePlatformAccountInfo.Columns.TalentId: v.TalentId, } var account *model.YoungeePlatformAccountInfo err = g.Model(dao.YoungeePlatformAccountInfo.Table).Where(whereCondition1).Scan(&account) if err != nil { fmt.Println(err) return } // 查询RewardStrategy表数据 // 或者使用指针类型并初始化 var RewardStrategy []*youngee_talent_model.RewardStrategy err = g.DB().Model(youngee_talent_model.RewardStrategy{}).WithAll().Where("selection_id", v.SelectionId).Scan(&RewardStrategy) if err != nil { fmt.Println("ffff") } var sectaskTable *youngee_talent_model.SecTaskInfoDetail err = g.DB().Model("younggee_sec_task_info").Where("talent_id = ? AND selection_id = ? ", tid, v.SelectionId).Scan(§askTable) if err != nil { fmt.Println(err) return } res.SecTask[index].PlatformIconUrl = platformMap[strconv.Itoa(selection.Platform)].PlatformIcon res.SecTask[index].PlatformName = platformMap[strconv.Itoa(selection.Platform)].PlatformName res.SecTask[index].PlatformNickName = account.PlatformNickname res.SecTask[index].SelectionName = selection.SelectionName res.SecTask[index].ProductPhotoSnap = selection.ProductPhotoSnap res.SecTask[index].TaskDdl = selection.TaskDdl res.SecTask[index].RewardStrategy = RewardStrategy //悬赏策略表 res.SecTask[index].SecTaskTable = sectaskTable //sectask表中全部数据 //res.SecTask[index].YounggeeProductPhoto = ProductPhoto //代替商品照片快照 //fmt.Println("--------------res.SecTask[index]: ", res.SecTask[index]) fmt.Println("--------------selection: ", selection) } } return } func (s *secTaskService) ListTab(listSecTaskTabReq *ListSecTaskTabReq, tid string) (res *ListSecTaskTabRes) { //获得tab_stage var whereStr string //前端点击了那个tab TabStage switch listSecTaskTabReq.TabStage { //全部 case 1: // 返回指定talentId的所有数据 whereStr = fmt.Sprintf("talent_id='%s'", tid) //case 2: // // 返回指定talentId且free_stage为3, 4, 5的数据 // whereStr = fmt.Sprintf("talent_id='%s' AND free_stage IN (3, 4, 5)", tid) //已出单 case 2: // 返回指定talentId且sale_num_all大于0的数据 whereStr = fmt.Sprintf("talent_id='%s' AND sale_num_all > 0", tid) //已过期 case 3: // 返回指定talentId且已过DDL的数据 whereStr = fmt.Sprintf("talent_id='%s' AND task_ddl < NOW()", tid) } //查task表全部数据 var secTaskInfoList []youngee_talent_model.SecTaskInfoDetail err := g.DB().Model(youngee_talent_model.SecTaskInfoDetail{}).WithAll(). Where(whereStr). Order("task_ddl DESC "). Scan(&secTaskInfoList) if err != nil { return &ListSecTaskTabRes{Count: -1, Msg: err.Error(), SecTaskTable: nil} } c := len(secTaskInfoList) return &ListSecTaskTabRes{Count: c, Msg: "success", SecTaskTable: secTaskInfoList} } func UpdateStageAndStatus(ctx context.Context, updateStageReq *UpdateStageReq) (err error) { whereCondition := g.Map{ dao.YounggeeSecTaskInfo.Columns.TaskId: updateStageReq.TaskId, } dataUpdate := g.Map{ dao.YounggeeSecTaskInfo.Columns.TaskStage: updateStageReq.TaskStage, dao.YounggeeSecTaskInfo.Columns.AssignmentStatus: updateStageReq.AssignmentStatus, strconv.Itoa(dao.YounggeeSecTaskInfo.Columns.RewardStage): updateStageReq.RewardStage, } fmt.Println("----UpdateStageAndStatus-->", dataUpdate) _, err = dao.YounggeeSecTaskInfo.Ctx(ctx).Where(whereCondition).Data(dataUpdate).Update() if err != nil { return } return } func (s *secTaskService) ShowLogisticsDetail(ctx context.Context, tid, taskId string) (*LogisticsDetail, error) { var resp = LogisticsDetail{ LogisticsCompany: "", LogisticsNumber: "", AddressSnap: "", LogisticsContext: nil, } // 校验达人id是否一致,并查询达人收货地址快照 talentWhereCondition := g.Map{ dao.YounggeeSecTaskInfo.Columns.TaskId: taskId, } var secTask *model.YounggeeSecTaskInfo err := dao.YounggeeSecTaskInfo.Ctx(ctx).Where(talentWhereCondition).Scan(&secTask) if err != nil || secTask == nil { g.Log().Error("任务表查询失败") return nil, err } if secTask.TalentId != tid { g.Log().Error("用户id不一致") return nil, err } //报名成功时已有地址快照 resp.AddressSnap = secTask.TalentPostAddrSnap // 根据任务id查询物流快递公司和快递单号 whereCondition := g.Map{ dao.YoungeeTaskLogistics.Columns.TaskId: taskId, } var logisticsInfo *model.YoungeeTaskLogistics err = dao.YoungeeTaskLogistics.Ctx(ctx).Where(whereCondition).Scan(&logisticsInfo) if err != nil || logisticsInfo == nil { g.Log().Error("物流信息表查询失败") return nil, err } resp.LogisticsCompany = logisticsInfo.CompanyName resp.LogisticsNumber = logisticsInfo.LogisticsNumber // 查询物流详细信息,返回规定的快递状态 var logisticsDetail = utils.GetKDDetails(logisticsInfo.CompanyName, logisticsInfo.LogisticsNumber) if err != nil || logisticsInfo == nil { g.Log().Error("调用快递100API查询失败") return nil, err } resp.LogisticsContext = logisticsDetail return &resp, nil }