material.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. package materialService
  2. import (
  3. "eta/eta_api/models"
  4. "eta/eta_api/models/material"
  5. "eta/eta_api/models/system"
  6. _interface "eta/eta_api/services/interface"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "strings"
  10. "time"
  11. )
  12. func materialClassifyHaveChild(allNode []*material.MaterialClassifyItems, node *material.MaterialClassifyItems) (childs []*material.MaterialClassifyItems, yes bool) {
  13. for _, v := range allNode {
  14. if v.ParentId == node.ClassifyId {
  15. childs = append(childs, v)
  16. }
  17. }
  18. if len(childs) > 0 {
  19. yes = true
  20. }
  21. return
  22. }
  23. func MaterialClassifyItemsMakeTree(sysUser *system.Admin, allNode []*material.MaterialClassifyItems, node *material.MaterialClassifyItems) {
  24. childs, _ := materialClassifyHaveChild(allNode, node) //判断节点是否有子节点并返回
  25. if len(childs) > 0 {
  26. node.Children = append(node.Children, childs[0:]...) //添加子节点
  27. for _, v := range childs { //查询子节点的子节点,并添加到子节点
  28. _, has := materialClassifyHaveChild(allNode, v)
  29. if has {
  30. MaterialClassifyItemsMakeTree(sysUser, allNode, v) //递归添加节点
  31. } else {
  32. childrenArr := make([]*material.MaterialClassifyItems, 0)
  33. v.Children = childrenArr
  34. }
  35. }
  36. } else {
  37. childrenArr := make([]*material.MaterialClassifyItems, 0)
  38. node.Children = childrenArr
  39. }
  40. }
  41. // GetMaterialClassifyListForMe 获取我创建的素材
  42. func GetMaterialClassifyListForMe(adminInfo system.Admin, resp *material.MaterialClassifyListResp, classifyId int) (errMsg string, err error) {
  43. classifyAll, err := material.GetMaterialClassifyByParentId(classifyId)
  44. if err != nil && err.Error() != utils.ErrNoRow() {
  45. errMsg = "获取失败"
  46. return
  47. }
  48. nodeAll := make([]*material.MaterialClassifyItems, 0)
  49. for k := range classifyAll {
  50. rootNode := classifyAll[k]
  51. MaterialClassifyItemsMakeTree(&adminInfo, classifyAll, rootNode)
  52. nodeAll = append(nodeAll, rootNode)
  53. }
  54. resp.AllNodes = nodeAll
  55. return
  56. }
  57. func BatchAddMaterial(materialMap map[string]string, classifyId, opUserId int, opUserName string) (err error) {
  58. materialList := make([]*material.Material, 0)
  59. sort, err := material.GetMaterialMaxSort()
  60. if err != nil {
  61. return
  62. }
  63. for k, v := range materialMap {
  64. sort = sort + 1
  65. materialList = append(materialList, &material.Material{
  66. MaterialName: k,
  67. ImgUrl: v,
  68. SysUserId: opUserId,
  69. SysUserName: opUserName,
  70. ModifyTime: time.Now(),
  71. CreateTime: time.Now(),
  72. ClassifyId: classifyId,
  73. Sort: sort,
  74. })
  75. }
  76. if len(materialList) > 0 {
  77. err = material.AddMultiMaterial(materialList)
  78. }
  79. return
  80. }
  81. // AddMaterial 新增素材
  82. func AddMaterial(req material.AddAndEditMaterial, opUserId int, opUserName string) (resp *material.MaterialSaveResp, err error) {
  83. resp = new(material.MaterialSaveResp)
  84. //素材主表信息
  85. materialInfo := &material.Material{
  86. MaterialName: utils.TrimStr(req.MaterialName),
  87. ImgUrl: utils.TrimStr(req.ImgUrl),
  88. SysUserId: opUserId,
  89. SysUserName: opUserName,
  90. ModifyTime: time.Now(),
  91. CreateTime: time.Now(),
  92. ClassifyId: req.ClassifyId,
  93. Sort: 0,
  94. }
  95. //新增素材
  96. id, err := material.AddMaterial(materialInfo)
  97. if err != nil {
  98. return
  99. }
  100. materialInfo.MaterialId = int(id)
  101. resp.Material = materialInfo
  102. return
  103. }
  104. func MaterialItemsMakeTree(allNode []*material.MaterialClassifyItems, sandListMap map[int][]*material.MaterialClassifyItems, classifyId int) (nodeAll []*material.MaterialClassifyItems) {
  105. for k := range allNode {
  106. if len(allNode[k].Children) > 0 {
  107. MaterialItemsMakeTree(allNode[k].Children, sandListMap, classifyId)
  108. allNode = append(allNode, sandListMap[allNode[k].ParentId]...)
  109. nodeAll = allNode
  110. } else if k == len(allNode)-1 {
  111. allNode = append(allNode, sandListMap[allNode[k].ParentId]...)
  112. nodeAll = allNode
  113. }
  114. }
  115. if len(allNode) == 0 {
  116. nodeAll = append(nodeAll, sandListMap[classifyId]...)
  117. }
  118. return
  119. }
  120. func MaterialClassifyHaveChild(allNode []*material.MaterialClassifyItems, node *material.MaterialClassifyItems) (childs []*material.MaterialClassifyItems, yes bool) {
  121. for _, v := range allNode {
  122. if v.ParentId == node.ClassifyId {
  123. childs = append(childs, v)
  124. }
  125. }
  126. if len(childs) > 0 {
  127. yes = true
  128. }
  129. return
  130. }
  131. func MaterialClassifyItemsMakeTreeV2(sysUser *system.Admin, allNode []*material.MaterialClassifyItems, node *material.MaterialClassifyItems) {
  132. childs, _ := materialClassifyHaveChildV2(allNode, node) //判断节点是否有子节点并返回
  133. if len(childs) > 0 {
  134. node.Children = append(node.Children, childs[0:]...) //添加子节点
  135. for _, v := range childs { //查询子节点的子节点,并添加到子节点
  136. _, has := materialClassifyHaveChildV2(allNode, v)
  137. if has {
  138. MaterialClassifyItemsMakeTreeV2(sysUser, allNode, v) //递归添加节点
  139. }
  140. }
  141. }
  142. }
  143. func materialClassifyHaveChildV2(allNode []*material.MaterialClassifyItems, node *material.MaterialClassifyItems) (childs []*material.MaterialClassifyItems, yes bool) {
  144. for _, v := range allNode {
  145. if v.ParentId == node.ClassifyId && node.ClassifyId == 0 {
  146. childs = append(childs, v)
  147. }
  148. }
  149. if len(childs) > 0 {
  150. yes = true
  151. }
  152. return
  153. }
  154. // DeleteMaterial 删除素材
  155. func DeleteMaterial(materialId int) (err error) {
  156. // 获取素材主表信息
  157. /*materialInfo, err := materialId.dele(materialId)
  158. if err != nil {
  159. return
  160. }
  161. materialInfo.IsDelete = 1
  162. var updateMaterialColumn = []string{"IsDelete"}
  163. err = materialInfo.Update(updateMaterialColumn)*/
  164. return
  165. }
  166. func MoveMaterialClassify(classifyInfo *material.MaterialClassify, req *material.MoveMaterialClassifyReq) (err error, errMsg string) {
  167. nodeMove := models.SingleMoveNodeReq{}
  168. nodeMove.NodeId = req.ClassifyId
  169. nodeMove.ParentNodeId = req.ParentClassifyId
  170. nodeMove.PrevNodeId = req.PrevClassifyId
  171. nodeMove.NextNodeId = req.NextClassifyId
  172. materialClassifyMove := new(ClassifyMove)
  173. nodeInfo, updateCol, err, errMsg := _interface.MoveSingleNode(materialClassifyMove, nodeMove)
  174. if err != nil {
  175. return
  176. }
  177. oldParentId := classifyInfo.ParentId
  178. oldLevelPath := classifyInfo.LevelPath
  179. if len(updateCol) > 0 {
  180. classifyInfo.Sort = nodeInfo.Sort
  181. classifyInfo.ModifyTime = nodeInfo.ModifyTime
  182. classifyInfo.ParentId = nodeInfo.ParentId
  183. levelPath := ""
  184. if classifyInfo.ParentId != oldParentId {
  185. //查找父级分类
  186. parentClassify, e := material.GetMaterialClassifyById(classifyInfo.ParentId)
  187. if e != nil {
  188. errMsg = "获取父级分类失败"
  189. err = fmt.Errorf("获取父级分类失败,Err:" + e.Error())
  190. return
  191. }
  192. levelPath = fmt.Sprintf("%s,%d", parentClassify.LevelPath, classifyInfo.ClassifyId)
  193. }
  194. classifyInfo.LevelPath = levelPath
  195. updateCol = append(updateCol, "LevelPath")
  196. err = classifyInfo.Update(updateCol)
  197. if err != nil {
  198. err = fmt.Errorf("修改失败,Err:" + err.Error())
  199. return
  200. }
  201. if classifyInfo.ParentId != oldParentId {
  202. tmpList, e := material.GetMaterialClassifyByLevelPath(oldLevelPath)
  203. if e != nil {
  204. err = fmt.Errorf("保存分类失败,Err:" + e.Error())
  205. return
  206. }
  207. // 把原先的父级levePath,替换成最新的父级序列
  208. for _, tmp := range tmpList {
  209. //获取字符串前缀的位置
  210. after, _ := strings.CutPrefix(tmp.LevelPath, oldLevelPath)
  211. fmt.Println("after", after)
  212. // 拼接字符串
  213. if after != "" {
  214. tmp.LevelPath = levelPath + after
  215. tmp.ModifyTime = time.Now()
  216. e = tmp.Update([]string{"LevelPath", "ModifyTime"})
  217. if e != nil {
  218. err = fmt.Errorf("修改子分类,Err:" + e.Error())
  219. return
  220. }
  221. }
  222. }
  223. }
  224. }
  225. return
  226. }
  227. type ClassifyMove struct{}
  228. func (m *ClassifyMove) GetNodeInfoById(nodeId int) (nodeInfo *models.NodeInfo, err error) {
  229. classifyInfo, err := material.GetMaterialClassifyById(nodeId)
  230. if err != nil {
  231. return
  232. }
  233. nodeInfo = &models.NodeInfo{
  234. NodeId: classifyInfo.ClassifyId,
  235. NodeName: classifyInfo.ClassifyName,
  236. ParentId: classifyInfo.ParentId,
  237. Level: classifyInfo.Level,
  238. Sort: classifyInfo.Sort,
  239. ModifyTime: classifyInfo.ModifyTime,
  240. }
  241. return
  242. }
  243. func (m *ClassifyMove) UpdateNodeInfoSortByParentIdAndSource(parentNodeId, nodeId, prevNodeSort int, updateSortStr string, nodeType int) (err error) {
  244. err = material.UpdateMaterialClassifySortByParentId(parentNodeId, nodeId, prevNodeSort, updateSortStr)
  245. return
  246. }
  247. func (m *ClassifyMove) GetNodeMaxSort(parentId, nodeType int) (maxSort int, err error) {
  248. maxSort, err = material.GetMaterialClassifyMaxSort(parentId)
  249. return
  250. }
  251. func (m *ClassifyMove) GetFirstNodeInfoByParentId(parentId int) (nodeInfo *models.NodeInfo, err error) {
  252. classifyInfo, err := material.GetFirstMaterialClassifyByParentId(parentId)
  253. if err != nil {
  254. return
  255. }
  256. nodeInfo = &models.NodeInfo{
  257. NodeId: classifyInfo.ClassifyId,
  258. NodeName: classifyInfo.ClassifyName,
  259. ParentId: classifyInfo.ParentId,
  260. Level: classifyInfo.Level,
  261. Sort: classifyInfo.Sort,
  262. ModifyTime: classifyInfo.ModifyTime,
  263. }
  264. return
  265. }