framework.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768
  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. classifyId, _ := c.GetInt("ClassifyId")
  43. keyword = strings.TrimSpace(keyword)
  44. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  45. cond := ``
  46. pars := make([]interface{}, 0)
  47. if adminId > 0 {
  48. cond += fmt.Sprintf(` AND %s = ?`, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  49. pars = append(pars, adminId)
  50. }
  51. if keyword != "" {
  52. cond += fmt.Sprintf(` AND %s LIKE ?`, aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName)
  53. pars = append(pars, "%"+keyword+"%")
  54. }
  55. if classifyId > 0 {
  56. classifyInfo, err := aiPredictModel.GetAiPredictModelClassifyById(classifyId)
  57. if err != nil && !utils.IsErrNoRow(err) {
  58. br.Msg = "获取失败"
  59. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  60. return
  61. }
  62. // 查询所有子分类
  63. childClassifyIds, err := aiPredictModel.GetAiPredictModelClassifyChildIdsByLevelPath(classifyInfo.LevelPath)
  64. if err != nil && !utils.IsErrNoRow(err) {
  65. br.Msg = "获取失败"
  66. br.ErrMsg = "获取子分类失败,Err:" + err.Error()
  67. return
  68. }
  69. cond += fmt.Sprintf(` AND %s IN (%s)`, aiPredictModel.AiPredictModelFrameworkColumns.ClassifyId, utils.GetOrmInReplace(len(childClassifyIds)))
  70. pars = append(pars, childClassifyIds)
  71. }
  72. orderRule := `sort ASC, create_time DESC`
  73. list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
  74. if e != nil {
  75. br.Msg = "获取失败"
  76. br.ErrMsg = "获取框架列表失败, Err: " + e.Error()
  77. return
  78. }
  79. resp := make([]*aiPredictModel.AiPredictModelFrameworkItem, 0)
  80. for _, v := range list {
  81. t := aiPredictModel.FormatAiPredictModelFramework2Item(v, make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0), make([]string, 0))
  82. if t.AdminId == sysUser.AdminId || utils.IsAdminRole(sysUser.RoleTypeCode) {
  83. t.Button.OpButton = true
  84. t.Button.DeleteButton = true
  85. t.Button.MoveButton = true
  86. }
  87. resp = append(resp, t)
  88. }
  89. br.Data = resp
  90. br.Ret = 200
  91. br.Success = true
  92. br.Msg = "获取成功"
  93. }
  94. // Add
  95. // @Title 新增框架
  96. // @Description 新增框架
  97. // @Param request body aiPredictModel.AiPredictModelFrameworkAddReq true "type json string"
  98. // @Success 200 Ret=200 操作成功
  99. // @router /framework/add [post]
  100. func (c *AiPredictModelFrameworkController) Add() {
  101. br := new(models.BaseResponse).Init()
  102. defer func() {
  103. if br.ErrMsg == "" {
  104. br.IsSendEmail = false
  105. }
  106. c.Data["json"] = br
  107. c.ServeJSON()
  108. }()
  109. sysUser := c.SysUser
  110. if sysUser == nil {
  111. br.Msg = "请登录"
  112. br.ErrMsg = "请登录,SysUser Is Empty"
  113. br.Ret = 408
  114. return
  115. }
  116. // 参数校验
  117. var req aiPredictModel.AiPredictModelFrameworkAddReq
  118. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  119. br.Msg = "参数解析异常!"
  120. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  121. return
  122. }
  123. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  124. if req.FrameworkName == "" {
  125. br.Msg = "框架名称不可为空"
  126. return
  127. }
  128. if req.ClassifyId <= 0 {
  129. br.Msg = "分类不可为空"
  130. return
  131. }
  132. // 判断目录是否存在
  133. classifyOb := new(aiPredictModel.AiPredictModelClassify)
  134. classifyInfo, e := classifyOb.GetItemById(req.ClassifyId)
  135. if e != nil {
  136. br.Msg = "分类不存在"
  137. br.ErrMsg = "分类不存在, Err: " + e.Error()
  138. return
  139. }
  140. classifyLevels := make([]string, 0)
  141. {
  142. levelPath := strings.Split(classifyInfo.LevelPath, ",")
  143. classifyList, e := classifyOb.GetItemsByIds(levelPath)
  144. if e != nil {
  145. br.Msg = "获取失败"
  146. br.ErrMsg = "获取分类失败, Err: " + e.Error()
  147. return
  148. }
  149. for _, v := range classifyList {
  150. classifyLevels = append(classifyLevels, v.UniqueCode)
  151. }
  152. }
  153. // 重名校验
  154. {
  155. ob := new(aiPredictModel.AiPredictModelFramework)
  156. cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  157. pars := make([]interface{}, 0)
  158. pars = append(pars, req.FrameworkName, sysUser.AdminId)
  159. exist, e := ob.GetItemByCondition(cond, pars)
  160. if e != nil && !utils.IsErrNoRow(e) {
  161. br.Msg = "操作失败"
  162. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  163. return
  164. }
  165. if exist != nil && exist.AiPredictModelFrameworkId > 0 {
  166. br.Msg = "框架名称已存在,请重新输入"
  167. return
  168. }
  169. }
  170. now := time.Now().Local()
  171. frameworkCode := utils.MD5(fmt.Sprint(now.UnixMilli()))
  172. item := new(aiPredictModel.AiPredictModelFramework)
  173. item.FrameworkName = req.FrameworkName
  174. item.FrameworkCode = frameworkCode
  175. item.FrameworkImg = req.FrameworkImg
  176. item.FrameworkContent = req.FrameworkContent
  177. item.AdminId = sysUser.AdminId
  178. item.AdminName = sysUser.RealName
  179. item.ClassifyId = req.ClassifyId
  180. item.CreateTime = now
  181. item.ModifyTime = now
  182. nodes := make([]*aiPredictModel.AiPredictModelFrameworkNode, 0)
  183. itemNodes := make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0)
  184. if len(req.Nodes) > 0 {
  185. for _, v := range req.Nodes {
  186. if v.AiPredictModelIndexId <= 0 {
  187. continue
  188. }
  189. t := new(aiPredictModel.AiPredictModelFrameworkNode)
  190. t.FrameworkName = req.FrameworkName
  191. t.NodeId = v.NodeId
  192. t.NodeName = v.NodeName
  193. t.AiPredictModelIndexId = v.AiPredictModelIndexId
  194. t.CreateTime = now
  195. nodes = append(nodes, t)
  196. num := 1
  197. // 响应节点数据
  198. td := aiPredictModel.FormatAiPredictModelFrameworkNode2Item(t, num, map[int]*aiPredictModel.AiPredictModelIndex{})
  199. itemNodes = append(itemNodes, td)
  200. }
  201. }
  202. if e := item.CreateFrameworkAndNodes(item, nodes); e != nil {
  203. br.Msg = "操作失败"
  204. br.ErrMsg = "新增框架及节点失败, Err: " + e.Error()
  205. return
  206. }
  207. detail := aiPredictModel.FormatAiPredictModelFramework2Item(item, itemNodes, classifyLevels)
  208. br.Data = detail
  209. br.Ret = 200
  210. br.Success = true
  211. br.Msg = "操作成功"
  212. br.IsAddLog = true
  213. }
  214. // Edit
  215. // @Title 编辑框架
  216. // @Description 编辑框架
  217. // @Param request body aiPredictModel.AiPredictModelFrameworkEditReq true "type json string"
  218. // @Success 200 Ret=200 操作成功
  219. // @router /framework/edit [post]
  220. func (c *AiPredictModelFrameworkController) Edit() {
  221. br := new(models.BaseResponse).Init()
  222. defer func() {
  223. if br.ErrMsg == "" {
  224. br.IsSendEmail = false
  225. }
  226. c.Data["json"] = br
  227. c.ServeJSON()
  228. }()
  229. sysUser := c.SysUser
  230. if sysUser == nil {
  231. br.Msg = "请登录"
  232. br.ErrMsg = "请登录,SysUser Is Empty"
  233. br.Ret = 408
  234. return
  235. }
  236. // 参数校验
  237. var req aiPredictModel.AiPredictModelFrameworkEditReq
  238. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  239. br.Msg = "参数解析异常!"
  240. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  241. return
  242. }
  243. if req.AiPredictModelFrameworkId <= 0 {
  244. br.Msg = "参数有误"
  245. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  246. return
  247. }
  248. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  249. if req.FrameworkName == "" {
  250. br.Msg = "框架名称不可为空"
  251. return
  252. }
  253. if req.ClassifyId <= 0 {
  254. br.Msg = "分类不可为空"
  255. return
  256. }
  257. // 判断目录是否存在
  258. classifyOb := new(aiPredictModel.AiPredictModelClassify)
  259. classifyInfo, e := classifyOb.GetItemById(req.ClassifyId)
  260. if e != nil {
  261. br.Msg = "分类不存在"
  262. br.ErrMsg = "分类不存在, Err: " + e.Error()
  263. return
  264. }
  265. classifyLevels := make([]string, 0)
  266. {
  267. levelPath := strings.Split(classifyInfo.LevelPath, ",")
  268. classifyList, e := classifyOb.GetItemsByIds(levelPath)
  269. if e != nil {
  270. br.Msg = "获取失败"
  271. br.ErrMsg = "获取分类失败, Err: " + e.Error()
  272. return
  273. }
  274. for _, v := range classifyList {
  275. classifyLevels = append(classifyLevels, v.UniqueCode)
  276. }
  277. }
  278. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  279. item, e := frameworkOb.GetItemById(req.AiPredictModelFrameworkId)
  280. if e != nil {
  281. if utils.IsErrNoRow(e) {
  282. br.Msg = "框架不存在, 请刷新页面"
  283. return
  284. }
  285. br.Msg = "操作失败"
  286. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  287. return
  288. }
  289. // 操作权限校验
  290. if item.AdminId != sysUser.AdminId && !utils.IsAdminRole(sysUser.RoleTypeCode) {
  291. br.Msg = "您没有权限操作该框架"
  292. return
  293. }
  294. // 重名校验
  295. {
  296. ob := new(aiPredictModel.AiPredictModelFramework)
  297. cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  298. pars := make([]interface{}, 0)
  299. pars = append(pars, req.AiPredictModelFrameworkId, req.FrameworkName, sysUser.AdminId)
  300. exist, e := ob.GetItemByCondition(cond, pars)
  301. if e != nil && !utils.IsErrNoRow(e) {
  302. br.Msg = "操作失败"
  303. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  304. return
  305. }
  306. if exist != nil && exist.AiPredictModelFrameworkId > 0 {
  307. br.Msg = "框架名称已存在,请重新输入"
  308. return
  309. }
  310. }
  311. now := time.Now().Local()
  312. item.FrameworkName = req.FrameworkName
  313. item.FrameworkImg = req.FrameworkImg
  314. item.FrameworkContent = req.FrameworkContent
  315. item.ModifyTime = now
  316. updateCols := []string{"FrameworkName", "FrameworkImg", "FrameworkContent", "ModifyTime"}
  317. nodes := make([]*aiPredictModel.AiPredictModelFrameworkNode, 0)
  318. itemNodes := make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0)
  319. if len(req.Nodes) > 0 {
  320. for _, v := range req.Nodes {
  321. if v.AiPredictModelIndexId <= 0 {
  322. continue
  323. }
  324. t := new(aiPredictModel.AiPredictModelFrameworkNode)
  325. t.AiPredictModelFrameworkId = req.AiPredictModelFrameworkId
  326. t.FrameworkName = req.FrameworkName
  327. t.NodeId = v.NodeId
  328. t.NodeName = v.NodeName
  329. t.AiPredictModelIndexId = v.AiPredictModelIndexId
  330. t.CreateTime = now
  331. nodes = append(nodes, t)
  332. // 响应节点数据
  333. td := aiPredictModel.FormatAiPredictModelFrameworkNode2Item(t, 1, map[int]*aiPredictModel.AiPredictModelIndex{})
  334. itemNodes = append(itemNodes, td)
  335. }
  336. }
  337. if e := item.EditFrameworkAndNodes(item, updateCols, nodes); e != nil {
  338. br.Msg = "操作失败"
  339. br.ErrMsg = "编辑框架及节点失败, Err: " + e.Error()
  340. return
  341. }
  342. detail := aiPredictModel.FormatAiPredictModelFramework2Item(item, itemNodes, classifyLevels)
  343. br.Data = detail
  344. br.Ret = 200
  345. br.Success = true
  346. br.Msg = "操作成功"
  347. br.IsAddLog = true
  348. }
  349. // Remove
  350. // @Title 删除框架
  351. // @Description 删除视频
  352. // @Param request body aiPredictModel.AiPredictModelFrameworkRemoveReq true "type json string"
  353. // @Success 200 Ret=200 操作成功
  354. // @router /framework/remove [post]
  355. func (c *AiPredictModelFrameworkController) Remove() {
  356. br := new(models.BaseResponse).Init()
  357. defer func() {
  358. if br.ErrMsg == "" {
  359. br.IsSendEmail = false
  360. }
  361. c.Data["json"] = br
  362. c.ServeJSON()
  363. }()
  364. sysUser := c.SysUser
  365. if sysUser == nil {
  366. br.Msg = "请登录"
  367. br.ErrMsg = "请登录,SysUser Is Empty"
  368. br.Ret = 408
  369. return
  370. }
  371. // 参数校验
  372. var req aiPredictModel.AiPredictModelFrameworkRemoveReq
  373. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  374. br.Msg = "参数解析异常!"
  375. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  376. return
  377. }
  378. if req.AiPredictModelFrameworkId <= 0 {
  379. br.Msg = "参数有误"
  380. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  381. return
  382. }
  383. ob := new(aiPredictModel.AiPredictModelFramework)
  384. item, e := ob.GetItemById(req.AiPredictModelFrameworkId)
  385. if e != nil {
  386. if utils.IsErrNoRow(e) {
  387. br.Ret = 200
  388. br.Success = true
  389. br.Msg = "操作成功"
  390. return
  391. }
  392. br.Msg = "操作失败"
  393. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  394. return
  395. }
  396. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && item.AdminId != sysUser.AdminId {
  397. br.Msg = "无权操作"
  398. return
  399. }
  400. if e := item.RemoveFrameworkAndNodes(req.AiPredictModelFrameworkId); e != nil {
  401. br.Msg = "操作失败"
  402. br.ErrMsg = "删除框架失败, Err: " + e.Error()
  403. return
  404. }
  405. br.Ret = 200
  406. br.Success = true
  407. br.Msg = "操作成功"
  408. br.IsAddLog = true
  409. }
  410. // Rename
  411. // @Title 重命名框架
  412. // @Description 重命名框架
  413. // @Param request body aiPredictModel.AiPredictModelFrameworkRenameReq true "type json string"
  414. // @Success 200 Ret=200 操作成功
  415. // @router /framework/rename [post]
  416. func (c *AiPredictModelFrameworkController) Rename() {
  417. br := new(models.BaseResponse).Init()
  418. defer func() {
  419. if br.ErrMsg == "" {
  420. br.IsSendEmail = false
  421. }
  422. c.Data["json"] = br
  423. c.ServeJSON()
  424. }()
  425. sysUser := c.SysUser
  426. if sysUser == nil {
  427. br.Msg = "请登录"
  428. br.ErrMsg = "请登录,SysUser Is Empty"
  429. br.Ret = 408
  430. return
  431. }
  432. // 参数校验
  433. var req aiPredictModel.AiPredictModelFrameworkRenameReq
  434. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  435. br.Msg = "参数解析异常!"
  436. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  437. return
  438. }
  439. if req.AiPredictModelFrameworkId <= 0 {
  440. br.Msg = "参数有误"
  441. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  442. return
  443. }
  444. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  445. if req.FrameworkName == "" {
  446. br.Msg = "框架名称不可为空"
  447. return
  448. }
  449. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  450. item, e := frameworkOb.GetItemById(req.AiPredictModelFrameworkId)
  451. if e != nil {
  452. if utils.IsErrNoRow(e) {
  453. br.Msg = "框架不存在, 请刷新页面"
  454. return
  455. }
  456. br.Msg = "操作失败"
  457. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  458. return
  459. }
  460. // 操作权限校验
  461. if item.AdminId != sysUser.AdminId && !utils.IsAdminRole(sysUser.RoleTypeCode) {
  462. br.Msg = "您没有权限操作该框架"
  463. return
  464. }
  465. // 重名校验
  466. {
  467. ob := new(aiPredictModel.AiPredictModelFramework)
  468. cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), aiPredictModel.AiPredictModelFrameworkColumns.FrameworkName, aiPredictModel.AiPredictModelFrameworkColumns.AdminId)
  469. pars := make([]interface{}, 0)
  470. pars = append(pars, req.AiPredictModelFrameworkId, req.FrameworkName, sysUser.AdminId)
  471. exist, e := ob.GetItemByCondition(cond, pars)
  472. if e != nil && !utils.IsErrNoRow(e) {
  473. br.Msg = "操作失败"
  474. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  475. return
  476. }
  477. if exist != nil && exist.AiPredictModelFrameworkId > 0 {
  478. br.Msg = "框架名称已存在,请重新输入"
  479. return
  480. }
  481. }
  482. now := time.Now().Local()
  483. item.FrameworkName = req.FrameworkName
  484. item.ModifyTime = now
  485. updateCols := []string{"FrameworkName", "ModifyTime"}
  486. if e := item.Update(updateCols); e != nil {
  487. br.Msg = "操作失败"
  488. br.ErrMsg = "框架重命名失败, Err: " + e.Error()
  489. return
  490. }
  491. br.Ret = 200
  492. br.Success = true
  493. br.Msg = "操作成功"
  494. }
  495. // Move
  496. // @Title 移动排序
  497. // @Description 移动排序
  498. // @Param request body aiPredictModel.AiPredictModelFrameworkMoveReq true "type json string"
  499. // @Success 200 Ret=200 操作成功
  500. // @router /framework/move [post]
  501. func (c *AiPredictModelFrameworkController) Move() {
  502. br := new(models.BaseResponse).Init()
  503. defer func() {
  504. if br.ErrMsg == "" {
  505. br.IsSendEmail = false
  506. }
  507. c.Data["json"] = br
  508. c.ServeJSON()
  509. }()
  510. sysUser := c.SysUser
  511. if sysUser == nil {
  512. br.Msg = "请登录"
  513. br.ErrMsg = "请登录,SysUser Is Empty"
  514. br.Ret = 408
  515. return
  516. }
  517. // 参数校验
  518. var req aiPredictModel.AiPredictModelFrameworkMoveReq
  519. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  520. br.Msg = "参数解析异常!"
  521. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  522. return
  523. }
  524. if req.AiPredictModelFrameworkId <= 0 {
  525. br.Msg = "参数有误"
  526. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", req.AiPredictModelFrameworkId)
  527. return
  528. }
  529. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  530. item, e := frameworkOb.GetItemById(req.AiPredictModelFrameworkId)
  531. if e != nil {
  532. if utils.IsErrNoRow(e) {
  533. br.Msg = "框架不存在, 请刷新页面"
  534. return
  535. }
  536. br.Msg = "操作失败"
  537. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  538. return
  539. }
  540. updateCols := make([]string, 0)
  541. if item.ClassifyId != req.ClassifyId {
  542. //更新父级分类
  543. updateCols = append(updateCols, "ClassifyId")
  544. item.ClassifyId = req.ClassifyId
  545. }
  546. // 上一个兄弟节点
  547. if req.PrevAiPredictModelFrameworkId > 0 {
  548. prev, e := frameworkOb.GetItemById(req.PrevAiPredictModelFrameworkId)
  549. if e != nil {
  550. br.Msg = "操作失败"
  551. br.ErrMsg = "获取上一个兄弟节点失败, Err: " + e.Error()
  552. return
  553. }
  554. // 两个兄弟节点之间
  555. if req.NextAiPredictModelFrameworkId > 0 {
  556. next, e := frameworkOb.GetItemById(req.PrevAiPredictModelFrameworkId)
  557. if e != nil {
  558. br.Msg = "操作失败"
  559. br.ErrMsg = "获取下一个兄弟节点失败, Err: " + e.Error()
  560. return
  561. }
  562. // 如果上一个与下一个排序权重是一致的, 那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2, 自己变成上一个兄弟的排序权重+1
  563. if prev.Sort == next.Sort || prev.Sort == item.Sort {
  564. strUpdate := `sort + 2`
  565. _ = aiPredictModel.UpdateAiPredictModelFrameworkSort(sysUser.AdminId, prev.AiPredictModelFrameworkId, prev.Sort, strUpdate)
  566. } else {
  567. // 如果下一个排序权重正好是上一个节点的下一层, 那么需要再加一层了
  568. if next.Sort-prev.Sort == 1 {
  569. //变更兄弟节点的排序
  570. strUpdate := `sort + 1`
  571. _ = aiPredictModel.UpdateAiPredictModelFrameworkSort(sysUser.AdminId, 0, prev.Sort, strUpdate)
  572. }
  573. }
  574. }
  575. // 上一个兄弟节点sort+1
  576. item.Sort = prev.Sort + 1
  577. item.ModifyTime = time.Now()
  578. updateCols = append(updateCols, "Sort", "ModifyTime")
  579. } else {
  580. first, err := aiPredictModel.GetFirstAiPredictModelFramework()
  581. if err != nil && !utils.IsErrNoRow(err) {
  582. br.Msg = "操作失败"
  583. br.ErrMsg = "获取我的模型框架排首位的数据失败, Err:" + err.Error()
  584. return
  585. }
  586. if first != nil && first.Sort == 0 {
  587. strUpdate := ` sort + 1 `
  588. _ = aiPredictModel.UpdateAiPredictModelFrameworkSort(sysUser.AdminId, first.AiPredictModelFrameworkId-1, 0, strUpdate)
  589. }
  590. // 排首位
  591. item.Sort = 0
  592. item.ModifyTime = time.Now()
  593. updateCols = append(updateCols, "Sort", "ModifyTime")
  594. }
  595. if len(updateCols) > 0 {
  596. if e := item.Update(updateCols); e != nil {
  597. br.Msg = "操作失败"
  598. br.ErrMsg = "更新框架排序失败, Err: " + e.Error()
  599. return
  600. }
  601. }
  602. br.Ret = 200
  603. br.Success = true
  604. br.Msg = "操作成功"
  605. }
  606. // Detail
  607. // @Title 框架详情
  608. // @Description 框架详情
  609. // @Param AiPredictModelFrameworkId query int true "框架ID"
  610. // @Success 200 Ret=200 操作成功
  611. // @router /framework/detail [get]
  612. func (c *AiPredictModelFrameworkController) Detail() {
  613. br := new(models.BaseResponse).Init()
  614. defer func() {
  615. if br.ErrMsg == "" {
  616. br.IsSendEmail = false
  617. }
  618. c.Data["json"] = br
  619. c.ServeJSON()
  620. }()
  621. sysUser := c.SysUser
  622. if sysUser == nil {
  623. br.Msg = "请登录"
  624. br.ErrMsg = "请登录,SysUser Is Empty"
  625. br.Ret = 408
  626. return
  627. }
  628. frameworkId, _ := c.GetInt("AiPredictModelFrameworkId")
  629. if frameworkId <= 0 {
  630. br.Msg = "参数有误"
  631. br.ErrMsg = fmt.Sprintf("参数有误, AiPredictModelFrameworkId: %d", frameworkId)
  632. return
  633. }
  634. frameworkOb := new(aiPredictModel.AiPredictModelFramework)
  635. item, e := frameworkOb.GetItemById(frameworkId)
  636. if e != nil {
  637. if utils.IsErrNoRow(e) {
  638. br.Msg = "框架不存在, 请刷新页面"
  639. return
  640. }
  641. br.Msg = "获取失败"
  642. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  643. return
  644. }
  645. classifyOb := new(aiPredictModel.AiPredictModelClassify)
  646. classifyInfo, e := classifyOb.GetItemById(item.ClassifyId)
  647. if e != nil {
  648. br.Msg = "获取失败"
  649. br.ErrMsg = "获取分类失败, Err: " + e.Error()
  650. return
  651. }
  652. classifyLevels := make([]string, 0)
  653. {
  654. levelPath := strings.Split(classifyInfo.LevelPath, ",")
  655. classifyList, e := classifyOb.GetItemsByIds(levelPath)
  656. if e != nil {
  657. br.Msg = "获取失败"
  658. br.ErrMsg = "获取分类失败, Err: " + e.Error()
  659. return
  660. }
  661. for _, v := range classifyList {
  662. classifyLevels = append(classifyLevels, v.UniqueCode)
  663. }
  664. }
  665. // 获取节点
  666. nodeOb := new(aiPredictModel.AiPredictModelFrameworkNode)
  667. nodeCond := ` AND ai_predict_model_framework_id = ?`
  668. nodePars := make([]interface{}, 0)
  669. nodePars = append(nodePars, frameworkId)
  670. nodes, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
  671. if e != nil {
  672. br.Msg = "获取失败"
  673. br.ErrMsg = "获取框架节点失败, Err: " + e.Error()
  674. return
  675. }
  676. // 模型标的map
  677. aiPredictModelIndexMap := make(map[int]*aiPredictModel.AiPredictModelIndex)
  678. {
  679. aiPredictModelIndexIdList := make([]interface{}, 0)
  680. for _, v := range nodes {
  681. if v.AiPredictModelIndexId > 0 {
  682. aiPredictModelIndexIdList = append(aiPredictModelIndexIdList, v.AiPredictModelIndexId)
  683. }
  684. }
  685. indexIdNum := len(aiPredictModelIndexIdList)
  686. if indexIdNum > 0 {
  687. indexObj := aiPredictModel.AiPredictModelIndex{}
  688. indexList, e := indexObj.GetItemsByCondition(` AND ai_predict_model_index_id in (`+utils.GetOrmInReplace(indexIdNum)+`)`, []interface{}{aiPredictModelIndexIdList}, []string{}, "")
  689. if e != nil {
  690. if utils.IsErrNoRow(e) {
  691. br.Msg = "框架不存在, 请刷新页面"
  692. return
  693. }
  694. br.Msg = "获取失败"
  695. br.ErrMsg = "获取标的列表失败, Err: " + e.Error()
  696. return
  697. }
  698. for _, v := range indexList {
  699. aiPredictModelIndexMap[v.AiPredictModelIndexId] = v
  700. }
  701. }
  702. }
  703. // 格式化响应数据
  704. itemNodes := make([]*aiPredictModel.AiPredictModelFrameworkNodeItem, 0)
  705. for _, v := range nodes {
  706. if v.NodeId == "" {
  707. continue
  708. }
  709. num := 1
  710. itemNodes = append(itemNodes, aiPredictModel.FormatAiPredictModelFrameworkNode2Item(v, num, aiPredictModelIndexMap))
  711. }
  712. detail := aiPredictModel.FormatAiPredictModelFramework2Item(item, itemNodes, classifyLevels)
  713. if detail.AdminId == sysUser.AdminId || utils.IsAdminRole(sysUser.RoleTypeCode) {
  714. detail.Button.OpButton = true
  715. detail.Button.DeleteButton = true
  716. detail.Button.MoveButton = true
  717. }
  718. br.Data = detail
  719. br.Ret = 200
  720. br.Success = true
  721. br.Msg = "操作成功"
  722. }