micro-document/internel/dao/press_releases.go

163 lines
4.9 KiB
Go
Raw Normal View History

2025-06-11 05:54:38 +00:00
package dao
import (
2025-06-13 01:08:00 +00:00
"errors"
2025-06-11 05:54:38 +00:00
"micro-document/api/pressreleases"
"micro-document/internel/model"
"micro-document/pkg/db"
"time"
2025-06-16 06:50:50 +00:00
"dubbo.apache.org/dubbo-go/v3/common/logger"
2025-06-12 11:10:32 +00:00
"github.com/duke-git/lancet/v2/datetime"
2025-06-16 07:18:26 +00:00
"github.com/go-sql-driver/mysql"
2025-06-11 05:54:38 +00:00
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type pressReleasesDao struct{}
var PressReleaseDao = new(pressReleasesDao)
func (pressReleasesDao) List(req *pressreleases.ListReq) (data []model.PressReleases, total int64, err error) {
session := db.DocDB.Model(&model.PressReleases{})
if req.Title != "" {
session = session.Where("title like ?", "%"+req.Title+"%")
}
if req.StartTime != 0 {
2025-06-11 07:41:57 +00:00
session = session.Where("created_at >= ?", time.UnixMilli(int64(req.StartTime)))
2025-06-11 05:54:38 +00:00
}
if req.EndTime != 0 {
2025-06-11 07:41:57 +00:00
session = session.Where("created_at <= ?", time.UnixMilli(int64(req.EndTime)))
2025-06-11 05:54:38 +00:00
}
if req.Display != 0 {
session = session.Where("display = ?", req.Display)
}
if req.Status != 0 {
session = session.Where("status = ?", req.Status)
}
2025-06-12 07:46:07 +00:00
session = session.Order("updated_at desc")
if err = session.Count(&total).Error; err != nil {
return
}
err = session.Offset((int(req.Page-1) * int(req.PageSize))).Limit(int(req.PageSize)).Find(&data).Error
2025-06-11 05:54:38 +00:00
return
}
2025-06-12 07:46:07 +00:00
func (pressReleasesDao) Display(req *pressreleases.DisplayReq) (data []model.PressReleases, total int64, err error) {
2025-06-12 11:43:55 +00:00
session := db.DocDB.Model(&model.PressReleases{}).Where(&model.PressReleases{Status: 2})
if req.Display != 0 {
session = session.Where("display = ?", req.Display)
}
2025-06-12 06:35:00 +00:00
if req.Query != "" {
2025-06-12 06:45:07 +00:00
session = session.Where("title like ?", "%"+req.Query+"%")
2025-06-12 06:35:00 +00:00
}
2025-06-12 07:46:07 +00:00
session = session.Order(clause.OrderBy{Columns: []clause.OrderByColumn{
2025-06-11 05:54:38 +00:00
{Column: clause.Column{Name: "sort"}, Desc: false},
{Column: clause.Column{Name: "updated_at"}, Desc: true},
2025-06-12 07:46:07 +00:00
}})
2025-06-12 11:13:46 +00:00
if req.Display != 0 {
session = session.Where("display = ?", req.Display)
}
2025-06-12 10:21:01 +00:00
if req.TimeStart != 0 {
2025-06-12 10:23:03 +00:00
session = session.Where("created_at > ?", time.UnixMilli(req.TimeStart))
2025-06-12 10:21:01 +00:00
}
if req.TimeEnd != 0 {
2025-06-12 10:23:03 +00:00
session = session.Where("created_at < ?", time.UnixMilli(req.TimeEnd))
2025-06-12 11:10:32 +00:00
} else {
2025-06-12 11:23:33 +00:00
if req.TimeStart != 0 {
2025-06-12 11:51:36 +00:00
session = session.Where("created_at < ?", datetime.EndOfYear(time.UnixMilli(req.TimeStart)))
2025-06-12 11:23:33 +00:00
}
2025-06-12 10:21:01 +00:00
}
2025-06-13 00:50:27 +00:00
err = session.Count(&total).Error
if err != nil {
return
}
2025-06-12 10:21:01 +00:00
if req.Page != 0 && req.PageSize != 0 {
session = session.Offset(int(req.Page-1) * int(req.PageSize)).Limit(int(req.PageSize))
}
err = session.Find(&data).Error
2025-06-11 05:54:38 +00:00
return
}
func (pressReleasesDao) Edit(req *pressreleases.EditReq) (err error) {
2025-06-12 12:00:25 +00:00
return db.DocDB.Transaction(func(tx *gorm.DB) error {
2025-06-13 01:13:49 +00:00
err := tx.Model(&model.PressReleases{}).Where("id = ?", req.Id).UpdateColumns(&model.PressReleases{
2025-06-12 12:00:25 +00:00
Sort: uint(req.Sort),
Status: int(req.Status),
Title: req.Title,
Attachment: req.Attachment,
AttachmentName: req.AttachmentName,
Operator: req.Operator,
Summary: req.Summary,
OperatorID: uint(req.OperatorId),
Content: req.Content,
Display: int(req.Display),
2025-06-18 01:33:32 +00:00
CreatedAt: time.UnixMilli(int64(req.CreatedAt)),
UpdatedAt: time.Now(),
2025-06-12 12:00:25 +00:00
}).Error
if err != nil {
2025-06-16 07:18:26 +00:00
var mysqlErr *mysql.MySQLError
if errors.As(err, &mysqlErr) && mysqlErr.Number == 1062 {
2025-06-16 07:22:05 +00:00
return errors.New("已存在标题相同的数据")
2025-06-16 06:50:50 +00:00
}
return errors.New("操作失败")
2025-06-12 12:00:25 +00:00
}
var n int64
2025-06-13 01:13:49 +00:00
if err := tx.Model(&model.PressReleases{}).Where("display = ?", 2).Count(&n).Error; err != nil {
2025-06-16 06:50:50 +00:00
logger.Error(err)
return errors.New("操作失败")
2025-06-12 12:00:25 +00:00
}
2025-06-13 01:08:00 +00:00
if n > 5 {
return errors.New("展示数量不能超过5个")
}
2025-06-12 12:00:25 +00:00
return nil
})
2025-06-11 05:54:38 +00:00
}
func (pressReleasesDao) Create(req *pressreleases.CreateReq) (err error) {
2025-06-12 12:00:25 +00:00
return db.DocDB.Transaction(func(tx *gorm.DB) error {
2025-06-13 01:13:49 +00:00
err := tx.Model(&model.PressReleases{}).Create(&model.PressReleases{
2025-06-12 12:00:25 +00:00
Sort: uint(req.Sort),
Status: int(req.Status),
Title: req.Title,
Attachment: req.Attachment,
AttachmentName: req.AttachmentName,
Operator: req.Operator,
OperatorID: uint(req.OperatorId),
Content: req.Content,
Summary: req.Summary,
Display: int(req.Display),
2025-06-18 01:33:32 +00:00
CreatedAt: time.UnixMilli(int64(req.CreatedAt)),
UpdatedAt: time.Now(),
2025-06-12 12:00:25 +00:00
}).Error
if err != nil {
2025-06-16 07:18:26 +00:00
var mysqlErr *mysql.MySQLError
if errors.As(err, &mysqlErr) && mysqlErr.Number == 1062 {
2025-06-16 07:22:05 +00:00
return errors.New("已存在标题相同的数据")
2025-06-16 06:50:50 +00:00
}
return errors.New("操作失败")
2025-06-12 12:00:25 +00:00
}
var n int64
2025-06-13 01:13:49 +00:00
if err := tx.Model(&model.PressReleases{}).Where("display = ?", 2).Count(&n).Error; err != nil {
2025-06-12 12:00:25 +00:00
return err
}
2025-06-13 01:08:00 +00:00
if n > 5 {
return errors.New("展示数量不能超过5个")
}
2025-06-12 12:00:25 +00:00
return nil
})
2025-06-11 05:54:38 +00:00
}
func (pressReleasesDao) Delete(req *pressreleases.DeleteReq) (err error) {
return db.DocDB.Delete(&model.PressReleases{
2025-06-18 01:33:32 +00:00
ID: uint(req.Id),
2025-06-11 05:54:38 +00:00
}).Error
}
func (pressReleasesDao) GetById(id int) (data model.PressReleases, err error) {
err = db.DocDB.Model(&model.PressReleases{}).Where("id = ?", id).First(&data).Error
return
}