Files
jx-callback/business/jxstore/cms/message.go
gazebo f118cd8331 到家商城的订单发通知消息
+Store.LinkStoreID
2020-02-04 16:20:09 +08:00

136 lines
4.1 KiB
Go

package cms
import (
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
)
type MessageStatusExt struct {
model.MessageStatus
Title string `json:"title"`
}
func ReadStoreMessage(ctx *jxcontext.Context, msgID, msgStatusID int) (redirectURL string, err error) {
msgStatus := &model.MessageStatus{}
msgStatus.ID = msgStatusID
db := dao.GetDB()
if err = dao.GetEntity(db, msgStatus); err != nil {
return redirectURL, err
}
msgStatus.ReadCount++
dao.WrapUpdateULEntity(msgStatus, ctx.GetUserName())
_, err = dao.UpdateEntity(db, msgStatus)
return redirectURL, err
}
func GetStoreMessages(ctx *jxcontext.Context, msgIDs, storeIDs, types []int, fromTime, toTime time.Time, keyword string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
sql := `
SELECT SQL_CALC_FOUND_ROWS t1.*
FROM message t1
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(storeIDs) > 0 {
sql += " AND (SELECT COUNT(*) FROM message_status t2 WHERE t2.message_id = t1.id AND t2.store_id IN (" + dao.GenQuestionMarks(len(storeIDs)) + ") ) > 0"
sqlParams = append(sqlParams, storeIDs)
}
if len(msgIDs) > 0 {
sql += " AND t1.id IN (" + dao.GenQuestionMarks(len(msgIDs)) + ")"
sqlParams = append(sqlParams, msgIDs)
}
if len(types) > 0 {
sql += " AND t1.type IN (" + dao.GenQuestionMarks(len(types)) + ")"
sqlParams = append(sqlParams, types)
}
if fromTime != utils.DefaultTimeValue {
sql += " AND t1.created_at >= ?"
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.DefaultTimeValue {
sql += " AND t1.created_at <= ?"
sqlParams = append(sqlParams, toTime)
}
if keyword != "" {
keywordLike := "%" + keyword + "%"
sql += " AND (t1.title LIKE ? OR t1.content LIKE ?)"
sqlParams = append(sqlParams, keywordLike, keywordLike)
}
sql += " ORDER BY t1.id DESC LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
db := dao.GetDB()
dao.Begin(db)
defer dao.Commit(db)
var msgList []*model.Message
// globals.SugarLogger.Debug(sql)
if err = dao.GetRows(db, &msgList, sql, sqlParams...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: dao.GetLastTotalRowCount(db),
Data: msgList,
}
}
return pagedInfo, err
}
func GetStoreMessageStatuses(ctx *jxcontext.Context, msgIDs, storeIDs []int, fromReadCount, toReadCount int, fromTime, toTime time.Time, keyword string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
sql := `
SELECT SQL_CALC_FOUND_ROWS
t1.*,
t2.title
FROM message_status t1
JOIN message t2 ON t2.id = t1.message_id
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(storeIDs) > 0 {
sql += " AND t1.store_id IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if len(msgIDs) > 0 {
sql += " AND t1.message_id IN (" + dao.GenQuestionMarks(len(msgIDs)) + ")"
sqlParams = append(sqlParams, msgIDs)
}
if fromTime != utils.DefaultTimeValue {
sql += " AND t1.created_at >= ?"
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.DefaultTimeValue {
sql += " AND t1.created_at <= ?"
sqlParams = append(sqlParams, toTime)
}
if fromReadCount >= 0 {
sql += " AND t1.read_count >= ?"
sqlParams = append(sqlParams, fromReadCount)
}
if toReadCount >= 0 {
sql += " AND t1.read_count <= ?"
sqlParams = append(sqlParams, toReadCount)
}
if keyword != "" {
keywordLike := "%" + keyword + "%"
sql += " AND (t1.last_operator LIKE ?)"
sqlParams = append(sqlParams, keywordLike)
}
sql += " LIMIT ? OFFSET ?"
sqlParams = append(sqlParams, jxutils.FormalizePageSize(pageSize), offset)
db := dao.GetDB()
dao.Begin(db)
defer dao.Commit(db)
var msgStatusList []*MessageStatusExt
// globals.SugarLogger.Debug(sql)
// globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false))
if err = dao.GetRows(db, &msgStatusList, sql, sqlParams...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: dao.GetLastTotalRowCount(db),
Data: msgStatusList,
}
}
return pagedInfo, err
}