material.go 11 KB

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