319 lines
8.9 KiB
Go
319 lines
8.9 KiB
Go
package dao
|
||
|
||
import (
|
||
"database/sql"
|
||
"fmt"
|
||
"strconv"
|
||
|
||
"go-common/app/admin/ep/merlin/model"
|
||
"go-common/library/ecode"
|
||
|
||
pkgerr "github.com/pkg/errors"
|
||
)
|
||
|
||
// FindMobileMachineBySerial Find Device FarmBy Serial.
|
||
func (d *Dao) FindMobileMachineBySerial(serial string) (mobileMachine *model.MobileMachine, err error) {
|
||
mobileMachine = &model.MobileMachine{}
|
||
if err = d.db.Where("serial = ?", serial).Find(mobileMachine).Error; err == ecode.NothingFound {
|
||
err = nil
|
||
}
|
||
return
|
||
}
|
||
|
||
// DeleteMobileMachineByUUID Delete Mobile Machine By UUID.
|
||
func (d *Dao) DeleteMobileMachineByUUID(UUID string) (delCnt int, err error) {
|
||
err = pkgerr.WithStack(d.db.Model(&model.MobileMachine{}).Where("uuid <> ? and action <>?", UUID, model.MBHostDel).Count(&delCnt).Update("action", model.MBOffline).Error)
|
||
return
|
||
}
|
||
|
||
// DeleteMobileMachineNotInHost Delete Mobile Machine Not In Host.
|
||
func (d *Dao) DeleteMobileMachineNotInHost(hostList []string) (delCnt int, err error) {
|
||
err = pkgerr.WithStack(d.db.Model(&model.MobileMachine{}).Where("host not in (?)", hostList).Count(&delCnt).Update("action", model.MBHostDel).Error)
|
||
return
|
||
}
|
||
|
||
// FindMobileMachineByID Find Mobile Machine By Id.
|
||
func (d *Dao) FindMobileMachineByID(deviceID int64) (mobileMachine *model.MobileMachine, err error) {
|
||
mobileMachine = &model.MobileMachine{}
|
||
err = pkgerr.WithStack(d.db.Where("id = ?", deviceID).Find(mobileMachine).Error)
|
||
return
|
||
}
|
||
|
||
// InsertMobileMachine Insert Device Farm.
|
||
func (d *Dao) InsertMobileMachine(mobileMachine *model.MobileMachine) (err error) {
|
||
return pkgerr.WithStack(d.db.Create(&mobileMachine).Error)
|
||
}
|
||
|
||
// UpdateMobileMachineWsurlAndState Update Mobile Machine Wsurl And State.
|
||
func (d *Dao) UpdateMobileMachineWsurlAndState(mobileMachine *model.MobileMachine) (err error) {
|
||
return pkgerr.WithStack(d.db.Model(&model.MobileMachine{}).Where("serial=?", mobileMachine.Serial).Updates(map[string]interface{}{"wsurl": mobileMachine.WsURL, "state": mobileMachine.State, "upload_url": mobileMachine.UploadURL}).Error)
|
||
}
|
||
|
||
// UpdateMobileMachine Update Mobile Machine.
|
||
func (d *Dao) UpdateMobileMachine(mobileMachine *model.MobileMachine) (err error) {
|
||
return pkgerr.WithStack(d.db.Model(&model.MobileMachine{}).Where("serial=?", mobileMachine.Serial).Updates(mobileMachine).Error)
|
||
}
|
||
|
||
// UpdateMobileMachineByRelease Update Mobile Machine By Release.
|
||
func (d *Dao) UpdateMobileMachineByRelease(mobileMachine *model.MobileMachine) (err error) {
|
||
return pkgerr.WithStack(d.db.Model(&model.MobileMachine{}).Where("serial=?", mobileMachine.Serial).Updates(map[string]interface{}{"username": mobileMachine.Username, "end_time": mobileMachine.EndTime}).Error)
|
||
}
|
||
|
||
//FindMobileMachines Find Mobile Machines.
|
||
func (d *Dao) FindMobileMachines(queryRequest *model.QueryMobileDeviceRequest) (total int64, mobileMachines []*model.MobileMachine, err error) {
|
||
gDB := d.db.Model(&model.MobileMachine{}).Where("action> ? ", model.MBHostDel)
|
||
|
||
if queryRequest.MobileID > 0 {
|
||
gDB = gDB.Where("id=?", queryRequest.MobileID)
|
||
}
|
||
if queryRequest.Serial != "" {
|
||
gDB = gDB.Where("serial=?", queryRequest.Serial)
|
||
}
|
||
if queryRequest.Name != "" {
|
||
gDB = gDB.Where("name=?", queryRequest.Name)
|
||
}
|
||
if queryRequest.Username != "" {
|
||
gDB = gDB.Where("username=?", queryRequest.Username)
|
||
}
|
||
if queryRequest.OwnerName != "" {
|
||
gDB = gDB.Where("owner_name=?", queryRequest.OwnerName)
|
||
}
|
||
if queryRequest.CPU != "" {
|
||
gDB = gDB.Where("cpu=?", queryRequest.CPU)
|
||
}
|
||
if queryRequest.Version != "" {
|
||
gDB = gDB.Where("version=?", queryRequest.Version)
|
||
}
|
||
if queryRequest.Mode != "" {
|
||
gDB = gDB.Where("mode=?", queryRequest.Mode)
|
||
}
|
||
if queryRequest.Type > -1 {
|
||
gDB = gDB.Where("type=?", queryRequest.Type)
|
||
}
|
||
if queryRequest.State != "" {
|
||
gDB = gDB.Where("state=?", queryRequest.State)
|
||
}
|
||
if queryRequest.Online {
|
||
gDB = gDB.Where("action=?", model.MBOnline)
|
||
}
|
||
if queryRequest.Usage == model.MBFree {
|
||
gDB = gDB.Where("username='' and action=?", model.MBOnline)
|
||
}
|
||
if queryRequest.Usage == model.MBInUse {
|
||
gDB = gDB.Where("username<>'' and action=?", model.MBOnline)
|
||
}
|
||
if queryRequest.Usage == model.MBNoConnect {
|
||
gDB = gDB.Where("action=?", model.MBOffline)
|
||
}
|
||
if err = pkgerr.WithStack(gDB.Count(&total).Error); err != nil {
|
||
return
|
||
}
|
||
|
||
//先出action>0的,未连接的排在后面
|
||
err = pkgerr.WithStack(gDB.Order("action desc,id desc").Offset((queryRequest.PageNum - 1) * queryRequest.PageSize).Limit(queryRequest.PageSize).Find(&mobileMachines).Error)
|
||
|
||
return
|
||
}
|
||
|
||
// FindMobileMachineCategory Find Mobile Machine Category.
|
||
func (d *Dao) FindMobileMachineCategory(isShowOffline bool) (mobileCategory *model.MobileCategory, err error) {
|
||
var (
|
||
rows *sql.Rows
|
||
cpus []string
|
||
versions []string
|
||
modes []string
|
||
states []string
|
||
types []int
|
||
usages []int
|
||
|
||
sqlGroupTpl string
|
||
|
||
inUseCnt int
|
||
freeCnt int
|
||
noConCnt int
|
||
)
|
||
|
||
if isShowOffline {
|
||
sqlGroupTpl = "select %s from mobile_machines where action> " + strconv.Itoa(model.MBHostDel) + " group by %s"
|
||
} else {
|
||
sqlGroupTpl = "select %s from mobile_machines where action>-1 group by %s"
|
||
}
|
||
|
||
tx := d.db.Begin()
|
||
if err = tx.Error; err != nil {
|
||
return
|
||
}
|
||
|
||
//cpu
|
||
if rows, err = tx.Raw(fmt.Sprintf(sqlGroupTpl, "cpu", "cpu")).Rows(); err != nil {
|
||
return
|
||
}
|
||
for rows.Next() {
|
||
var cpu string
|
||
if err = rows.Scan(&cpu); err != nil {
|
||
return
|
||
}
|
||
cpus = append(cpus, cpu)
|
||
}
|
||
|
||
//version
|
||
if rows, err = tx.Raw(fmt.Sprintf(sqlGroupTpl, "version", "version")).Rows(); err != nil {
|
||
return
|
||
}
|
||
for rows.Next() {
|
||
var version string
|
||
if err = rows.Scan(&version); err != nil {
|
||
return
|
||
}
|
||
versions = append(versions, version)
|
||
}
|
||
|
||
//mode
|
||
if rows, err = tx.Raw(fmt.Sprintf(sqlGroupTpl, "mode", "mode")).Rows(); err != nil {
|
||
return
|
||
}
|
||
for rows.Next() {
|
||
var mode string
|
||
if err = rows.Scan(&mode); err != nil {
|
||
return
|
||
}
|
||
modes = append(modes, mode)
|
||
}
|
||
|
||
//state
|
||
if rows, err = tx.Raw(fmt.Sprintf(sqlGroupTpl, "state", "state")).Rows(); err != nil {
|
||
return
|
||
}
|
||
for rows.Next() {
|
||
var state string
|
||
if err = rows.Scan(&state); err != nil {
|
||
return
|
||
}
|
||
states = append(states, state)
|
||
}
|
||
|
||
//type
|
||
if rows, err = tx.Raw(fmt.Sprintf(sqlGroupTpl, "type", "type")).Rows(); err != nil {
|
||
return
|
||
}
|
||
for rows.Next() {
|
||
var stype int
|
||
if err = rows.Scan(&stype); err != nil {
|
||
return
|
||
}
|
||
types = append(types, stype)
|
||
}
|
||
|
||
//usage
|
||
if err = tx.Model(&model.MobileMachine{}).Where("username<>'' and action>0").Count(&inUseCnt).Error; err != nil {
|
||
return
|
||
}
|
||
if err = tx.Model(&model.MobileMachine{}).Where("username='' and action>0").Count(&freeCnt).Error; err != nil {
|
||
return
|
||
}
|
||
|
||
if err = tx.Model(&model.MobileMachine{}).Where("action<0").Count(&noConCnt).Error; err != nil {
|
||
return
|
||
}
|
||
|
||
if inUseCnt > 0 {
|
||
usages = append(usages, model.MBInUse)
|
||
}
|
||
|
||
if freeCnt > 0 {
|
||
usages = append(usages, model.MBFree)
|
||
}
|
||
|
||
if noConCnt > 0 {
|
||
usages = append(usages, model.MBNoConnect)
|
||
}
|
||
|
||
mobileCategory = &model.MobileCategory{}
|
||
mobileCategory.CPUs = cpus
|
||
mobileCategory.Versions = versions
|
||
mobileCategory.Modes = modes
|
||
mobileCategory.States = states
|
||
mobileCategory.Types = types
|
||
mobileCategory.Usages = usages
|
||
|
||
if err = tx.Commit().Error; err != nil {
|
||
tx.Rollback()
|
||
}
|
||
return
|
||
}
|
||
|
||
// FindAllMobileImages Find All Mobile Images.
|
||
func (d *Dao) FindAllMobileImages() (mobileImages []*model.MobileImage, err error) {
|
||
err = pkgerr.WithStack(d.db.Model(&model.MobileImage{}).Find(&mobileImages).Error)
|
||
return
|
||
}
|
||
|
||
// FindMobileImageByMode Find Mobile Image By Mode.
|
||
func (d *Dao) FindMobileImageByMode(mode string) (mobileImage *model.MobileImage, err error) {
|
||
mobileImage = &model.MobileImage{}
|
||
if err = d.db.Where("mode=?", mode).First(mobileImage).Error; err == ecode.NothingFound {
|
||
err = nil
|
||
}
|
||
return
|
||
}
|
||
|
||
// LendOutMobileMachine Lend Out Mobile.
|
||
func (d *Dao) LendOutMobileMachine(deviceID int64, serial, username string) (err error) {
|
||
tx := d.db.Begin()
|
||
|
||
if err = tx.Error; err != nil {
|
||
return
|
||
}
|
||
|
||
mobileMachineLog := &model.MobileMachineLog{
|
||
OperateType: model.MBLendOutLog,
|
||
Username: username,
|
||
MachineID: deviceID,
|
||
OperateResult: model.OperationSuccessForMachineLog,
|
||
}
|
||
if err = tx.Create(mobileMachineLog).Error; err != nil {
|
||
tx.Rollback()
|
||
return
|
||
}
|
||
|
||
if err = tx.Model(&model.MobileMachine{}).Where("serial=?", serial).Update("is_lendout", model.MBLendOut).Error; err != nil {
|
||
tx.Rollback()
|
||
return
|
||
}
|
||
|
||
if err = tx.Commit().Error; err != nil {
|
||
tx.Rollback()
|
||
}
|
||
return
|
||
}
|
||
|
||
// ReturnMobileMachine return Mobile.
|
||
func (d *Dao) ReturnMobileMachine(deviceID int64, serial, username string) (err error) {
|
||
tx := d.db.Begin()
|
||
|
||
if err = tx.Error; err != nil {
|
||
return
|
||
}
|
||
|
||
mobileMachineLog := &model.MobileMachineLog{
|
||
OperateType: model.MBReturnLog,
|
||
Username: username,
|
||
MachineID: deviceID,
|
||
OperateResult: model.OperationSuccessForMachineLog,
|
||
}
|
||
if err = tx.Create(mobileMachineLog).Error; err != nil {
|
||
tx.Rollback()
|
||
return
|
||
}
|
||
|
||
if err = tx.Model(&model.MobileMachine{}).Where("serial=?", serial).Update("is_lendout", model.MBOnSite).Error; err != nil {
|
||
tx.Rollback()
|
||
return
|
||
}
|
||
|
||
if err = tx.Commit().Error; err != nil {
|
||
tx.Rollback()
|
||
}
|
||
return
|
||
}
|