package service import ( "context" "fmt" "github.com/issue9/conv" "github.com/sirupsen/logrus" "time" "youngee_b_api/db" "youngee_b_api/model/common_model" "youngee_b_api/model/gorm_model" "youngee_b_api/model/http_model" ) var SLocalLife *sLocalLife type sLocalLife struct { } // CreateSLocalLife 新建服务商加入商单后的公开本地生活 func (*sLocalLife) CreateSLocalLife(ctx context.Context, request *http_model.LocalLifeAddToListRequest) error { var sLocalLifeInfo *gorm_model.YounggeeSLocalLifeInfo sLocalLifeInfo = &gorm_model.YounggeeSLocalLifeInfo{} // 1. 建立SLocalLife信息 // 1.1. 根据传入的LocalLifeId去LocalLife表查找信息补全SLocalLife localLifeInfo, localErr := db.GetLocalLifeDetail(ctx, request.LocalId) if localErr != nil { return localErr } if localLifeInfo != nil { sLocalLifeInfo.LocalId = localLifeInfo.LocalId sLocalLifeInfo.SettleNum = 0 sLocalLifeInfo.RecruitNum = 0 sLocalLifeInfo.ApplyNum = 0 sLocalLifeInfo.LocalType = localLifeInfo.LocalType sLocalLifeInfo.LocalName = localLifeInfo.LocalName sLocalLifeInfo.LocalPlatform = localLifeInfo.LocalPlatform sLocalLifeInfo.TaskStatus = localLifeInfo.TaskStatus sLocalLifeInfo.StoreId = localLifeInfo.StoreId sLocalLifeInfo.TeamBuyingId = localLifeInfo.TeamBuyingId sLocalLifeInfo.TaskForm = localLifeInfo.TaskForm sLocalLifeInfo.ContentType = localLifeInfo.ContentType sLocalLifeInfo.SLocalStatus = 2 // 1.2. 填入加入商单操作人信息 sLocalLifeInfo.SubAccountId = request.SubAccountId sLocalLifeInfo.SupplierId = request.SupplierId sLocalLifeInfo.OperatorType = request.OperatorType sLocalLifeInfo.CreateTime = time.Now() // 2. 入库 sLocalId, createErr := db.CreateSLocalLife(ctx, sLocalLifeInfo) if createErr != nil { return createErr } // 2. 建立新的recruitStrategy // 2.1. 根据projectId去查找原来的recruitStrategy recruitStrategys, strategyErr := db.GetRecruitStrategyByProjectId(ctx, request.LocalId) if strategyErr != nil { return strategyErr } // 2.2. 设置新的结构体以写入 var currRecruitStrategys []gorm_model.RecruitStrategy for _, strategy := range recruitStrategys { var currStrategy gorm_model.RecruitStrategy currStrategy.StrategyID = strategy.StrategyID currStrategy.QuoteRecruitStrategyId = int(strategy.RecruitStrategyID) currStrategy.FeeForm = strategy.FeeForm currStrategy.FollowersLow = strategy.FollowersLow currStrategy.FollowersUp = strategy.FollowersUp currStrategy.RecruitNumber = strategy.RecruitNumber currStrategy.Offer = strategy.Offer currStrategy.TOffer = strategy.TOffer currStrategy.ProjectID = "0" currStrategy.ServiceCharge = strategy.ServiceCharge currStrategy.ServiceRate = strategy.ServiceRate currStrategy.SLocalId = sLocalId currStrategy.StrategyType = 2 currRecruitStrategys = append(currRecruitStrategys, currStrategy) } // 2.3. 写入 createStrategyErr := db.CreateSpecialStrategy(ctx, currRecruitStrategys) if createStrategyErr != nil { return createStrategyErr } } return nil } func (*sLocalLife) ShowSLocalLife(ctx context.Context, req *http_model.ShowSLocalRequest) (*http_model.ShowSLocalData, error) { var sLocalInfo *http_model.ShowSLocalData sLocalInfo = &http_model.ShowSLocalData{} // 1. 查询系统信息 localInfo, localErr := db.GetLocalLifeDetail(ctx, req.LocalId) if localErr != nil { return nil, localErr } if localInfo != nil { sLocalInfo.LocalId = localInfo.LocalId sLocalInfo.SLocalId = req.SLocalId sLocalInfo.LocalPlatform = localInfo.LocalPlatform sLocalInfo.TaskStatus = localInfo.TaskStatus sLocalInfo.EnterpriseId = localInfo.EnterpriseId sLocalInfo.ServiceChargeRate = localInfo.ServiceChargeRate sLocalInfo.EstimatedCost = localInfo.EstimatedCost sLocalInfo.CreateAt = conv.MustString(localInfo.CreatedAt) // 2. 关联主体 // 2.1. 门店信息 storeInfo, storeErr := db.FindStoreById(ctx, localInfo.StoreId) if storeErr != nil { return nil, storeErr } if storeInfo != nil { sLocalInfo.StoreId = storeInfo.StoreId sLocalInfo.StoreName = storeInfo.StoreName sLocalInfo.StoreCategory = storeInfo.StoreCategory sLocalInfo.StoreRelatedAt = conv.MustString(localInfo.StoreRelatedAt) // 2.2. 门店图片信息 storePhotoInfo, storePhotoErr := db.GetStorePhotoByStoreID(ctx, localInfo.StoreId) if storePhotoErr != nil { return nil, storePhotoErr } if storePhotoInfo != nil { for _, photo := range storePhotoInfo { if photo.Symbol == 1 { sLocalInfo.StoreMainPhotoSymbol = 1 sLocalInfo.StoreMainPhotoUrl = photo.PhotoUrl sLocalInfo.StoreMainPhotoUid = photo.PhotoUid } } } } // 2.3. 团购信息 teamInfo, teamErr := db.FindTeamById(ctx, localInfo.StoreId) if teamErr != nil { return nil, teamErr } if teamInfo != nil { sLocalInfo.TeamBuyingId = teamInfo.StoreId sLocalInfo.TeamBuyingName = teamInfo.TeamBuyingName sLocalInfo.TeamBuyingCategory = teamInfo.TeamBuyingCategory sLocalInfo.TeamBuyingRelatedAt = conv.MustString(localInfo.TeamBuyingRelatedAt) // 2.4. 团购图片信息 teamPhotoInfo, teamPhotoErr := db.GetTeamPhotoByStoreID(ctx, localInfo.StoreId) if teamPhotoErr != nil { return nil, teamPhotoErr } if teamPhotoInfo != nil { for _, photo := range teamPhotoInfo { if photo.Symbol == 1 { sLocalInfo.TeamMainPhotoSymbol = 1 sLocalInfo.TeamMainPhotoUrl = photo.PhotoUrl sLocalInfo.TeamMainPhotoUid = photo.PhotoUid } } } } // 3. 招募要求 sLocalInfo.TalentType = localInfo.TalentType sLocalInfo.RecruitDdl = conv.MustString(localInfo.RecruitDdl) recruitStrategy, recruitErr := db.GetRecruitStrategyBySLocalId(ctx, req.SLocalId) if recruitErr != nil { return nil, recruitErr } if recruitStrategy != nil { for _, strategy := range recruitStrategy { showStrategy := http_model.ShowSRecruitStrategy{ StrategyID: strategy.StrategyID, FeeForm: strategy.FeeForm, FollowersLow: strategy.FollowersLow, FollowersUp: strategy.FollowersUp, RecruitNumber: strategy.RecruitNumber, Offer: strategy.Offer, } sLocalInfo.RecruitStrategys = append(sLocalInfo.RecruitStrategys, showStrategy) } } // 4. 执行要求 sLocalInfo.TaskForm = localInfo.TaskForm sLocalInfo.ContentType = localInfo.ContentType briefInfo, briefErr := db.FindBriefByLocalId(ctx, req.LocalId) if briefErr != nil { return nil, briefErr } if briefInfo != nil { sLocalInfo.LocalBrief = briefInfo } materialInfo, materialErr := db.FindMaterialByLocalId(ctx, req.LocalId) if materialErr != nil { return nil, materialErr } if materialInfo != nil { sLocalInfo.LocalMaterial = materialInfo } } return sLocalInfo, nil } func (*sLocalLife) GetFullSLocalLifeList(ctx context.Context, pageSize, pageNum int32, supplierId int, condition *common_model.SLocalLifeCondition) (*http_model.FullSLocalListData, error) { // 1. 查询本地生活任务基本信息 fullLocals, total, err := db.GetFullSLocalLifeList(ctx, pageSize, pageNum, condition) if err != nil { logrus.WithContext(ctx).Errorf("[fullLocals service] call GetFullSLocalLifeList error,err:%+v", err) return nil, err } var fullLocalData *http_model.FullSLocalListData fullLocalData = &http_model.FullSLocalListData{} fullLocalData.Total = total for _, fullLocal := range fullLocals { var fullLocalPreview *http_model.FullSLocalPreview fullLocalPreview = &http_model.FullSLocalPreview{} fullLocalPreview.LocalId = fullLocal.LocalId fullLocalPreview.TaskStatus = fullLocal.TaskStatus fullLocalPreview.LocalPlatform = fullLocal.LocalPlatform fullLocalPreview.TaskForm = fullLocal.TaskForm fullLocalPreview.LocalType = fullLocal.LocalType fullLocalPreview.LocalContentType = fullLocal.ContentType fullLocalPreview.SupplierId = supplierId fullLocalPreview.SubAccountId = fullLocal.SubAccountId fullLocalPreview.OperatorType = fullLocal.OperatorType fullLocalPreview.CreateTime = conv.MustString(fullLocal.CreateTime) fullLocalPreview.ServiceCharge = fullLocal.ServiceCharge fullLocalPreview.ServiceChargeActual = fullLocal.ServiceChargeActual fullLocalPreview.ApplyNum = fullLocal.ApplyNum fullLocalPreview.RecruitNum = fullLocal.RecruitNum fullLocalPreview.SettleNum = fullLocal.SettleNum fullLocalData.FullSLocalPreview = append(fullLocalData.FullSLocalPreview, fullLocalPreview) } // 2. 查询本地生活补充信息:门店信息,招募策略 for _, local := range fullLocalData.FullSLocalPreview { // 2.1. 门店信息 storeInfo, productErr := db.FindStoreById(ctx, local.StoreId) if productErr != nil { return nil, productErr } if storeInfo != nil { local.StoreId = storeInfo.StoreId local.StoreName = storeInfo.StoreName } // 2.2. 门店图片信息 productPhotoInfo, productPhotoErr := db.GetStorePhotoByStoreID(ctx, local.StoreId) if productPhotoErr != nil { return nil, productPhotoErr } if productPhotoInfo != nil { for _, photo := range productPhotoInfo { fmt.Println(photo) if photo.Symbol == 1 { local.StoreMainPhotoSymbol = 1 local.StoreMainPhotoUrl = photo.PhotoUrl local.StoreMainPhotoUid = photo.PhotoUid } } } } return fullLocalData, nil } // GetLocalTaskList 查询本地生活子任务 func (*sLocalLife) GetLocalTaskList(ctx context.Context, pageSize, pageNum int32, condition *common_model.LocalTaskConditions) (*http_model.LocalTaskListData, error) { var localTaskListData *http_model.LocalTaskListData localTaskListData = &http_model.LocalTaskListData{} // 1. 根据condition查询子任务信息 localTaskList, total, localTaskErr := db.GetLocalTaskList(ctx, pageSize, pageNum, condition) if localTaskErr != nil { return nil, localTaskErr } if localTaskList != nil { localTaskListData.Total = total for _, localTask := range localTaskList { var localTaskInfo *http_model.LocalTaskPreview localTaskInfo = &http_model.LocalTaskPreview{} // 2. 补充查询达人身份信息 talentInfo, talentErr := db.FindUserInfoByTalentId(ctx, localTask.TalentID) if talentErr != nil { return nil, talentErr } if talentInfo != nil { localTaskInfo.TaskId = localTask.TaskID localTaskInfo.TaskStage = localTask.TaskStage localTaskInfo.ServiceCharge = localTask.ServiceCharge localTaskInfo.DraftFee = localTask.DraftFee localTaskInfo.SupportFee = localTask.SupportFee localTaskInfo.StrategyId = localTask.StrategyID localTaskInfo.TaskStatus = localTask.TaskStatus localTaskInfo.CreateDate = conv.MustString(localTask.CreateDate) localTaskInfo.SelectDate = conv.MustString(localTask.SelectDate) localTaskInfo.DeliveryDate = conv.MustString(localTask.DeliveryDate) localTaskInfo.SignedTime = conv.MustString(localTask.SignedTime) localTaskInfo.CurBreakAt = conv.MustString(localTask.CurBreakAt) localTaskInfo.FansNum = localTask.FansNum localTaskInfo.VoteAvg = localTask.VoteAvg localTaskInfo.CommitAvg = localTask.CommitAvg localTaskInfo.BOperator = localTask.BOperator localTaskInfo.BOperatorType = localTask.BOperatorType localTaskInfo.SOperator = localTask.SOperator localTaskInfo.SOperatorType = localTask.SOperatorType localTaskInfo.PlatformNickname = talentInfo.NickName localTaskInfo.FansCount = talentInfo.Fan localTaskInfo.AvatarUrl = talentInfo.HeadUri localTaskInfo.Location = talentInfo.City localTaskInfo.Gender = talentInfo.Gender localTaskListData.LocalTaskPreview = append(localTaskListData.LocalTaskPreview, localTaskInfo) } } // 3. 本地生活任务信息补充 sLocalInfo, sLocalErr := db.GetSLocalLifeDetail(ctx, condition.SLocalId) if sLocalErr != nil { return nil, sLocalErr } if sLocalInfo != nil { localTaskListData.SettleNum = sLocalInfo.SettleNum localTaskListData.RecruitNum = sLocalInfo.RecruitNum localTaskListData.ServiceChargeActual = sLocalInfo.ServiceChargeActual } } return localTaskListData, nil } // ChangeTaskSupplierStatus 本地生活达人报名通过、拒绝报名 func (*sLocalLife) ChangeTaskSupplierStatus(ctx context.Context, req *http_model.LocalChangeSupplierStatusRequest) error { RecruitStrategyIDs, err := db.ChangeLocalTaskStatus(ctx, req.TaskIds, req.SupplierStatus) if err != nil { logrus.WithContext(ctx).Errorf("[project service] call ChangeTaskStatus error,err:%+v", err) return err } fmt.Println(RecruitStrategyIDs) return nil } // ChangeSupplierStatus 定向本地生活加入商单或拒绝 func (*sLocalLife) ChangeSupplierStatus(ctx context.Context, req *http_model.SpecialLocalAddToListRequest) error { var sLocalInfo *gorm_model.YounggeeSLocalLifeInfo sLocalInfo = &gorm_model.YounggeeSLocalLifeInfo{} sLocalInfo.SLocalId = req.SLocalId sLocalInfo.SupplierId = req.SupplierId sLocalInfo.SubAccountId = req.SubAccountId sLocalInfo.OperatorType = req.OperatorType sLocalInfo.SLocalStatus = req.SLocalStatus err := db.UpdateSLocal(ctx, sLocalInfo) if err != nil { return err } return nil } // CreateSpecialStrategy 定向本地生活替换服务费率 func (*sLocalLife) CreateSpecialStrategy(ctx context.Context, request *http_model.LocalSpecialAddStrategyRequest) error { // 1. 添加服务商招募策略 // 1.1. 整理数据 for _, strategy := range request.RecruitStrategys { // 一口价需要计算服务费率和达人所见报价 strategy.ServiceRate = int(strategy.ServiceCharge / strategy.Offer) strategy.TOffer = strategy.Offer - strategy.ServiceCharge strategy.ProjectID = "0" strategy.SLocalId = request.SLocalId strategy.QuoteRecruitStrategyId = int(strategy.RecruitStrategyID) } createErr := db.CreateSpecialStrategy(ctx, request.RecruitStrategys) if createErr != nil { return createErr } // 2. 修改sProject中的字段 var sLocalInfo *gorm_model.YounggeeSLocalLifeInfo sLocalInfo = &gorm_model.YounggeeSLocalLifeInfo{} sLocalInfo.SLocalId = request.SLocalId sLocalInfo.StrategyStatus = 1 sLocalInfo.CreateStrategyId = request.CreateStrategyId sLocalInfo.CreateStrategyType = request.CreateStrategyType updateErr := db.UpdateSLocal(ctx, sLocalInfo) if updateErr != nil { return updateErr } return nil }