160 lines
5.5 KiB
Go
160 lines
5.5 KiB
Go
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
|
|
}
|