12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094 |
- package service
- import (
- "errors"
- "github.com/sirupsen/logrus"
- "reflect"
- "strconv"
- "strings"
- "time"
- "youngee_m_api/app/dao"
- "youngee_m_api/app/entity"
- "youngee_m_api/app/util"
- "youngee_m_api/app/vo"
- )
- type LocalLifeService struct{}
- // 创建本地生活任务
- func (s LocalLifeService) CreateLocalLife(localCreateParam *vo.LocalCreateParam) (*string, error) {
- // a) 生成本地生活项目id
- localId := strings.ReplaceAll(util.GenerateUUID(11), "-", "")
- // b) 查找关联门店信息
- product, err := dao.StoreDao{}.GetStoreByID(localCreateParam.StoreId)
- if err != nil {
- return nil, err
- }
- if product == nil {
- return nil, errors.New("未找到关联门店")
- }
- // c)创建种草任务
- var operatorType int64
- if localCreateParam.SubAccountId == 0 {
- operatorType = 1
- } else {
- operatorType = 2
- }
- // d) 任务截止时间
- recruitDdl, err1 := time.ParseInLocation("2006-01-02 15:04:05", localCreateParam.RecruitDdl, time.Local)
- if err1 != nil {
- return nil, errors.New("failed to parse recruitDdl")
- }
- // 获取定时任务配置id
- infoAutoTask := entity.InfoAutoTask{}
- infoAutoTask = dao.InfoAutoTaskDao{}.GetAutoTaskLast(localCreateParam.EnterpriseId)
- infoAutoDefault := entity.InfoAutoDefault{}
- infoAutoDefault = dao.InfoAutoDefaultDao{}.GetAutoDefaultLast(localCreateParam.EnterpriseId)
- t := time.Now()
- if recruitDdl.Before(t) {
- return nil, errors.New("请修改截止时间")
- }
- newLocalLife := entity.LocalLifeInfo{
- EnterpriseID: localCreateParam.EnterpriseId,
- SubAccountID: localCreateParam.SubAccountId,
- OperatorType: operatorType,
- TaskStatus: 1,
- LocalID: localId,
- LocalType: localCreateParam.LocalType,
- LocalPlatform: localCreateParam.Platform,
- StoreID: localCreateParam.StoreId,
- StoreRelatedAt: time.Now(),
- PromoteBody: localCreateParam.PromoteBody,
- Donate: localCreateParam.Donate,
- TeamBuyingId: localCreateParam.TeamBuyingId,
- TeamBuyingRelatedAt: time.Now(),
- CreatedAt: t,
- AutoTaskID: infoAutoTask.AutoTaskID,
- AutoDefaultID: infoAutoDefault.AutoDefaultID,
- LocalName: localCreateParam.LocalName,
- TalentType: localCreateParam.TalentType,
- RecruitDdl: recruitDdl,
- TaskForm: localCreateParam.TaskForm,
- ContentType: localCreateParam.ContentType,
- TaskDetail: localCreateParam.TaskDetail,
- }
- if localCreateParam.LocalType == 1 {
- newLocalLife.ServiceChargeRate = localCreateParam.ServiceChargeRate
- }
- err = dao.LocalLifeDao{}.CreateLocalLife(newLocalLife)
- if err != nil {
- return nil, err
- }
- // 4. 更新选品brief和示例(本地生活任务补充信息)
- if localCreateParam.LocalBrief != nil {
- // 插入新的brief
- for _, v := range localCreateParam.LocalBrief {
- brief := entity.LocalLifeBrief{
- LocalID: localId,
- FileUid: v.FileUid,
- FileName: v.Name,
- FileUrl: v.FileUrl,
- CreatedAt: time.Now(),
- Type: v.Type,
- }
- err = dao.LocalLifeBriefDao{}.CreateLocalBrief(brief)
- if err != nil {
- return nil, err
- }
- }
- }
- if localCreateParam.LocalMaterial != nil {
- // 删除已有示例
- err = dao.LocalLifeMaterialDao{}.DeleteLocalMaterialByLocalId(localId)
- if err != nil {
- return nil, err
- }
- // 插入新的示例
- for _, v := range localCreateParam.LocalMaterial {
- material := entity.LocalLifeMaterial{
- LocalID: localId,
- FileUid: v.FileUid,
- FileName: v.Name,
- FileUrl: v.FileUrl,
- CreatedAt: time.Now(),
- Type: v.Type,
- }
- err = dao.LocalLifeMaterialDao{}.CreateLocalMaterial(material)
- if err != nil {
- return nil, err
- }
- }
- }
- // 更新公开种草任务的招募策略
- var totalRecruitNum int64
- var estimatedCost float64
- if localCreateParam.RecruitStrategys != nil {
- // 2. 接收并创建新的招募策略
- if len(localCreateParam.RecruitStrategys) != 0 {
- var recruits []entity.RecruitStrategy
- for _, strategy := range localCreateParam.RecruitStrategys {
- if strategy.FeeForm == 2 {
- estimatedCost += float64(strategy.RecruitNumber) * strategy.Offer
- }
- recruitStrategy := entity.RecruitStrategy{
- FeeForm: strategy.FeeForm,
- StrategyID: strategy.StrategyID,
- FollowersLow: strategy.FollowersLow,
- FollowersUp: strategy.FollowersUp,
- RecruitNumber: strategy.RecruitNumber,
- ProjectID: localId,
- StrategyType: 1,
- ServiceRate: localCreateParam.ServiceChargeRate,
- }
- totalRecruitNum += strategy.RecruitNumber
- if strategy.FeeForm == 2 {
- recruitStrategy.Offer = strategy.Offer
- recruitStrategy.ServiceCharge = strategy.Offer * localCreateParam.ServiceChargeRate
- recruitStrategy.TOffer = strategy.Offer * (1 - localCreateParam.ServiceChargeRate)
- }
- recruits = append(recruits, recruitStrategy)
- }
- err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
- if err != nil {
- return nil, err
- }
- }
- }
- _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{LocalID: localId, EstimatedCost: estimatedCost})
- return &localId, nil
- }
- // 更新公开本地生活任务(招募要求、执行要求)
- func (s LocalLifeService) UpdateLocal(localUpdateParam *vo.LocalUpdateParam) (*string, error) {
- // 1. 检查该项目id有无本地任务
- localID := localUpdateParam.LocalID
- localLife, err := dao.LocalLifeDao{}.GetLocalById(localID)
- if err != nil {
- return nil, err
- }
- if localLife == nil {
- return nil, errors.New("本地生活项目不存在")
- }
- recruitDdl := time.Time{} //赋零值
- recruitDdl, _ = time.ParseInLocation("2006-01-02 15:04:05", localUpdateParam.RecruitDdl, time.Local)
- if recruitDdl.Before(localLife.CreatedAt) {
- return nil, errors.New("请修改截止时间")
- }
- // 更新公开种草任务的招募策略
- var totalRecruitNum int64
- var estimatedCost float64
- if localUpdateParam.RecruitStrategys != nil {
- // 1. 删除已有的招募策略
- err = dao.RecruitStrategyDao{}.DeleteRecruitStrategyByProjectID(localUpdateParam.LocalID)
- if err != nil {
- return nil, err
- }
- // 2. 接收并创建新的招募策略
- if len(localUpdateParam.RecruitStrategys) != 0 {
- var recruits []entity.RecruitStrategy
- for _, strategy := range localUpdateParam.RecruitStrategys {
- if strategy.FeeForm == 2 {
- estimatedCost += float64(strategy.RecruitNumber) * strategy.Offer
- }
- recruitStrategy := entity.RecruitStrategy{
- FeeForm: strategy.FeeForm,
- StrategyID: strategy.StrategyID,
- FollowersLow: strategy.FollowersLow,
- FollowersUp: strategy.FollowersUp,
- RecruitNumber: strategy.RecruitNumber,
- ProjectID: localLife.LocalID,
- StrategyType: 1,
- ServiceRate: localLife.ServiceChargeRate,
- }
- totalRecruitNum += strategy.RecruitNumber
- if strategy.FeeForm == 2 {
- recruitStrategy.Offer = strategy.Offer
- recruitStrategy.ServiceCharge = strategy.Offer * localUpdateParam.ServiceChargeRate
- recruitStrategy.TOffer = strategy.Offer * (1 - localUpdateParam.ServiceChargeRate)
- }
- recruits = append(recruits, recruitStrategy)
- }
- err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
- if err != nil {
- return nil, err
- }
- }
- }
- // 2. 数据准备
- //// a) 查找关联商品信息
- //product, err := dao.ProductDAO{}.GetProductByID(project.ProductID)
- //if err != nil {
- // return nil, err
- //}
- //productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(project.ProductID)
- //productInfoToJson, _ := json.Marshal(product)
- //productPhotosToJson, _ := json.Marshal(productPhotos)
- // d) 任务截止时间
- //// f) 更新选品状态
- //if localUpdateParam.LocalStatus != 2 && localUpdateParam.LocalStatus != 8 {
- // localUpdateParam.LocalStatus = 1
- //}
- t := time.Now()
- updateLocalLife := entity.LocalLifeInfo{
- StoreID: localUpdateParam.StoreId,
- TeamBuyingId: localUpdateParam.TeamBuyingId,
- ServiceChargeRate: localUpdateParam.ServiceChargeRate,
- PromoteBody: localUpdateParam.PromoteBody,
- Donate: localUpdateParam.Donate,
- //TaskStatus: localUpdateParam.LocalStatus,
- LocalName: localUpdateParam.LocalName,
- TalentType: localUpdateParam.TalentType,
- RecruitDdl: recruitDdl,
- TaskForm: localUpdateParam.TaskForm,
- ContentType: localUpdateParam.ContentType,
- TaskDetail: localUpdateParam.TaskDetail,
- UpdatedAt: t,
- EstimatedCost: estimatedCost,
- }
- //if localUpdateParam.LocalStatus == 2 {
- // updateLocalLife.SubmitAt = t
- //}
- // 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
- result := util.MergeStructValue(&updateLocalLife, localLife)
- // 利用反射机制将interface类型转换为结构体类型
- v := reflect.ValueOf(&result).Elem()
- if v.Kind() == reflect.Struct {
- updateLocalLife = v.Interface().(entity.LocalLifeInfo)
- //fmt.Println(p)
- }
- // c) 计算预估成本(如果有)
- /*
- var estimatedCost float64
- if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
- estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
- }
- estimatedCostToString, _ := conv.String(estimatedCost)
- updateSelection.EstimatedCost = estimatedCostToString
- */
- // 3. 更新选品
- err = dao.LocalLifeDao{}.UpdateLocal(updateLocalLife)
- if err != nil {
- return nil, err
- }
- // 4. 更新选品brief和示例(本地生活任务补充信息)
- if localUpdateParam.LocalBrief != nil {
- // 删除已有brief
- err = dao.LocalLifeBriefDao{}.DeleteLocalBriefByLocalId(localLife.LocalID)
- if err != nil {
- return nil, err
- }
- // 插入新的brief
- for _, v := range localUpdateParam.LocalBrief {
- brief := entity.LocalLifeBrief{
- LocalID: localLife.LocalID,
- FileUid: v.FileUid,
- FileName: v.Name,
- FileUrl: v.FileUrl,
- CreatedAt: time.Now(),
- Type: v.Type,
- }
- err = dao.LocalLifeBriefDao{}.CreateLocalBrief(brief)
- if err != nil {
- return nil, err
- }
- }
- }
- if localUpdateParam.LocalMaterial != nil {
- // 删除已有示例
- err = dao.LocalLifeMaterialDao{}.DeleteLocalMaterialByLocalId(localLife.LocalID)
- if err != nil {
- return nil, err
- }
- // 插入新的示例
- for _, v := range localUpdateParam.LocalMaterial {
- material := entity.LocalLifeMaterial{
- LocalID: localLife.LocalID,
- FileUid: v.FileUid,
- FileName: v.Name,
- FileUrl: v.FileUrl,
- CreatedAt: time.Now(),
- Type: v.Type,
- }
- err = dao.LocalLifeMaterialDao{}.CreateLocalMaterial(material)
- if err != nil {
- return nil, err
- }
- }
- }
- return &updateLocalLife.LocalID, nil
- }
- // 更新定向本地生活任务(招募要求、执行要求)
- func (s LocalLifeService) UpdateLocalTarget(localUpdateParam *vo.LocalUpdateParam) (*string, error) {
- // 1. 检查该项目id有无本地任务
- localID := localUpdateParam.LocalID
- localLife, err := dao.LocalLifeDao{}.GetLocalById(localID)
- if err != nil {
- return nil, err
- }
- if localLife == nil {
- return nil, errors.New("本地生活项目不存在")
- }
- println("更新定向本地生活任务的招募策略")
- // 更新公开种草任务的招募策略
- var totalRecruitNum int64
- var estimatedCost float64
- if localUpdateParam.RecruitStrategys != nil {
- // 1. 删除已有的招募策略
- err = dao.RecruitStrategyDao{}.DeleteRecruitStrategyByProjectID(localUpdateParam.LocalID)
- if err != nil {
- return nil, err
- }
- // 2. 接收并创建新的招募策略
- if len(localUpdateParam.RecruitStrategys) != 0 {
- var recruits []entity.RecruitStrategy
- for _, strategy := range localUpdateParam.RecruitStrategys {
- if strategy.FeeForm == 2 {
- estimatedCost += float64(strategy.RecruitNumber) * strategy.Offer
- }
- recruitStrategy := entity.RecruitStrategy{
- FeeForm: strategy.FeeForm,
- StrategyID: strategy.StrategyID,
- FollowersLow: strategy.FollowersLow,
- FollowersUp: strategy.FollowersUp,
- RecruitNumber: strategy.RecruitNumber,
- ProjectID: localLife.LocalID,
- StrategyType: 1,
- ServiceRate: localLife.ServiceChargeRate,
- }
- totalRecruitNum += strategy.RecruitNumber
- if strategy.FeeForm == 2 {
- recruitStrategy.Offer = strategy.Offer // 报价
- }
- recruits = append(recruits, recruitStrategy)
- }
- err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
- if err != nil {
- return nil, err
- }
- }
- }
- // 2. 数据准备
- // a) 查找关联商品信息
- //product, err := dao.ProductDAO{}.GetProductByID(project.ProductID)
- //if err != nil {
- // return nil, err
- //}
- //productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(project.ProductID)
- //productInfoToJson, _ := json.Marshal(product)
- //productPhotosToJson, _ := json.Marshal(productPhotos)
- // d) 任务截止时间
- recruitDdl := time.Time{} //赋零值
- recruitDdl, _ = time.ParseInLocation("2006-01-02 15:04:05", localUpdateParam.RecruitDdl, time.Local)
- //// f) 更新选品状态
- //if localUpdateParam.LocalStatus != 2 && localUpdateParam.LocalStatus != 8 {
- // localUpdateParam.LocalStatus = 1
- //}
- t := time.Now()
- updateLocalLife := entity.LocalLifeInfo{
- StoreID: localUpdateParam.StoreId,
- TeamBuyingId: localUpdateParam.TeamBuyingId,
- ServiceChargeRate: localUpdateParam.ServiceChargeRate,
- PromoteBody: localUpdateParam.PromoteBody,
- Donate: localUpdateParam.Donate,
- //TaskStatus: localUpdateParam.LocalStatus,
- LocalName: localUpdateParam.LocalName,
- TalentType: localUpdateParam.TalentType,
- RecruitDdl: recruitDdl,
- TaskForm: localUpdateParam.TaskForm,
- ContentType: localUpdateParam.ContentType,
- TaskDetail: localUpdateParam.TaskDetail,
- UpdatedAt: t,
- Tools: localUpdateParam.Tools,
- EstimatedCost: estimatedCost,
- }
- //if localUpdateParam.LocalStatus == 2 {
- // updateLocalLife.SubmitAt = t
- //}
- // 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
- result := util.MergeStructValue(&updateLocalLife, localLife)
- // 利用反射机制将interface类型转换为结构体类型
- v := reflect.ValueOf(&result).Elem()
- if v.Kind() == reflect.Struct {
- updateLocalLife = v.Interface().(entity.LocalLifeInfo)
- //fmt.Println(p)
- }
- // c) 计算预估成本(如果有)
- /*
- var estimatedCost float64
- if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
- estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
- }
- estimatedCostToString, _ := conv.String(estimatedCost)
- updateSelection.EstimatedCost = estimatedCostToString
- */
- // 3. 更新选品
- err = dao.LocalLifeDao{}.UpdateLocal(updateLocalLife)
- if err != nil {
- return nil, err
- }
- // 4. 更新选品brief和示例(本地生活任务补充信息)
- if localUpdateParam.LocalBrief != nil {
- // 删除已有brief
- err = dao.ProjectBriefDao{}.DeleteSecBriefBySelectionId(localLife.LocalID)
- if err != nil {
- return nil, err
- }
- // 插入新的brief
- for _, v := range localUpdateParam.LocalBrief {
- brief := entity.ProjectBrief{
- ProjectID: localLife.LocalID,
- FileUid: v.FileUid,
- FileName: v.Name,
- FileUrl: v.FileUrl,
- CreatedAt: time.Now(),
- Type: v.Type,
- }
- err = dao.ProjectBriefDao{}.CreateProjectBrief(brief)
- if err != nil {
- return nil, err
- }
- }
- }
- if localUpdateParam.LocalMaterial != nil {
- // 删除已有示例
- err = dao.ProjectMaterialDao{}.DeleteProjectMaterialByProjectId(localLife.LocalID)
- if err != nil {
- return nil, err
- }
- // 插入新的示例
- for _, v := range localUpdateParam.LocalMaterial {
- projectMaterial := entity.ProjectMaterial{
- ProjectID: localLife.LocalID,
- FileUid: v.FileUid,
- FileName: v.Name,
- FileUrl: v.FileUrl,
- CreatedAt: time.Now(),
- Type: v.Type,
- }
- err = dao.ProjectMaterialDao{}.CreateProjectMaterial(projectMaterial)
- if err != nil {
- return nil, err
- }
- }
- }
- return &updateLocalLife.LocalID, nil
- }
- // 本地生活任务预览
- func (s LocalLifeService) GetLocalLifeDetail(localId string) (*vo.ReLocalDetail, error) {
- reLocalDetail := vo.ReLocalDetail{}
- localLife, err := dao.LocalLifeDao{}.GetLocalById(localId)
- if err != nil {
- logrus.Errorf("[localLifeDB service] call GetLocalById error,err:%+v", err)
- return nil, err
- }
- // 系统信息
- reLocalDetail.LocalId = localId
- reLocalDetail.LocalStatus = localLife.TaskStatus
- reLocalDetail.LocalPlatform = localLife.LocalPlatform
- reLocalDetail.CreatedAt = localLife.CreatedAt.Format("2006-01-02 15:04:05")
- reLocalDetail.EstimatedCost = localLife.EstimatedCost // 预估成本
- reLocalDetail.ServiceChargeRate = localLife.ServiceChargeRate
- var creatorName, phone string
- if localLife.OperatorType == 1 && localLife.SubAccountID == 0 {
- enterprise, err := dao.EnterpriseDao{}.GetEnterprise(localLife.EnterpriseID)
- if err == nil && enterprise != nil {
- creatorName = enterprise.BusinessName
- phone, err = dao.UserDao{}.GetPhoneByUserId(enterprise.UserId)
- }
- } else if localLife.OperatorType == 1 && localLife.SubAccountID != 0 {
- subAccount, err := dao.SubAccountDao{}.GetSubAccount(localLife.SubAccountID)
- if err == nil && subAccount != nil {
- creatorName = subAccount.SubAccountName
- phone, err = dao.UserDao{}.GetPhoneByUserId(subAccount.UserId)
- }
- }
- reLocalDetail.CreatorName = creatorName
- reLocalDetail.Phone = phone
- // 关联主体
- var reStore vo.ReStorePreview
- store, err := dao.StoreDao{}.GetStoreByID(localLife.StoreID)
- if err == nil {
- photoUrl, e := dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(store.StoreID)
- if e != nil {
- photoUrl = ""
- }
- reStore = vo.ReStorePreview{
- StoreID: store.StoreID,
- StoreName: store.StoreName,
- StoreLocation: store.StoreLocation,
- StoreCategory: store.StoreCategory,
- TeamNum: store.TeamNum,
- StoreDetail: store.StoreDetail,
- CreatedAt: store.CreatedAt.Format("2006-01-02 15:04:05"),
- PhotoUrl: photoUrl,
- }
- }
- reLocalDetail.StoreInfo = &reStore
- var reTeamBuying vo.ReTeamBuyingPreview
- teamBuying, err := dao.TeamBuyingDao{}.GetTeamBuyingByID(localLife.TeamBuyingId)
- if err == nil {
- photoUrl, e := dao.ProductPhotoDAO{}.GetMainPhotoByTeamBuyingID(teamBuying.TeamBuyingID)
- if e != nil {
- photoUrl = ""
- }
- reTeamBuying = vo.ReTeamBuyingPreview{
- TeamBuyingID: teamBuying.TeamBuyingID,
- TeamBuyingName: teamBuying.TeamBuyingName,
- TeamBuyingPrice: teamBuying.TeamBuyingPrice,
- TeamBuyingCategory: teamBuying.TeamBuyingCategory,
- TeamBuyingDetail: teamBuying.TeamBuyingDetail,
- CreatedAt: teamBuying.CreatedAt.Format("2006-01-02 15:04:05"),
- PhotoUrl: photoUrl,
- }
- }
- reLocalDetail.TeamBuyingInfo = &reTeamBuying
- reLocalDetail.PromoteBody = localLife.PromoteBody
- reLocalDetail.Donate = localLife.Donate
- // 招募要求
- reLocalDetail.TalentType = localLife.TalentType
- reLocalDetail.RecruitDdl = localLife.RecruitDdl.Format("2006-01-02 15:04:05")
- var recruitStrategysPreviews []*vo.LocalRecruitStrategy
- recruitStrategys, err := dao.RecruitStrategyDao{}.GetRecruitStrategyByProjectId(localId)
- if err != nil {
- logrus.Errorf("[localLifeDB service] call GetRecruitStrategy error,err:%+v", err)
- return nil, err
- }
- for _, recruitStrategy := range recruitStrategys {
- recruitStrategysPreview := &vo.LocalRecruitStrategy{
- StrategyId: recruitStrategy.StrategyID,
- FeeForm: recruitStrategy.FeeForm,
- FollowersLow: recruitStrategy.FollowersLow,
- FollowersUp: recruitStrategy.FollowersUp,
- RecruitNumber: recruitStrategy.RecruitNumber,
- Offer: recruitStrategy.Offer,
- TOffer: recruitStrategy.TOffer,
- ServiceCharge: recruitStrategy.ServiceCharge,
- SelectedNumber: recruitStrategy.SelectedNumber,
- TotalOffer: recruitStrategy.TotalOffer,
- }
- recruitStrategysPreviews = append(recruitStrategysPreviews, recruitStrategysPreview)
- }
- reLocalDetail.RecruitStrategys = recruitStrategysPreviews
- // 执行要求
- reLocalDetail.TaskForm = localLife.TaskForm
- reLocalDetail.ContentType = localLife.ContentType
- reLocalDetail.TaskDetail = localLife.TaskDetail
- taskBriefInfos, err := dao.ProjectBriefDao{}.GetProjectBriefInfo(localId)
- if err != nil {
- logrus.Errorf("[localLifeDB service] call GetProjectBriefInfo error,err:%+v", err)
- return nil, err
- }
- taskMaterials, err := dao.ProjectMaterialDao{}.GetProjectMaterialInfo(localId)
- if err != nil {
- logrus.Errorf("[localLifeDB service] call GetprojectMaterialInfo error,err:%+v", err)
- return nil, err
- }
- reLocalDetail.TaskBriefs = taskBriefInfos
- reLocalDetail.TaskMaterials = taskMaterials
- reLocalDetail.Tools = localLife.Tools
- return &reLocalDetail, nil
- }
- //// 本地生活提交审核
- //func (s LocalLifeService) LocalLifeToReview(localUpdateParam *vo.LocalUpdateParam) (*string, error) {
- // localId := localUpdateParam.LocalID
- //
- // local, err := dao.LocalLifeDao{}.GetLocalById(localId)
- // if err != nil {
- // logrus.Errorf("[projectInfoDB service] call GetProject error,err:%+v", err)
- // return nil, err
- // }
- //
- // localName := local.LocalName // 任务标题
- // localDetail := local.TaskDetail // 任务详情
- // store, err := dao.StoreDao{}.GetStoreByID(local.StoreID)
- // if err != nil {
- // return nil, err
- // }
- // storeName := store.StoreName // 门店名称
- // storeDetail := store.StoreDetail // 门店特点
- // storeMainPhoto, err1 := dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(store.StoreID)
- // if err1 != nil {
- // return nil, err1
- // }
- // teamBuying, err2 := dao.TeamBuyingDao{}.GetTeamBuyingByID(local.TeamBuyingId)
- // if err2 != nil {
- // return nil, err2
- // }
- // teamBuyingName := teamBuying.TeamBuyingName // 团购标题
- // teamBuyingDetail := teamBuying.TeamBuyingDetail // 团购详情
- // teamBuyingMainPhoto, err3 := dao.ProductPhotoDAO{}.GetMainPhotoByTeamBuyingID(teamBuying.TeamBuyingID)
- // if err3 != nil {
- // return nil, err3
- // }
- // var images []string
- // var videos []string
- // var videoJobIds []string
- // var documents []string
- // var documentJobIds []string
- // reviewService := review_service.GetConfig()
- //
- // storePhotos, err4 := dao.ProductPhotoDAO{}.GetProductPhotoByStoreID(local.StoreID)
- // if err4 != nil {
- // return nil, err4
- // }
- // for _, storePhoto := range storePhotos {
- // if storePhoto.Symbol == 2 || storePhoto.Symbol == 4 {
- // images = append(images, storePhoto.PhotoUrl)
- // } else if storePhoto.Symbol == 3 || storePhoto.Symbol == 5 {
- // var videoJobId *string
- // var reviewErr error
- // i := 10
- // for {
- // videoJobId, reviewErr = reviewService.CheckVideo(storePhoto.PhotoUrl)
- // if reviewErr == nil || i == 0 {
- // break
- // }
- // i -= 1
- // }
- // if reviewErr != nil {
- // return nil, reviewErr
- // }
- // videos = append(videos, storePhoto.PhotoUrl)
- // videoJobIds = append(videoJobIds, *videoJobId)
- // }
- // }
- // teamBuyingPhotos, err5 := dao.ProductPhotoDAO{}.GetProductPhotoByTeamBuyingID(local.TeamBuyingId)
- // if err5 != nil {
- // return nil, err5
- // }
- // for _, teamBuyingPhoto := range teamBuyingPhotos {
- // if teamBuyingPhoto.Symbol == 2 || teamBuyingPhoto.Symbol == 4 {
- // images = append(images, teamBuyingPhoto.PhotoUrl)
- // } else if teamBuyingPhoto.Symbol == 3 || teamBuyingPhoto.Symbol == 5 {
- // var videoJobId *string
- // var reviewErr error
- // i := 10
- // for {
- // videoJobId, reviewErr = reviewService.CheckVideo(teamBuyingPhoto.PhotoUrl)
- // if reviewErr == nil || i == 0 {
- // break
- // }
- // i -= 1
- // }
- // if reviewErr != nil {
- // return nil, reviewErr
- // }
- // videos = append(videos, teamBuyingPhoto.PhotoUrl)
- // videoJobIds = append(videoJobIds, *videoJobId)
- // }
- // }
- //
- // localBriefInfos, err6 := dao.LocalLifeBriefDao{}.GetLocalBriefInfo(localId)
- // if err6 != nil {
- // return nil, err6
- // }
- // for _, localBriefInfo := range localBriefInfos {
- // if localBriefInfo.Type == 1 {
- // images = append(images, localBriefInfo.FileUrl)
- // } else if localBriefInfo.Type == 2 {
- // var documentJobId *string
- // var reviewErr error
- // i := 10
- // fileType := "pdf"
- // parts := strings.Split(localBriefInfo.FileName, ".")
- // if len(parts) > 1 {
- // fileType = parts[len(parts)-1]
- // }
- // for {
- // documentJobId, reviewErr = reviewService.CheckDocument(localBriefInfo.FileUrl, fileType)
- // if reviewErr == nil || i == 0 {
- // break
- // }
- // i -= 1
- // }
- // if reviewErr != nil {
- // return nil, reviewErr
- // }
- // documents = append(documents, localBriefInfo.FileUrl)
- // documentJobIds = append(documentJobIds, *documentJobId)
- // }
- // }
- // localMaterials, err7 := dao.LocalLifeMaterialDao{}.GetLocalMaterialInfo(localId)
- // if err7 != nil {
- // return nil, err7
- // }
- // for _, localMaterial := range localMaterials {
- // if localMaterial.Type == 1 {
- // images = append(images, localMaterial.FileUrl)
- // } else if localMaterial.Type == 2 {
- // var videoJobId *string
- // var reviewErr error
- // i := 10
- // for {
- // videoJobId, reviewErr = reviewService.CheckVideo(localMaterial.FileUrl)
- // if reviewErr == nil || i == 0 {
- // break
- // }
- // i -= 1
- // }
- // if reviewErr != nil {
- // return nil, reviewErr
- // }
- // videos = append(videos, localMaterial.FileUrl)
- // videoJobIds = append(videoJobIds, *videoJobId)
- // }
- // }
- //
- // newReviewLocal := &entity.ReviewLocalLife{
- // LocalID: localId,
- // TaskName: localName,
- // TaskDetail: localDetail,
- // StoreMainPhoto: storeMainPhoto,
- // StoreName: storeName,
- // StoreDetail: storeDetail,
- // TeamBuyingMainPhoto: teamBuyingMainPhoto,
- // TeamBuyingName: teamBuyingName,
- // TeamBuyingDetail: teamBuyingDetail,
- // Images: strings.Join(images, ","),
- // Videos: strings.Join(videos, ","),
- // Documents: strings.Join(documents, ","),
- // VideoJobIds: strings.Join(videoJobIds, ","),
- // DocumentJobIds: strings.Join(documentJobIds, ","),
- // Status: 1,
- // }
- // err8 := dao.LocalLifeReviewDao{}.Create(newReviewLocal)
- // if err8 != nil {
- // return nil, err8
- // }
- //
- // t := time.Now()
- // updateLocal := entity.LocalLifeInfo{
- // LocalID: localId,
- // TaskStatus: 2,
- // UpdatedAt: t,
- // }
- // err9 := dao.LocalLifeDao{}.UpdateLocal(updateLocal)
- // if err9 != nil {
- // return nil, err9
- // }
- // return &localId, nil
- //}
- // 本地生活任务列表
- func (s LocalLifeService) GetLocalLifeTaskList(param *vo.LocalSearchParam) (vo.ResultVO, error) {
- if param.Page == 0 {
- param.Page = 1
- }
- if param.PageSize == 0 {
- param.PageSize = 10
- }
- var result vo.ResultVO
- reLocalTaskPreviews, total, err := (&dao.LocalLifeDao{}).GetLocalPreviews(param)
- if err != nil {
- return result, err
- }
- for i := range reLocalTaskPreviews {
- var creatorName string
- var storeName string
- var storeLocation string
- var mainImage string
- if reLocalTaskPreviews[i].SubAccountId == 0 {
- enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reLocalTaskPreviews[i].EnterpriseId)
- if err == nil && enterprise != nil {
- creatorName = enterprise.BusinessName
- }
- } else {
- subAccount, err := dao.SubAccountDao{}.GetSubAccount(reLocalTaskPreviews[i].SubAccountId)
- if err == nil && subAccount != nil {
- creatorName = subAccount.SubAccountName
- }
- }
- store, err := dao.StoreDao{}.GetStoreByID(reLocalTaskPreviews[i].StoreId)
- if err == nil && store != nil {
- storeName = store.StoreName
- storeLocation = store.StoreLocation
- }
- mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(reLocalTaskPreviews[i].StoreId)
- reLocalTaskPreviews[i].CreatorName = creatorName
- reLocalTaskPreviews[i].StoreName = storeName
- reLocalTaskPreviews[i].StoreLocation = storeLocation
- reLocalTaskPreviews[i].MainImage = mainImage
- }
- result = vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: total,
- Data: reLocalTaskPreviews,
- }
- return result, nil
- }
- // 删除本地生活任务
- func (s LocalLifeService) DeleteLocalLife(localId string) (*string, error) {
- res, err := dao.LocalLifeDao{}.DeleteLocalLife(localId)
- if err != nil {
- logrus.Errorf("[DeleteLocalLife service] call DeleteLocalLife error,err:%+v", err)
- return res, err
- }
- return res, nil
- }
- // 草稿箱——本地生活
- func (s LocalLifeService) GetLocalLifeDraftList(param *vo.LocalDraftParam) (vo.ResultVO, error) {
- if param.Page == 0 {
- param.Page = 1
- }
- if param.PageSize == 0 {
- param.PageSize = 10
- }
- var result vo.ResultVO
- reLocalTaskPreviews, total, err := (&dao.LocalLifeDao{}).GetLocalDraftList(param)
- if err != nil {
- return result, err
- }
- for i := range reLocalTaskPreviews {
- var creatorName string
- var storeName string
- var storeLocation string
- var mainImage string
- if reLocalTaskPreviews[i].SubAccountId == 0 {
- enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reLocalTaskPreviews[i].EnterpriseId)
- if err == nil && enterprise != nil {
- creatorName = enterprise.BusinessName
- }
- } else {
- subAccount, err := dao.SubAccountDao{}.GetSubAccount(reLocalTaskPreviews[i].SubAccountId)
- if err == nil && subAccount != nil {
- creatorName = subAccount.SubAccountName
- }
- }
- store, err := dao.StoreDao{}.GetStoreByID(reLocalTaskPreviews[i].StoreId)
- if err == nil && store != nil {
- storeName = store.StoreName
- storeLocation = store.StoreLocation
- }
- mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(reLocalTaskPreviews[i].StoreId)
- reLocalTaskPreviews[i].CreatorName = creatorName
- reLocalTaskPreviews[i].StoreName = storeName
- reLocalTaskPreviews[i].StoreLocation = storeLocation
- reLocalTaskPreviews[i].MainImage = mainImage
- }
- result = vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: total,
- Data: reLocalTaskPreviews,
- }
- return result, nil
- }
- // 探店本地生活列表
- func (s LocalLifeService) GetStoreExploreList(param *vo.LocalSearchParam) (vo.ResultVO, error) {
- if param.Page == 0 {
- param.Page = 1
- }
- if param.PageSize == 0 {
- param.PageSize = 10
- }
- var result vo.ResultVO
- reLocalStoreExplorePreviews, total, err := (&dao.LocalLifeDao{}).GetLocalStoreExplorePreviews(param)
- if err != nil {
- return result, err
- }
- for i := range reLocalStoreExplorePreviews {
- var creatorName string
- var storeName string
- var storeLocation string
- var mainImage string
- if reLocalStoreExplorePreviews[i].SubAccountId == 0 {
- enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reLocalStoreExplorePreviews[i].EnterpriseId)
- if err == nil && enterprise != nil {
- creatorName = enterprise.BusinessName
- }
- } else {
- subAccount, err := dao.SubAccountDao{}.GetSubAccount(reLocalStoreExplorePreviews[i].SubAccountId)
- if err == nil && subAccount != nil {
- creatorName = subAccount.SubAccountName
- }
- }
- store, err := dao.StoreDao{}.GetStoreByID(reLocalStoreExplorePreviews[i].StoreId)
- if err == nil && store != nil {
- storeName = store.StoreName
- storeLocation = store.StoreLocation
- }
- mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(reLocalStoreExplorePreviews[i].StoreId)
- reLocalStoreExplorePreviews[i].CreatorName = creatorName
- reLocalStoreExplorePreviews[i].StoreName = storeName
- reLocalStoreExplorePreviews[i].StoreLocation = storeLocation
- reLocalStoreExplorePreviews[i].MainImage = mainImage
- }
- result = vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: total,
- Data: reLocalStoreExplorePreviews,
- }
- return result, nil
- }
- // 探店达人详情
- func (s LocalLifeService) GetStoreExploreInfo(param *vo.StoreExploreParam) (*vo.ResultVO, error) {
- if param.Page <= 0 {
- param.Page = 1
- }
- if param.PageSize <= 0 {
- param.PageSize = 10
- }
- var reStoreExploreTalents []*vo.ReStoreExploreTalent
- var total int64
- result := vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: total,
- Data: reStoreExploreTalents,
- }
- var localLifeTaskInfos []*entity.LocalLifeTaskInfo
- var err error
- localLifeId := param.LocalLifeId
- if param.Status == 1 { // 待预约
- localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 1, "", param.Page, param.PageSize)
- } else if param.Status == 2 { // 待确认
- localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 2, param.SearchTime, param.Page, param.PageSize)
- } else if param.Status == 3 { // 待探店
- localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 5, param.SearchTime, param.Page, param.PageSize)
- } else if param.Status == 4 { // 已探店
- localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 6, param.SearchTime, param.Page, param.PageSize)
- }
- if err != nil {
- return nil, err
- }
- for _, localLifeTaskInfo := range localLifeTaskInfos {
- // 获取达人信息
- talentInfo, err := dao.TalentInfoDao{}.SelectTalentInfo(localLifeTaskInfo.TalentID)
- if err != nil {
- return nil, err
- }
- //regionName, err := dao.RegionInfoDao{}.SelectRegion(talentInfo.VisitStoreRegion)
- //if err != nil {
- // regionName = ""
- //}
- regionName := localLifeTaskInfo.City
- talentPreview := &vo.TalentPreview{
- TalentId: localLifeTaskInfo.TalentID,
- TalentPhoto: talentInfo.Avatar,
- TalentName: talentInfo.TalentWxNickname,
- Account: "",
- Location: regionName,
- }
- reStoreExploreTalent := &vo.ReStoreExploreTalent{
- ReTalentPreview: talentPreview,
- TaskId: localLifeTaskInfo.TaskID,
- }
- if param.Status == 1 {
- reStoreExploreTalent.CooperateTime = localLifeTaskInfo.SelectDate.Format("2006-01-02 15:04:05")
- } else if param.Status == 2 {
- reStoreExploreTalent.ReserveTime = localLifeTaskInfo.ReserveTime.Format("2006-01-02 15:04:05")
- } else if param.Status == 3 {
- reStoreExploreTalent.ExploreTime = localLifeTaskInfo.ExploreTime.Format("2006-01-02 15:04:05")
- reStoreExploreTalent.Operator = ""
- } else if param.Status == 4 {
- reStoreExploreTalent.FinishExploreTime = localLifeTaskInfo.FinishExploreTime.Format("2006-01-02 15:04:05")
- reStoreExploreTalent.Operator = ""
- }
- reStoreExploreTalents = append(reStoreExploreTalents, reStoreExploreTalent)
- }
- result = vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: total,
- Data: reStoreExploreTalents,
- }
- return &result, nil
- }
- // 终止合作
- func (s LocalLifeService) StoreExploreOver(param *vo.LocalTalentOperateParam) (*string, error) {
- taskId := param.TaskId
- if taskId == "" {
- return nil, errors.New("taskId is empty")
- }
- updateData := map[string]interface{}{
- "task_stage": 17,
- "terminate_reason": param.Reason,
- "terminate_time": time.Now(),
- }
- if param.SubAccountId == 0 {
- updateData["terminate_operator_type"] = 1
- updateData["terminate_operator"] = param.EnterpriseId
- } else {
- updateData["terminate_operator_type"] = 2
- updateData["terminate_operator"] = param.SubAccountId
- }
- err := dao.LocalLifeTaskInfoDao{}.UpdateField(param.TaskId, updateData)
- if err != nil {
- return nil, err
- }
- return &taskId, nil
- }
- // 预约时间批量同意/驳回
- func (s LocalLifeService) StoreExploreOperate(param *vo.LocalTalentOperateParam) error {
- taskIds := param.TaskIds
- if taskIds == nil {
- return errors.New("taskIds is empty")
- }
- var bookIds []int64
- for _, taskId := range taskIds {
- bookInfo, err := dao.BookInfoDao{}.GetLastByTaskId(taskId)
- if err != nil {
- return err
- }
- bookIds = append(bookIds, bookInfo.BookID)
- }
- var bookinfoNew entity.BookInfo
- if param.Status == 2 {
- bookinfoNew = entity.BookInfo{
- IsReview: 1,
- IsOk: 2,
- RejectAt: time.Now(),
- ReviseOpinion: param.Reason,
- }
- } else if param.Status == 1 {
- bookinfoNew = entity.BookInfo{
- IsReview: 1,
- IsOk: 1,
- AgreeAt: time.Now(),
- }
- } else {
- return errors.New("status error")
- }
- if param.SubAccountId == 0 {
- bookinfoNew.BOperatorType = 1
- bookinfoNew.BOperator = param.EnterpriseId
- } else {
- bookinfoNew.BOperatorType = 2
- bookinfoNew.BOperator = strconv.FormatInt(param.SubAccountId, 10)
- }
- err1 := dao.BookInfoDao{}.UpdateBookStatus(bookIds, bookinfoNew)
- if err1 != nil {
- return err1
- }
- if param.Status == 1 {
- err2 := dao.LocalLifeTaskInfoDao{}.UpdateLocalStatus(taskIds, entity.LocalLifeTaskInfo{
- TaskStage: 7,
- })
- if err2 != nil {
- return err2
- }
- }
- return nil
- }
|