Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 50s
更新了前端构建产物包括JavaScript、CSS和HTML文件,主要涉及以下变更: 1. 新增了多个组件和工具函数,包括异常页面组件、iframe组件等 2. 更新了活动管理、产品管理、优惠券管理等业务模块 3. 优化了构建配置和依赖管理 4. 修复了一些样式和功能问题 5. 更新了测试相关文件 同时更新了部分后端服务接口和测试用例。这些变更主要是为了支持新功能和改进现有功能的用户体验。
90 lines
2.9 KiB
Go
90 lines
2.9 KiB
Go
package activity
|
|
|
|
import (
|
|
"context"
|
|
|
|
"bindbox-game/internal/repository/mysql/dao"
|
|
"bindbox-game/internal/repository/mysql/model"
|
|
)
|
|
|
|
// CopyActivity 复制活动及其期次与奖励
|
|
// 参数: activityID 源活动ID
|
|
// 返回: 新活动ID与错误
|
|
func (s *service) CopyActivity(ctx context.Context, activityID int64) (int64, error) {
|
|
var newActivityID int64
|
|
err := s.writeDB.Transaction(func(tx *dao.Query) error {
|
|
src, err := s.readDB.Activities.WithContext(ctx).Where(s.readDB.Activities.ID.Eq(activityID)).First()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newAct := &model.Activities{
|
|
Name: src.Name,
|
|
Banner: src.Banner,
|
|
ActivityCategoryID: src.ActivityCategoryID,
|
|
Status: 1,
|
|
PriceDraw: src.PriceDraw,
|
|
IsBoss: src.IsBoss,
|
|
}
|
|
if err := tx.Activities.WithContext(ctx).Omit(tx.Activities.StartTime, tx.Activities.EndTime).Create(newAct); err != nil {
|
|
return err
|
|
}
|
|
newActivityID = newAct.ID
|
|
|
|
issues, err := s.readDB.ActivityIssues.WithContext(ctx).Where(s.readDB.ActivityIssues.ActivityID.Eq(activityID)).Order(s.readDB.ActivityIssues.Sort.Desc()).Find()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
idMap := make(map[int64]int64, len(issues))
|
|
for _, srcIssue := range issues {
|
|
ni := &model.ActivityIssues{
|
|
ActivityID: newActivityID,
|
|
IssueNumber: srcIssue.IssueNumber,
|
|
Status: 3,
|
|
Sort: srcIssue.Sort,
|
|
}
|
|
if err := tx.ActivityIssues.WithContext(ctx).Create(ni); err != nil {
|
|
return err
|
|
}
|
|
idMap[srcIssue.ID] = ni.ID
|
|
}
|
|
|
|
if len(idMap) == 0 {
|
|
return nil
|
|
}
|
|
|
|
oldIDs := make([]int64, 0, len(idMap))
|
|
for k := range idMap {
|
|
oldIDs = append(oldIDs, k)
|
|
}
|
|
|
|
rewards, err := s.readDB.ActivityRewardSettings.WithContext(ctx).Where(s.readDB.ActivityRewardSettings.IssueID.In(oldIDs...)).Order(s.readDB.ActivityRewardSettings.Sort.Desc()).Find()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, r := range rewards {
|
|
nr := &model.ActivityRewardSettings{
|
|
IssueID: idMap[r.IssueID],
|
|
ProductID: r.ProductID,
|
|
Name: r.Name,
|
|
Weight: r.Weight,
|
|
Quantity: r.Quantity,
|
|
OriginalQty: r.OriginalQty,
|
|
Level: r.Level,
|
|
Sort: r.Sort,
|
|
IsBoss: r.IsBoss,
|
|
}
|
|
if err := tx.ActivityRewardSettings.WithContext(ctx).Create(nr); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return newActivityID, nil
|
|
} |