chart.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. package data_manage_permission
  2. import (
  3. "eta_gn/eta_api/global"
  4. "eta_gn/eta_api/utils"
  5. "fmt"
  6. "strconv"
  7. "time"
  8. )
  9. type ChartInfoPermission struct {
  10. ChartInfoPermissionId int64 `json:"chart_info_permission_id" orm:"column(chart_info_permission_id);pk" gorm:"primaryKey" `
  11. ChartInfoId int32 `json:"chart_info_id"` // 图表id
  12. Source int32 `json:"source"` // 1:ETA图库;2:商品价格曲线;3:相关性图
  13. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  14. ModifyTime time.Time `json:"modify_time"` // 变更时间
  15. CreateTime time.Time `json:"create_time"` // 关系建立时间
  16. }
  17. type ChartClassifyPermission struct {
  18. ChartClassifyPermissionId int64 `json:"chart_classify_permission_id" orm:"column(chart_classify_permission_id);pk" gorm:"primaryKey" `
  19. ChartClassifyId int32 `json:"chart_classify_id"` // 分类id
  20. Source int32 `json:"source"` // 分类来源: 1-图库; 2-商品价格曲线; 3-相关性图表; 6-拟合方程图表; 7-统计特征
  21. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  22. ModifyTime time.Time `json:"modify_time"` // 变更时间
  23. CreateTime time.Time `json:"create_time"` // 关系建立时间
  24. }
  25. func SetIsPermissionByChartClassifyIdList(classifyIdList []int, chartClassifySource int) (err error) {
  26. num := len(classifyIdList)
  27. to := global.DmSQL["data"].Begin()
  28. defer func() {
  29. if err != nil {
  30. _ = to.Rollback()
  31. } else {
  32. _ = to.Commit()
  33. }
  34. }()
  35. sql := `UPDATE chart_classify SET is_join_permission=?,modify_time=now() WHERE is_join_permission = 1 AND source = ?`
  36. err = to.Exec(sql, 0, chartClassifySource).Error
  37. if err != nil {
  38. return
  39. }
  40. if num > 0 {
  41. sql = `UPDATE chart_classify SET is_join_permission=?,modify_time=now() WHERE source = ? AND chart_classify_id in (` + utils.GetOrmInReplace(num) + `) `
  42. err = to.Exec(sql, 1, chartClassifySource, classifyIdList).Error
  43. if err != nil {
  44. return
  45. }
  46. }
  47. return
  48. }
  49. func SetPermissionByChartIdList(chartIdList []string, userIdList []int, source int) (err error) {
  50. chartNum := len(chartIdList)
  51. if chartNum <= 0 {
  52. return
  53. }
  54. to := global.DmSQL["data"].Begin()
  55. defer func() {
  56. if err != nil {
  57. _ = to.Rollback()
  58. } else {
  59. _ = to.Commit()
  60. }
  61. }()
  62. chartInfoPermissionList := make([]*ChartInfoPermission, 0)
  63. sql := `SELECT * FROM chart_info_permission WHERE source = ? AND chart_info_id in (` + utils.GetOrmInReplace(chartNum) + `) `
  64. err = to.Raw(sql, source, chartIdList).Find(&chartInfoPermissionList).Error
  65. if err != nil {
  66. return
  67. }
  68. chartInfoPermissionMap := make(map[string]*ChartInfoPermission)
  69. for _, v := range chartInfoPermissionList {
  70. chartInfoPermissionMap[fmt.Sprint(v.ChartInfoId, "_", v.SysUserId)] = v
  71. }
  72. {
  73. isJoinPermission := 1
  74. if len(userIdList) <= 0 {
  75. isJoinPermission = 0
  76. }
  77. sql = `UPDATE chart_info SET is_join_permission=?,modify_time=now() WHERE source = ? AND chart_info_id in (` + utils.GetOrmInReplace(chartNum) + `) `
  78. err = to.Exec(sql, isJoinPermission, source, chartIdList).Error
  79. if err != nil {
  80. return
  81. }
  82. }
  83. addList := make([]*ChartInfoPermission, 0)
  84. for _, chartInfoIdStr := range chartIdList {
  85. chartInfoId, tmpErr := strconv.ParseInt(chartInfoIdStr, 10, 64)
  86. if tmpErr != nil {
  87. err = tmpErr
  88. return
  89. }
  90. for _, userId := range userIdList {
  91. key := fmt.Sprint(chartInfoId, "_", userId)
  92. if _, ok := chartInfoPermissionMap[key]; ok {
  93. delete(chartInfoPermissionMap, key)
  94. } else {
  95. addList = append(addList, &ChartInfoPermission{
  96. ChartInfoId: int32(chartInfoId),
  97. SysUserId: int32(userId),
  98. Source: int32(source),
  99. ModifyTime: time.Now(),
  100. CreateTime: time.Now(),
  101. })
  102. }
  103. }
  104. }
  105. if len(addList) > 0 {
  106. err = to.CreateInBatches(addList, utils.MultiAddNum).Error
  107. if err != nil {
  108. return
  109. }
  110. }
  111. {
  112. deletePermissionIdList := make([]int64, 0)
  113. for _, v := range chartInfoPermissionMap {
  114. deletePermissionIdList = append(deletePermissionIdList, v.ChartInfoPermissionId)
  115. }
  116. deletePermissionIdNum := len(deletePermissionIdList)
  117. if deletePermissionIdNum > 0 {
  118. sql = "DELETE FROM chart_info_permission WHERE chart_info_permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
  119. err = to.Exec(sql, deletePermissionIdList).Error
  120. if err != nil {
  121. return
  122. }
  123. }
  124. }
  125. return
  126. }
  127. func SetPermissionByChartClassifyIdList(classifyIdList []int, userIdList []int, classifyType int) (err error) {
  128. userNum := len(userIdList)
  129. if userNum <= 0 {
  130. return
  131. }
  132. to := global.DmSQL["data"].Begin()
  133. defer func() {
  134. if err != nil {
  135. _ = to.Rollback()
  136. } else {
  137. _ = to.Commit()
  138. }
  139. }()
  140. classifyPermissionList := make([]*ChartClassifyPermission, 0)
  141. sql := `SELECT * FROM chart_classify_permission WHERE source = ? AND sys_user_id in (` + utils.GetOrmInReplace(userNum) + `) `
  142. err = to.Raw(sql, classifyType, userIdList).Find(&classifyPermissionList).Error
  143. if err != nil {
  144. return
  145. }
  146. classifyPermissionMap := make(map[string]*ChartClassifyPermission)
  147. for _, v := range classifyPermissionList {
  148. classifyPermissionMap[fmt.Sprint(v.ChartClassifyId, "_", v.SysUserId)] = v
  149. }
  150. addList := make([]*ChartClassifyPermission, 0)
  151. for _, userId := range userIdList {
  152. for _, classifyId := range classifyIdList {
  153. key := fmt.Sprint(classifyId, "_", userId)
  154. if _, ok := classifyPermissionMap[key]; ok {
  155. delete(classifyPermissionMap, key)
  156. } else {
  157. addList = append(addList, &ChartClassifyPermission{
  158. ChartClassifyId: int32(classifyId),
  159. Source: int32(classifyType),
  160. SysUserId: int32(userId),
  161. ModifyTime: time.Now(),
  162. CreateTime: time.Now(),
  163. })
  164. }
  165. }
  166. }
  167. if len(addList) > 0 {
  168. err = to.CreateInBatches(addList, utils.MultiAddNum).Error
  169. if err != nil {
  170. return
  171. }
  172. }
  173. {
  174. deletePermissionIdList := make([]int64, 0)
  175. for _, v := range classifyPermissionMap {
  176. deletePermissionIdList = append(deletePermissionIdList, v.ChartClassifyPermissionId)
  177. }
  178. deletePermissionIdNum := len(deletePermissionIdList)
  179. if deletePermissionIdNum > 0 {
  180. sql = "DELETE FROM chart_classify_permission WHERE chart_classify_permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
  181. err = to.Exec(sql, deletePermissionIdList).Error
  182. if err != nil {
  183. return
  184. }
  185. }
  186. }
  187. return
  188. }
  189. func GetPermissionChartClassifyIdListByUserId(userId int, classifyType int) (chartClassifyIdList []int, err error) {
  190. sql := `SELECT chart_classify_id FROM chart_classify_permission WHERE source = ? AND sys_user_id = ? `
  191. err = global.DmSQL["data"].Raw(sql, classifyType, userId).Find(&chartClassifyIdList).Error
  192. return
  193. }
  194. func GetPermissionUserIdListByChartId(dataId int, source int) (userIdList []int, err error) {
  195. sql := `SELECT sys_user_id FROM chart_info_permission WHERE source = ? AND chart_info_id= ? `
  196. err = global.DmSQL["data"].Raw(sql, source, dataId).Find(&userIdList).Error
  197. return
  198. }
  199. func GetPermissionUserIdListByChartClassifyId(classifyId int, source int) (userIdList []int, err error) {
  200. sql := `SELECT sys_user_id FROM chart_classify_permission WHERE source = ? AND chart_classify_id= ? `
  201. err = global.DmSQL["data"].Raw(sql, source, classifyId).Find(&userIdList).Error
  202. return
  203. }
  204. func GetPermissionChartIdList(userId, chartInfoId int) (idList []int, err error) {
  205. pars := []interface{}{userId}
  206. sql := `SELECT chart_info_id FROM chart_info_permission WHERE sys_user_id = ? `
  207. if chartInfoId > 0 {
  208. sql += ` AND chart_info_id = ? `
  209. pars = append(pars, chartInfoId)
  210. }
  211. err = global.DmSQL["data"].Raw(sql, pars...).Find(&idList).Error
  212. return
  213. }
  214. func GetPermissionChartClassifyIdList(userId, classifyId int) (idList []int, err error) {
  215. pars := []interface{}{userId}
  216. sql := `SELECT chart_classify_id FROM chart_classify_permission WHERE sys_user_id = ? `
  217. if classifyId > 0 {
  218. sql += ` AND chart_classify_id = ? `
  219. pars = append(pars, classifyId)
  220. }
  221. err = global.DmSQL["data"].Raw(sql, pars...).Find(&idList).Error
  222. return
  223. }
  224. func InheritParentClassifyByChartClassifyId(dataSource, chartSource, classifyId, parentClassifyId int, classifyName, uniqueCode string) (err error) {
  225. to := global.DmSQL["data"].Begin()
  226. defer func() {
  227. if err != nil {
  228. _ = to.Rollback()
  229. } else {
  230. _ = to.Commit()
  231. }
  232. }()
  233. sql := `UPDATE chart_classify SET is_join_permission=?,modify_time=now() WHERE source = ? AND chart_classify_id = ? `
  234. err = to.Exec(sql, 1, chartSource, classifyId).Error
  235. if err != nil {
  236. return
  237. }
  238. {
  239. var parentRecordItems []*ChartInfoClassifyPermissionNoAuthRecord
  240. sql = `SELECT * FROM data_permission_classify_no_auth_record WHERE classify_id = ? AND source = ? AND sub_source = ? ORDER BY data_permission_classify_no_auth_record_id desc LIMIT ?,? `
  241. err = to.Raw(sql, parentClassifyId, dataSource, chartSource).Find(&parentRecordItems).Error
  242. addNoAuthRecordItems := make([]*ChartInfoClassifyPermissionNoAuthRecord, 0)
  243. for _, v := range parentRecordItems {
  244. addNoAuthRecordItems = append(addNoAuthRecordItems, &ChartInfoClassifyPermissionNoAuthRecord{
  245. ChartInfoClassifyPermissionNoAuthRecordId: 0,
  246. Source: v.Source,
  247. OpUniqueCode: uniqueCode,
  248. ClassifyId: fmt.Sprint(classifyId),
  249. ClassifyName: classifyName,
  250. SysUserId: v.SysUserId,
  251. CreateTime: time.Now(),
  252. })
  253. }
  254. if len(addNoAuthRecordItems) > 0 {
  255. err = to.CreateInBatches(addNoAuthRecordItems, len(addNoAuthRecordItems)).Error
  256. if err != nil {
  257. return
  258. }
  259. }
  260. }
  261. {
  262. parentClassifyPermissionList := make([]*ChartClassifyPermission, 0)
  263. sql = `SELECT * FROM chart_classify_permission WHERE source = ? AND chart_classify_id = ? `
  264. err = to.Raw(sql, chartSource, parentClassifyId).Find(&parentClassifyPermissionList).Error
  265. if err != nil {
  266. return
  267. }
  268. addList := make([]*ChartClassifyPermission, 0)
  269. for _, v := range parentClassifyPermissionList {
  270. addList = append(addList, &ChartClassifyPermission{
  271. ChartClassifyId: int32(classifyId),
  272. Source: int32(chartSource),
  273. SysUserId: v.SysUserId,
  274. ModifyTime: time.Now(),
  275. CreateTime: time.Now(),
  276. })
  277. }
  278. if len(addList) > 0 {
  279. err = to.CreateInBatches(addList, utils.MultiAddNum).Error
  280. if err != nil {
  281. return
  282. }
  283. }
  284. }
  285. return
  286. }
  287. type ChartInfoPermissionNoAuthRecord struct {
  288. ChartInfoPermissionNoAuthRecordId int64 `json:"chart_info_permission_no_auth_record_id" orm:"column(chart_info_permission_no_auth_record_id);pk" gorm:"primaryKey" ` // 资产数据操作记录id
  289. OpUniqueCode string `json:"op_unique_code"` // 操作的唯一编码,主要是记录统一操作的日志
  290. Source int32 `json:"source"` // 1:ETA图库;2:商品价格曲线;3:相关性图
  291. ChartInfoId int32 `json:"chart_info_id"` // 指标id
  292. ChartName string `json:"chart_name"` // 图表名称
  293. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  294. CreateTime time.Time `json:"create_time"` // 创建时间
  295. }
  296. func AddChartInfoPermissionNoAuthRecordBySourceAndDataIdList(source, chartSource int, dataList []DataItem, noAuthUserIdList, authUserIdList []int, uniqueCode, title, content string, opUserId int) (err error) {
  297. num := len(dataList)
  298. if num <= 0 {
  299. return
  300. }
  301. dataIdList := make([]int, 0)
  302. for _, v := range dataList {
  303. dataIdList = append(dataIdList, v.DataId)
  304. }
  305. userNum := len(noAuthUserIdList)
  306. if userNum <= 0 {
  307. return
  308. }
  309. to := global.DmSQL["data"].Begin()
  310. defer func() {
  311. if err != nil {
  312. _ = to.Rollback()
  313. } else {
  314. _ = to.Commit()
  315. }
  316. }()
  317. var existList []*ChartInfoPermissionNoAuthRecord
  318. sql := `SELECT * FROM chart_info_permission_no_auth_record WHERE source = ? AND chart_info_id in (` + utils.GetOrmInReplace(num) + `)`
  319. err = to.Raw(sql, chartSource, dataIdList).Find(&existList).Error
  320. if err != nil {
  321. return
  322. }
  323. existMap := make(map[int32]map[string]*ChartInfoPermissionNoAuthRecord)
  324. for _, v := range existList {
  325. tmpUserExistMap, ok := existMap[v.SysUserId]
  326. if !ok {
  327. tmpUserExistMap = make(map[string]*ChartInfoPermissionNoAuthRecord)
  328. }
  329. key := fmt.Sprint(v.Source, "_", v.ChartInfoId)
  330. tmpUserExistMap[key] = v
  331. existMap[v.SysUserId] = tmpUserExistMap
  332. }
  333. addMessageList := make([]*DataPermissionMessage, 0)
  334. addRecordList := make([]*ChartInfoPermissionNoAuthRecord, 0)
  335. for _, userId := range noAuthUserIdList {
  336. isAdd := false
  337. tmpUserExistMap, userExistOk := existMap[int32(userId)]
  338. for _, dataItem := range dataList {
  339. if userExistOk {
  340. key := fmt.Sprint(chartSource, "_", dataItem.DataId)
  341. _, ok := tmpUserExistMap[key]
  342. if ok {
  343. continue
  344. }
  345. }
  346. isAdd = true
  347. addRecordList = append(addRecordList, &ChartInfoPermissionNoAuthRecord{
  348. ChartInfoPermissionNoAuthRecordId: 0,
  349. OpUniqueCode: uniqueCode,
  350. Source: int32(chartSource),
  351. ChartInfoId: int32(dataItem.DataId),
  352. ChartName: dataItem.DataName,
  353. SysUserId: int32(userId),
  354. CreateTime: time.Now(),
  355. })
  356. }
  357. if isAdd {
  358. addMessageList = append(addMessageList, &DataPermissionMessage{
  359. DataPermissionMessageId: 0,
  360. SendUserId: int32(opUserId),
  361. ReceiveUserId: int32(userId),
  362. Content: title,
  363. Remark: content,
  364. OpType: 3,
  365. Source: int32(source),
  366. SubSource: int32(chartSource),
  367. OpUniqueCode: uniqueCode,
  368. IsRead: 0,
  369. CreateTime: time.Now(),
  370. ModifyTime: time.Now(),
  371. })
  372. }
  373. }
  374. if len(addMessageList) > 0 {
  375. err = to.CreateInBatches(addMessageList, utils.MultiAddNum).Error
  376. if err != nil {
  377. return
  378. }
  379. }
  380. if len(addRecordList) > 0 {
  381. err = to.CreateInBatches(addRecordList, utils.MultiAddNum).Error
  382. if err != nil {
  383. return
  384. }
  385. }
  386. authUserIdNum := len(authUserIdList)
  387. if authUserIdNum > 0 {
  388. sql = `DELETE FROM chart_info_permission_no_auth_record WHERE source = ? AND sys_user_id in (` + utils.GetOrmInReplace(authUserIdNum) + `) AND chart_info_id in (` + utils.GetOrmInReplace(num) + `)`
  389. err = to.Exec(sql, chartSource, authUserIdList, dataIdList).Error
  390. }
  391. return
  392. }
  393. func DeleteChartInfoPermissionNoAuthRecordBySourceAndDataIdList(chartSource int, dataIdList []string) (err error) {
  394. num := len(dataIdList)
  395. if num <= 0 {
  396. return
  397. }
  398. sql := `DELETE FROM chart_info_permission_no_auth_record WHERE source = ? AND chart_info_id in (` + utils.GetOrmInReplace(num) + `)`
  399. err = global.DmSQL["data"].Exec(sql, chartSource, dataIdList).Error
  400. return
  401. }
  402. func GetChartInfoDataPermissionNoAuthRecordListByUserId(userId int32, chartSource, startSize, pageSize int) (total int, items []*DataPermissionNoAuthRecord, err error) {
  403. sql := `SELECT count(1) AS total FROM chart_info_permission_no_auth_record WHERE sys_user_id = ? AND source = ? `
  404. err = global.DmSQL["data"].Raw(sql, userId, chartSource).Scan(&total).Error
  405. if err != nil {
  406. return
  407. }
  408. sql = `SELECT chart_info_permission_no_auth_record_id as data_permission_no_auth_record_id,op_unique_code,source as sub_source,chart_info_id as data_id,chart_name as data_name,sys_user_id,create_time FROM chart_info_permission_no_auth_record WHERE sys_user_id = ? AND source = ? ORDER BY chart_info_permission_no_auth_record_id desc LIMIT ?,? `
  409. err = global.DmSQL["data"].Raw(sql, userId, chartSource, startSize, pageSize).Find(&items).Error
  410. return
  411. }
  412. type ChartInfoClassifyPermissionNoAuthRecord struct {
  413. ChartInfoClassifyPermissionNoAuthRecordId int64 `json:"chart_info_classify_permission_no_auth_record_id" orm:"column(chart_info_classify_permission_no_auth_record_id);pk" gorm:"primaryKey" ` // 资产分类数据操作记录id
  414. Source int32 `json:"source"` // 子来源 :ETA表格中的各种表格类型,以及图表的来源(这个是后续的扩展方向)
  415. OpUniqueCode string `json:"op_unique_code"` // 操作的唯一编码,主要是记录统一操作的日志
  416. ClassifyId string `json:"classify_id"` // 图表资产分类id
  417. ClassifyName string `json:"classify_name"` // 图表资产分类名称
  418. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  419. CreateTime time.Time `json:"create_time"` // 创建时间
  420. }
  421. func AddChartInfoClassifyNoAuthRecordBySourceAndClassifyIdList(source, chartSource int, classifyInfoList []ClassifyDataItem, noAuthUserIdList []int, uniqueCode, title, content string, opUserId int) (err error) {
  422. num := len(classifyInfoList)
  423. if num <= 0 {
  424. return
  425. }
  426. classifyIdList := make([]int, 0)
  427. for _, v := range classifyInfoList {
  428. classifyIdList = append(classifyIdList, v.ClassifyId)
  429. }
  430. userNum := len(noAuthUserIdList)
  431. if userNum <= 0 {
  432. return
  433. }
  434. to := global.DmSQL["data"].Begin()
  435. defer func() {
  436. if err != nil {
  437. _ = to.Rollback()
  438. } else {
  439. _ = to.Commit()
  440. }
  441. }()
  442. var existList []*ChartInfoClassifyPermissionNoAuthRecord
  443. sql := `SELECT * FROM chart_info_classify_permission_no_auth_record WHERE source = ? AND classify_id in (` + utils.GetOrmInReplace(num) + `)`
  444. err = to.Raw(sql, chartSource, classifyIdList).Find(&existList).Error
  445. if err != nil {
  446. return
  447. }
  448. existMap := make(map[int32]map[string]*ChartInfoClassifyPermissionNoAuthRecord)
  449. for _, v := range existList {
  450. tmpUserExistMap, ok := existMap[v.SysUserId]
  451. if !ok {
  452. tmpUserExistMap = make(map[string]*ChartInfoClassifyPermissionNoAuthRecord)
  453. }
  454. key := fmt.Sprint(v.Source, "_", v.ClassifyId)
  455. tmpUserExistMap[key] = v
  456. existMap[v.SysUserId] = tmpUserExistMap
  457. }
  458. addMessageList := make([]*DataPermissionMessage, 0)
  459. addRecordList := make([]*ChartInfoClassifyPermissionNoAuthRecord, 0)
  460. for _, userId := range noAuthUserIdList {
  461. isAdd := false
  462. tmpUserExistMap, userExistOk := existMap[int32(userId)]
  463. for _, dataItem := range classifyInfoList {
  464. if userExistOk {
  465. key := fmt.Sprint(chartSource, "_", dataItem.ClassifyId)
  466. _, ok := tmpUserExistMap[key]
  467. if ok {
  468. continue
  469. }
  470. }
  471. isAdd = true
  472. addRecordList = append(addRecordList, &ChartInfoClassifyPermissionNoAuthRecord{
  473. ChartInfoClassifyPermissionNoAuthRecordId: 0,
  474. Source: int32(chartSource),
  475. OpUniqueCode: uniqueCode,
  476. ClassifyId: fmt.Sprint(dataItem.ClassifyId),
  477. ClassifyName: dataItem.ClassifyName,
  478. SysUserId: int32(userId),
  479. CreateTime: time.Now(),
  480. })
  481. }
  482. if isAdd {
  483. addMessageList = append(addMessageList, &DataPermissionMessage{
  484. DataPermissionMessageId: 0,
  485. SendUserId: int32(opUserId),
  486. ReceiveUserId: int32(userId),
  487. Content: title,
  488. Remark: content,
  489. OpType: 4,
  490. Source: int32(source),
  491. SubSource: int32(chartSource),
  492. OpUniqueCode: uniqueCode,
  493. IsRead: 0,
  494. CreateTime: time.Now(),
  495. ModifyTime: time.Now(),
  496. })
  497. }
  498. }
  499. if len(addMessageList) > 0 {
  500. err = to.CreateInBatches(addMessageList, utils.MultiAddNum).Error
  501. if err != nil {
  502. return
  503. }
  504. }
  505. if len(addRecordList) > 0 {
  506. err = to.CreateInBatches(addRecordList, utils.MultiAddNum).Error
  507. if err != nil {
  508. return
  509. }
  510. }
  511. authUserIdNum := len(classifyIdList)
  512. if authUserIdNum > 0 {
  513. sql = `DELETE FROM chart_info_classify_permission_no_auth_record WHERE source = ? AND classify_id not in (` + utils.GetOrmInReplace(num) + `)`
  514. err = to.Exec(sql, chartSource, classifyIdList).Error
  515. }
  516. return
  517. }
  518. func AddChartInfoClassifyNoAuthRecordBySourceAndUserIdList(source, chartSource int, noAuthClassifyMap map[int]ClassifyDataItem, configUserIdList []int, uniqueCode, title, content string, opUserId int) (err error) {
  519. configUserNum := len(configUserIdList)
  520. if configUserNum <= 0 {
  521. return
  522. }
  523. to := global.DmSQL["data"].Begin()
  524. defer func() {
  525. if err != nil {
  526. _ = to.Rollback()
  527. } else {
  528. _ = to.Commit()
  529. }
  530. }()
  531. var existList []*ChartInfoClassifyPermissionNoAuthRecord
  532. sql := `SELECT * FROM chart_info_classify_permission_no_auth_record WHERE source = ? AND sys_user_id in (` + utils.GetOrmInReplace(configUserNum) + `)`
  533. err = to.Raw(sql, chartSource, configUserIdList).Find(&existList).Error
  534. if err != nil {
  535. return
  536. }
  537. existMap := make(map[int32]map[string]*ChartInfoClassifyPermissionNoAuthRecord)
  538. delRecordIdMap := make(map[int64]int64)
  539. for _, v := range existList {
  540. tmpUserExistMap, ok := existMap[v.SysUserId]
  541. if !ok {
  542. tmpUserExistMap = make(map[string]*ChartInfoClassifyPermissionNoAuthRecord)
  543. }
  544. tmpUserExistMap[v.ClassifyId] = v
  545. existMap[v.SysUserId] = tmpUserExistMap
  546. delRecordIdMap[v.ChartInfoClassifyPermissionNoAuthRecordId] = v.ChartInfoClassifyPermissionNoAuthRecordId
  547. }
  548. addMessageList := make([]*DataPermissionMessage, 0)
  549. addRecordList := make([]*ChartInfoClassifyPermissionNoAuthRecord, 0)
  550. for _, userId := range configUserIdList {
  551. isAdd := false
  552. tmpUserExistMap, userExistOk := existMap[int32(userId)]
  553. for _, dataItem := range noAuthClassifyMap {
  554. if userExistOk {
  555. key := fmt.Sprint(dataItem.ClassifyId)
  556. tmpUserRecord, ok := tmpUserExistMap[key]
  557. if ok {
  558. delete(delRecordIdMap, tmpUserRecord.ChartInfoClassifyPermissionNoAuthRecordId)
  559. continue
  560. }
  561. }
  562. isAdd = true
  563. addRecordList = append(addRecordList, &ChartInfoClassifyPermissionNoAuthRecord{
  564. ChartInfoClassifyPermissionNoAuthRecordId: 0,
  565. Source: int32(chartSource),
  566. OpUniqueCode: uniqueCode,
  567. ClassifyId: fmt.Sprint(dataItem.ClassifyId),
  568. ClassifyName: dataItem.ClassifyName,
  569. SysUserId: int32(userId),
  570. CreateTime: time.Now(),
  571. })
  572. }
  573. if isAdd {
  574. addMessageList = append(addMessageList, &DataPermissionMessage{
  575. DataPermissionMessageId: 0,
  576. SendUserId: int32(opUserId),
  577. ReceiveUserId: int32(userId),
  578. Content: content,
  579. Remark: content,
  580. OpType: 4,
  581. Source: int32(source),
  582. SubSource: int32(chartSource),
  583. OpUniqueCode: uniqueCode,
  584. IsRead: 0,
  585. CreateTime: time.Now(),
  586. ModifyTime: time.Now(),
  587. })
  588. }
  589. }
  590. if len(addMessageList) > 0 {
  591. err = to.CreateInBatches(addMessageList, utils.MultiAddNum).Error
  592. if err != nil {
  593. return
  594. }
  595. }
  596. if len(addRecordList) > 0 {
  597. err = to.CreateInBatches(addRecordList, utils.MultiAddNum).Error
  598. if err != nil {
  599. return
  600. }
  601. }
  602. delRecordIdNum := len(delRecordIdMap)
  603. if delRecordIdNum > 0 {
  604. delRecordIdList := make([]int64, 0)
  605. for _, v := range delRecordIdMap {
  606. delRecordIdList = append(delRecordIdList, v)
  607. }
  608. sql = `DELETE FROM chart_info_classify_permission_no_auth_record WHERE chart_info_classify_permission_no_auth_record_id in (` + utils.GetOrmInReplace(delRecordIdNum) + `) `
  609. err = to.Exec(sql, delRecordIdList).Error
  610. }
  611. return
  612. }
  613. func DeleteChartInfoClassifyNoAuthRecordBySourceAndClassifyIdList(chartSource int) (err error) {
  614. sql := `DELETE FROM chart_info_classify_permission_no_auth_record WHERE source = ?`
  615. err = global.DmSQL["data"].Exec(sql, chartSource).Error
  616. return
  617. }
  618. func GetChartInfoDataPermissionClassifyNoAuthRecordListByUserId(userId int32, chartSource, startSize, pageSize int) (total int, items []*DataPermissionClassifyNoAuthRecord, err error) {
  619. sql := `SELECT count(1) AS total FROM chart_info_classify_permission_no_auth_record WHERE sys_user_id = ? AND source = ? `
  620. err = global.DmSQL["data"].Raw(sql, userId, chartSource).Scan(&total).Error
  621. if err != nil {
  622. return
  623. }
  624. sql = `SELECT chart_info_classify_permission_no_auth_record_id as data_permission_classify_no_auth_record_id,source as sub_source,op_unique_code,classify_id,classify_name,sys_user_id,create_time FROM chart_info_classify_permission_no_auth_record WHERE sys_user_id = ? AND source = ? ORDER BY chart_info_classify_permission_no_auth_record_id desc LIMIT ?,? `
  625. err = global.DmSQL["data"].Raw(sql, userId, chartSource, startSize, pageSize).Find(&items).Error
  626. return
  627. }