first commit
This commit is contained in:
159
service/backend/dao/versiondb.go
Normal file
159
service/backend/dao/versiondb.go
Normal file
@@ -0,0 +1,159 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
xerror "gitlab.33.cn/chat/dtalk/pkg/error"
|
||||
"gitlab.33.cn/chat/dtalk/pkg/util"
|
||||
"gitlab.33.cn/chat/dtalk/service/backend/model"
|
||||
"math"
|
||||
)
|
||||
|
||||
const (
|
||||
_InsertVersionInfo = `INSERT INTO dtalk_ver_backend ( platform, state, device_type, version_code, version_name, download_url, force_update,size,md5, description, ope_user, update_time, create_time)VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,?,?)`
|
||||
_UpdateVersionInfo = `UPDATE dtalk_ver_backend SET version_name=?,version_code=?,download_url=?,size=?,md5=?,description=?,force_update=?,update_time=?,ope_user=? WHERE id=?`
|
||||
_ChangeVersionStatus = `UPDATE dtalk_ver_backend SET state=1,update_time=?,ope_user=? WHERE id=?`
|
||||
_QueryOtherReleaseVersionInfo = `SELECT * FROM dtalk_ver_backend WHERE id!=? AND device_type=? AND platform=? AND state=1`
|
||||
_ChangeOtherReleaseVersionStatus = `UPDATE dtalk_ver_backend SET state=0,update_time=?,ope_user=? WHERE id=?`
|
||||
_GetVersionList = `SELECT * FROM dtalk_ver_backend WHERE platform LIKE ? AND device_type LIKE ? ORDER BY create_time DESC LIMIT ?,?`
|
||||
_GetVersionCount = `SELECT COUNT(*) FROM dtalk_ver_backend WHERE platform LIKE ? AND device_type LIKE ?`
|
||||
_GetForceVersionCount = `SELECT COUNT(*) AS force_num FROM dtalk_ver_backend WHERE force_update = 1 AND version_code > ? AND version_code < ?`
|
||||
_GetReleaseVersionInfo = `SELECT * FROM dtalk_ver_backend WHERE device_type=? AND platform=? AND state = 1 ORDER BY id DESC LIMIT 1`
|
||||
_QueryVersionInfoById = `SELECT * FROM dtalk_ver_backend WHERE id=?`
|
||||
)
|
||||
|
||||
func (d *Dao) InsertVersion(form *model.VersionForm) (int64, int64, error) {
|
||||
num, lastId, err := d.conn.Exec(_InsertVersionInfo, form.Platform, form.Status, form.DeviceType, form.VersionCode, form.VersionName, form.Url, form.Force, form.Size, form.Md5, form.Description.ToString(), form.OpeUser, form.UpdateTime, form.CreateTime)
|
||||
return num, lastId, err
|
||||
}
|
||||
|
||||
func (d *Dao) UpdateVersion(form *model.VersionForm) (*model.VersionForm, error) {
|
||||
_, _, err := d.conn.Exec(_UpdateVersionInfo, form.VersionName, form.VersionCode, form.Url, form.Size, form.Md5, form.Description.ToString(), form.Force, form.UpdateTime, form.OpeUser, form.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
records, err := d.conn.Query(_QueryVersionInfoById, form.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(records) < 1 {
|
||||
return nil, xerror.NewError(xerror.ParamsError).SetExtMessage("无此id的记录")
|
||||
}
|
||||
record := records[0]
|
||||
version, err := model.ConvertVersionForm(&record)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return version, nil
|
||||
}
|
||||
|
||||
func (d *Dao) ChangeVersionStatus(form *model.VersionForm) error {
|
||||
tx, err := d.conn.NewTx()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, _, err = tx.Exec(_ChangeVersionStatus, form.UpdateTime, form.OpeUser, form.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
records, err := tx.Query(_QueryVersionInfoById, form.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(records) == 0 {
|
||||
return xerror.NewError(xerror.ParamsError).SetExtMessage("无此id的记录")
|
||||
}
|
||||
deviceType := records[0]["device_type"]
|
||||
platform := records[0]["platform"]
|
||||
|
||||
records, err = tx.Query(_QueryOtherReleaseVersionInfo, form.Id, deviceType, platform)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(records) == 0 {
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
id := util.ToInt64(records[0]["id"])
|
||||
_, _, err = tx.Exec(_ChangeOtherReleaseVersionStatus, form.UpdateTime, form.OpeUser, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) GetVersionList(form *model.VersionForm, page int64, size int64) (*[]model.VersionForm, int64, int64, error) {
|
||||
var records []map[string]string
|
||||
offset := page * size
|
||||
records, err := d.conn.Query(_GetVersionList, form.Platform, form.DeviceType, offset, size)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
response, err := d.ConvertVersionList(&records)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
countRecords, err := d.conn.Query(_GetVersionCount, form.Platform, form.DeviceType)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
totalElements := util.ToInt64(countRecords[0]["COUNT(*)"])
|
||||
totalPages := int64(math.Ceil(float64(totalElements) / float64(size)))
|
||||
return response, totalElements, totalPages, nil
|
||||
}
|
||||
|
||||
func (d *Dao) CheckAndUpdateVersion(form *model.VersionForm) (*model.VersionForm, error) {
|
||||
records, err := d.conn.Query(_GetReleaseVersionInfo, form.DeviceType, form.Platform)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(records) < 1 {
|
||||
return &model.VersionForm{}, nil
|
||||
}
|
||||
record, err := model.ConvertVersionForm(&records[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !record.Force {
|
||||
//判断期间是否包含强制更新版本
|
||||
record.Force, _ = d.checkHaveForce(util.ToInt(form.VersionCode), util.ToInt(record.VersionCode))
|
||||
}
|
||||
return record, nil
|
||||
}
|
||||
|
||||
func (d *Dao) ConvertVersionList(records *[]map[string]string) (*[]model.VersionForm, error) {
|
||||
//var versionList []model.VersionForm
|
||||
versionList := make([]model.VersionForm, len(*records), len(*records))
|
||||
for i, record := range *records {
|
||||
version, err := model.ConvertVersionForm(&record)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
versionList[i] = *version
|
||||
}
|
||||
return &versionList, nil
|
||||
}
|
||||
|
||||
func (d *Dao) checkHaveForce(oldVer, newVer int) (bool, error) {
|
||||
if oldVer >= newVer {
|
||||
return false, nil
|
||||
}
|
||||
records, err := d.conn.Query(_GetForceVersionCount, oldVer, newVer)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if len(records) < 1 {
|
||||
return false, nil
|
||||
}
|
||||
num := util.ToInt64(records[0]["force_num"])
|
||||
return num > 0, nil
|
||||
}
|
||||
Reference in New Issue
Block a user