123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- package dao
- import (
- "context"
- "fmt"
- "strconv"
- "strings"
- "time"
- "go-common/app/interface/main/credit/model"
- "go-common/library/database/sql"
- "go-common/library/log"
- xtime "go-common/library/time"
- "go-common/library/xstr"
- "github.com/pkg/errors"
- )
- const (
- _addBlockedInfoSQL = `INSERT INTO blocked_info(uid,origin_title,blocked_remark,origin_url,origin_content,origin_content_modify,origin_type,
- punish_time,punish_type,blocked_days,publish_status,blocked_type,blocked_forever,reason_type,oper_id,moral_num,operator_name) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
- _addBatchBlockedInfoSQL = `INSERT INTO blocked_info(uid,origin_title,blocked_remark,origin_url,origin_content,origin_content_modify,origin_type,
- punish_time,punish_type,blocked_days,publish_status,blocked_type,blocked_forever,reason_type,oper_id,moral_num,operator_name) VALUES %s`
- _blockedCountSQL = `SELECT COUNT(*) FROM blocked_info WHERE uid=? AND punish_type IN (2,3) AND status = 0`
- _blockedNumUserSQL = `SELECT COUNT(*) FROM blocked_info WHERE uid = ? AND status = 0`
- _blkHistoryCountSQL = "SELECT COUNT(*) FROM blocked_info WHERE uid = ? AND ctime >= ? AND status = 0"
- _blockedTotalSQL = "SELECT COUNT(*) AS num FROM blocked_info WHERE uid=? AND ctime >? AND status = 0"
- _blockedInfosByMidSQL = `SELECT id,case_id,uid,origin_title,origin_url,origin_content,origin_content_modify,origin_type,punish_time,punish_type,blocked_days,publish_status,blocked_type,
- reason_type,blocked_remark,ctime from blocked_info WHERE uid=? AND status = 0`
- _blockedListSQL = `SELECT id,origin_type,blocked_type,publish_time FROM blocked_info WHERE publish_status = 1 %s %s AND status = 0 ORDER BY publish_time desc`
- _blkHistorysSQL = `SELECT id,uid,blocked_days,blocked_forever,blocked_remark,moral_num,origin_content_modify,origin_title,origin_type,origin_url,punish_time,
- punish_type,reason_type FROM blocked_info WHERE uid = ? AND ctime >= ? AND status = 0 ORDER BY id LIMIT ?,?`
- _blockedInfoIDSQL = `SELECT id,uid,uname,origin_content,origin_content_modify,origin_type,punish_time,punish_type,moral_num,blocked_days,reason_type,blocked_forever,origin_title,
- origin_url,blocked_type,blocked_remark,case_id,ctime,publish_status from blocked_info WHERE id=? AND status = 0`
- _blockedInfoIDsSQL = `SELECT id,uid,blocked_days,blocked_forever,blocked_remark,moral_num,origin_content_modify,origin_title,origin_type,origin_url,punish_time,
- punish_type,reason_type FROM blocked_info WHERE id IN (%s) AND status = 0`
- _blockedInfosSQL = `SELECT id,uid,uname,origin_content_modify,origin_type,punish_time,punish_type,moral_num,blocked_days,reason_type,blocked_forever,origin_title,
- origin_url,blocked_type,blocked_remark,case_id,ctime,publish_status FROM blocked_info WHERE id IN (%s) AND publish_status = 1 AND status = 0 ORDER BY publish_time desc`
- )
- // AddBlockedInfo add blocked info
- func (d *Dao) AddBlockedInfo(c context.Context, r *model.BlockedInfo) (err error) {
- if _, err = d.db.Exec(c, _addBlockedInfoSQL, r.UID, r.OriginTitle, r.BlockedRemark, r.OriginURL, r.OriginContent, r.OriginContent,
- r.OriginType, r.PunishTime.Time(), r.PunishType, r.BlockedDays, r.PublishStatus, r.BlockedType, r.BlockedForever,
- r.ReasonType, r.OID, r.MoralNum, r.OperatorName); err != nil {
- err = errors.Wrap(err, "AddBlockedInfo")
- }
- return
- }
- // TxAddBlockedInfo add blocked info
- func (d *Dao) TxAddBlockedInfo(tx *sql.Tx, rs []*model.BlockedInfo) (err error) {
- l := len(rs)
- valueStrings := make([]string, 0, l)
- valueArgs := make([]interface{}, 0, l*17)
- for _, v := range rs {
- valueStrings = append(valueStrings, "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
- valueArgs = append(valueArgs, strconv.FormatInt(v.UID, 10))
- valueArgs = append(valueArgs, v.OriginTitle)
- valueArgs = append(valueArgs, v.BlockedRemark)
- valueArgs = append(valueArgs, v.OriginURL)
- valueArgs = append(valueArgs, v.OriginContent)
- valueArgs = append(valueArgs, v.OriginContent)
- valueArgs = append(valueArgs, strconv.FormatInt(v.OriginType, 10))
- valueArgs = append(valueArgs, v.PunishTime.Time())
- valueArgs = append(valueArgs, strconv.FormatInt(v.PunishType, 10))
- valueArgs = append(valueArgs, strconv.FormatInt(v.BlockedDays, 10))
- valueArgs = append(valueArgs, strconv.FormatInt(v.PublishStatus, 10))
- valueArgs = append(valueArgs, strconv.FormatInt(v.BlockedType, 10))
- valueArgs = append(valueArgs, strconv.FormatInt(v.BlockedForever, 10))
- valueArgs = append(valueArgs, strconv.FormatInt(v.ReasonType, 10))
- valueArgs = append(valueArgs, strconv.FormatInt(v.OID, 10))
- valueArgs = append(valueArgs, strconv.FormatInt(v.MoralNum, 10))
- valueArgs = append(valueArgs, v.OperatorName)
- }
- stmt := fmt.Sprintf(_addBatchBlockedInfoSQL, strings.Join(valueStrings, ","))
- _, err = tx.Exec(stmt, valueArgs...)
- if err != nil {
- err = errors.Wrapf(err, "TxAddBlockedInfo tx.Exec() error(%+v)", err)
- }
- return
- }
- // BlockedCount get user blocked count.
- func (d *Dao) BlockedCount(c context.Context, mid int64) (count int, err error) {
- row := d.db.QueryRow(c, _blockedCountSQL, mid)
- if err = row.Scan(&count); err != nil {
- err = errors.Wrap(err, "BlockedCount scan fail")
- }
- return
- }
- // BlockedNumUser get blocked user number.
- func (d *Dao) BlockedNumUser(c context.Context, mid int64) (count int, err error) {
- row := d.db.QueryRow(c, _blockedNumUserSQL, mid)
- if err = row.Scan(&count); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- return
- }
- err = errors.Wrap(err, "BlockedNumUser")
- }
- return
- }
- // BLKHistoryCount get blocked historys count.
- func (d *Dao) BLKHistoryCount(c context.Context, ArgHis *model.ArgHistory) (count int64, err error) {
- row := d.db.QueryRow(c, _blkHistoryCountSQL, ArgHis.MID, xtime.Time(ArgHis.STime))
- if err = row.Scan(&count); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- return
- }
- err = errors.Wrap(err, "BLKHistoryCount")
- }
- return
- }
- // BlockTotalTime get block total by time.
- func (d *Dao) BlockTotalTime(c context.Context, mid int64, ts time.Time) (total int64, err error) {
- row := d.db.QueryRow(c, _blockedTotalSQL, mid, ts)
- if err = row.Scan(&total); err != nil {
- if err != sql.ErrNoRows {
- log.Error("row.Scan() error(%v)", err)
- return
- }
- err = nil
- total = 0
- }
- return
- }
- // BlockedUserList get user blocked list.
- func (d *Dao) BlockedUserList(c context.Context, mid int64) (res []*model.BlockedInfo, err error) {
- rows, err := d.db.Query(c, _blockedInfosByMidSQL, mid)
- if err != nil {
- log.Error("d.getBlockedInfosByMidStmt.Query(mid %d) error(%v)", mid, err)
- err = errors.Wrap(err, "BlockedUserList")
- return
- }
- defer rows.Close()
- for rows.Next() {
- r := &model.BlockedInfo{}
- if err = rows.Scan(&r.ID, &r.CaseID, &r.UID, &r.OriginTitle, &r.OriginURL, &r.OriginContent, &r.OriginContentModify, &r.OriginType, &r.PunishTime, &r.PunishType,
- &r.BlockedDays, &r.PublishStatus, &r.BlockedType, &r.ReasonType, &r.BlockedRemark, &r.CTime); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- return
- }
- }
- res = append(res, r)
- }
- err = rows.Err()
- return
- }
- // BlockedList get blocked list.
- func (d *Dao) BlockedList(c context.Context, otype, btype int8) (res []*model.BlockedInfo, err error) {
- var ostr, bstr string
- if otype != 0 {
- ostr = fmt.Sprintf("AND origin_type=%d ", otype)
- }
- if btype >= 0 {
- bstr = fmt.Sprintf("AND blocked_type=%d ", btype)
- }
- rows, err := d.db.Query(c, fmt.Sprintf(_blockedListSQL, ostr, bstr))
- if err != nil {
- err = errors.Wrap(err, "BlockedInfos")
- return
- }
- defer rows.Close()
- for rows.Next() {
- r := &model.BlockedInfo{}
- if err = rows.Scan(&r.ID, &r.OriginType, &r.BlockedType, &r.PublishTime); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- return
- }
- }
- res = append(res, r)
- }
- err = rows.Err()
- return
- }
- // BLKHistorys get blocked historys list.
- func (d *Dao) BLKHistorys(c context.Context, ah *model.ArgHistory) (res []*model.BlockedInfo, err error) {
- rows, err := d.db.Query(c, _blkHistorysSQL, ah.MID, xtime.Time(ah.STime), (ah.PN-1)*ah.PS, ah.PS)
- if err != nil {
- err = errors.Wrap(err, "BLKHistorys")
- return
- }
- defer rows.Close()
- for rows.Next() {
- bi := new(model.BlockedInfo)
- if err = rows.Scan(&bi.ID, &bi.UID, &bi.BlockedDays, &bi.BlockedForever, &bi.BlockedRemark, &bi.MoralNum, &bi.OriginContentModify, &bi.OriginTitle,
- &bi.OriginType, &bi.OriginURL, &bi.PunishTime, &bi.PunishType, &bi.ReasonType); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- return
- }
- err = errors.Wrap(err, "BLKHistorys")
- return
- }
- res = append(res, bi)
- }
- err = rows.Err()
- return
- }
- // BlockedInfoByID get blocked info by id.
- func (d *Dao) BlockedInfoByID(c context.Context, id int64) (r *model.BlockedInfo, err error) {
- row := d.db.QueryRow(c, _blockedInfoIDSQL, id)
- r = new(model.BlockedInfo)
- if err = row.Scan(&r.ID, &r.UID, &r.Uname, &r.OriginContent, &r.OriginContentModify, &r.OriginType, &r.PunishTime, &r.PunishType, &r.MoralNum,
- &r.BlockedDays, &r.ReasonType, &r.BlockedForever, &r.OriginTitle, &r.OriginURL, &r.BlockedType, &r.BlockedRemark, &r.CaseID, &r.CTime, &r.PublishStatus); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- r = nil
- return
- }
- err = errors.Wrap(err, "BlockedInfoByID")
- }
- return
- }
- // BlockedInfoIDs get blocked info by ids
- func (d *Dao) BlockedInfoIDs(c context.Context, ids []int64) (res map[int64]*model.BlockedInfo, err error) {
- rows, err := d.db.Query(c, fmt.Sprintf(_blockedInfoIDsSQL, xstr.JoinInts(ids)))
- if err != nil {
- err = errors.Wrap(err, "BlockedInfoIDs")
- return
- }
- defer rows.Close()
- res = make(map[int64]*model.BlockedInfo, len(ids))
- for rows.Next() {
- bi := new(model.BlockedInfo)
- if err = rows.Scan(&bi.ID, &bi.UID, &bi.BlockedDays, &bi.BlockedForever, &bi.BlockedRemark, &bi.MoralNum, &bi.OriginContentModify, &bi.OriginTitle,
- &bi.OriginType, &bi.OriginURL, &bi.PunishTime, &bi.PunishType, &bi.ReasonType); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- return
- }
- err = errors.Wrap(err, "BlockedInfoIDs")
- return
- }
- res[bi.ID] = bi
- }
- err = rows.Err()
- return
- }
- // BlockedInfos get blocked infos. Queryed without mid or id, public default.
- func (d *Dao) BlockedInfos(c context.Context, ids []int64) (res []*model.BlockedInfo, err error) {
- rows, err := d.db.Query(c, fmt.Sprintf(_blockedInfosSQL, xstr.JoinInts(ids)))
- if err != nil {
- err = errors.Wrap(err, "BlockedInfos")
- return
- }
- defer rows.Close()
- for rows.Next() {
- r := &model.BlockedInfo{}
- if err = rows.Scan(&r.ID, &r.UID, &r.Uname, &r.OriginContentModify, &r.OriginType, &r.PunishTime, &r.PunishType, &r.MoralNum,
- &r.BlockedDays, &r.ReasonType, &r.BlockedForever, &r.OriginTitle, &r.OriginURL, &r.BlockedType, &r.BlockedRemark, &r.CaseID, &r.CTime, &r.PublishStatus); err != nil {
- log.Error("BlockedInfos err %v", err)
- return
- }
- res = append(res, r)
- }
- err = rows.Err()
- return
- }
|