package models import ( "github.com/beego/beego/v2/client/orm" "github.com/rdlucklib/rdluck_tools/paging" "time" ) // 报告推送给同花顺的表结构体 type ReportSendThsDetail struct { SendId int `orm:"column(send_id);pk" description:"发送给同花顺的Id"` ReportId int `description:"报告id"` ReportType string `description:"报告类型"` Status int8 `description:"发送结果,0:待发送,-1发送失败,1发送成功"` Remark string `description:"失败原因"` MsgType int `description:"消息类型,1:h5链接;2:小程序,3:文字;4:图片"` Title string `description:"推送标题"` LabelStr string `description:"推送标签"` Content string `description:"推送内容"` JumpUrl string `description:"跳转地址"` Pic string `description:"推送图片"` Level int `description:"等级,1:紧急,2:优先,3:普通"` PushTime time.Time `description:"实际开始推送时间/预推送时间"` CreateTime time.Time `description:"发送时间"` } type ReportSendThsListResp struct { Paging *paging.PagingItem List []*ReportSendThsListItem } type ReportSendThsTypeListResp struct { List []*ReportSendThsTypeListItem } type ReportSendThsTypeListItem struct { ReportType string `description:"报告类型"` } type ReportSendThsListItem struct { SendId int `description:"发送给同花顺的Id"` ReportId int `description:"报告id"` ReportType string `description:"报告类型"` Status int8 `description:"发送结果,0:待发送,-1发送失败,1发送成功"` Remark string `description:"失败原因"` Title string `description:"推送标题"` LabelStr string `description:"推送标签"` PushTime string `description:"实际开始推送时间/预推送时间"` CreateTime string `description:"发送时间"` Level int `description:"等级,1:紧急,2:优先,3:普通"` } // 新增报告发送给同花顺的记录 func AddReportSendThsDetail(item *ReportSendThsDetail) (lastId int64, err error) { o := orm.NewOrm() //o.Using("rddp") lastId, err = o.Insert(item) return } // 修改报告发送给同花顺的记录状态 func ModifyReportSendThsDetailStatus(sendId int, status int8, remark string) (err error) { o := orm.NewOrm() //o.Using("rddp") sql := `UPDATE report_send_ths_detail SET status = ?,remark=? WHERE send_id = ? ` _, err = o.Raw(sql, status, remark, sendId).Exec() return } // 根据报告id获取发送记录 func GetReportSendThsDetailByReportId(reportId int, reportType string) (item *ReportSendThsDetail, err error) { o := orm.NewOrm() sql := ` SELECT * FROM report_send_ths_detail WHERE report_id=? and report_type=? order by send_id desc` //o.Using("rddp") err = o.Raw(sql, reportId, reportType).QueryRow(&item) return } // GetLatelyReportSendThsDetail 获取发送中/发送成功的 距离现在最近的一条记录 func GetLatelyReportSendThsDetail() (item *ReportSendThsDetail, err error) { o := orm.NewOrm() sql := ` SELECT * FROM report_send_ths_detail WHERE status >=0 order by push_time desc,send_id desc` //o.Using("rddp") err = o.Raw(sql).QueryRow(&item) return } // GetLatelyWaitReportSendThs 获取待发送的 距离现在最近的一条记录 func GetLatelyWaitReportSendThs() (item *ReportSendThsDetail, err error) { o := orm.NewOrm() sql := ` SELECT * FROM report_send_ths_detail WHERE status =2 order by push_time desc,send_id desc` //o.Using("rddp") err = o.Raw(sql).QueryRow(&item) return } // GetNearlyWaitReportSendThsByPushTime 查询是否存在和设置时间相近的待推送记录 func GetNearlyWaitReportSendThsByPushTime(sendId int, pushTimeStart, pushTimeEnd time.Time) (item *ReportSendThsDetail, err error) { o := orm.NewOrm() sql := ` SELECT * FROM report_send_ths_detail WHERE send_id !=? and status =2 and (push_time >= ? and push_time <= ?) order by push_time desc,send_id desc` //o.Using("rddp") err = o.Raw(sql, sendId, pushTimeStart, pushTimeEnd).QueryRow(&item) return } func GetWaitReportSendThsList(condition string, pars []interface{}, startSize, pageSize int) (items []*ReportSendThsDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM report_send_ths_detail WHERE status = 2 ` if condition != "" { sql += condition } sql += ` order by push_time asc,send_id asc limit ?,? ` _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items) return } func GetWaitReportSendThsType() (items []*ReportSendThsDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM report_send_ths_detail WHERE status = 2 group by report_type` _, err = o.Raw(sql).QueryRows(&items) return } func GetWaitReportSendThsCount(condition string, pars []interface{}) (count int64, err error) { o := orm.NewOrm() sql := `SELECT COUNT(1) AS count FROM report_send_ths_detail WHERE status = 2 ` if condition != "" { sql += condition } err = o.Raw(sql, pars).QueryRow(&count) return } func GetWaitReportSendThsAll(condition string, pars []interface{}) (items []*ReportSendThsDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM report_send_ths_detail WHERE status = 2 ` if condition != "" { sql += condition } sql += ` order by push_time asc,send_id asc` _, err = o.Raw(sql, pars).QueryRows(&items) return } // 根据sendId获取发送记录 func GetReportSendThsBySendId(sendId int) (item *ReportSendThsDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM report_send_ths_detail WHERE send_id=? ` //o.Using("rddp") err = o.Raw(sql, sendId).QueryRow(&item) return } // MultiUpdateReportSendThsPushTime 批量修改配置时间 func MultiUpdateReportSendThsPushTime(sendId int, newTime, multiSql, updateSendIds string) (err error) { o := orm.NewOrm() to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() //修改单条数据 sql := ` UPDATE report_send_ths_detail SET push_time = ? WHERE send_id = ? ` _, err = to.Raw(sql, newTime, sendId).Exec() if err != nil { return } if multiSql != "" { //修改定时推送时间 sql = `UPDATE report_send_ths_detail SET push_time = CASE send_id ` + multiSql + ` END WHERE status = 2 AND send_id IN (` + updateSendIds + ` ) AND push_time > ? ` _, err = to.Raw(sql, newTime).Exec() } return } // GetLatelyWaitLevelReportSendThs 获取相同推送等级level下待发送的 距离现在最近的一条记录 func GetLatelyWaitLevelReportSendThs(level int) (item *ReportSendThsDetail, err error) { o := orm.NewOrm() sql := ` SELECT * FROM report_send_ths_detail WHERE status =2 AND level=? order by push_time desc,send_id desc` err = o.Raw(sql, level).QueryRow(&item) return } // GetEarliestWaitGtLevelReportSendThs 获取大于该推送等级level(推送级别更低)下待发送的 距离现在最早的一条记录 func GetEarliestWaitGtLevelReportSendThs(level int) (item *ReportSendThsDetail, err error) { o := orm.NewOrm() sql := ` SELECT * FROM report_send_ths_detail WHERE status = 2 AND level > ? order by push_time asc,send_id asc` err = o.Raw(sql, level).QueryRow(&item) return } // UpdateReportSendThsPushTime 批量修改配置时间 func UpdateReportSendThsPushTime(pushTime time.Time, newTime string) (err error) { o := orm.NewOrm() //UPDATE comment c set c.time = DATE_ADD(c.time, INTERVAL 7 DAY) ; //select date_add(@dt, interval 1 minute); - 加1分钟 //修改定时推送时间 sql := `UPDATE report_send_ths_detail SET push_time = ` + newTime + ` WHERE status = 2 AND push_time > ? ` _, err = o.Raw(sql, pushTime).Exec() return } // UpdateReportSendThsPushTimeByEqGtPushTime 根据发布时间批量修改配置时间(大于等于该发布时间) func UpdateReportSendThsPushTimeByEqGtPushTime(pushTime time.Time, newTime string) (err error) { o := orm.NewOrm() //修改定时推送时间 sql := `UPDATE report_send_ths_detail SET push_time = ` + newTime + ` WHERE status = 2 AND push_time >= ? ` _, err = o.Raw(sql, pushTime).Exec() return } // GetLatelyIsSendSendThsDetail 获取发送中/发送成功/发送失败的 距离现在最近的一条记录 func GetLatelyIsSendSendThsDetail() (item *ReportSendThsDetail, err error) { o := orm.NewOrm() //`status` tinyint(1) DEFAULT '0' COMMENT '发送结果,0:待发送,1发送成功,2:等待系统定时发送', sql := ` SELECT * FROM report_send_ths_detail WHERE status in (0,1) order by push_time desc,send_id desc` err = o.Raw(sql).QueryRow(&item) return }