You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.4 KiB
Go
152 lines
3.4 KiB
Go
package containers
|
|
|
|
import (
|
|
"joybuywork/internal/app"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/finder"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/repository/withdefault"
|
|
"joybuywork/internal/utils/logic"
|
|
pb "joybuywork/proto/go_proto/w_project"
|
|
"joybuywork/proto/go_proto/workerr"
|
|
"gorm.io/gen/field"
|
|
)
|
|
|
|
type ProjectSaveAdsConfig struct {
|
|
logic.Logic
|
|
|
|
Req *pb.SaveAdsConfigReq
|
|
Res *pb.SaveAdsConfigRes
|
|
|
|
adClose bool
|
|
}
|
|
|
|
func (s *ProjectSaveAdsConfig) Run() (err error) {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *ProjectSaveAdsConfig) Exec() (err error) {
|
|
project, err := s.project()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.save(project)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return s.delCond(project.ID)
|
|
}
|
|
|
|
// 找项目
|
|
func (s *ProjectSaveAdsConfig) project() (project *model.Project, err error) {
|
|
user, err := finder.User(s.Ctx, s.Req.GetUserId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if user == nil || user.IsAdmin == mtype.No {
|
|
err = s.BE().VerifyError("no permission")
|
|
return
|
|
}
|
|
|
|
project, err = finder.Project(s.Ctx, s.Req.GetProjectHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if project == nil || project.IsDel == mtype.Yes {
|
|
return nil, workerr.NotFound("project not found")
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 保存配置
|
|
func (s *ProjectSaveAdsConfig) save(project *model.Project) (err error) {
|
|
cc := cache.NewProjectAd(s.Ctx)
|
|
ads, err := cc.FindByProjectId(project.ID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
ol := s.OL().User(s.Req.GetUserId(), s.Req.GetIp())
|
|
if ads == nil {
|
|
err = s.GetDao().ProjectAd.WithContext(s.Ctx).Create(withdefault.ProjectAd(&model.ProjectAd{
|
|
ProjectID: project.ID,
|
|
OpenAd: int8(s.Req.GetOpenAd()),
|
|
CampaignAd: int8(s.Req.GetCampaignAd()),
|
|
}))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if s.Req.GetOpenAd() == mtype.Yes {
|
|
ol.ProjectAds(project.ID, mtype.No, mtype.Yes)
|
|
}
|
|
|
|
if s.Req.GetCampaignAd() == mtype.Yes {
|
|
ol.ProjectCpnAds(project.ID, mtype.No, mtype.Yes)
|
|
}
|
|
|
|
user, _ := finder.User(s.Ctx, s.Req.GetUserId())
|
|
if user != nil {
|
|
app.FeishuNoticeSend("[%s] 开启了[%s]项目的广告模块", user.Email, project.Title)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().ProjectAd
|
|
var up []field.AssignExpr
|
|
if ads.CampaignAd != int8(s.Req.GetCampaignAd()) {
|
|
up = append(up, m.CampaignAd.Value(int8(s.Req.GetCampaignAd())))
|
|
ol.ProjectAds(project.ID, ads.CampaignAd, int8(s.Req.GetCampaignAd()))
|
|
}
|
|
|
|
if ads.OpenAd != int8(s.Req.GetOpenAd()) {
|
|
up = append(up, m.OpenAd.Value(int8(s.Req.GetOpenAd())))
|
|
ol.ProjectCpnAds(project.ID, ads.OpenAd, int8(s.Req.GetOpenAd()))
|
|
|
|
// 如果状态改变,以前是开启,那现在就是要关闭了
|
|
s.adClose = ads.OpenAd == mtype.Yes
|
|
}
|
|
|
|
if len(up) == 0 {
|
|
return
|
|
}
|
|
|
|
_, err = m.WithContext(s.Ctx).Where(m.ID.Eq(ads.ID)).UpdateSimple(up...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
s.AddAfterRun(func() (err error) {
|
|
_ = cc.Clear(ads)
|
|
return
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
func (s *ProjectSaveAdsConfig) delCond(projectId int64) (err error) {
|
|
if !s.adClose {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().FissionCampaignCond
|
|
_, err = m.WithContext(s.Ctx).Where(m.ProjectID.Eq(projectId), m.EventType.Eq(mtype.FissionCampaignCondEventTypeAds), m.IsDel.Eq(mtype.No)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|