excel.go 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976
  1. package data_manage_permission
  2. import (
  3. "eta/eta_api/utils"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "strconv"
  7. "time"
  8. )
  9. type ExcelInfoPermission struct {
  10. ExcelInfoPermissionId int64 `json:"excel_info_permission_id" orm:"column(excel_info_permission_id);pk"`
  11. ExcelInfoId int32 `json:"excel_info_id"` // ETA表格id
  12. Source int32 `json:"source"` // 表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1
  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 ExcelClassifyPermission struct {
  18. ExcelClassifyPermissionId int64 `json:"excel_classify_permission_id" orm:"column(excel_classify_permission_id);pk"`
  19. ExcelClassifyId int32 `json:"excel_classify_id"` // 分类id
  20. Source int32 `json:"source"` // 表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1
  21. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  22. ModifyTime time.Time `json:"modify_time"` // 变更时间
  23. CreateTime time.Time `json:"create_time"` // 关系建立时间
  24. }
  25. // SetIsPermissionByExcelClassifyIdList
  26. // @Description: 设置表格分类是否涉密
  27. // @author: Roc
  28. // @datetime 2024-04-01 10:53:23
  29. // @param classifyIdList []int
  30. // @param excelClassifySource int
  31. // @return err error
  32. func SetIsPermissionByExcelClassifyIdList(classifyIdList []int, excelClassifySource int) (err error) {
  33. num := len(classifyIdList)
  34. if num <= 0 {
  35. return
  36. }
  37. o, err := orm.NewOrmUsingDB("data").Begin()
  38. if err != nil {
  39. return
  40. }
  41. defer func() {
  42. if err != nil {
  43. _ = o.Rollback()
  44. } else {
  45. _ = o.Commit()
  46. }
  47. }()
  48. //// 获取已经配置涉密的分类权限
  49. //excelClassifyList := make([]*ExcelClassify, 0)
  50. //sql := `SELECT * FROM excel_classify WHERE is_join_permission = ? `
  51. //_, err = o.Raw(sql, 1).QueryRows(&excelClassifyList)
  52. //if err != nil {
  53. // return
  54. //}
  55. //excelClassifyMap := make(map[int]*ExcelClassify)
  56. //for _, v := range excelClassifyList {
  57. // excelClassifyMap[v.ClassifyId] = v
  58. //}
  59. // 先将所有已经设置了涉密的分类设置为不涉密
  60. sql := `UPDATE excel_classify SET is_join_permission=?,modify_time=now() WHERE is_join_permission = 1 AND source = ?`
  61. _, err = o.Raw(sql, 0, excelClassifySource).Exec()
  62. if err != nil {
  63. return
  64. }
  65. if len(classifyIdList) > 0 {
  66. // 将对应的分类设置为涉密
  67. sql = `UPDATE excel_classify SET is_join_permission=?,modify_time=now() WHERE source = ? AND excel_classify_id in (` + utils.GetOrmInReplace(num) + `) `
  68. _, err = o.Raw(sql, 1, excelClassifySource, classifyIdList).Exec()
  69. if err != nil {
  70. return
  71. }
  72. }
  73. return
  74. }
  75. // SetPermissionByExcelIdList
  76. // @Description: 根据表格ID列表设置表格的用户权限
  77. // @author: Roc
  78. // @datetime 2024-04-01 10:26:17
  79. // @param excelIdList []string
  80. // @param userIdList []int
  81. // @param source int
  82. // @return err error
  83. func SetPermissionByExcelIdList(excelIdList []string, userIdList []int, source int) (err error) {
  84. excelNum := len(excelIdList)
  85. if excelNum <= 0 {
  86. return
  87. }
  88. o, err := orm.NewOrmUsingDB("data").Begin()
  89. if err != nil {
  90. return
  91. }
  92. defer func() {
  93. if err != nil {
  94. _ = o.Rollback()
  95. } else {
  96. _ = o.Commit()
  97. }
  98. }()
  99. // 获取已经配置的表格权限用户
  100. excelInfoPermissionList := make([]*ExcelInfoPermission, 0)
  101. sql := `SELECT * FROM excel_info_permission WHERE source = ? AND excel_info_id in (` + utils.GetOrmInReplace(excelNum) + `) `
  102. _, err = o.Raw(sql, source, excelIdList).QueryRows(&excelInfoPermissionList)
  103. if err != nil {
  104. return
  105. }
  106. excelInfoPermissionMap := make(map[string]*ExcelInfoPermission)
  107. for _, v := range excelInfoPermissionList {
  108. excelInfoPermissionMap[fmt.Sprint(v.ExcelInfoId, "_", v.SysUserId)] = v
  109. }
  110. // 标记表格是否纳入权限管控
  111. {
  112. // 默认 标记表格为纳入权限管控
  113. isJoinPermission := 1
  114. // 用户不选的情况下,说明是要给这些表格移除权限管控
  115. if len(userIdList) <= 0 {
  116. // 标记表格为不纳入权限管控
  117. isJoinPermission = 0
  118. }
  119. sql = `UPDATE excel_info SET is_join_permission=?,modify_time=now() WHERE source = ? AND excel_info_id in (` + utils.GetOrmInReplace(excelNum) + `) `
  120. _, err = o.Raw(sql, isJoinPermission, source, excelIdList).Exec()
  121. if err != nil {
  122. return
  123. }
  124. }
  125. // 待添加的配置项
  126. addList := make([]*ExcelInfoPermission, 0)
  127. // 遍历待配置的表格和用户,筛选出需要添加的配置项
  128. for _, excelInfoIdStr := range excelIdList {
  129. excelInfoId, tmpErr := strconv.ParseInt(excelInfoIdStr, 10, 64)
  130. if tmpErr != nil {
  131. err = tmpErr
  132. return
  133. }
  134. for _, userId := range userIdList {
  135. key := fmt.Sprint(excelInfoId, "_", userId)
  136. if _, ok := excelInfoPermissionMap[key]; ok {
  137. // 如果存在那么就移除,说明不需要处理了
  138. delete(excelInfoPermissionMap, key)
  139. } else {
  140. // 如果不存在,那么就添加
  141. addList = append(addList, &ExcelInfoPermission{
  142. //PermissionId: 0,
  143. ExcelInfoId: int32(excelInfoId),
  144. SysUserId: int32(userId),
  145. Source: int32(source),
  146. ModifyTime: time.Now(),
  147. CreateTime: time.Now(),
  148. })
  149. }
  150. }
  151. }
  152. // 添加待配置项
  153. if len(addList) > 0 {
  154. _, err = o.InsertMulti(500, addList)
  155. if err != nil {
  156. return
  157. }
  158. }
  159. // 移除废弃的配置项
  160. {
  161. // 待移除的配置项
  162. deletePermissionIdList := make([]int64, 0)
  163. for _, v := range excelInfoPermissionMap {
  164. deletePermissionIdList = append(deletePermissionIdList, v.ExcelInfoPermissionId)
  165. }
  166. deletePermissionIdNum := len(deletePermissionIdList)
  167. if deletePermissionIdNum > 0 {
  168. sql = "DELETE FROM excel_info_permission WHERE excel_info_permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
  169. _, err = o.Raw(sql, deletePermissionIdList).Exec()
  170. if err != nil {
  171. return
  172. }
  173. }
  174. }
  175. return
  176. }
  177. // SetPermissionByExcelClassifyIdList
  178. // @Description: 根据表格分类ID列表设置分类的用户权限
  179. // @author: Roc
  180. // @datetime 2024-03-28 14:53:04
  181. // @param classifyIdList []int
  182. // @param userIdList []int
  183. // @return err error
  184. func SetPermissionByExcelClassifyIdList(classifyIdList []int, userIdList []int, classifyType int) (err error) {
  185. userNum := len(userIdList)
  186. if userNum <= 0 {
  187. return
  188. }
  189. o, err := orm.NewOrmUsingDB("data").Begin()
  190. if err != nil {
  191. return
  192. }
  193. defer func() {
  194. if err != nil {
  195. _ = o.Rollback()
  196. } else {
  197. _ = o.Commit()
  198. }
  199. }()
  200. // 获取当前选择用户已经配置的表格分类权限
  201. classifyPermissionList := make([]*ExcelClassifyPermission, 0)
  202. sql := `SELECT * FROM excel_classify_permission WHERE source = ? AND sys_user_id in (` + utils.GetOrmInReplace(userNum) + `) `
  203. _, err = o.Raw(sql, classifyType, userIdList).QueryRows(&classifyPermissionList)
  204. if err != nil {
  205. return
  206. }
  207. classifyPermissionMap := make(map[string]*ExcelClassifyPermission)
  208. for _, v := range classifyPermissionList {
  209. classifyPermissionMap[fmt.Sprint(v.ExcelClassifyId, "_", v.SysUserId)] = v
  210. }
  211. // 待添加的配置项
  212. addList := make([]*ExcelClassifyPermission, 0)
  213. // 遍历待配置的表格和用户,筛选出需要添加的配置项
  214. for _, userId := range userIdList {
  215. for _, classifyId := range classifyIdList {
  216. key := fmt.Sprint(classifyId, "_", userId)
  217. if _, ok := classifyPermissionMap[key]; ok {
  218. // 如果存在那么就移除,说明不需要处理了
  219. delete(classifyPermissionMap, key)
  220. } else {
  221. // 如果不存在,那么就提那家
  222. addList = append(addList, &ExcelClassifyPermission{
  223. //PermissionId: 0,
  224. ExcelClassifyId: int32(classifyId),
  225. Source: int32(classifyType),
  226. SysUserId: int32(userId),
  227. ModifyTime: time.Now(),
  228. CreateTime: time.Now(),
  229. })
  230. }
  231. }
  232. }
  233. // 添加待配置项
  234. if len(addList) > 0 {
  235. _, err = o.InsertMulti(500, addList)
  236. if err != nil {
  237. return
  238. }
  239. }
  240. // 移除废弃的配置项
  241. {
  242. // 获取移除的配置项
  243. deletePermissionIdList := make([]int64, 0)
  244. for _, v := range classifyPermissionMap {
  245. deletePermissionIdList = append(deletePermissionIdList, v.ExcelClassifyPermissionId)
  246. }
  247. deletePermissionIdNum := len(deletePermissionIdList)
  248. if deletePermissionIdNum > 0 {
  249. sql = "DELETE FROM excel_classify_permission WHERE excel_classify_permission_id in (" + utils.GetOrmInReplace(deletePermissionIdNum) + ")"
  250. _, err = o.Raw(sql, deletePermissionIdList).Exec()
  251. if err != nil {
  252. return
  253. }
  254. }
  255. }
  256. return
  257. }
  258. // GetPermissionExcelClassifyIdListByUserId
  259. // @Description: 根据用户ID获取已经配置的分类id列表
  260. // @author: Roc
  261. // @datetime 2024-03-29 16:24:46
  262. // @param userId int
  263. // @param classifyType int
  264. // @return excelClassifyIdList []int
  265. // @return err error
  266. func GetPermissionExcelClassifyIdListByUserId(userId int, classifyType int) (excelClassifyIdList []int, err error) {
  267. o := orm.NewOrmUsingDB("data")
  268. sql := `SELECT excel_classify_id FROM excel_classify_permission WHERE source = ? AND sys_user_id = ? `
  269. _, err = o.Raw(sql, classifyType, userId).QueryRows(&excelClassifyIdList)
  270. return
  271. }
  272. // GetPermissionUserIdListByExcelId
  273. // @Description: 根据表格ID获取已经配置的用户id列表
  274. // @author: Roc
  275. // @datetime 2024-03-29 16:24:46
  276. // @param dataId int
  277. // @param source int
  278. // @return userIdList []int
  279. // @return err error
  280. func GetPermissionUserIdListByExcelId(dataId int, source int) (userIdList []int, err error) {
  281. o := orm.NewOrmUsingDB("data")
  282. sql := `SELECT sys_user_id FROM excel_info_permission WHERE source = ? AND excel_info_id= ? `
  283. _, err = o.Raw(sql, source, dataId).QueryRows(&userIdList)
  284. return
  285. }
  286. // GetPermissionUserIdListByExcelClassifyId
  287. // @Description: 根据表格分类ID获取已经配置的用户id列表
  288. // @author: Roc
  289. // @datetime 2024-03-29 16:24:46
  290. // @param classifyId int
  291. // @param source int
  292. // @return userIdList []int
  293. // @return err error
  294. func GetPermissionUserIdListByExcelClassifyId(classifyId int, source int) (userIdList []int, err error) {
  295. o := orm.NewOrmUsingDB("data")
  296. sql := `SELECT sys_user_id FROM excel_classify_permission WHERE source = ? AND excel_classify_id= ? `
  297. _, err = o.Raw(sql, source, classifyId).QueryRows(&userIdList)
  298. return
  299. }
  300. // GetPermissionExcelIdList
  301. // @Description: 获取用户权限的表格列表
  302. // @author: Roc
  303. // @datetime 2024-03-28 16:50:47
  304. // @param userId int
  305. // @param excelInfoId int
  306. // @return idList []int
  307. // @return err error
  308. func GetPermissionExcelIdList(userId, excelInfoId int) (idList []int, err error) {
  309. pars := []interface{}{userId}
  310. o := orm.NewOrmUsingDB("data")
  311. sql := `SELECT excel_info_id FROM excel_info_permission WHERE sys_user_id = ? `
  312. if excelInfoId > 0 {
  313. sql += ` AND excel_info_id = ? `
  314. pars = append(pars, excelInfoId)
  315. }
  316. _, err = o.Raw(sql, pars).QueryRows(&idList)
  317. return
  318. }
  319. // GetPermissionExcelClassifyIdList
  320. // @Description: 获取用户权限的表格分类列表
  321. // @author: Roc
  322. // @datetime 2024-03-28 16:50:47
  323. // @param userId int
  324. // @param classifyId int
  325. // @return idList []int
  326. // @return err error
  327. func GetPermissionExcelClassifyIdList(userId, classifyId int) (idList []int, err error) {
  328. pars := []interface{}{userId}
  329. o := orm.NewOrmUsingDB("data")
  330. sql := `SELECT excel_classify_id FROM excel_classify_permission WHERE sys_user_id = ? `
  331. if classifyId > 0 {
  332. sql += ` AND excel_classify_id = ? `
  333. pars = append(pars, classifyId)
  334. }
  335. _, err = o.Raw(sql, pars).QueryRows(&idList)
  336. return
  337. }
  338. // InheritParentClassifyByExcelClassifyId
  339. // @Description: 继承父级分类的ETA表格权限信息
  340. // @author: Roc
  341. // @datetime 2024-04-07 21:02:51
  342. // @param dataSource int
  343. // @param excelSource int
  344. // @param classifyId int
  345. // @param parentClassifyId int
  346. // @param classifyName string
  347. // @param uniqueCode string
  348. // @return err error
  349. func InheritParentClassifyByExcelClassifyId(dataSource, excelSource, classifyId, parentClassifyId int, classifyName, uniqueCode string) (err error) {
  350. o, err := orm.NewOrmUsingDB("data").Begin()
  351. if err != nil {
  352. return
  353. }
  354. defer func() {
  355. if err != nil {
  356. _ = o.Rollback()
  357. } else {
  358. _ = o.Commit()
  359. }
  360. }()
  361. // 将对应的分类设置为涉密
  362. sql := `UPDATE excel_classify SET is_join_permission=?,modify_time=now() WHERE source = ? AND excel_classify_id = ? `
  363. _, err = o.Raw(sql, 1, excelSource, classifyId).Exec()
  364. if err != nil {
  365. return
  366. }
  367. // 添加未授权记录
  368. {
  369. // 获取父级未授权的用户记录
  370. var parentRecordItems []*ExcelInfoClassifyPermissionNoAuthRecord
  371. 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 ?,? `
  372. _, err = o.Raw(sql, parentClassifyId, dataSource, excelSource).QueryRows(&parentRecordItems)
  373. addNoAuthRecordItems := make([]*ExcelInfoClassifyPermissionNoAuthRecord, 0)
  374. for _, v := range parentRecordItems {
  375. addNoAuthRecordItems = append(addNoAuthRecordItems, &ExcelInfoClassifyPermissionNoAuthRecord{
  376. ExcelInfoClassifyPermissionNoAuthRecordId: 0,
  377. Source: v.Source,
  378. OpUniqueCode: uniqueCode,
  379. ClassifyId: fmt.Sprint(classifyId),
  380. ClassifyName: classifyName,
  381. SysUserId: v.SysUserId,
  382. CreateTime: time.Now(),
  383. })
  384. }
  385. // 添加待配置项
  386. if len(addNoAuthRecordItems) > 0 {
  387. _, err = o.InsertMulti(500, addNoAuthRecordItems)
  388. if err != nil {
  389. return
  390. }
  391. }
  392. }
  393. // 添加授权记录
  394. {
  395. // 获取父级分类已经授权的用户
  396. parentClassifyPermissionList := make([]*ExcelClassifyPermission, 0)
  397. sql = `SELECT * FROM excel_classify_permission WHERE source = ? AND excel_classify_id = ? `
  398. _, err = o.Raw(sql, excelSource, parentClassifyId).QueryRows(&parentClassifyPermissionList)
  399. if err != nil {
  400. return
  401. }
  402. addList := make([]*ExcelClassifyPermission, 0)
  403. for _, v := range parentClassifyPermissionList {
  404. // 如果不存在,那么就提那家
  405. addList = append(addList, &ExcelClassifyPermission{
  406. //PermissionId: 0,
  407. ExcelClassifyId: int32(classifyId),
  408. Source: int32(excelSource),
  409. SysUserId: v.SysUserId,
  410. ModifyTime: time.Now(),
  411. CreateTime: time.Now(),
  412. })
  413. }
  414. // 添加待配置项
  415. if len(addList) > 0 {
  416. _, err = o.InsertMulti(500, addList)
  417. if err != nil {
  418. return
  419. }
  420. }
  421. }
  422. return
  423. }
  424. // ExcelInfoPermissionNoAuthRecord
  425. // @Description: ETA表格数据权限未授权记录表
  426. type ExcelInfoPermissionNoAuthRecord struct {
  427. ExcelInfoPermissionNoAuthRecordId int64 `json:"excel_info_permission_no_auth_record_id" orm:"column(excel_info_permission_no_auth_record_id);pk"` // 资产数据操作记录id
  428. OpUniqueCode string `json:"op_unique_code"` // 操作的唯一编码,主要是记录统一操作的日志
  429. Source int32 `json:"source"` // 表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1
  430. ExcelInfoId int32 `json:"excel_info_id"` // 指标id
  431. ExcelName string `json:"excel_name"` // 图表名称
  432. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  433. CreateTime time.Time `json:"create_time"` // 创建时间
  434. }
  435. // AddExcelInfoPermissionNoAuthRecordBySourceAndDataIdList
  436. // @Description: 添加未授权用户记录
  437. // @author: Roc
  438. // @datetime 2024-04-07 15:25:49
  439. // @param source int
  440. // @param excelSource int
  441. // @param dataList []DataItem
  442. // @param noAuthUserIdList []int 未授权用户
  443. // @param authUserIdList []int 已授权用户
  444. // @param uniqueCode
  445. // @param content string
  446. // @param opUserId int
  447. // @return err error
  448. func AddExcelInfoPermissionNoAuthRecordBySourceAndDataIdList(source, excelSource int, dataList []DataItem, noAuthUserIdList, authUserIdList []int, title, uniqueCode, content string, opUserId int) (err error) {
  449. num := len(dataList)
  450. if num <= 0 {
  451. return
  452. }
  453. dataIdList := make([]int, 0)
  454. for _, v := range dataList {
  455. dataIdList = append(dataIdList, v.DataId)
  456. }
  457. userNum := len(noAuthUserIdList)
  458. if userNum <= 0 {
  459. return
  460. }
  461. o, err := orm.NewOrmUsingDB("data").Begin()
  462. if err != nil {
  463. return
  464. }
  465. defer func() {
  466. if err != nil {
  467. _ = o.Rollback()
  468. } else {
  469. _ = o.Commit()
  470. }
  471. }()
  472. // 根据指标获取已经存在的未授权记录
  473. var existList []*ExcelInfoPermissionNoAuthRecord
  474. sql := `SELECT * FROM excel_info_permission_no_auth_record WHERE source = ? AND excel_info_id in (` + utils.GetOrmInReplace(num) + `)`
  475. _, err = o.Raw(sql, excelSource, dataIdList).QueryRows(&existList)
  476. if err != nil {
  477. return
  478. }
  479. // 已经标记了的数据
  480. existMap := make(map[int32]map[string]*ExcelInfoPermissionNoAuthRecord)
  481. for _, v := range existList {
  482. tmpUserExistMap, ok := existMap[v.SysUserId]
  483. if !ok {
  484. tmpUserExistMap = make(map[string]*ExcelInfoPermissionNoAuthRecord)
  485. }
  486. key := fmt.Sprint(v.Source, "_", v.ExcelInfoId)
  487. tmpUserExistMap[key] = v
  488. existMap[v.SysUserId] = tmpUserExistMap
  489. }
  490. addMessageList := make([]*DataPermissionMessage, 0)
  491. addRecordList := make([]*ExcelInfoPermissionNoAuthRecord, 0)
  492. for _, userId := range noAuthUserIdList {
  493. isAdd := false
  494. tmpUserExistMap, userExistOk := existMap[int32(userId)]
  495. for _, dataItem := range dataList {
  496. // 判断是否已经存在,已经存在就过滤
  497. if userExistOk {
  498. key := fmt.Sprint(excelSource, "_", dataItem.DataId)
  499. _, ok := tmpUserExistMap[key]
  500. if ok {
  501. continue
  502. }
  503. }
  504. isAdd = true
  505. addRecordList = append(addRecordList, &ExcelInfoPermissionNoAuthRecord{
  506. ExcelInfoPermissionNoAuthRecordId: 0,
  507. OpUniqueCode: uniqueCode,
  508. Source: int32(excelSource),
  509. ExcelInfoId: int32(dataItem.DataId),
  510. ExcelName: dataItem.DataName,
  511. SysUserId: int32(userId),
  512. CreateTime: time.Now(),
  513. })
  514. }
  515. // 有记录的话,需要添加消息
  516. if isAdd {
  517. addMessageList = append(addMessageList, &DataPermissionMessage{
  518. DataPermissionMessageId: 0,
  519. SendUserId: int32(opUserId),
  520. ReceiveUserId: int32(userId),
  521. Content: title,
  522. Remark: content,
  523. OpType: 3,
  524. Source: int32(source),
  525. SubSource: int32(excelSource),
  526. OpUniqueCode: uniqueCode,
  527. IsRead: 0,
  528. CreateTime: time.Now(),
  529. ModifyTime: time.Now(),
  530. })
  531. }
  532. }
  533. // 添加消息
  534. if len(addMessageList) > 0 {
  535. _, err = o.InsertMulti(500, addMessageList)
  536. if err != nil {
  537. return
  538. }
  539. }
  540. // 添加记录
  541. if len(addRecordList) > 0 {
  542. _, err = o.InsertMulti(500, addRecordList)
  543. if err != nil {
  544. return
  545. }
  546. }
  547. // 已经授权了的用户,需要删除未授权记录
  548. authUserIdNum := len(authUserIdList)
  549. if authUserIdNum > 0 {
  550. sql = `DELETE FROM excel_info_permission_no_auth_record WHERE source = ? AND sys_user_id in (` + utils.GetOrmInReplace(authUserIdNum) + `) AND excel_info_id in (` + utils.GetOrmInReplace(num) + `)`
  551. _, err = o.Raw(sql, excelSource, authUserIdList, dataIdList).Exec()
  552. }
  553. return
  554. }
  555. // DeleteExcelInfoPermissionNoAuthRecordBySourceAndDataIdList
  556. // @Description: 根据来源和数据id列表删除记录
  557. // @author: Roc
  558. // @datetime 2024-04-07 14:47:37
  559. // @param excelSource int
  560. // @param dataIdList []string
  561. // @return err error
  562. func DeleteExcelInfoPermissionNoAuthRecordBySourceAndDataIdList(excelSource int, dataIdList []string) (err error) {
  563. num := len(dataIdList)
  564. if num <= 0 {
  565. return
  566. }
  567. o := orm.NewOrmUsingDB("data")
  568. sql := `DELETE FROM excel_info_permission_no_auth_record WHERE source = ? AND excel_info_id in (` + utils.GetOrmInReplace(num) + `)`
  569. _, err = o.Raw(sql, excelSource, dataIdList).Exec()
  570. return
  571. }
  572. func GetExcelInfoDataPermissionNoAuthRecordListByUserId(userId, excelSource int32, startSize, pageSize int) (total int, items []*DataPermissionNoAuthRecord, err error) {
  573. o := orm.NewOrmUsingDB("data")
  574. // 获取总数
  575. sql := `SELECT count(1) AS total FROM excel_info_permission_no_auth_record WHERE sys_user_id = ? AND source = ? `
  576. err = o.Raw(sql, userId, excelSource).QueryRow(&total)
  577. if err != nil {
  578. return
  579. }
  580. sql = `SELECT excel_info_permission_no_auth_record_id as data_permission_no_auth_record_id,op_unique_code,source as sub_source,excel_info_id as data_id,excel_name as data_name,sys_user_id,create_time FROM excel_info_permission_no_auth_record WHERE sys_user_id = ? AND source = ? ORDER BY excel_info_permission_no_auth_record_id desc LIMIT ?,? `
  581. _, err = o.Raw(sql, userId, excelSource, startSize, pageSize).QueryRows(&items)
  582. return
  583. }
  584. type ExcelInfoClassifyPermissionNoAuthRecord struct {
  585. ExcelInfoClassifyPermissionNoAuthRecordId int64 `json:"excel_info_classify_permission_no_auth_record_id" orm:"column(excel_info_classify_permission_no_auth_record_id);pk"` // 资产分类数据操作记录id
  586. Source int32 `json:"source"` // 子来源 :ETA表格中的各种表格类型,以及图表的来源(这个是后续的扩展方向)
  587. OpUniqueCode string `json:"op_unique_code"` // 操作的唯一编码,主要是记录统一操作的日志
  588. ClassifyId string `json:"classify_id"` // ETA表格资产分类id
  589. ClassifyName string `json:"classify_name"` // ETA表格资产分类名称
  590. SysUserId int32 `json:"sys_user_id"` // 系统用户id
  591. CreateTime time.Time `json:"create_time"` // 创建时间
  592. }
  593. // AddExcelInfoClassifyNoAuthRecordBySourceAndClassifyIdList
  594. // @Description: 根据分类添加用户分类未授权记录
  595. // @author: Roc
  596. // @datetime 2024-04-07 16:44:21
  597. // @param source int
  598. // @param excelSource int
  599. // @param classifyInfoList []ClassifyDataItem
  600. // @param noAuthUserIdList []int
  601. // @param uniqueCode string
  602. // @param content string
  603. // @param opUserId int
  604. // @return err error
  605. func AddExcelInfoClassifyNoAuthRecordBySourceAndClassifyIdList(source, excelSource int, classifyInfoList []ClassifyDataItem, noAuthUserIdList []int, uniqueCode, title, content string, opUserId int) (err error) {
  606. num := len(classifyInfoList)
  607. if num <= 0 {
  608. return
  609. }
  610. // 分类id
  611. classifyIdList := make([]int, 0)
  612. for _, v := range classifyInfoList {
  613. classifyIdList = append(classifyIdList, v.ClassifyId)
  614. }
  615. userNum := len(noAuthUserIdList)
  616. if userNum <= 0 {
  617. return
  618. }
  619. o, err := orm.NewOrmUsingDB("data").Begin()
  620. if err != nil {
  621. return
  622. }
  623. defer func() {
  624. if err != nil {
  625. _ = o.Rollback()
  626. } else {
  627. _ = o.Commit()
  628. }
  629. }()
  630. // 根据分类获取已经存在的未授权记录
  631. var existList []*ExcelInfoClassifyPermissionNoAuthRecord
  632. sql := `SELECT * FROM excel_info_classify_permission_no_auth_record WHERE source = ? AND classify_id in (` + utils.GetOrmInReplace(num) + `)`
  633. _, err = o.Raw(sql, excelSource, classifyIdList).QueryRows(&existList)
  634. if err != nil {
  635. return
  636. }
  637. // 已经标记了的数据
  638. existMap := make(map[int32]map[string]*ExcelInfoClassifyPermissionNoAuthRecord)
  639. for _, v := range existList {
  640. tmpUserExistMap, ok := existMap[v.SysUserId]
  641. if !ok {
  642. tmpUserExistMap = make(map[string]*ExcelInfoClassifyPermissionNoAuthRecord)
  643. }
  644. key := fmt.Sprint(v.Source, "_", v.ClassifyId)
  645. tmpUserExistMap[key] = v
  646. existMap[v.SysUserId] = tmpUserExistMap
  647. }
  648. addMessageList := make([]*DataPermissionMessage, 0)
  649. addRecordList := make([]*ExcelInfoClassifyPermissionNoAuthRecord, 0)
  650. for _, userId := range noAuthUserIdList {
  651. isAdd := false
  652. tmpUserExistMap, userExistOk := existMap[int32(userId)]
  653. for _, dataItem := range classifyInfoList {
  654. // 判断是否已经存在,已经存在就过滤
  655. if userExistOk {
  656. key := fmt.Sprint(excelSource, "_", dataItem.ClassifyId)
  657. _, ok := tmpUserExistMap[key]
  658. if ok {
  659. continue
  660. }
  661. }
  662. isAdd = true
  663. addRecordList = append(addRecordList, &ExcelInfoClassifyPermissionNoAuthRecord{
  664. ExcelInfoClassifyPermissionNoAuthRecordId: 0,
  665. Source: int32(excelSource),
  666. OpUniqueCode: uniqueCode,
  667. ClassifyId: fmt.Sprint(dataItem.ClassifyId),
  668. ClassifyName: dataItem.ClassifyName,
  669. SysUserId: int32(userId),
  670. CreateTime: time.Now(),
  671. })
  672. }
  673. // 有记录的话,需要添加消息
  674. if isAdd {
  675. addMessageList = append(addMessageList, &DataPermissionMessage{
  676. DataPermissionMessageId: 0,
  677. SendUserId: int32(opUserId),
  678. ReceiveUserId: int32(userId),
  679. Content: title,
  680. Remark: content,
  681. OpType: 4,
  682. Source: int32(source),
  683. SubSource: int32(excelSource),
  684. OpUniqueCode: uniqueCode,
  685. IsRead: 0,
  686. CreateTime: time.Now(),
  687. ModifyTime: time.Now(),
  688. })
  689. }
  690. }
  691. // 添加消息
  692. if len(addMessageList) > 0 {
  693. _, err = o.InsertMulti(500, addMessageList)
  694. if err != nil {
  695. return
  696. }
  697. }
  698. // 添加记录
  699. if len(addRecordList) > 0 {
  700. _, err = o.InsertMulti(500, addRecordList)
  701. if err != nil {
  702. return
  703. }
  704. }
  705. // 移除已经公开了的分类权限,需要删除未授权记录
  706. authUserIdNum := len(classifyIdList)
  707. if authUserIdNum > 0 {
  708. sql = `DELETE FROM excel_info_classify_permission_no_auth_record WHERE source = ? AND classify_id not in (` + utils.GetOrmInReplace(num) + `)`
  709. _, err = o.Raw(sql, excelSource, classifyIdList).Exec()
  710. }
  711. return
  712. }
  713. // AddExcelInfoClassifyNoAuthRecordBySourceAndUserIdList
  714. // @Description: 根据用户添加用户分类未授权记录
  715. // @author: Roc
  716. // @datetime 2024-04-07 20:12:44
  717. // @param source int
  718. // @param excelSource int
  719. // @param noAuthClassifyMap map[int]ClassifyDataItem
  720. // @param configUserIdList []int
  721. // @param uniqueCode string
  722. // @param content string
  723. // @param opUserId int
  724. // @return err error
  725. func AddExcelInfoClassifyNoAuthRecordBySourceAndUserIdList(source, excelSource int, noAuthClassifyMap map[int]ClassifyDataItem, configUserIdList []int, uniqueCode, title, content string, opUserId int) (err error) {
  726. // 当前配置用户
  727. configUserNum := len(configUserIdList)
  728. if configUserNum <= 0 {
  729. return
  730. }
  731. //// 总共的涉密分类
  732. //noAuthClassifyInfoNum := len(noAuthClassifyMap)
  733. //if noAuthClassifyInfoNum <= 0 {
  734. // return
  735. //}
  736. o, err := orm.NewOrmUsingDB("data").Begin()
  737. if err != nil {
  738. return
  739. }
  740. defer func() {
  741. if err != nil {
  742. _ = o.Rollback()
  743. } else {
  744. _ = o.Commit()
  745. }
  746. }()
  747. // 根据当前配置用户获取已经存在的未授权记录
  748. var existList []*ExcelInfoClassifyPermissionNoAuthRecord
  749. sql := `SELECT * FROM excel_info_classify_permission_no_auth_record WHERE source = ? AND sys_user_id in (` + utils.GetOrmInReplace(configUserNum) + `)`
  750. _, err = o.Raw(sql, excelSource, configUserIdList).QueryRows(&existList)
  751. if err != nil {
  752. return
  753. }
  754. // 已经标记了的数据
  755. existMap := make(map[int32]map[string]*ExcelInfoClassifyPermissionNoAuthRecord)
  756. delRecordIdMap := make(map[int64]int64)
  757. for _, v := range existList {
  758. tmpUserExistMap, ok := existMap[v.SysUserId]
  759. if !ok {
  760. tmpUserExistMap = make(map[string]*ExcelInfoClassifyPermissionNoAuthRecord)
  761. }
  762. tmpUserExistMap[v.ClassifyId] = v
  763. existMap[v.SysUserId] = tmpUserExistMap
  764. // 已经配置了的记录id
  765. delRecordIdMap[v.ExcelInfoClassifyPermissionNoAuthRecordId] = v.ExcelInfoClassifyPermissionNoAuthRecordId
  766. }
  767. addMessageList := make([]*DataPermissionMessage, 0)
  768. addRecordList := make([]*ExcelInfoClassifyPermissionNoAuthRecord, 0)
  769. for _, userId := range configUserIdList {
  770. isAdd := false
  771. tmpUserExistMap, userExistOk := existMap[int32(userId)]
  772. for _, dataItem := range noAuthClassifyMap {
  773. // 判断是否已经存在,已经存在就过滤
  774. if userExistOk {
  775. key := fmt.Sprint(dataItem.ClassifyId)
  776. tmpUserRecord, ok := tmpUserExistMap[key]
  777. if ok {
  778. delete(delRecordIdMap, tmpUserRecord.ExcelInfoClassifyPermissionNoAuthRecordId)
  779. continue
  780. }
  781. }
  782. isAdd = true
  783. addRecordList = append(addRecordList, &ExcelInfoClassifyPermissionNoAuthRecord{
  784. ExcelInfoClassifyPermissionNoAuthRecordId: 0,
  785. Source: int32(excelSource),
  786. OpUniqueCode: uniqueCode,
  787. ClassifyId: fmt.Sprint(dataItem.ClassifyId),
  788. ClassifyName: dataItem.ClassifyName,
  789. SysUserId: int32(userId),
  790. CreateTime: time.Now(),
  791. })
  792. }
  793. // 有记录的话,需要添加消息
  794. if isAdd {
  795. addMessageList = append(addMessageList, &DataPermissionMessage{
  796. DataPermissionMessageId: 0,
  797. SendUserId: int32(opUserId),
  798. ReceiveUserId: int32(userId),
  799. Content: title,
  800. Remark: content,
  801. OpType: 4,
  802. Source: int32(source),
  803. SubSource: int32(excelSource),
  804. OpUniqueCode: uniqueCode,
  805. IsRead: 0,
  806. CreateTime: time.Now(),
  807. ModifyTime: time.Now(),
  808. })
  809. }
  810. }
  811. // 添加消息
  812. if len(addMessageList) > 0 {
  813. _, err = o.InsertMulti(500, addMessageList)
  814. if err != nil {
  815. return
  816. }
  817. }
  818. // 添加记录
  819. if len(addRecordList) > 0 {
  820. _, err = o.InsertMulti(500, addRecordList)
  821. if err != nil {
  822. return
  823. }
  824. }
  825. // 需要删除未授权记录
  826. delRecordIdNum := len(delRecordIdMap)
  827. if delRecordIdNum > 0 {
  828. delRecordIdList := make([]int64, 0)
  829. for _, v := range delRecordIdMap {
  830. delRecordIdList = append(delRecordIdList, v)
  831. }
  832. sql = `DELETE FROM excel_info_classify_permission_no_auth_record WHERE excel_info_classify_permission_no_auth_record_id in (` + utils.GetOrmInReplace(delRecordIdNum) + `) `
  833. _, err = o.Raw(sql, delRecordIdList).Exec()
  834. }
  835. return
  836. }
  837. // DeleteExcelInfoClassifyNoAuthRecordBySourceAndClassifyIdList
  838. // @Description: 根据来源和删除分类授权记录
  839. // @author: Roc
  840. // @datetime 2024-04-07 14:47:37
  841. // @param source int
  842. // @param excelSource int
  843. // @return err error
  844. func DeleteExcelInfoClassifyNoAuthRecordBySourceAndClassifyIdList(excelSource int) (err error) {
  845. o := orm.NewOrmUsingDB("data")
  846. sql := `DELETE FROM excel_info_classify_permission_no_auth_record WHERE source = ?`
  847. _, err = o.Raw(sql, excelSource).Exec()
  848. return
  849. }
  850. // GetExcelInfoDataPermissionClassifyNoAuthRecordListByUserId
  851. // @Description: 根据用户获取未授权的资产分类记录
  852. // @author: Roc
  853. // @datetime 2024-04-07 20:14:49
  854. // @param userId int
  855. // @param source int
  856. // @param subSource int
  857. // @param startSize int
  858. // @param pageSize int
  859. // @return total int
  860. // @return items []*DataPermissionClassifyNoAuthRecord
  861. // @return err error
  862. func GetExcelInfoDataPermissionClassifyNoAuthRecordListByUserId(userId, excelSource int32, startSize, pageSize int) (total int, items []*DataPermissionClassifyNoAuthRecord, err error) {
  863. o := orm.NewOrmUsingDB("data")
  864. // 获取总数
  865. sql := `SELECT count(1) AS total FROM excel_info_classify_permission_no_auth_record WHERE sys_user_id = ? AND source = ? `
  866. err = o.Raw(sql, userId, excelSource).QueryRow(&total)
  867. if err != nil {
  868. return
  869. }
  870. sql = `SELECT excel_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 excel_info_classify_permission_no_auth_record WHERE sys_user_id = ? AND source = ? ORDER BY excel_info_classify_permission_no_auth_record_id desc LIMIT ?,? `
  871. _, err = o.Raw(sql, userId, excelSource, startSize, pageSize).QueryRows(&items)
  872. return
  873. }