material.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  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 = ?`
  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. // MaterialSaveResp 保存素材响应体
  86. type MaterialSaveResp struct {
  87. *Material
  88. }
  89. func GetMaterialAll() (list []*MaterialClassifyItems, err error) {
  90. o := orm.NewOrmUsingDB("rddp")
  91. sql := `SELECT material_id,classify_id,material_name AS classify_name, sort
  92. FROM material `
  93. _, err = o.Raw(sql).QueryRows(&list)
  94. return
  95. }
  96. // CheckOpMaterialPermission 判断素材操作权限
  97. func CheckOpMaterialPermission(sysUser *system.Admin, createUserId int) (ok bool) {
  98. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN {
  99. ok = true
  100. }
  101. // 如果图表创建人与当前操作人相同的话,那么就是允许操作
  102. if ok == false && createUserId == sysUser.AdminId {
  103. ok = true
  104. }
  105. // 如果图表权限id 是 1 ,那么允许编辑
  106. if ok == false && sysUser.ChartPermission == 1 {
  107. ok = true
  108. }
  109. return
  110. }
  111. // GetMaterialInfoByAdminId 获取所有我创建的素材,用于分类展示
  112. func GetMaterialInfoByAdminId(adminId int) (items []*MaterialClassifyItems, err error) {
  113. o := orm.NewOrmUsingDB("rddp")
  114. sql := ` SELECT material_id,classify_id,material_name AS classify_name,code,
  115. sys_user_id,sys_user_real_name
  116. FROM material where sys_user_id = ? ORDER BY sort asc,create_time ASC `
  117. _, err = o.Raw(sql, adminId).QueryRows(&items)
  118. return
  119. }
  120. func GetMaterialClassify(classifyId int) (classify_id string, err error) {
  121. o := orm.NewOrmUsingDB("rddp")
  122. sql := `SELECT GROUP_CONCAT(t.classify_id) AS classify_id FROM (
  123. SELECT a.classify_id FROM material_classify AS a
  124. WHERE a.classify_id=?
  125. UNION ALL
  126. SELECT a.classify_id FROM material_classify AS a
  127. WHERE a.parent_id=? UNION ALL
  128. SELECT
  129. classify_id
  130. FROM
  131. material_classify
  132. WHERE
  133. parent_id IN ( SELECT classify_id FROM material_classify WHERE parent_id = ? )
  134. )AS t`
  135. err = o.Raw(sql, classifyId, classifyId, classifyId).QueryRow(&classify_id)
  136. return
  137. }
  138. type MaterialListItems struct {
  139. Material
  140. ModifyTime string `description:"修改时间"`
  141. CreateTime string `description:"创建时间"`
  142. ParentIds string
  143. }
  144. func GetMaterialListPageByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*MaterialListItems, err error) {
  145. o := orm.NewOrmUsingDB("rddp")
  146. sql := ` SELECT * FROM material WHERE 1=1 `
  147. if condition != "" {
  148. sql += condition
  149. }
  150. sql += " ORDER BY create_time DESC, material_id DESC LIMIT ?,? "
  151. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
  152. return
  153. }
  154. func GetMaterialListByCondition(condition string, pars []interface{}) (item []*MaterialListItems, err error) {
  155. o := orm.NewOrmUsingDB("rddp")
  156. sql := ` SELECT * FROM material WHERE 1=1 `
  157. if condition != "" {
  158. sql += condition
  159. }
  160. sql += " ORDER BY create_time DESC, material_id DESC"
  161. _, err = o.Raw(sql, pars).QueryRows(&item)
  162. return
  163. }
  164. func GetMaterialListCountByCondition(condition string, pars []interface{}) (count int, err error) {
  165. o := orm.NewOrmUsingDB("rddp")
  166. sql := ` SELECT COUNT(1) AS count FROM material WHERE 1=1 `
  167. if condition != "" {
  168. sql += condition
  169. }
  170. err = o.Raw(sql, pars).QueryRow(&count)
  171. return
  172. }
  173. type MaterialListResp struct {
  174. Paging *paging.PagingItem
  175. List []*MaterialListItems
  176. }
  177. func AddMaterial(item *Material) (lastId int64, err error) {
  178. o := orm.NewOrmUsingDB("rddp")
  179. lastId, err = o.Insert(item)
  180. return
  181. }
  182. type MoveMaterialReq struct {
  183. MaterialId int `description:"素材ID"`
  184. PrevMaterialId int `description:"上一个素材ID"`
  185. NextMaterialId int `description:"下一个素材ID"`
  186. ClassifyId int `description:"分类id"`
  187. }
  188. func GetMaterialClassifyCountById(classifyId int) (count int, err error) {
  189. o := orm.NewOrmUsingDB("rddp")
  190. sql := `SELECT count(1) AS count FROM material_classify WHERE classify_id=? `
  191. err = o.Raw(sql, classifyId).QueryRow(&count)
  192. return
  193. }
  194. // GetMaterialByClassifyIdAndName 根据分类id和素材名获取图表信息
  195. func GetMaterialByClassifyIdAndName(classifyId int, name string) (item *Material, err error) {
  196. o := orm.NewOrmUsingDB("rddp")
  197. sql := ` SELECT * FROM material WHERE classify_id = ? and material_name=? `
  198. err = o.Raw(sql, classifyId, name).QueryRow(&item)
  199. return
  200. }
  201. // GetMaterialNameByIds 根据素材名称
  202. func GetMaterialNameByIds(ids []int) (items []*Material, err error) {
  203. o := orm.NewOrmUsingDB("rddp")
  204. sql := ` SELECT material_id, material_name FROM material WHERE material_id in (` + utils.GetOrmInReplace(len(ids)) + `) `
  205. _, err = o.Raw(sql, ids).QueryRows(&items)
  206. return
  207. }
  208. func MoveMaterial(MaterialId, classifyId int) (err error) {
  209. o := orm.NewOrmUsingDB("rddp")
  210. sql := ` UPDATE material
  211. SET
  212. classify_id = ?
  213. WHERE material_id = ?`
  214. _, err = o.Raw(sql, classifyId, MaterialId).Exec()
  215. return
  216. }
  217. // UpdateMaterialSortByClassifyId 根据素材id更新排序
  218. func UpdateMaterialSortByClassifyId(classifyId, nowSort, prevMaterialId int, updateSort string) (err error) {
  219. o := orm.NewOrmUsingDB("rddp")
  220. sql := ` UPDATE material set sort = ` + updateSort + ` WHERE classify_id=? AND `
  221. if prevMaterialId > 0 {
  222. sql += ` (sort > ? or (material_id > ` + fmt.Sprint(prevMaterialId) + ` and sort = ` + fmt.Sprint(nowSort) + `))`
  223. }
  224. _, err = o.Raw(sql, classifyId, nowSort).Exec()
  225. return
  226. }
  227. // GetFirstMaterialByClassifyId 获取当前分类下,且排序数相同 的排序第一条的数据
  228. func GetFirstMaterialByClassifyId(classifyId int) (item *Material, err error) {
  229. o := orm.NewOrmUsingDB("rddp")
  230. sql := ` SELECT * FROM material WHERE classify_id=? order by sort asc,material_id asc limit 1`
  231. err = o.Raw(sql, classifyId).QueryRow(&item)
  232. return
  233. }
  234. type DetailParams struct {
  235. Code string `json:"code"`
  236. Id int `json:"id"`
  237. ClassifyId int `json:"classifyId"`
  238. }
  239. // AddAndEditMaterial 添加/编辑素材的请求数据
  240. type AddAndEditMaterial struct {
  241. MaterialId int `description:"素材id"`
  242. MaterialName string `description:"素材名称"`
  243. ImgUrl string `description:"素材图片地址"`
  244. ClassifyId int `description:"分类id"`
  245. }
  246. // BatchAddMaterialReq 批量添加素材的请求数据
  247. type BatchAddMaterialReq struct {
  248. MaterialList []BatchAddMaterialItem
  249. ClassifyId int `description:"分类id"`
  250. }
  251. type BatchAddMaterialItem struct {
  252. MaterialName string `description:"素材名称"`
  253. ImgUrl string `description:"素材图片地址"`
  254. }
  255. // DeleteMaterial 删除素材的请求数据
  256. type DeleteMaterial struct {
  257. MaterialId int `description:"素材id"`
  258. }
  259. // BatchDeleteMaterialReq 删除素材的请求数据
  260. type BatchDeleteMaterialReq struct {
  261. MaterialIds []int `description:"素材id"`
  262. ClassifyId int `description:"分类id"`
  263. IsShowMe bool `description:"操作人id,支持多选,用英文,隔开"`
  264. Keyword string `description:"关键字"`
  265. IsSelectAll bool `description:"是否选择所有指标"`
  266. }
  267. type BatchChangeClassifyMaterialReq struct {
  268. BatchDeleteMaterialReq
  269. NewClassifyId int `description:"新分类ID"`
  270. }
  271. type ChangeClassifyMaterialReq struct {
  272. MaterialId int `description:"素材id"`
  273. NewClassifyId int `description:"新分类ID"`
  274. }
  275. // RenameMaterialReq 添加/编辑素材的请求数据
  276. type RenameMaterialReq struct {
  277. MaterialId int `description:"素材id"`
  278. MaterialName string `description:"素材名称"`
  279. }
  280. func GetMaterialInfoCountByClassifyIds(classifyIds []string) (count int, err error) {
  281. o := orm.NewOrmUsingDB("rddp")
  282. sql := ` SELECT COUNT(1) AS count FROM material WHERE classify_id in(` + utils.GetOrmInReplace(len(classifyIds)) + `)`
  283. err = o.Raw(sql, classifyIds).QueryRow(&count)
  284. return
  285. }
  286. func GetMaterialByNames(materialNames []string) (item *Material, err error) {
  287. o := orm.NewOrmUsingDB("rddp")
  288. sql := `SELECT * FROM material WHERE material_name in (` + utils.GetOrmInReplace(len(materialNames)) + `) limit 1`
  289. err = o.Raw(sql, materialNames).QueryRow(&item)
  290. return
  291. }
  292. func GetMaterialCountByName(materialName string) (count int, err error) {
  293. o := orm.NewOrmUsingDB("rddp")
  294. sql := `SELECT COUNT(1) AS count FROM material WHERE material_name=? `
  295. err = o.Raw(sql, materialName).QueryRow(&count)
  296. return
  297. }
  298. // GetMaterialMaxSort 获取最大的排序数
  299. func GetMaterialMaxSort() (sort int, err error) {
  300. o := orm.NewOrmUsingDB("rddp")
  301. sql := `SELECT MAX(sort) AS sort FROM material `
  302. err = o.Raw(sql).QueryRow(&sort)
  303. return
  304. }