Files
jx-callback/business/model/dao/event.go
苏尹岚 8eb3ef3488 aa
2020-11-27 18:00:41 +08:00

306 lines
8.7 KiB
Go

package dao
import (
"strings"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
)
type OperateEventExt struct {
model.OperateEvent
Detail []*model.OperateEventDetail `json:"detail"`
Name string `json:"name"`
}
func DeleteOperateEventDetail(db *DaoDB, deleteTime time.Time) (err error) {
sql := `
DELETE FROM a
USING operate_event_detail a,operate_event b
WHERE a.access_uuid = b.access_uuid
AND b.created_at < ?
`
sqlParams := []interface{}{
deleteTime,
}
_, err = ExecuteSQL(db, sql, sqlParams...)
return err
}
func DeleteOperateEvent(db *DaoDB, deleteTime time.Time) (err error) {
sql := `
DELETE FROM operate_event
WHERE created_at < ?
`
sqlParams := []interface{}{
deleteTime,
}
_, err = ExecuteSQL(db, sql, sqlParams...)
return err
}
func GetOperateEvents(db *DaoDB, name string, apiFunctions []string, operateTypes, skuIDs, storeIDs []int, fromTime, toTime time.Time, keyword string, errType, offset, pageSize int) (operateEventExt []*OperateEventExt, totalCount int, err error) {
sql := `
SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*, c.name
FROM operate_event a
`
if len(operateTypes) > 0 || len(skuIDs) > 0 || len(storeIDs) > 0 || keyword != "" {
sql += " LEFT JOIN operate_event_detail b ON a.access_uuid = b.access_uuid"
}
sql += `
LEFT JOIN user c ON c.user_id = a.user_id
WHERE 1=1
`
sqlParams := []interface{}{}
if errType == 1 {
sql += " AND a.err_msg = ''"
}
if errType == -1 {
sql += " AND a.err_msg <> ''"
}
if name != "" {
sql += " AND c.name LIKE ?"
sqlParams = append(sqlParams, "%"+name+"%")
}
if !utils.IsTimeZero(fromTime) {
sql += " AND a.created_at >= ?"
sqlParams = append(sqlParams, fromTime)
}
if !utils.IsTimeZero(toTime) {
sql += " AND a.created_at <= ?"
sqlParams = append(sqlParams, toTime)
}
if len(apiFunctions) > 0 {
sql += " AND a.api_function IN (" + GenQuestionMarks(len(apiFunctions)) + ")"
sqlParams = append(sqlParams, apiFunctions)
}
if len(operateTypes) > 0 {
sql += " AND b.operate_type IN (" + GenQuestionMarks(len(operateTypes)) + ")"
sqlParams = append(sqlParams, operateTypes)
}
if len(skuIDs) > 0 {
sql += " AND b.thing_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
if len(storeIDs) > 0 {
sql += " AND b.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if keyword != "" {
sql += " AND ("
var apiList []string
for k, v := range model.ApiFunctionName {
if strings.Contains(v, keyword) {
apiList = append(apiList, k)
}
}
if len(apiList) > 0 {
sql += "a.api_function IN (" + GenQuestionMarks(len(apiList)) + ") OR"
sqlParams = append(sqlParams, apiList)
}
sql += " a.err_msg LIKE ? OR b.thing_id LIKE ? OR b.store_id LIKE ? OR c.name LIKE ? OR a.user_id LIKE ?)"
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
}
sql += `
ORDER BY a.created_at DESC
LIMIT ? OFFSET ?
`
sqlParams = append(sqlParams, pageSize, offset)
Begin(db)
defer Commit(db)
if err = GetRows(db, &operateEventExt, sql, sqlParams...); err == nil {
totalCount = GetLastTotalRowCount(db)
}
var (
accessUUidList []string
details []*model.OperateEventDetail
detailMap = make(map[string][]*model.OperateEventDetail)
)
for _, v := range operateEventExt {
accessUUidList = append(accessUUidList, v.AccessUUID)
}
if len(accessUUidList) == 0 {
return operateEventExt, totalCount, err
}
sql2 := `
SELECT *
FROM operate_event_detail
WHERE access_uuid IN (` + GenQuestionMarks(len(accessUUidList)) + `)
`
sqlParams2 := []interface{}{accessUUidList}
err = GetRows(db, &details, sql2, sqlParams2...)
for _, v := range details {
detailMap[v.AccessUUID] = append(detailMap[v.AccessUUID], v)
}
for _, v := range operateEventExt {
if detailMap[v.AccessUUID] != nil {
v.Detail = detailMap[v.AccessUUID]
}
}
return operateEventExt, totalCount, err
}
func GetImMessageRecord(db *DaoDB, groupID int, userID string, storeID, vendorID int, fromTime, toTime time.Time, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
var msg []*model.ImMessageRecord
sql := `
SELECT SQL_CALC_FOUND_ROWS *
FROM im_message_record
WHERE deleted_at = ?
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
}
if groupID != 0 {
sql += " AND group_id = ?"
sqlParams = append(sqlParams, groupID)
}
if userID != "" {
sql += " AND user_id = ?"
sqlParams = append(sqlParams, userID)
}
if storeID != 0 {
sql += " AND store_id = ?"
sqlParams = append(sqlParams, storeID)
}
if vendorID >= 0 {
sql += " AND vendor_id = ?"
sqlParams = append(sqlParams, vendorID)
}
if fromTime != utils.ZeroTimeValue {
sql += " AND created_at >= ?"
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += " AND created_at <= ?"
sqlParams = append(sqlParams, toTime)
}
sql += `
ORDER BY created_at DESC
LIMIT ? OFFSET ?
`
sqlParams = append(sqlParams, pageSize, offset)
Begin(db)
defer Commit(db)
if err = GetRows(db, &msg, sql, sqlParams); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount(db),
// Data: msg,
}
for _, v := range msg {
if user, err := GetUser(db, v.UserID); err == nil {
v.UserInfo = user
}
}
pagedInfo.Data = msg
}
return pagedInfo, err
}
type GetMessageGroupsResult struct {
model.MessageGroup
Avatar string `json:"avatar"`
LastMessageType int `json:"lastMessageType"`
LastContent string `json:"lastContent"`
LastTime time.Time `json:"lastTime"`
LastUserName string `json:"lastUserName"`
UserName string `json:"userName"`
MessageGroupMembers []*GetMessageGroupsMemberResult `json:"messageGroupMembers"`
}
type GetMessageGroupsMemberResult struct {
model.User
model.MessageGroupMember
}
func GetMessageGroups(db *DaoDB, userID string, groupID, groupType int, isMember bool, userID2 string) (messageGroupsResult []*GetMessageGroupsResult, err error) {
sql := `
SELECT a.*, b.name user_name, b.avatar
FROM message_group a
LEFT JOIN user b ON b.user_id = a.user_id
WHERE a.deleted_at = ?
`
sqlParams := []interface{}{utils.DefaultTimeValue}
if userID != "" {
sql += " AND a.user_id = ?"
sqlParams = append(sqlParams, userID)
}
if groupType != 0 {
sql += " AND a.type = ?"
sqlParams = append(sqlParams, groupType)
}
if groupID != 0 {
sql += " AND a.group_id LIKE ?"
sqlParams = append(sqlParams, utils.Int2Str(groupID)+"%")
}
if err = GetRows(db, &messageGroupsResult, sql, sqlParams); err == nil {
if isMember {
for _, v := range messageGroupsResult {
var messageGroupMembers []*GetMessageGroupsMemberResult
sql2 := `
SELECT a.*, b.*
FROM message_group_member a
LEFT JOIN user b ON b.user_id = a.member_user_id
WHERE a.group_id = ?
AND a.deleted_at = ?
`
sqlParams2 := []interface{}{v.GroupID, utils.DefaultTimeValue}
if userID2 != "" {
sql2 += ` AND member_user_id = ?`
sqlParams2 = append(sqlParams2, userID2)
}
if err = GetRows(db, &messageGroupMembers, sql2, sqlParams2); err == nil {
v.MessageGroupMembers = messageGroupMembers
}
}
}
}
return messageGroupsResult, err
}
func GetMessageGroupMembers(db *DaoDB, groupID, groupType int, memberUserID string) (messageGroupMembers []*model.MessageGroupMember, err error) {
sqlParams := []interface{}{}
sql := `
SELECT a.*
FROM message_group_member a
`
if groupType != 0 {
sql += ` JOIN message_group b ON b.group_id = a.group_id AND b.type = ?`
sqlParams = append(sqlParams, groupType)
}
sql += `
WHERE a.deleted_at = ?
`
sqlParams = append(sqlParams, utils.DefaultTimeValue)
if groupID != 0 {
sql += " AND a.group_id = ?"
sqlParams = append(sqlParams, groupID)
}
if memberUserID != "" {
sql += " AND a.member_user_id = ?"
sqlParams = append(sqlParams, memberUserID)
}
err = GetRows(db, &messageGroupMembers, sql, sqlParams)
return messageGroupMembers, err
}
//得到某个用户所在所有群组
func GetUserMessageGroups(db *DaoDB, userID string) (messageGroup []*model.MessageGroup, err error) {
sql := `
SELECT group_id
FROM message_group
WHERE deleted_at = ? AND user_id = ?
UNION
SELECT group_id
FROM message_group_member
WHERE deleted_at = ? AND member_user_id = ?
`
sqlParams := []interface{}{
utils.DefaultTimeValue, userID,
utils.DefaultTimeValue, userID,
}
err = GetRows(db, &messageGroup, sql, sqlParams)
return messageGroup, err
}