first commit
This commit is contained in:
418
service/backend/dao/cdkdb.go
Normal file
418
service/backend/dao/cdkdb.go
Normal file
@@ -0,0 +1,418 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"gitlab.33.cn/chat/dtalk/pkg/util"
|
||||
"gitlab.33.cn/chat/dtalk/service/backend/model/db"
|
||||
"gitlab.33.cn/utils/go-kit/convert"
|
||||
"math"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
_InsertCdkType = `INSERT INTO dtalk_cdk_info ( cdk_id, cdk_name, cdk_info, coin_name, exchange_rate, create_time, update_time, delete_time)VALUES( ?, ?, ?, ?, ?, ?, ?, ?)`
|
||||
_GetCdkTypes = `SELECT * FROM dtalk_cdk_info WHERE delete_time = 0 AND coin_name LIKE ? ORDER BY create_time DESC LIMIT ?,?`
|
||||
_DeleteCdkType = `UPDATE dtalk_cdk_info SET delete_time = ? WHERE cdk_id = ? AND delete_time = 0`
|
||||
_InsertCdk = `INSERT INTO dtalk_cdk_list ( id, cdk_id, cdk_content, user_id, cdk_status, order_id, create_time, update_time, delete_time, exchange_time)VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
|
||||
_GetCdks = `SELECT * FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_id = ? AND cdk_content LIKE ? ORDER BY create_time DESC LIMIT ?,?`
|
||||
_DeleteCdk = `UPDATE dtalk_cdk_list SET delete_time = ? WHERE id = ? AND delete_time = 0`
|
||||
_UpdateCdkStatus = `UPDATE dtalk_cdk_list SET cdk_status = ?, update_time = ? WHERE id = ? AND delete_time = 0`
|
||||
_UpdateCdkUserId = `UPDATE dtalk_cdk_list SET user_id = ?, update_time = ? WHERE id = ? AND delete_time = 0`
|
||||
_UpdateCdkOrderId = `UPDATE dtalk_cdk_list SET order_id = ?, cdk_status = 1, update_time = ? WHERE id = ? AND delete_time = 0`
|
||||
_GetCdkTypesCount = `SELECT COUNT(*) FROM dtalk_cdk_info WHERE delete_time = 0 AND coin_name LIKE ?`
|
||||
_GetCdksCount = `SELECT COUNT(*) FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_id = ?`
|
||||
_GetCdksWithUserId = `SELECT * FROM dtalk_cdk_list WHERE delete_time = 0 AND user_id = ? AND cdk_status >= ? ORDER BY create_time DESC LIMIT ?,?`
|
||||
_GetCdksCountWithUserId = `SELECT COUNT(*) FROM dtalk_cdk_list WHERE delete_time = 0 AND user_id = ? AND cdk_status >= ?`
|
||||
_GetCdkTypesWithCoinName = `SELECT * FROM dtalk_cdk_info WHERE delete_time = 0 AND coin_name = ?`
|
||||
_GetUnusedCdksCount = `SELECT COUNT(*) FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_id = ? AND cdk_status = 0`
|
||||
_GetFrozenCdksCount = `SELECT COUNT(*) FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_id = ? AND cdk_status = 1`
|
||||
_GetUsedCdksCount = `SELECT COUNT(*) FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_id = ? AND cdk_status >= 2`
|
||||
_GetCdkType = `SELECT * FROM dtalk_cdk_info WHERE delete_time = 0 AND cdk_id = ?`
|
||||
_DeleteCdks = `UPDATE dtalk_cdk_list SET delete_time = ? WHERE delete_time = 0 AND id in `
|
||||
_DeleteCdkTypes = `UPDATE dtalk_cdk_info SET delete_time = ? WHERE delete_time = 0 AND cdk_id in `
|
||||
_DeleteCdksByCdkIds = `UPDATE dtalk_cdk_list SET delete_time = ? WHERE delete_time = 0 AND cdk_id in `
|
||||
_UpdateCdkType = `UPDATE dtalk_cdk_info SET cdk_name = ?, coin_name = ?, exchange_rate = ?, update_time = ? WHERE delete_time = 0 AND cdk_id = ?`
|
||||
|
||||
_GetCdksByOrderId = `SELECT * FROM dtalk_cdk_list WHERE delete_time = 0 AND order_id = ?`
|
||||
_UpdateCdksStatus = `UPDATE dtalk_cdk_list SET cdk_status = ?, update_time = ?, exchange_time = ? WHERE delete_time = 0 AND id in `
|
||||
_FrozenCdksStatus = `UPDATE dtalk_cdk_list SET cdk_status = ?, user_id = ?, order_id = ?, update_time = ? WHERE delete_time = 0 AND id in `
|
||||
_GetUnusedCdks = `SELECT * FROM dtalk_cdk_list WHERE cdk_id = ? AND cdk_status = ? AND delete_time = 0 ORDER BY create_time ASC LIMIT 0,?`
|
||||
|
||||
_CheckCdkExist = `SELECT COUNT(*) FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_id = ? AND cdk_content = ?`
|
||||
_GetFrozenCdks = `SElECT * FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_status = 1`
|
||||
_CleanFrozenCdks = `UPDATE dtalk_cdk_list SET cdk_status = ?, update_time = ? WHERE delete_time = 0 AND order_id = ?`
|
||||
_GetCdksCountByUserIdAndCdkId = `SELECT COUNT(*) FROM dtalk_cdk_list WHERE delete_time = 0 AND cdk_id = ? AND user_id = ? AND cdk_status >= 1`
|
||||
)
|
||||
|
||||
func (d *Dao) InsertCdkType(cdkType *db.CdkType) error {
|
||||
_, _, err := d.conn.Exec(_InsertCdkType, cdkType.CdkId, cdkType.CdkName, cdkType.CdkInfo, cdkType.CoinName, cdkType.ExchangeRate, cdkType.CreateTime, cdkType.UpdateTime, cdkType.DeleteTime)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) InsertCdk(cdk *db.Cdk) error {
|
||||
_, _, err := d.conn.Exec(_InsertCdk, cdk.Id, cdk.CdkId, cdk.CdkContent, cdk.UserId, cdk.CdkStatus, cdk.OrderId, cdk.CreateTime, cdk.UpdateTime, cdk.DeleteTime, cdk.ExchangeTime)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) DeleteCdkType(cdkId int64, deleteTime int64) error {
|
||||
_, _, err := d.conn.Exec(_DeleteCdkType, deleteTime, cdkId)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) DeleteCdk(id int64, deleteTime int64) error {
|
||||
_, _, err := d.conn.Exec(_DeleteCdk, deleteTime, id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) DeleteCdks(ids []int64, deleteTime int64) error {
|
||||
idStrs := make([]string, 0, len(ids))
|
||||
for _, id := range ids {
|
||||
idStrs = append(idStrs, convert.ToString(id))
|
||||
}
|
||||
idStr := "(" + strings.Join(idStrs, ",") + ")"
|
||||
execSql := _DeleteCdks + idStr
|
||||
_, _, err := d.conn.Exec(execSql, deleteTime)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) DeleteCdkTypes(cdkIds []int64) error {
|
||||
idStrs := make([]string, 0, len(cdkIds))
|
||||
for _, id := range cdkIds {
|
||||
idStrs = append(idStrs, convert.ToString(id))
|
||||
}
|
||||
idStr := "(" + strings.Join(idStrs, ",") + ")"
|
||||
execSql := _DeleteCdkTypes + idStr
|
||||
_, _, err := d.conn.Exec(execSql, d.getNowTime())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) DeleteCdksByCdkIds(cdkIds []int64) error {
|
||||
idStrs := make([]string, 0, len(cdkIds))
|
||||
for _, id := range cdkIds {
|
||||
idStrs = append(idStrs, convert.ToString(id))
|
||||
}
|
||||
idStr := "(" + strings.Join(idStrs, ",") + ")"
|
||||
execSql := _DeleteCdksByCdkIds + idStr
|
||||
_, _, err := d.conn.Exec(execSql, d.getNowTime())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) UpdateCdkType(cdkId int64, cdkName, coinName string, exchangeRate int64) error {
|
||||
_, _, err := d.conn.Exec(_UpdateCdkType, cdkName, coinName, exchangeRate, d.getNowTime(), cdkId)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) UpdateCdkStatus(id int64, cdkStatus int32) error {
|
||||
_, _, err := d.conn.Exec(_UpdateCdkStatus, cdkStatus, d.getNowTime(), id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) UpdateCdkUserId(id int64, userId int64) error {
|
||||
_, _, err := d.conn.Exec(_UpdateCdkUserId, userId, d.getNowTime(), id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) UpdateCdkOrderId(id int64, orderId int64) error {
|
||||
_, _, err := d.conn.Exec(_UpdateCdkOrderId, orderId, d.getNowTime(), id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdkType(cdkId int64) (*db.CdkType, error) {
|
||||
var records []map[string]string
|
||||
records, err := d.conn.Query(_GetCdkType, cdkId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
response, err := d.ToCdkTypes(records)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(response) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return &response[0], nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdkTypes(coinName string, page int64, size int64) ([]db.CdkType, int64, int64, error) {
|
||||
var records []map[string]string
|
||||
offset := page * size
|
||||
if coinName == "" {
|
||||
coinName = "%"
|
||||
}
|
||||
records, err := d.conn.Query(_GetCdkTypes, coinName, offset, size)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
response, err := d.ToCdkTypes(records)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
if coinName == "" {
|
||||
coinName = "%"
|
||||
}
|
||||
recordsCount, err := d.conn.Query(_GetCdkTypesCount, coinName)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
totalElements := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
totalPages := int64(math.Ceil(float64(totalElements) / float64(size)))
|
||||
return response, totalElements, totalPages, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdks(cdkId int64, cdkContent string, page int64, size int64) ([]db.Cdk, int64, int64, error) {
|
||||
var records []map[string]string
|
||||
offset := page * size
|
||||
cdkContent += "%"
|
||||
records, err := d.conn.Query(_GetCdks, cdkId, cdkContent, offset, size)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
response, err := d.ToCdks(records)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
recordsCount, err := d.conn.Query(_GetCdksCount, cdkId)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
totalElements := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
totalPages := int64(math.Ceil(float64(totalElements) / float64(size)))
|
||||
return response, totalElements, totalPages, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdksWithUserId(userId string, page int64, size int64) ([]db.Cdk, int64, int64, error) {
|
||||
var records []map[string]string
|
||||
offset := page * size
|
||||
records, err := d.conn.Query(_GetCdksWithUserId, userId, db.CdkFrozen, offset, size)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
response, err := d.ToCdks(records)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
recordsCount, err := d.conn.Query(_GetCdksCountWithUserId, userId, db.CdkFrozen)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
totalElements := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
totalPages := int64(math.Ceil(float64(totalElements) / float64(size)))
|
||||
return response, totalElements, totalPages, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdkTypesWithCoinName(coinName string) ([]db.CdkType, error) {
|
||||
var records []map[string]string
|
||||
records, err := d.conn.Query(_GetCdkTypesWithCoinName, coinName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
response, err := d.ToCdkTypes(records)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdksCount(cdkId int64) (int64, int64, int64, error) {
|
||||
res, err := d.conn.Query(_GetUnusedCdksCount, cdkId)
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
}
|
||||
Unused := convert.ToInt64(res[0]["COUNT(*)"])
|
||||
|
||||
res, err = d.conn.Query(_GetFrozenCdksCount, cdkId)
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
|
||||
}
|
||||
Frozen := convert.ToInt64(res[0]["COUNT(*)"])
|
||||
|
||||
res, err = d.conn.Query(_GetUsedCdksCount, cdkId)
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
|
||||
}
|
||||
Used := util.ToInt64(res[0]["COUNT(*)"])
|
||||
|
||||
return Unused, Frozen, Used, nil
|
||||
|
||||
}
|
||||
|
||||
func (d *Dao) GetUnusedCdksCount(cdkId string) (int64, error) {
|
||||
recordsCount, err := d.conn.Query(_GetUnusedCdksCount, cdkId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
response := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetFrozenCdksCount(cdkId string) (int64, error) {
|
||||
recordsCount, err := d.conn.Query(_GetFrozenCdksCount, cdkId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
response := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetUsedCdksCount(cdkId string) (int64, error) {
|
||||
recordsCount, err := d.conn.Query(_GetUsedCdksCount, cdkId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
response := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (d *Dao) ToCdkTypes(records []map[string]string) ([]db.CdkType, error) {
|
||||
cdkTypes := make([]db.CdkType, len(records), len(records))
|
||||
for i, record := range records {
|
||||
cdkType := db.CdkType{
|
||||
CdkId: convert.ToInt64(record["cdk_id"]),
|
||||
CdkName: record["cdk_name"],
|
||||
CdkInfo: record["cdl_info"],
|
||||
CoinName: record["coin_name"],
|
||||
ExchangeRate: convert.ToInt64(record["exchange_rate"]),
|
||||
TimeInfo: db.TimeInfo{
|
||||
CreateTime: convert.ToInt64(record["create_time"]),
|
||||
UpdateTime: convert.ToInt64(record["update_time"]),
|
||||
DeleteTime: convert.ToInt64(record["delete_time"]),
|
||||
},
|
||||
}
|
||||
|
||||
cdkTypes[i] = cdkType
|
||||
}
|
||||
return cdkTypes, nil
|
||||
}
|
||||
|
||||
func (d *Dao) ToCdks(records []map[string]string) ([]db.Cdk, error) {
|
||||
cdks := make([]db.Cdk, len(records), len(records))
|
||||
for i, record := range records {
|
||||
cdk := db.Cdk{
|
||||
Id: convert.ToInt64(record["id"]),
|
||||
CdkId: convert.ToInt64(record["cdk_id"]),
|
||||
CdkContent: record["cdk_content"],
|
||||
UserId: record["user_id"],
|
||||
CdkStatus: convert.ToInt32(record["cdk_status"]),
|
||||
OrderId: convert.ToInt64(record["order_id"]),
|
||||
TimeInfo: db.TimeInfo{
|
||||
CreateTime: convert.ToInt64(record["create_time"]),
|
||||
UpdateTime: convert.ToInt64(record["update_time"]),
|
||||
DeleteTime: convert.ToInt64(record["delete_time"]),
|
||||
},
|
||||
ExchangeTime: convert.ToInt64(record["exchange_time"]),
|
||||
}
|
||||
|
||||
//fmt.Println(cdk)
|
||||
|
||||
cdks[i] = cdk
|
||||
}
|
||||
return cdks, nil
|
||||
}
|
||||
|
||||
func (d *Dao) UpdateCdksStatus(ids []int64, status int64) error {
|
||||
idStrs := make([]string, 0, len(ids))
|
||||
for _, id := range ids {
|
||||
idStrs = append(idStrs, convert.ToString(id))
|
||||
}
|
||||
idStr := "(" + strings.Join(idStrs, ",") + ")"
|
||||
|
||||
execSql := _UpdateCdksStatus + idStr
|
||||
var exchangeTime int64
|
||||
if status == db.CdkUsed || status == db.CdkExchange {
|
||||
exchangeTime = d.getNowTime()
|
||||
}
|
||||
_, _, err := d.conn.Exec(execSql, status, d.getNowTime(), exchangeTime)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdksByOrderId(orderId int64) ([]db.Cdk, error) {
|
||||
var records []map[string]string
|
||||
records, err := d.conn.Query(_GetCdksByOrderId, orderId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
response, err := d.ToCdks(records)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetUnusedCdks(cdkId int64, number int64) ([]db.Cdk, error) {
|
||||
var records []map[string]string
|
||||
records, err := d.conn.Query(_GetUnusedCdks, cdkId, db.CdkUnused, number)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
response, err := d.ToCdks(records)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (d *Dao) FrozenCdksStatus(ids []int64, userId string, orderId int64) error {
|
||||
idStrs := make([]string, 0, len(ids))
|
||||
for _, id := range ids {
|
||||
idStrs = append(idStrs, convert.ToString(id))
|
||||
}
|
||||
idStr := "(" + strings.Join(idStrs, ",") + ")"
|
||||
|
||||
execSql := _FrozenCdksStatus + idStr
|
||||
|
||||
_, _, err := d.conn.Exec(execSql, db.CdkFrozen, userId, orderId, d.getNowTime())
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Dao) getNowTime() int64 {
|
||||
return time.Now().UnixNano() / 1e6
|
||||
}
|
||||
|
||||
func (d *Dao) CheckCdkExist(cdkId int64, cdkContent string) (bool, error) {
|
||||
recordsCount, err := d.conn.Query(_CheckCdkExist, cdkId, cdkContent)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
response := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
return response >= 1, nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetFrozenCdks() ([]db.Cdk, error) {
|
||||
var records []map[string]string
|
||||
records, err := d.conn.Query(_GetFrozenCdks)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
response, err := d.ToCdks(records)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (d *Dao) CleanFrozenCdks(orderId int64) error {
|
||||
_, _, err := d.conn.Exec(_CleanFrozenCdks, db.CdkUnused, d.getNowTime(), orderId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetCdksCountByUserIdAndCdkId(cdkId int64, userId string) (int64, error) {
|
||||
recordsCount, err := d.conn.Query(_GetCdksCountByUserIdAndCdkId, cdkId, userId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
response := convert.ToInt64(recordsCount[0]["COUNT(*)"])
|
||||
return response, nil
|
||||
}
|
||||
Reference in New Issue
Block a user