chart_permission.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. package crm
  2. import (
  3. "fmt"
  4. "hongze/hz_crm_eta/models/crm"
  5. "hongze/hz_crm_eta/utils"
  6. "time"
  7. )
  8. // 获取权限列表
  9. func GetChartPermissionList(cond string, pars []interface{}) (permissionList []*crm.ChartPermission, err error) {
  10. ob := new(crm.ChartPermission)
  11. permissionList, err = ob.GetItemsByCondition(cond, pars)
  12. if err != nil {
  13. err = fmt.Errorf("获取权限列表失败, Err: %s", err.Error())
  14. return
  15. }
  16. return
  17. }
  18. // 新增权限
  19. func AddChartPermission(req crm.PermissionAddReq) (err error, errMsg string) {
  20. // 重名校验
  21. ob := new(crm.ChartPermission)
  22. existCond := ` permission_name = ? AND parent_id = ?`
  23. existPars := make([]interface{}, 0)
  24. existPars = append(existPars, req.PermissionName, req.ParentId)
  25. exist, e := ob.GetItemByCondition(existCond, existPars)
  26. if e != nil && e != utils.ErrNoRow {
  27. errMsg = "操作失败"
  28. err = fmt.Errorf("获取重名品种权限失败, Err: " + e.Error())
  29. return
  30. }
  31. if exist != nil && exist.ChartPermissionId > 0 {
  32. errMsg = "品种名称已存在"
  33. err = fmt.Errorf("品种名称已存在")
  34. return
  35. }
  36. // 获取最大的排序值
  37. maxSort, e := ob.GetMaxSort()
  38. if e != nil {
  39. errMsg = "查询品种排序失败"
  40. err = fmt.Errorf("查询品种排序失败, Err: " + e.Error())
  41. return
  42. }
  43. parentPermissionName := ""
  44. if req.ParentId > 0 {
  45. //查询父级是否存在
  46. parent, e := ob.GetItemById(req.ParentId)
  47. if e != nil {
  48. errMsg = "查询父级品种失败"
  49. err = fmt.Errorf("查询父级品种失败, Err: " + e.Error())
  50. return
  51. }
  52. if parent.ChartPermissionId == 0 {
  53. errMsg = "请选择正确的父级品种"
  54. err = fmt.Errorf("请选择正确的父级品种")
  55. return
  56. }
  57. if parent.ParentId != 0 {
  58. errMsg = "只能选择一级品种作为父级品种"
  59. err = fmt.Errorf("只能选择一级品种作为父级品种")
  60. return
  61. }
  62. parentPermissionName = parent.PermissionName
  63. }
  64. // 新增
  65. ob.ChartPermissionName = req.PermissionName
  66. ob.PermissionName = req.PermissionName
  67. ob.ParentId = req.ParentId
  68. ob.ProductId = req.ProductId
  69. ob.IsPublic = req.IsPublic
  70. ob.Enabled = req.Enabled
  71. ob.Sort = maxSort + 1
  72. ob.CreatedTime = time.Now()
  73. ob.LastUpdatedTime = time.Now()
  74. ob.ClassifyName = parentPermissionName
  75. if e = ob.Create(); e != nil {
  76. errMsg = "操作失败"
  77. err = fmt.Errorf("新增品种权限失败, Err: " + e.Error())
  78. return
  79. }
  80. if req.ParentId > 0 && req.Enabled == 1 {
  81. // 更新父级品种的启用禁用
  82. err = ob.SetEnabledByChartPermissionId(req.ParentId, req.Enabled)
  83. if err != nil {
  84. errMsg = "更新品种启用禁用状态失败"
  85. err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
  86. return
  87. }
  88. }
  89. return
  90. }
  91. func EditChartPermission(req crm.PermissionEditReq) (err error, errMsg string) {
  92. //查询是否存在品种
  93. ob := new(crm.ChartPermission)
  94. item, e := ob.GetItemById(req.ChartPermissionId)
  95. if e != nil {
  96. errMsg = "查询品种信息失败"
  97. err = fmt.Errorf("查询品种信息失败, Err: " + e.Error())
  98. return
  99. }
  100. if item.ChartPermissionId == 0 {
  101. errMsg = "请选择正确的品种"
  102. err = fmt.Errorf("请选择正确的品种")
  103. return
  104. }
  105. // 查询品种名称是否修改
  106. if item.PermissionName != req.PermissionName {
  107. existCond := ` permission_name = ? AND parent_id = ? AND chart_permission_id !=?`
  108. existPars := make([]interface{}, 0)
  109. existPars = append(existPars, req.PermissionName, item.ParentId, req.ChartPermissionId)
  110. exist, e := ob.GetItemByCondition(existCond, existPars)
  111. if e != nil && e != utils.ErrNoRow {
  112. errMsg = "操作失败"
  113. err = fmt.Errorf("获取重名品种权限失败, Err: " + e.Error())
  114. return
  115. }
  116. if exist != nil && exist.ChartPermissionId > 0 {
  117. errMsg = "品种名称已存在"
  118. err = fmt.Errorf("品种名称已存在")
  119. return
  120. }
  121. }
  122. //判断父级品种是否存在
  123. parentPermissionName := ""
  124. if req.ParentId > 0 {
  125. //查询父级是否存在
  126. parent, e := ob.GetItemById(req.ParentId)
  127. if e != nil {
  128. errMsg = "查询父级品种失败"
  129. err = fmt.Errorf("查询父级品种失败, Err: " + e.Error())
  130. return
  131. }
  132. if parent.ChartPermissionId == 0 {
  133. errMsg = "请选择正确的父级品种"
  134. err = fmt.Errorf("请选择正确的父级品种")
  135. return
  136. }
  137. if parent.ParentId != 0 {
  138. errMsg = "只能选择一级品种作为父级品种"
  139. err = fmt.Errorf("只能选择一级品种作为父级品种")
  140. return
  141. }
  142. parentPermissionName = parent.PermissionName
  143. }
  144. item.PermissionName = req.PermissionName
  145. item.Enabled = req.Enabled
  146. item.IsPublic = req.IsPublic
  147. item.ParentId = req.ParentId
  148. item.ClassifyName = parentPermissionName
  149. item.LastUpdatedTime = time.Now()
  150. err = item.Update([]string{"PermissionName", "Enabled", "IsPublic", "ClassifyName", "LastUpdatedTime"})
  151. if err != nil {
  152. errMsg = "更新失败"
  153. err = fmt.Errorf("更新品种失败, Err: " + err.Error())
  154. return
  155. }
  156. //判断是否是一级品种
  157. if item.ParentId == 0 {
  158. // 判断是否设置公有的二级品种
  159. if len(req.PublicPermissionIds) > 0 {
  160. // 更新二级品种的公有权限
  161. err = ob.SetIsPublic(req.PublicPermissionIds, item.ChartPermissionId, 1)
  162. if err != nil {
  163. errMsg = "更新品种公有权限失败"
  164. err = fmt.Errorf("更新品种公有权限失败, Err: " + err.Error())
  165. return
  166. }
  167. }
  168. // 更新二级的启动禁用
  169. err = ob.UpdatesByParentId(item.ChartPermissionId, req.Enabled, req.PermissionName)
  170. if err != nil {
  171. errMsg = "更新品种启用禁用状态失败"
  172. err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
  173. return
  174. }
  175. //
  176. } else if item.ParentId > 0 {
  177. if req.Enabled == 1 {
  178. // 更新父级品种的启用禁用
  179. err = ob.SetEnabledByChartPermissionId(item.ParentId, req.Enabled)
  180. if err != nil {
  181. errMsg = "更新品种启用禁用状态失败"
  182. err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
  183. return
  184. }
  185. }
  186. }
  187. return
  188. }
  189. // MoveChartPermission 移动品种
  190. func MoveChartPermission(req crm.PermissionMoveReq) (err error, errMsg string) {
  191. ob := new(crm.ChartPermission)
  192. chartPermissionId := req.ChartPermissionId
  193. prevChartPermissionId := req.PrevChartPermissionId
  194. nextChartPermissionId := req.NextChartPermissionId
  195. //如果有传入 上一个兄弟节点分类id
  196. var (
  197. permissionInfo *crm.ChartPermission
  198. prevPermission *crm.ChartPermission
  199. nextPermission *crm.ChartPermission
  200. prevSort int
  201. nextSort int
  202. )
  203. // 移动对象为分类, 判断权限
  204. permissionInfo, err = ob.GetItemById(chartPermissionId)
  205. if err != nil {
  206. if err == utils.ErrNoRow {
  207. errMsg = "当前品种不存在"
  208. err = fmt.Errorf("获取品种信息失败,Err:" + err.Error())
  209. return
  210. }
  211. errMsg = "移动失败"
  212. err = fmt.Errorf("获取分类信息失败,Err:" + err.Error())
  213. return
  214. } else if permissionInfo.ChartPermissionId == 0 {
  215. errMsg = "当前品种不存在"
  216. err = fmt.Errorf("获取品种信息失败,Err:" + err.Error())
  217. return
  218. }
  219. parentChartPermissionId := permissionInfo.ParentId
  220. productId := permissionInfo.ProductId
  221. if prevChartPermissionId > 0 {
  222. prevPermission, err = ob.GetItemById(prevChartPermissionId)
  223. if err != nil {
  224. errMsg = "移动失败"
  225. err = fmt.Errorf("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
  226. return
  227. }
  228. prevSort = prevPermission.Sort
  229. }
  230. if nextChartPermissionId > 0 {
  231. //下一个兄弟节点
  232. nextPermission, err = ob.GetItemById(nextChartPermissionId)
  233. if err != nil {
  234. errMsg = "移动失败"
  235. err = fmt.Errorf("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
  236. return
  237. }
  238. nextSort = nextPermission.Sort
  239. }
  240. err, errMsg = moveChartPermission(permissionInfo, prevPermission, nextPermission, parentChartPermissionId, prevSort, nextSort, productId)
  241. return
  242. }
  243. // moveChartPermission 移动指标分类
  244. func moveChartPermission(permissionInfo, prevPermission, nextPermission *crm.ChartPermission, parentId, prevSort, nextSort, productId int) (err error, errMsg string) {
  245. ob := new(crm.ChartPermission)
  246. updateCol := make([]string, 0)
  247. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  248. if permissionInfo.ParentId != parentId {
  249. errMsg = "移动失败"
  250. err = fmt.Errorf("不支持目录层级变更")
  251. return
  252. }
  253. if prevSort > 0 {
  254. //如果是移动在两个兄弟节点之间
  255. if nextSort > 0 {
  256. //下一个兄弟节点
  257. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  258. if prevSort == nextSort || prevSort == permissionInfo.Sort {
  259. //变更兄弟节点的排序
  260. updateSortStr := `sort + 2`
  261. //变更分类
  262. if prevPermission != nil {
  263. _ = crm.UpdateChartPermissionSortByParentId(parentId, prevPermission.ChartPermissionId, prevPermission.Sort, updateSortStr, productId)
  264. } else {
  265. _ = crm.UpdateChartPermissionSortByParentId(parentId, 0, prevSort, updateSortStr, productId)
  266. }
  267. } else {
  268. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  269. if nextSort-prevSort == 1 {
  270. //变更兄弟节点的排序
  271. updateSortStr := `sort + 1`
  272. //变更分类
  273. if prevPermission != nil {
  274. _ = crm.UpdateChartPermissionSortByParentId(parentId, prevPermission.ChartPermissionId, prevSort, updateSortStr, productId)
  275. } else {
  276. _ = crm.UpdateChartPermissionSortByParentId(parentId, 0, prevSort, updateSortStr, productId)
  277. }
  278. }
  279. }
  280. }
  281. permissionInfo.Sort = prevSort + 1
  282. permissionInfo.LastUpdatedTime = time.Now()
  283. updateCol = append(updateCol, "Sort", "LastUpdatedTime")
  284. } else if prevPermission == nil && nextPermission == nil && parentId > 0 {
  285. //处理只拖动到目录里,默认放到目录底部的情况
  286. var maxSort int
  287. maxSort, err = ob.GetMaxSortByParentId(parentId)
  288. if err != nil {
  289. errMsg = "移动失败"
  290. err = fmt.Errorf("查询组内排序信息失败,Err:" + err.Error())
  291. return
  292. }
  293. permissionInfo.Sort = maxSort + 1 //那就是排在组内最后一位
  294. permissionInfo.LastUpdatedTime = time.Now()
  295. updateCol = append(updateCol, "Sort", "LastUpdatedTime")
  296. } else {
  297. // 拖动到父级分类的第一位
  298. firstPermission, tmpErr := ob.GetFirstChartPermissionByParentId(parentId)
  299. if tmpErr != nil && tmpErr != utils.ErrNoRow {
  300. errMsg = "移动失败"
  301. err = fmt.Errorf("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  302. return
  303. }
  304. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  305. if firstPermission != nil && firstPermission.ChartPermissionId != 0 && firstPermission.Sort == 0 {
  306. updateSortStr := ` sort + 1 `
  307. _ = crm.UpdateChartPermissionSortByParentId(parentId, firstPermission.ChartPermissionId-1, 0, updateSortStr, productId)
  308. }
  309. permissionInfo.Sort = 0 //那就是排在第一位
  310. permissionInfo.LastUpdatedTime = time.Now()
  311. updateCol = append(updateCol, "Sort", "LastUpdatedTime")
  312. }
  313. //更新
  314. if len(updateCol) > 0 {
  315. err = permissionInfo.Update(updateCol)
  316. if err != nil {
  317. errMsg = "移动失败"
  318. err = fmt.Errorf("修改失败,Err:" + err.Error())
  319. return
  320. }
  321. }
  322. return
  323. }