material.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. package material
  2. import (
  3. "eta/eta_api/models/system"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "github.com/beego/beego/v2/client/orm"
  7. "github.com/rdlucklib/rdluck_tools/paging"
  8. "time"
  9. )
  10. type Material struct {
  11. MaterialId int `orm:"column(material_id);pk" description:"素材id"`
  12. MaterialName string `description:"素材名称"`
  13. MaterialNameEn string `description:"英文素材名称"`
  14. ImgUrl string `description:"素材图片地址"`
  15. SysUserId int `description:"作者id"`
  16. SysUserRealName string `description:"作者名称"`
  17. ModifyTime time.Time `description:"修改时间"`
  18. CreateTime time.Time `description:"创建时间"`
  19. ClassifyId int `description:"分类id"`
  20. Sort int `description:"排序"`
  21. }
  22. // Update 素材字段变更
  23. func (material *Material) Update(cols []string) (err error) {
  24. o := orm.NewOrmUsingDB("rddp")
  25. _, err = o.Update(material, cols...)
  26. return
  27. }
  28. // GetMaterialById 根据素材id获取素材详情
  29. func GetMaterialById(MaterialId int) (materialInfo *Material, err error) {
  30. o := orm.NewOrmUsingDB("rddp")
  31. sql := `select * FROM material where material_id = ?`
  32. err = o.Raw(sql, MaterialId).QueryRow(&materialInfo)
  33. return
  34. }
  35. func DeleteByMaterialIds(ids []int) (err error) {
  36. o := orm.NewOrmUsingDB("rddp")
  37. sql := `DELETE FROM material WHERE material_id in (` + utils.GetOrmInReplace(len(ids)) + `)`
  38. _, err = o.Raw(sql, ids).Exec()
  39. return
  40. }
  41. func UpdateClassifyByMaterialIds(ids []int, classifyId int, now time.Time) (err error) {
  42. o := orm.NewOrmUsingDB("rddp")
  43. sql := `UPDATE material SET classify_id=?, modify_time=? WHERE material_id in (` + utils.GetOrmInReplace(len(ids)) + `) and classify_id != ?`
  44. _, err = o.Raw(sql, classifyId, now, ids, classifyId).Exec()
  45. return
  46. }
  47. // AddMultiMaterial 批量添加素材
  48. func AddMultiMaterial(materialInfoList []*Material) (err error) {
  49. o := orm.NewOrmUsingDB("rddp")
  50. _, err = o.InsertMulti(utils.MultiAddNum, materialInfoList)
  51. if err != nil {
  52. return
  53. }
  54. return
  55. }
  56. // UpdateMaterial 更新素材
  57. func UpdateMaterial(materialInfo *Material, updateMaterialColumn []string) (err error) {
  58. o := orm.NewOrmUsingDB("rddp")
  59. to, err := o.Begin()
  60. if err != nil {
  61. return
  62. }
  63. defer func() {
  64. if err != nil {
  65. _ = to.Rollback()
  66. } else {
  67. _ = to.Commit()
  68. }
  69. }()
  70. _, err = to.Update(materialInfo, updateMaterialColumn...)
  71. if err != nil {
  72. return
  73. }
  74. return
  75. }
  76. // MaterialListItem 素材推演列表数据
  77. type MaterialListItem struct {
  78. MaterialId int `description:"素材id"`
  79. MaterialName string `description:"素材名称"`
  80. MaterialNameEn string `description:"英文素材名称"`
  81. ImgUrl string `description:"素材图片地址"`
  82. ModifyTime string `description:"修改时间"`
  83. CreateTime string `description:"创建时间"`
  84. SysUserId int `description:"作者id"`
  85. SysUserRealName string `description:"作者名称"`
  86. }
  87. // MaterialSaveResp 保存素材响应体
  88. type MaterialSaveResp struct {
  89. *Material
  90. }
  91. func GetMaterialAll() (list []*MaterialClassifyItems, err error) {
  92. o := orm.NewOrmUsingDB("rddp")
  93. sql := `SELECT material_id,classify_id,material_name AS classify_name, sort
  94. FROM material `
  95. _, err = o.Raw(sql).QueryRows(&list)
  96. return
  97. }
  98. // CheckOpMaterialPermission 判断素材操作权限
  99. func CheckOpMaterialPermission(sysUser *system.Admin, createUserId int) (ok bool) {
  100. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN {
  101. ok = true
  102. }
  103. // 如果图表创建人与当前操作人相同的话,那么就是允许操作
  104. if ok == false && createUserId == sysUser.AdminId {
  105. ok = true
  106. }
  107. return
  108. }
  109. // GetMaterialInfoByAdminId 获取所有我创建的素材,用于分类展示
  110. func GetMaterialInfoByAdminId(adminId int) (items []*MaterialClassifyItems, err error) {
  111. o := orm.NewOrmUsingDB("rddp")
  112. sql := ` SELECT material_id,classify_id,material_name AS classify_name,code,
  113. sys_user_id,sys_user_real_name
  114. FROM material where sys_user_id = ? ORDER BY sort asc,create_time ASC `
  115. _, err = o.Raw(sql, adminId).QueryRows(&items)
  116. return
  117. }
  118. func GetMaterialClassify(classifyId int) (classify_id string, err error) {
  119. o := orm.NewOrmUsingDB("rddp")
  120. sql := `SELECT GROUP_CONCAT(t.classify_id) AS classify_id FROM (
  121. SELECT a.classify_id FROM material_classify AS a
  122. WHERE a.classify_id=?
  123. UNION ALL
  124. SELECT a.classify_id FROM material_classify AS a
  125. WHERE a.parent_id=? UNION ALL
  126. SELECT
  127. classify_id
  128. FROM
  129. material_classify
  130. WHERE
  131. parent_id IN ( SELECT classify_id FROM material_classify WHERE parent_id = ? )
  132. )AS t`
  133. err = o.Raw(sql, classifyId, classifyId, classifyId).QueryRow(&classify_id)
  134. return
  135. }
  136. type MaterialListItems struct {
  137. Material
  138. ModifyTime string `description:"修改时间"`
  139. CreateTime string `description:"创建时间"`
  140. ParentIds string
  141. }
  142. func GetMaterialListPageByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*MaterialListItems, err error) {
  143. o := orm.NewOrmUsingDB("rddp")
  144. sql := ` SELECT * FROM material WHERE 1=1 `
  145. if condition != "" {
  146. sql += condition
  147. }
  148. sql += " ORDER BY create_time DESC, material_id DESC LIMIT ?,? "
  149. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
  150. return
  151. }
  152. func GetMaterialListByCondition(condition string, pars []interface{}) (item []*MaterialListItems, err error) {
  153. o := orm.NewOrmUsingDB("rddp")
  154. sql := ` SELECT * FROM material WHERE 1=1 `
  155. if condition != "" {
  156. sql += condition
  157. }
  158. sql += " ORDER BY create_time DESC, material_id DESC"
  159. _, err = o.Raw(sql, pars).QueryRows(&item)
  160. return
  161. }
  162. func GetMaterialListCountByCondition(condition string, pars []interface{}) (count int, err error) {
  163. o := orm.NewOrmUsingDB("rddp")
  164. sql := ` SELECT COUNT(1) AS count FROM material WHERE 1=1 `
  165. if condition != "" {
  166. sql += condition
  167. }
  168. err = o.Raw(sql, pars).QueryRow(&count)
  169. return
  170. }
  171. type MaterialListResp struct {
  172. Paging *paging.PagingItem
  173. List []*MaterialListItems
  174. }
  175. func AddMaterial(item *Material) (lastId int64, err error) {
  176. o := orm.NewOrmUsingDB("rddp")
  177. lastId, err = o.Insert(item)
  178. return
  179. }
  180. type MoveMaterialReq struct {
  181. MaterialId int `description:"素材ID"`
  182. PrevMaterialId int `description:"上一个素材ID"`
  183. NextMaterialId int `description:"下一个素材ID"`
  184. ClassifyId int `description:"分类id"`
  185. }
  186. func GetMaterialClassifyCountById(classifyId int) (count int, err error) {
  187. o := orm.NewOrmUsingDB("rddp")
  188. sql := `SELECT count(1) AS count FROM material_classify WHERE classify_id=? `
  189. err = o.Raw(sql, classifyId).QueryRow(&count)
  190. return
  191. }
  192. // GetMaterialByClassifyIdAndName 根据分类id和素材名获取图表信息
  193. func GetMaterialByClassifyIdAndName(classifyId int, name string) (item *Material, err error) {
  194. o := orm.NewOrmUsingDB("rddp")
  195. sql := ` SELECT * FROM material WHERE classify_id = ? and material_name=? `
  196. err = o.Raw(sql, classifyId, name).QueryRow(&item)
  197. return
  198. }
  199. // GetMaterialByIds 根据素材id获取素材信息
  200. func GetMaterialByIds(ids []int) (items []*MaterialListItems, err error) {
  201. o := orm.NewOrmUsingDB("rddp")
  202. sql := ` SELECT * FROM material WHERE material_id in (` + utils.GetOrmInReplace(len(ids)) + `) `
  203. _, err = o.Raw(sql, ids).QueryRows(&items)
  204. return
  205. }
  206. // UpdateMaterialSortByClassifyId 根据素材id更新排序
  207. func UpdateMaterialSortByClassifyId(classifyId, nowSort, prevMaterialId int, updateSort string) (err error) {
  208. o := orm.NewOrmUsingDB("rddp")
  209. sql := ` UPDATE material set sort = ` + updateSort + ` WHERE classify_id=? AND `
  210. if prevMaterialId > 0 {
  211. sql += ` (sort > ? or (material_id > ` + fmt.Sprint(prevMaterialId) + ` and sort = ` + fmt.Sprint(nowSort) + `))`
  212. }
  213. _, err = o.Raw(sql, classifyId, nowSort).Exec()
  214. return
  215. }
  216. // GetFirstMaterialByClassifyId 获取当前分类下,且排序数相同 的排序第一条的数据
  217. func GetFirstMaterialByClassifyId(classifyId int) (item *Material, err error) {
  218. o := orm.NewOrmUsingDB("rddp")
  219. sql := ` SELECT * FROM material WHERE classify_id=? order by sort asc,material_id asc limit 1`
  220. err = o.Raw(sql, classifyId).QueryRow(&item)
  221. return
  222. }
  223. type DetailParams struct {
  224. Code string `json:"code"`
  225. Id int `json:"id"`
  226. ClassifyId int `json:"classifyId"`
  227. }
  228. // SaveAsMaterialReq 添加素材的请求数据
  229. type SaveAsMaterialReq struct {
  230. MaterialName string `description:"素材名称"`
  231. ClassifyId int `description:"分类id"`
  232. ObjectId int `description:"对象id"`
  233. ObjectType string `description:"对象类型:chart,excel,sandbox"`
  234. }
  235. // BatchAddMaterialReq 批量添加素材的请求数据
  236. type BatchAddMaterialReq struct {
  237. MaterialList []BatchAddMaterialItem
  238. ClassifyId int `description:"分类id"`
  239. }
  240. type BatchAddMaterialItem struct {
  241. MaterialName string `description:"素材名称"`
  242. ImgUrl string `description:"素材图片地址"`
  243. }
  244. // DeleteMaterial 删除素材的请求数据
  245. type DeleteMaterial struct {
  246. MaterialId int `description:"素材id"`
  247. }
  248. // BatchDeleteMaterialReq 删除素材的请求数据
  249. type BatchDeleteMaterialReq struct {
  250. MaterialIds []int `description:"素材id"`
  251. ClassifyId int `description:"分类id"`
  252. IsShowMe bool `description:"操作人id,支持多选,用英文,隔开"`
  253. Keyword string `description:"关键字"`
  254. IsSelectAll bool `description:"是否选择所有素材"`
  255. }
  256. type BatchChangeClassifyMaterialReq struct {
  257. BatchDeleteMaterialReq
  258. NewClassifyId int `description:"新分类ID"`
  259. }
  260. type ChangeClassifyMaterialReq struct {
  261. MaterialId int `description:"素材id"`
  262. NewClassifyId int `description:"新分类ID"`
  263. }
  264. // RenameMaterialReq 添加/编辑素材的请求数据
  265. type RenameMaterialReq struct {
  266. MaterialId int `description:"素材id"`
  267. MaterialName string `description:"素材名称"`
  268. }
  269. func GetMaterialInfoCountByClassifyIds(classifyIds []string) (count int, err error) {
  270. o := orm.NewOrmUsingDB("rddp")
  271. sql := ` SELECT COUNT(1) AS count FROM material WHERE classify_id in(` + utils.GetOrmInReplace(len(classifyIds)) + `)`
  272. err = o.Raw(sql, classifyIds).QueryRow(&count)
  273. return
  274. }
  275. func GetMaterialByNames(materialNames []string) (items []*Material, err error) {
  276. o := orm.NewOrmUsingDB("rddp")
  277. sql := `SELECT * FROM material WHERE material_name in (` + utils.GetOrmInReplace(len(materialNames)) + `) limit 1`
  278. _, err = o.Raw(sql, materialNames).QueryRows(&items)
  279. return
  280. }
  281. func GetMaterialByNameEns(materialNames []string) (items []*Material, err error) {
  282. o := orm.NewOrmUsingDB("rddp")
  283. sql := `SELECT * FROM material WHERE material_name_en in (` + utils.GetOrmInReplace(len(materialNames)) + `) limit 1`
  284. _, err = o.Raw(sql, materialNames).QueryRows(&items)
  285. return
  286. }
  287. func GetMaterialByName(materialName string) (item *Material, err error) {
  288. o := orm.NewOrmUsingDB("rddp")
  289. sql := `SELECT * FROM material WHERE material_name = ?`
  290. err = o.Raw(sql, materialName).QueryRow(&item)
  291. return
  292. }
  293. func GetMaterialByNameEn(materialName string) (item *Material, err error) {
  294. o := orm.NewOrmUsingDB("rddp")
  295. sql := `SELECT * FROM material WHERE material_name_en = ?`
  296. err = o.Raw(sql, materialName).QueryRow(&item)
  297. return
  298. }
  299. func GetMaterialCountByName(materialName string) (count int, err error) {
  300. o := orm.NewOrmUsingDB("rddp")
  301. sql := `SELECT COUNT(1) AS count FROM material WHERE material_name=? `
  302. err = o.Raw(sql, materialName).QueryRow(&count)
  303. return
  304. }
  305. func GetMaterialCountByNameEn(materialName string) (count int, err error) {
  306. o := orm.NewOrmUsingDB("rddp")
  307. sql := `SELECT COUNT(1) AS count FROM material WHERE material_name_en=? `
  308. err = o.Raw(sql, materialName).QueryRow(&count)
  309. return
  310. }
  311. // GetMaterialMaxSort 获取最大的排序数
  312. func GetMaterialMaxSort() (sort int, err error) {
  313. o := orm.NewOrmUsingDB("rddp")
  314. sql := `SELECT MAX(sort) AS sort FROM material `
  315. err = o.Raw(sql).QueryRow(&sort)
  316. return
  317. }