material.go 12 KB

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