package sandbox import ( "eta_gn/eta_api/global" "eta_gn/eta_api/utils" "fmt" "github.com/rdlucklib/rdluck_tools/paging" "time" ) type Sandbox struct { SandboxId int `gorm:"primaryKey;column:sandbox_id;type:int(9) unsigned;not null"` // 沙盘id Name string `gorm:"index:idx_name;column:name;type:varchar(64);not null;default:''"` // 沙盘名称 Code string `gorm:"column:code;type:varchar(255);not null"` // 沙盘code Content string `gorm:"column:content;type:longtext;not null"` // 沙盘内容 MindmapData string `gorm:"column:mindmap_data;type:longtext;not null"` // 思维导图内容, PicUrl string `gorm:"column:pic_url;type:varchar(255);not null;default:''"` // 沙盘图片 IsDelete int `gorm:"column:is_delete;type:tinyint(9) unsigned;not null;default:0"` // 是否删除,0:未删除,1:已删除 ModifyTime time.Time `gorm:"column:modify_time;type:timestamp;default:CURRENT_TIMESTAMP"` // 最近一次更新时间 CreateTime time.Time `gorm:"column:create_time;type:timestamp;default:CURRENT_TIMESTAMP"` // 沙盘创建时间 Sort int `gorm:"column:sort;type:int(9);default:0"` // 排序字段,数字越小越排前面 SandboxClassifyId int `gorm:"column:sandbox_classify_id;type:int(11);default:0"` // 分类id SysUserId int `gorm:"column:sys_user_id;type:int(10) unsigned;not null;default:0"` // 创建人 SysUserName string `gorm:"column:sys_user_name;type:varchar(32);not null;default:''"` // 创建人名 ChartPermissionId int `gorm:"column:chart_permission_id;type:int(9) unsigned;not null;default:0"` // 品种id ChartPermissionName string `gorm:"column:chart_permission_name;type:varchar(32);not null;default:''"` // 品种名称(冗余字段,避免列表页查询时再去关联表查询) Style int `gorm:"column:style;type:int(8)"` // 风格 } // Update 沙盘字段变更 func (sandbox *Sandbox) Update(cols []string) (err error) { err = global.DmSQL["data"].Select(cols).Updates(sandbox).Error return } // GetSandboxById 根据沙盘id获取沙盘详情 func GetSandboxById(sandboxId int) (sandboxInfo *Sandbox, err error) { sql := `select * from sandbox where sandbox_id = ? and is_delete = 0` err = global.DmSQL["data"].Raw(sql, sandboxId).First(&sandboxInfo).Error return } // SandboxListItem 沙盘推演列表数据 type SandboxListItem struct { SandboxId int `description:"沙盘id"` Name string `description:"沙盘名称"` ChartPermissionId int `description:"品种id"` ChartPermissionName string `description:"品种名称"` CurrVersion int `description:"当前版本"` Code string `description:"沙盘code"` VersionCode string `description:"沙盘版本code"` //Content string `description:"沙盘数据"` PicUrl string `description:"沙盘图片地址"` OpUserId int `description:"最近一次编辑操作的用户id"` OpUserName string `description:"最近一次编辑的用户名称(冗余字段,避免查表)"` IsDelete int8 `description:"是否删除,0:未删除,1:已删除" json:"is_delete"` CanEdit bool `description:"是否可编辑"` Editor string `description:"编辑人"` VersionTotal int `description:"历史版本数量"` ModifyTime time.Time `description:"修改时间"` CreateTime time.Time `description:"创建时间"` } // GetList 获取沙盘列表页 func GetList(condition string, pars []interface{}, startSize, pageSize int) (total int, list []*Sandbox, err error) { sql := "select a.sandbox_id,a.name,a.code,a.pic_url,a.sys_user_id,a.sys_user_name,a.modify_time,a.create_time from sandbox as a where 1=1 AND a.is_delete = 0 " sql += condition sql += ` order by a.modify_time desc,a.sandbox_id desc` totalSql := `select count(1) total from (` + sql + `) z ` err = global.DmSQL["data"].Raw(totalSql, pars...).Scan(&total).Error if err != nil { return } sql += ` LIMIT ?,? ` pars = append(pars, startSize) pars = append(pars, pageSize) err = global.DmSQL["data"].Raw(sql, pars...).Find(&list).Error return } // SandboxSaveResp 保存沙盘响应体 type SandboxSaveResp struct { *Sandbox VersionCode string `description:"版本号"` } // GetSandboxInfoByAdminId 获取所有我创建的沙盘,用于分类展示 func GetSandboxInfoByAdminId(adminId int) (items []*SandboxClassifyItems, err error) { sql := ` SELECT sandbox_id,sandbox_classify_id,name AS sandbox_classify_name,code, sys_user_id,sys_user_name FROM sandbox where sys_user_id = ? ORDER BY sort asc,create_time ASC ` err = global.DmSQL["data"].Raw(sql, adminId).Find(&items).Error return } type SandboxListItems struct { Sandbox ParentIds string `gorm:"-"` } func GetSandboxListByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*SandboxListItems, err error) { sql := ` SELECT * FROM sandbox WHERE 1=1 ` if condition != "" { sql += condition } sql += " ORDER BY create_time DESC LIMIT ?,? " pars = append(pars, startSize) pars = append(pars, pageSize) err = global.DmSQL["data"].Raw(sql, pars...).Find(&item).Error return } func GetSandboxListCountByCondition(condition string, pars []interface{}) (count int, err error) { sql := ` SELECT COUNT(1) AS count FROM sandbox WHERE 1=1 ` if condition != "" { sql += condition } err = global.DmSQL["data"].Raw(sql, pars...).Scan(&count).Error return } type SandboxListResp struct { Paging *paging.PagingItem List []*SandboxListItems } func AddSandbox(item *Sandbox) (err error) { err = global.DmSQL["data"].Create(item).Error return } type MoveSandboxReq struct { SandboxId int `description:"沙盘ID"` PrevSandboxId int `description:"上一个沙盘ID"` NextSandboxId int `description:"下一个沙盘ID"` SandboxClassifyId int `description:"分类id"` } func GetSandboxClassifyCountById(classifyId int) (count int, err error) { sql := `SELECT count(1) AS count FROM sandbox_classify WHERE sandbox_classify_id=? ` err = global.DmSQL["data"].Raw(sql, classifyId).Scan(&count).Error return } // GetSandboxNameByIds 根据沙盘名称 func GetSandboxNameByIds(ids []int) (items []*Sandbox, err error) { if len(ids) == 0 { return } sql := ` SELECT sandbox_id, name FROM sandbox WHERE sandbox_id in (` + utils.GetOrmInReplace(len(ids)) + `) ` err = global.DmSQL["data"].Raw(sql, ids).Find(&items).Error return } func MoveSandbox(sandboxId, classifyId int) (err error) { sql := ` UPDATE sandbox SET sandbox_classify_id = ? WHERE sandbox_id = ?` err = global.DmSQL["data"].Exec(sql, classifyId, sandboxId).Error return } // UpdateSandboxSortByClassifyId 根据沙盘id更新排序 func UpdateSandboxSortByClassifyId(classifyId, nowSort, prevSandboxId int, updateSort string) (err error) { sql := ` update sandbox set sort = ` + updateSort + ` WHERE sandbox_classify_id=? AND ` if prevSandboxId > 0 { sql += ` (sort > ? or (sandbox_id > ` + fmt.Sprint(prevSandboxId) + ` and sort = ` + fmt.Sprint(nowSort) + `))` } err = global.DmSQL["data"].Exec(sql, classifyId, nowSort).Error return } // GetFirstSandboxByClassifyId 获取当前分类下,且排序数相同 的排序第一条的数据 func GetFirstSandboxByClassifyId(classifyId int) (item *Sandbox, err error) { sql := ` SELECT * FROM sandbox WHERE sandbox_classify_id=? order by sort asc,sandbox_id asc limit 1` err = global.DmSQL["data"].Raw(sql, classifyId).First(&item).Error return } // ContentDataStruct 沙盘内容结构体 type ContentDataStruct struct { Cells []struct { Data *NodeData `json:"data,omitempty"` } `json:"cells"` } type NodeData struct { LinkData []*LinkData `json:"linkData"` LinkFold bool `json:"linkFold"` } type LinkData struct { RId string `json:"RId"` Id int `json:"Id"` Name string `json:"Name"` Type int `json:"Type"` Editing bool `json:"editing"` DatabaseType int `json:"databaseType"` DetailParams DetailParams `json:"detailParams"` } type DetailParams struct { Code string `json:"code"` Id int `json:"id"` ClassifyId int `json:"classifyId"` } // UpdateSandboxContent 更新沙盘内容 func UpdateSandboxContent(list []Sandbox) (err error) { tx := global.DmSQL["data"].Begin() defer func() { if err != nil { _ = tx.Rollback() return } _ = tx.Commit() }() cols := []string{"Content", "ModifyTime"} for _, sandbox := range list { err = tx.Select(cols).Updates(sandbox).Error if err != nil { return } } return }