framework.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. package ai_predict_model
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. aiPredictModel "eta/eta_api/models/ai_predict_model"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "strings"
  10. "time"
  11. )
  12. // AiPredictModelFrameworkController 模型框架
  13. type AiPredictModelFrameworkController struct {
  14. controllers.BaseAuthController
  15. }
  16. // List
  17. // @Title 列表
  18. // @Description 列表
  19. // @Param AdminId query int false "创建人ID"
  20. // @Param Visibility query int false "范围: 0-所有; 1-私有; 2-公开"
  21. // @Param Keyword query string false "关键词"
  22. // @Success 200 Ret=200 获取成功
  23. // @router /framework/list [get]
  24. func (c *AiPredictModelFrameworkController) List() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. if br.ErrMsg == "" {
  28. br.IsSendEmail = false
  29. }
  30. c.Data["json"] = br
  31. c.ServeJSON()
  32. }()
  33. sysUser := c.SysUser
  34. if sysUser == nil {
  35. br.Msg = "请登录"
  36. br.ErrMsg = "请登录,SysUser Is Empty"
  37. br.Ret = 408
  38. return
  39. }
  40. adminId, _ := c.GetInt("AdminId")
  41. keyword := c.GetString("Keyword")
  42. keyword = strings.TrimSpace(keyword)
  43. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  44. cond := ``
  45. pars := make([]interface{}, 0)
  46. if adminId > 0 {
  47. cond += fmt.Sprintf(` AND %s = ?`, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  48. pars = append(pars, adminId)
  49. }
  50. if keyword != "" {
  51. cond += fmt.Sprintf(` AND %s LIKE ?`, aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName)
  52. pars = append(pars, "%"+keyword+"%")
  53. }
  54. orderRule := `sort ASC, create_time DESC`
  55. list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
  56. if e != nil {
  57. br.Msg = "获取失败"
  58. br.ErrMsg = "获取框架列表失败, Err: " + e.Error()
  59. return
  60. }
  61. resp := make([]*aiPredictModel.AiPredictModelFrameworkItem, 0)
  62. for _, v := range list {
  63. t := aiPredictModel.FormatAiPredictModelFramework2Item(v, make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0))
  64. resp = append(resp, t)
  65. }
  66. br.Data = resp
  67. br.Ret = 200
  68. br.Success = true
  69. br.Msg = "获取成功"
  70. }
  71. // Add
  72. // @Title 新增框架
  73. // @Description 新增框架
  74. // @Param request body aiPredictModel.AiPredictModelFrameworkAddReq true "type json string"
  75. // @Success 200 Ret=200 操作成功
  76. // @router /framework/add [post]
  77. func (c *AiPredictModelFrameworkController) Add() {
  78. br := new(models.BaseResponse).Init()
  79. defer func() {
  80. if br.ErrMsg == "" {
  81. br.IsSendEmail = false
  82. }
  83. c.Data["json"] = br
  84. c.ServeJSON()
  85. }()
  86. sysUser := c.SysUser
  87. if sysUser == nil {
  88. br.Msg = "请登录"
  89. br.ErrMsg = "请登录,SysUser Is Empty"
  90. br.Ret = 408
  91. return
  92. }
  93. // 参数校验
  94. var req aiPredictModel.AiPredictModelFrameworkAddReq
  95. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  96. br.Msg = "参数解析异常!"
  97. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  98. return
  99. }
  100. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  101. if req.FrameworkName == "" {
  102. br.Msg = "框架名称不可为空"
  103. return
  104. }
  105. // 重名校验
  106. {
  107. ob := new(aiPredictModel.AiPredictModelFramework)
  108. cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  109. pars := make([]interface{}, 0)
  110. pars = append(pars, req.FrameworkName, sysUser.AdminId)
  111. exist, e := ob.GetItemByCondition(cond, pars)
  112. if e != nil && e.Error() != utils.ErrNoRow() {
  113. br.Msg = "操作失败"
  114. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  115. return
  116. }
  117. if exist != nil {
  118. br.Msg = "框架名称已存在,请重新输入"
  119. return
  120. }
  121. }
  122. now := time.Now().Local()
  123. frameworkCode := utils.MD5(fmt.Sprint(now.UnixMilli()))
  124. item := new(aiPredictModel.AiPredictModelFramework)
  125. item.FrameworkName = req.FrameworkName
  126. item.FrameworkCode = frameworkCode
  127. item.FrameworkImg = req.FrameworkImg
  128. item.FrameworkContent = req.FrameworkContent
  129. item.AdminId = sysUser.AdminId
  130. item.AdminName = sysUser.RealName
  131. item.CreateTime = now
  132. item.ModifyTime = now
  133. nodes := make([]*aiPredictModel.AiPredictModelFrameworkNode, 0)
  134. itemNodes := make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0)
  135. if len(req.Nodes) > 0 {
  136. for _, v := range req.Nodes {
  137. if v.AiPredictModelIndexId <= 0 {
  138. continue
  139. }
  140. t := new(aiPredictModel.AiPredictModelFrameworkNode)
  141. t.FrameworkName = req.FrameworkName
  142. t.NodeId = v.NodeId
  143. t.NodeName = v.NodeName
  144. t.AiPredictModelIndexId = v.AiPredictModelIndexId
  145. t.CreateTime = now
  146. nodes = append(nodes, t)
  147. num := 1
  148. // 响应节点数据
  149. td := aiPredictModel.FormatAiPredictModelFrameworkNode2Item(t, num)
  150. itemNodes = append(itemNodes, td)
  151. }
  152. }
  153. if e := item.CreateFrameworkAndNodes(item, nodes); e != nil {
  154. br.Msg = "操作失败"
  155. br.ErrMsg = "新增框架及节点失败, Err: " + e.Error()
  156. return
  157. }
  158. detail := aiPredictModel.FormatAiPredictModelFramework2Item(item, itemNodes)
  159. br.Data = detail
  160. br.Ret = 200
  161. br.Success = true
  162. br.Msg = "操作成功"
  163. br.IsAddLog = true
  164. }
  165. // Edit
  166. // @Title 编辑框架
  167. // @Description 编辑框架
  168. // @Param request body aiPredictModel.AiPredictModelFrameworkEditReq true "type json string"
  169. // @Success 200 Ret=200 操作成功
  170. // @router /framework/edit [post]
  171. func (c *AiPredictModelFrameworkController) Edit() {
  172. br := new(models.BaseResponse).Init()
  173. defer func() {
  174. if br.ErrMsg == "" {
  175. br.IsSendEmail = false
  176. }
  177. c.Data["json"] = br
  178. c.ServeJSON()
  179. }()
  180. sysUser := c.SysUser
  181. if sysUser == nil {
  182. br.Msg = "请登录"
  183. br.ErrMsg = "请登录,SysUser Is Empty"
  184. br.Ret = 408
  185. return
  186. }
  187. // 参数校验
  188. var req aiPredictModel.AiPredictModelFrameworkEditReq
  189. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  190. br.Msg = "参数解析异常!"
  191. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  192. return
  193. }
  194. if req.AiPredictModelFrameworkId <= 0 {
  195. br.Msg = "参数有误"
  196. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  197. return
  198. }
  199. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  200. if req.FrameworkName == "" {
  201. br.Msg = "框架名称不可为空"
  202. return
  203. }
  204. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  205. item, e := frameworkOb.GetItemById(req.AiPredictModelFrameworkId)
  206. if e != nil {
  207. if e.Error() == utils.ErrNoRow() {
  208. br.Msg = "框架不存在, 请刷新页面"
  209. return
  210. }
  211. br.Msg = "操作失败"
  212. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  213. return
  214. }
  215. // 操作权限校验
  216. if item.AdminId != sysUser.AdminId && utils.IsAdminRole(sysUser.RoleTypeCode) {
  217. br.Msg = "您没有权限操作该框架"
  218. return
  219. }
  220. // 重名校验
  221. {
  222. ob := new(aiPredictModel.AiPredictModelFramework)
  223. cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  224. pars := make([]interface{}, 0)
  225. pars = append(pars, req.AiPredictModelFrameworkId, req.FrameworkName, sysUser.AdminId)
  226. exist, e := ob.GetItemByCondition(cond, pars)
  227. if e != nil && e.Error() != utils.ErrNoRow() {
  228. br.Msg = "操作失败"
  229. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  230. return
  231. }
  232. if exist != nil {
  233. br.Msg = "框架名称已存在,请重新输入"
  234. return
  235. }
  236. }
  237. now := time.Now().Local()
  238. item.FrameworkName = req.FrameworkName
  239. item.FrameworkImg = req.FrameworkImg
  240. item.FrameworkContent = req.FrameworkContent
  241. item.ModifyTime = now
  242. updateCols := []string{"FrameworkName", "FrameworkImg", "FrameworkContent", "ModifyTime"}
  243. nodes := make([]*aiPredictModel.AiPredictModelFrameworkNode, 0)
  244. itemNodes := make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0)
  245. if len(req.Nodes) > 0 {
  246. for _, v := range req.Nodes {
  247. if v.AiPredictModelIndexId <= 0 {
  248. continue
  249. }
  250. t := new(aiPredictModel.AiPredictModelFrameworkNode)
  251. t.AiPredictModelFrameworkId = req.AiPredictModelFrameworkId
  252. t.FrameworkName = req.FrameworkName
  253. t.NodeId = v.NodeId
  254. t.NodeName = v.NodeName
  255. t.AiPredictModelIndexId = v.AiPredictModelIndexId
  256. t.CreateTime = now
  257. nodes = append(nodes, t)
  258. // 响应节点数据
  259. td := aiPredictModel.FormatAiPredictModelFrameworkNode2Item(t, 1)
  260. itemNodes = append(itemNodes, td)
  261. }
  262. }
  263. if e := item.EditFrameworkAndNodes(item, updateCols, nodes); e != nil {
  264. br.Msg = "操作失败"
  265. br.ErrMsg = "编辑框架及节点失败, Err: " + e.Error()
  266. return
  267. }
  268. detail := aiPredictModel.FormatAiPredictModelFramework2Item(item, itemNodes)
  269. br.Data = detail
  270. br.Ret = 200
  271. br.Success = true
  272. br.Msg = "操作成功"
  273. br.IsAddLog = true
  274. }
  275. // Remove
  276. // @Title 删除框架
  277. // @Description 删除视频
  278. // @Param request body aiPredictModel.AiPredictModelFrameworkRemoveReq true "type json string"
  279. // @Success 200 Ret=200 操作成功
  280. // @router /framework/remove [post]
  281. func (c *AiPredictModelFrameworkController) Remove() {
  282. br := new(models.BaseResponse).Init()
  283. defer func() {
  284. if br.ErrMsg == "" {
  285. br.IsSendEmail = false
  286. }
  287. c.Data["json"] = br
  288. c.ServeJSON()
  289. }()
  290. sysUser := c.SysUser
  291. if sysUser == nil {
  292. br.Msg = "请登录"
  293. br.ErrMsg = "请登录,SysUser Is Empty"
  294. br.Ret = 408
  295. return
  296. }
  297. // 参数校验
  298. var req aiPredictModel.AiPredictModelFrameworkRemoveReq
  299. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  300. br.Msg = "参数解析异常!"
  301. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  302. return
  303. }
  304. if req.AiPredictModelFrameworkId <= 0 {
  305. br.Msg = "参数有误"
  306. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  307. return
  308. }
  309. ob := new(aiPredictModel.AiPredictModelFramework)
  310. item, e := ob.GetItemById(req.AiPredictModelFrameworkId)
  311. if e != nil {
  312. if e.Error() == utils.ErrNoRow() {
  313. br.Ret = 200
  314. br.Success = true
  315. br.Msg = "操作成功"
  316. return
  317. }
  318. br.Msg = "操作失败"
  319. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  320. return
  321. }
  322. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && item.AdminId != sysUser.AdminId {
  323. br.Msg = "无权操作"
  324. return
  325. }
  326. if e := item.RemoveFrameworkAndNodes(req.AiPredictModelFrameworkId); e != nil {
  327. br.Msg = "操作失败"
  328. br.ErrMsg = "删除框架失败, Err: " + e.Error()
  329. return
  330. }
  331. br.Ret = 200
  332. br.Success = true
  333. br.Msg = "操作成功"
  334. br.IsAddLog = true
  335. }
  336. // Rename
  337. // @Title 重命名框架
  338. // @Description 重命名框架
  339. // @Param request body aiPredictModel.AiPredictModelFrameworkRenameReq true "type json string"
  340. // @Success 200 Ret=200 操作成功
  341. // @router /framework/rename [post]
  342. func (c *AiPredictModelFrameworkController) Rename() {
  343. br := new(models.BaseResponse).Init()
  344. defer func() {
  345. if br.ErrMsg == "" {
  346. br.IsSendEmail = false
  347. }
  348. c.Data["json"] = br
  349. c.ServeJSON()
  350. }()
  351. sysUser := c.SysUser
  352. if sysUser == nil {
  353. br.Msg = "请登录"
  354. br.ErrMsg = "请登录,SysUser Is Empty"
  355. br.Ret = 408
  356. return
  357. }
  358. // 参数校验
  359. var req aiPredictModel.AiPredictModelFrameworkRenameReq
  360. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  361. br.Msg = "参数解析异常!"
  362. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  363. return
  364. }
  365. if req.AiPredictModelFrameworkId <= 0 {
  366. br.Msg = "参数有误"
  367. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  368. return
  369. }
  370. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  371. if req.FrameworkName == "" {
  372. br.Msg = "框架名称不可为空"
  373. return
  374. }
  375. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  376. item, e := frameworkOb.GetItemById(req.AiPredictModelFrameworkId)
  377. if e != nil {
  378. if e.Error() == utils.ErrNoRow() {
  379. br.Msg = "框架不存在, 请刷新页面"
  380. return
  381. }
  382. br.Msg = "操作失败"
  383. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  384. return
  385. }
  386. // 操作权限校验
  387. if item.AdminId != sysUser.AdminId && utils.IsAdminRole(sysUser.RoleTypeCode) {
  388. br.Msg = "您没有权限操作该框架"
  389. return
  390. }
  391. // 重名校验
  392. {
  393. ob := new(aiPredictModel.AiPredictModelFramework)
  394. cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  395. pars := make([]interface{}, 0)
  396. pars = append(pars, req.AiPredictModelFrameworkId, req.FrameworkName, sysUser.AdminId)
  397. exist, e := ob.GetItemByCondition(cond, pars)
  398. if e != nil && e.Error() != utils.ErrNoRow() {
  399. br.Msg = "操作失败"
  400. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  401. return
  402. }
  403. if exist != nil {
  404. br.Msg = "框架名称已存在,请重新输入"
  405. return
  406. }
  407. }
  408. now := time.Now().Local()
  409. item.FrameworkName = req.FrameworkName
  410. item.ModifyTime = now
  411. updateCols := []string{"FrameworkName", "ModifyTime"}
  412. if e := item.Update(updateCols); e != nil {
  413. br.Msg = "操作失败"
  414. br.ErrMsg = "框架重命名失败, Err: " + e.Error()
  415. return
  416. }
  417. br.Ret = 200
  418. br.Success = true
  419. br.Msg = "操作成功"
  420. }
  421. // Move
  422. // @Title 移动排序
  423. // @Description 移动排序
  424. // @Param request body aiPredictModel.AiPredictModelFrameworkMoveReq true "type json string"
  425. // @Success 200 Ret=200 操作成功
  426. // @router /framework/move [post]
  427. func (c *AiPredictModelFrameworkController) Move() {
  428. br := new(models.BaseResponse).Init()
  429. defer func() {
  430. if br.ErrMsg == "" {
  431. br.IsSendEmail = false
  432. }
  433. c.Data["json"] = br
  434. c.ServeJSON()
  435. }()
  436. sysUser := c.SysUser
  437. if sysUser == nil {
  438. br.Msg = "请登录"
  439. br.ErrMsg = "请登录,SysUser Is Empty"
  440. br.Ret = 408
  441. return
  442. }
  443. // 参数校验
  444. var req aiPredictModel.AiPredictModelFrameworkMoveReq
  445. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  446. br.Msg = "参数解析异常!"
  447. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  448. return
  449. }
  450. if req.AiPredictModelFrameworkId <= 0 {
  451. br.Msg = "参数有误"
  452. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  453. return
  454. }
  455. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  456. item, e := frameworkOb.GetItemById(req.AiPredictModelFrameworkId)
  457. if e != nil {
  458. if e.Error() == utils.ErrNoRow() {
  459. br.Msg = "框架不存在, 请刷新页面"
  460. return
  461. }
  462. br.Msg = "操作失败"
  463. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  464. return
  465. }
  466. updateCols := make([]string, 0)
  467. // 上一个兄弟节点
  468. if req.PrevAiPredictModelFrameworkId > 0 {
  469. prev, e := frameworkOb.GetItemById(req.PrevAiPredictModelFrameworkId)
  470. if e != nil {
  471. br.Msg = "操作失败"
  472. br.ErrMsg = "获取上一个兄弟节点失败, Err: " + e.Error()
  473. return
  474. }
  475. // 两个兄弟节点之间
  476. if req.NextAiPredictModelFrameworkId > 0 {
  477. next, e := frameworkOb.GetItemById(req.PrevAiPredictModelFrameworkId)
  478. if e != nil {
  479. br.Msg = "操作失败"
  480. br.ErrMsg = "获取下一个兄弟节点失败, Err: " + e.Error()
  481. return
  482. }
  483. // 如果上一个与下一个排序权重是一致的, 那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2, 自己变成上一个兄弟的排序权重+1
  484. if prev.Sort == next.Sort || prev.Sort == item.Sort {
  485. strUpdate := `sort + 2`
  486. _ = aiPredictModel.UpdateAiPredictModelFrameworkSort(sysUser.AdminId, prev.AiPredictModelFrameworkId, prev.Sort, strUpdate)
  487. } else {
  488. // 如果下一个排序权重正好是上一个节点的下一层, 那么需要再加一层了
  489. if next.Sort-prev.Sort == 1 {
  490. //变更兄弟节点的排序
  491. strUpdate := `sort + 1`
  492. _ = aiPredictModel.UpdateAiPredictModelFrameworkSort(sysUser.AdminId, 0, prev.Sort, strUpdate)
  493. }
  494. }
  495. }
  496. // 上一个兄弟节点sort+1
  497. item.Sort = prev.Sort + 1
  498. item.ModifyTime = time.Now()
  499. updateCols = append(updateCols, "Sort", "ModifyTime")
  500. } else {
  501. first, err := aiPredictModel.GetFirstAiPredictModelFramework(sysUser.AdminId)
  502. if err != nil && err.Error() != utils.ErrNoRow() {
  503. br.Msg = "操作失败"
  504. br.ErrMsg = "获取我的模型框架排首位的数据失败, Err:" + err.Error()
  505. return
  506. }
  507. if first != nil && first.Sort == 0 {
  508. strUpdate := ` sort + 1 `
  509. _ = aiPredictModel.UpdateAiPredictModelFrameworkSort(sysUser.AdminId, first.AiPredictModelFrameworkId-1, 0, strUpdate)
  510. }
  511. // 排首位
  512. item.Sort = 0
  513. item.ModifyTime = time.Now()
  514. updateCols = append(updateCols, "Sort", "ModifyTime")
  515. }
  516. if len(updateCols) > 0 {
  517. if e := item.Update(updateCols); e != nil {
  518. br.Msg = "操作失败"
  519. br.ErrMsg = "更新框架排序失败, Err: " + e.Error()
  520. return
  521. }
  522. }
  523. br.Ret = 200
  524. br.Success = true
  525. br.Msg = "操作成功"
  526. }
  527. // Detail
  528. // @Title 框架详情
  529. // @Description 框架详情
  530. // @Param AiPredictModelFrameworkId query int true "框架ID"
  531. // @Success 200 Ret=200 操作成功
  532. // @router /framework/detail [get]
  533. func (c *AiPredictModelFrameworkController) Detail() {
  534. br := new(models.BaseResponse).Init()
  535. defer func() {
  536. if br.ErrMsg == "" {
  537. br.IsSendEmail = false
  538. }
  539. c.Data["json"] = br
  540. c.ServeJSON()
  541. }()
  542. sysUser := c.SysUser
  543. if sysUser == nil {
  544. br.Msg = "请登录"
  545. br.ErrMsg = "请登录,SysUser Is Empty"
  546. br.Ret = 408
  547. return
  548. }
  549. frameworkId, _ := c.GetInt("AiPredictModelFrameworkId")
  550. if frameworkId <= 0 {
  551. br.Msg = "参数有误"
  552. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", frameworkId)
  553. return
  554. }
  555. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  556. item, e := frameworkOb.GetItemById(frameworkId)
  557. if e != nil {
  558. if e.Error() == utils.ErrNoRow() {
  559. br.Msg = "框架不存在, 请刷新页面"
  560. return
  561. }
  562. br.Msg = "获取失败"
  563. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  564. return
  565. }
  566. // 获取节点
  567. nodeOb := new(aiPredictModel.AiPredictModelFrameworkNode)
  568. nodeCond := ` AND ai_predict_model_framework_id = ?`
  569. nodePars := make([]interface{}, 0)
  570. nodePars = append(nodePars, frameworkId)
  571. nodes, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
  572. if e != nil {
  573. br.Msg = "获取失败"
  574. br.ErrMsg = "获取框架节点失败, Err: " + e.Error()
  575. return
  576. }
  577. // 格式化响应数据
  578. itemNodes := make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0)
  579. for _, v := range nodes {
  580. if v.NodeId == "" {
  581. continue
  582. }
  583. num := 1
  584. itemNodes = append(itemNodes, aiPredictModel.FormatAiPredictModelFrameworkNode2Item(v, num))
  585. }
  586. detail := aiPredictModel.FormatAiPredictModelFramework2Item(item, itemNodes)
  587. br.Data = detail
  588. br.Ret = 200
  589. br.Success = true
  590. br.Msg = "操作成功"
  591. }