data_move.go 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126
  1. package data_manage_permission
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/models"
  5. "eta_gn/eta_api/models/data_manage"
  6. "eta_gn/eta_api/models/data_manage/data_manage_permission"
  7. "eta_gn/eta_api/models/data_manage/excel"
  8. "eta_gn/eta_api/models/system"
  9. "eta_gn/eta_api/utils"
  10. "fmt"
  11. "strconv"
  12. "strings"
  13. "time"
  14. "github.com/rdlucklib/rdluck_tools/uuid"
  15. )
  16. // GetEdbChartClassifyList
  17. // @Description: 获取数据权限那边的分类列表
  18. // @author: Roc
  19. // @datetime 2024-04-01 09:46:29
  20. // @param source int
  21. // @param subSource int
  22. // @return resp data_manage.EdbChartClassifyResp
  23. // @return err error
  24. func GetEdbChartClassifyList(source, subSource, sysUserId int) (resp data_manage.EdbChartClassifyResp, err error) {
  25. switch source {
  26. case 1: //手工数据指标
  27. list, e := models.GetEdbdataClassify(0)
  28. if e != nil {
  29. err = e
  30. return
  31. }
  32. for _, v := range list {
  33. item := data_manage.EdbChartClassify{
  34. ClassifyId: v.ClassifyId,
  35. ClassifyName: v.ClassifyName,
  36. ParentId: v.ParentId,
  37. }
  38. for _, v2 := range v.Child {
  39. child := data_manage.EdbChartClassify{
  40. ClassifyId: v2.ClassifyId,
  41. ClassifyName: v2.ClassifyName,
  42. ParentId: v2.ParentId,
  43. }
  44. item.Child = append(item.Child, &child)
  45. }
  46. resp.List = append(resp.List, &item)
  47. }
  48. case 3, 7:
  49. // 这里拆分指标库和计算指标
  50. classifyType := utils.EdbClassifyTypeBase
  51. if source == 7 {
  52. classifyType = utils.EdbClassifyTypeCalculate
  53. }
  54. if classifyType == utils.EdbClassifyTypeBase {
  55. sysUserId = 0
  56. }
  57. // 考虑到后面可以会迭代到10层, 这里直接用递归处理
  58. classifyAll, e := data_manage.GetAllEdbClassifyByType(classifyType, sysUserId)
  59. if e != nil && !utils.IsErrNoRow(e) {
  60. err = e
  61. return
  62. }
  63. resp.List = GetEdbMenuTreeRecursive(classifyAll, 0)
  64. case 4:
  65. //ETA预测指标
  66. // 考虑到后面可以会迭代到10层, 这里直接用递归
  67. classifyAll, e := data_manage.GetAllEdbClassifyByType(1, sysUserId)
  68. if e != nil && !utils.IsErrNoRow(e) {
  69. err = e
  70. return
  71. }
  72. resp.List = GetEdbMenuTreeRecursive(classifyAll, 0)
  73. case 5: //图库
  74. // 考虑到后面可以会迭代到10层, 这里直接用递归处理
  75. classifyAll, e := data_manage.GetAllChartClassifyItemsBySource(1)
  76. if e != nil && !utils.IsErrNoRow(e) {
  77. err = e
  78. return
  79. }
  80. resp.List = GetChartMenuTreeRecursive(classifyAll, 0)
  81. case 6:
  82. // ETA表格
  83. // 考虑到后面可以会迭代到10层, 这里直接用递归处理
  84. classifyAll, e := excel.GetExcelClassifyBySourceOrderByLevel(subSource)
  85. if e != nil && !utils.IsErrNoRow(e) {
  86. err = e
  87. return
  88. }
  89. resp.List = GetExcelMenuTreeRecursive(classifyAll, 0)
  90. default:
  91. return
  92. }
  93. return
  94. }
  95. // GetEdbMenuTreeRecursive 递归指标库菜单树
  96. func GetEdbMenuTreeRecursive(list []*data_manage.EdbClassifyItems, parentId int) []*data_manage.EdbChartClassify {
  97. res := make([]*data_manage.EdbChartClassify, 0)
  98. for _, v := range list {
  99. t := new(data_manage.EdbChartClassify)
  100. t.ClassifyId = v.ClassifyId
  101. t.ClassifyName = v.ClassifyName
  102. t.ParentId = v.ParentId
  103. t.IsJoinPermission = v.IsJoinPermission
  104. if v.ParentId == parentId {
  105. t.Child = GetEdbMenuTreeRecursive(list, v.ClassifyId)
  106. res = append(res, t)
  107. }
  108. }
  109. return res
  110. }
  111. // GetChartMenuTreeRecursive 递归指标库菜单树
  112. func GetChartMenuTreeRecursive(list []*data_manage.ChartClassifyItems, parentId int) []*data_manage.EdbChartClassify {
  113. res := make([]*data_manage.EdbChartClassify, 0)
  114. for _, v := range list {
  115. t := new(data_manage.EdbChartClassify)
  116. t.ClassifyId = v.ChartClassifyId
  117. t.ClassifyName = v.ChartClassifyName
  118. t.ParentId = v.ParentId
  119. t.IsJoinPermission = v.IsJoinPermission
  120. if v.ParentId == parentId {
  121. t.Child = GetChartMenuTreeRecursive(list, v.ChartClassifyId)
  122. res = append(res, t)
  123. }
  124. }
  125. return res
  126. }
  127. // GetExcelMenuTreeRecursive
  128. // @Description: 递归ETA表格菜单树
  129. // @author: Roc
  130. // @datetime 2024-03-27 10:30:32
  131. // @param list []*data_manage.ChartClassifyItems
  132. // @param parentId int
  133. // @return []*data_manage.EdbChartClassify
  134. func GetExcelMenuTreeRecursive(list []*excel.ExcelClassifyItems, parentId int) []*data_manage.EdbChartClassify {
  135. res := make([]*data_manage.EdbChartClassify, 0)
  136. for _, v := range list {
  137. t := new(data_manage.EdbChartClassify)
  138. t.ClassifyId = v.ExcelClassifyId
  139. t.ClassifyName = v.ExcelClassifyName
  140. t.ParentId = v.ParentId
  141. t.IsJoinPermission = v.IsJoinPermission
  142. if v.ParentId == parentId {
  143. t.Child = GetExcelMenuTreeRecursive(list, v.ExcelClassifyId)
  144. res = append(res, t)
  145. }
  146. }
  147. return res
  148. }
  149. // GetMoveEdbChartList 获取待转移的指标/图表列表
  150. // @param source 来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
  151. func GetMoveEdbChartList(source, subSource, userId int, keyword, classify string, startSize, pageSize int) (list []data_manage.MoveEdbChartList, total int, err error) {
  152. var condition string
  153. var pars []interface{}
  154. switch source {
  155. case 1: //手工数据指标
  156. if keyword != "" {
  157. condition += ` AND (a.SEC_NAME LIKE ? OR a.TRADE_CODE like ? ) `
  158. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  159. }
  160. if userId > 0 {
  161. condition += ` AND a.user_id = ? `
  162. pars = append(pars, userId)
  163. }
  164. if classify != "" {
  165. condition += ` AND a.classify_id IN (` + classify + `) `
  166. }
  167. total, err = models.GetEdbinfoListCount(condition, pars, "", 0)
  168. if err != nil {
  169. return
  170. }
  171. tmpList, tmpErr := models.GetEdbinfoItemList(condition, pars, startSize, pageSize, "", 0)
  172. if tmpErr != nil {
  173. err = tmpErr
  174. return
  175. }
  176. if len(tmpList) > 0 {
  177. adminIdList := make([]int, 0)
  178. for _, v := range tmpList {
  179. adminIdList = append(adminIdList, v.UserId)
  180. }
  181. adminList, tmpErr := system.GetAdminListByIdListWithoutEnable(adminIdList)
  182. if tmpErr != nil {
  183. err = tmpErr
  184. return
  185. }
  186. adminMap := make(map[int]string)
  187. for _, adminInfo := range adminList {
  188. adminMap[adminInfo.AdminId] = adminInfo.RealName
  189. }
  190. for _, v := range tmpList {
  191. list = append(list, data_manage.MoveEdbChartList{
  192. DataId: v.TradeCode,
  193. Code: v.TradeCode,
  194. Name: v.SecName,
  195. ClassifyName: v.ClassifyName,
  196. NameEn: v.SecName,
  197. ClassifyNameEn: v.ClassifyName,
  198. CreateUserId: v.UserId,
  199. CreateUserName: adminMap[v.UserId],
  200. })
  201. }
  202. }
  203. case 3, 4, utils.EdbPermissionSourceCalculate: //ETA指标库、ETA预测指标、指标加工
  204. if keyword != `` {
  205. condition += " AND (edb_code like ? OR edb_name like ? OR edb_name_en like ? OR sys_user_real_name like ? ) "
  206. pars = utils.GetLikeKeywordPars(pars, keyword, 4)
  207. }
  208. if userId > 0 {
  209. condition += ` AND sys_user_id = ? `
  210. pars = append(pars, userId)
  211. }
  212. if classify != "" {
  213. condition += ` AND classify_id IN (` + classify + `) `
  214. }
  215. edbInfoType := 0 //ETA指标库
  216. if source == 4 { //ETA预测指标
  217. edbInfoType = 1
  218. }
  219. condition += ` AND edb_info_type = ? `
  220. pars = append(pars, edbInfoType)
  221. // 指标加工
  222. if source != 4 {
  223. edbType := utils.EdbTypeBase
  224. if source == utils.EdbPermissionSourceCalculate {
  225. edbType = utils.EdbTypeCalculate
  226. }
  227. condition += ` AND edb_type = ? `
  228. pars = append(pars, edbType)
  229. }
  230. total, err = data_manage.GetEdbInfoByConditionCount(condition, pars)
  231. if err != nil {
  232. return
  233. }
  234. tmpList, tmpErr := data_manage.GetEdbInfoListByCondition(condition, pars, startSize, pageSize, "DESC")
  235. if tmpErr != nil {
  236. err = tmpErr
  237. return
  238. }
  239. for _, v := range tmpList {
  240. list = append(list, data_manage.MoveEdbChartList{
  241. DataId: strconv.Itoa(v.EdbInfoId),
  242. Code: v.EdbCode,
  243. Name: v.EdbName,
  244. NameEn: v.EdbNameEn,
  245. //ClassifyName: v.,
  246. CreateUserId: v.SysUserId,
  247. CreateUserName: v.SysUserRealName,
  248. })
  249. }
  250. case 5: //图库
  251. // 只展示eta图库
  252. condition += ` AND source = ? `
  253. pars = append(pars, utils.CHART_SOURCE_DEFAULT)
  254. // 关键字搜索
  255. if keyword != `` {
  256. condition += " AND (chart_name like ? or chart_name_en like ? OR sys_user_real_name like ? ) "
  257. pars = utils.GetLikeKeywordPars(pars, keyword, 3)
  258. }
  259. if userId > 0 {
  260. condition += ` AND sys_user_id = ? `
  261. pars = append(pars, userId)
  262. }
  263. if classify != "" {
  264. condition += ` AND chart_classify_id IN (` + classify + `) `
  265. }
  266. total, err = data_manage.GetChartInfoCountByCondition(condition, pars)
  267. if err != nil {
  268. return
  269. }
  270. tmpList, tmpErr := data_manage.GetChartInfoListByCondition(condition, pars, startSize, pageSize)
  271. if tmpErr != nil {
  272. err = tmpErr
  273. return
  274. }
  275. // 获取所有的图表分类
  276. firstClassifyList, tmpErr := data_manage.GetChartClassifyByParentId(0, 1, userId)
  277. if tmpErr != nil {
  278. err = tmpErr
  279. return
  280. }
  281. firstClassifyNameMap := make(map[int]string)
  282. firstClassifyNameEnMap := make(map[int]string)
  283. for _, v := range firstClassifyList {
  284. firstClassifyNameMap[v.ChartClassifyId] = v.ChartClassifyName
  285. firstClassifyNameEnMap[v.ChartClassifyId] = v.ChartClassifyNameEn
  286. }
  287. secondClassList, tmpErr := data_manage.GetChartClassifyAll(1, userId)
  288. if tmpErr != nil {
  289. err = tmpErr
  290. return
  291. }
  292. secondClassifyNameMap := make(map[int]string)
  293. secondClassifyNameEnMap := make(map[int]string)
  294. for _, v := range secondClassList {
  295. firstName := firstClassifyNameMap[v.ParentId]
  296. firstNameEn := firstClassifyNameEnMap[v.ParentId]
  297. if firstName != `` {
  298. firstName = firstName + " / "
  299. }
  300. if firstNameEn != `` {
  301. firstNameEn = firstNameEn + " / "
  302. }
  303. secondClassifyNameMap[v.ChartClassifyId] = firstName + v.ChartClassifyName
  304. secondClassifyNameEnMap[v.ChartClassifyId] = firstNameEn + v.ChartClassifyNameEn
  305. }
  306. for _, v := range tmpList {
  307. list = append(list, data_manage.MoveEdbChartList{
  308. DataId: strconv.Itoa(v.ChartInfoId),
  309. Name: v.ChartName,
  310. ClassifyName: secondClassifyNameMap[v.ChartClassifyId],
  311. NameEn: v.ChartNameEn,
  312. ClassifyNameEn: secondClassifyNameEnMap[v.ChartClassifyId],
  313. CreateUserId: v.SysUserId,
  314. CreateUserName: v.SysUserRealName,
  315. })
  316. }
  317. case 6: //ETA表格
  318. if keyword != `` {
  319. condition += " AND (excel_name like ? OR sys_user_real_name like ? ) "
  320. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  321. }
  322. if userId > 0 {
  323. condition += ` AND sys_user_id = ? `
  324. pars = append(pars, userId)
  325. }
  326. if classify != "" {
  327. condition += ` AND excel_classify_id IN (` + classify + `) `
  328. }
  329. condition += " AND source = ? "
  330. pars = append(pars, subSource)
  331. if subSource == utils.BALANCE_TABLE {
  332. condition += " AND parent_id = 0 AND balance_type = 0 "
  333. }
  334. total, err = excel.GetExcelInfoCountByCondition(condition, pars)
  335. if err != nil {
  336. return
  337. }
  338. tmpList, tmpErr := excel.GetNoContentExcelInfoListByCondition(condition, pars, startSize, pageSize)
  339. if tmpErr != nil {
  340. err = tmpErr
  341. return
  342. }
  343. // 获取所有的图表分类
  344. firstClassifyList, tmpErr := excel.GetExcelClassifyByParentId(0, subSource)
  345. if tmpErr != nil {
  346. err = tmpErr
  347. return
  348. }
  349. firstClassifyNameMap := make(map[int]string)
  350. for _, v := range firstClassifyList {
  351. firstClassifyNameMap[v.ExcelClassifyId] = v.ExcelClassifyName
  352. }
  353. secondClassList, tmpErr := excel.GetExcelClassifyBySource(subSource)
  354. if tmpErr != nil {
  355. err = tmpErr
  356. return
  357. }
  358. secondClassifyNameMap := make(map[int]string)
  359. for _, v := range secondClassList {
  360. firstName := firstClassifyNameMap[v.ParentId]
  361. if firstName != `` {
  362. firstName = firstName + " / "
  363. }
  364. secondClassifyNameMap[v.ExcelClassifyId] = firstName + v.ExcelClassifyName
  365. }
  366. for _, v := range tmpList {
  367. list = append(list, data_manage.MoveEdbChartList{
  368. DataId: strconv.Itoa(v.ExcelInfoId),
  369. Name: v.ExcelClassifyName,
  370. ClassifyName: secondClassifyNameMap[v.ExcelClassifyId],
  371. NameEn: v.ExcelClassifyName,
  372. ClassifyNameEn: secondClassifyNameMap[v.ExcelClassifyId],
  373. CreateUserId: v.SysUserId,
  374. CreateUserName: v.SysUserRealName,
  375. })
  376. }
  377. default:
  378. return
  379. }
  380. return
  381. }
  382. // MoveEdbChart 转移指标/图表创建人
  383. // @param source 来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格;7:计算指标库
  384. func MoveEdbChart(source, subSource, oldUserId, newUserId int, isSelectAll bool, dataId, noDataId []string, keyword, classify string, opUserId int, opUserName string) (err error, errMsg string) {
  385. adminInfo, err := system.GetSysAdminById(newUserId)
  386. if err != nil {
  387. return
  388. }
  389. // 如果勾选全部数据,那么
  390. if isSelectAll {
  391. // 找出不要的指标ID列表
  392. noDataIdMap := make(map[string]string, 0)
  393. for _, v := range noDataId {
  394. noDataIdMap[v] = v
  395. }
  396. // 需要转义的指标/图表ID列表
  397. dataId = make([]string, 0)
  398. // 获取所有指标/图表
  399. list, _, tmpErr := GetMoveEdbChartList(source, subSource, oldUserId, keyword, classify, 0, 100000)
  400. if tmpErr != nil {
  401. err = tmpErr
  402. return
  403. }
  404. for _, v := range list {
  405. if _, ok := noDataIdMap[v.DataId]; !ok {
  406. dataId = append(dataId, v.DataId)
  407. }
  408. }
  409. }
  410. // 操作记录
  411. dataPermissionMoveRecordList := make([]*data_manage_permission.DataPermissionMoveRecord, 0)
  412. uniqueCode := uuid.NewUUID().Hex32()
  413. title := `资产转移`
  414. content := `资产转入`
  415. switch source {
  416. case 1: //手工数据指标
  417. content += `(手工指标数据)`
  418. tmpList, tmpErr := models.GetEdbinfoListByCodeListByCodeIdList(dataId)
  419. if tmpErr != nil {
  420. err = tmpErr
  421. return
  422. }
  423. if len(tmpList) > 0 {
  424. for _, v := range tmpList {
  425. //if v.UserId == newUserId {
  426. // errMsg = "新创建人不可和原创建人一致"
  427. // err = errors.New(errMsg)
  428. // return
  429. //}
  430. // 操作记录
  431. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  432. DataPermissionMoveRecordId: 0,
  433. Source: int32(source),
  434. SubSource: int32(subSource),
  435. OpUniqueCode: uniqueCode,
  436. DataId: v.TradeCode,
  437. DataCode: v.TradeCode,
  438. DataName: v.SecName,
  439. OriginalUserId: int32(v.UserId),
  440. OriginalUserName: v.UserName,
  441. NewUserId: int32(adminInfo.AdminId),
  442. NewUserName: adminInfo.RealName,
  443. CreateTime: time.Now(),
  444. })
  445. }
  446. // 修改创建人
  447. err = models.ModifyEdbinfoUserIdByCodeList(dataId, newUserId, adminInfo.RealName)
  448. // 如果移动成功了,需要记录该指标的操作记录
  449. if err == nil && len(tmpList) > 0 {
  450. go afterMoveManualEdb(tmpList, adminInfo, opUserId, opUserName)
  451. }
  452. }
  453. case 3, 4, utils.EdbPermissionSourceCalculate: //ETA指标库、ETA预测指标
  454. if source == 3 {
  455. content += `(数据查看)`
  456. }
  457. if source == 4 {
  458. content += `(衍生指标)`
  459. }
  460. if source == utils.EdbPermissionSourceCalculate {
  461. content += `(指标加工)`
  462. }
  463. edbInfoIdList := make([]int, 0)
  464. for _, id := range dataId {
  465. edbInfoId, tmpErr := strconv.Atoi(id)
  466. if tmpErr != nil {
  467. err = tmpErr
  468. return
  469. }
  470. edbInfoIdList = append(edbInfoIdList, edbInfoId)
  471. }
  472. tmpList, tmpErr := data_manage.GetEdbInfoListByEdbInfoId(edbInfoIdList)
  473. if tmpErr != nil {
  474. err = tmpErr
  475. return
  476. }
  477. if len(tmpList) > 0 {
  478. for _, v := range tmpList {
  479. //if v.SysUserId == newUserId {
  480. // errMsg = "新创建人不可和原创建人一致"
  481. // err = errors.New(errMsg)
  482. // return
  483. //}
  484. // 操作记录
  485. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  486. DataPermissionMoveRecordId: 0,
  487. Source: int32(source),
  488. SubSource: int32(subSource),
  489. OpUniqueCode: uniqueCode,
  490. DataId: fmt.Sprint(v.EdbInfoId),
  491. DataCode: v.EdbCode,
  492. DataName: v.EdbName,
  493. OriginalUserId: int32(v.SysUserId),
  494. OriginalUserName: v.SysUserRealName,
  495. NewUserId: int32(adminInfo.AdminId),
  496. NewUserName: adminInfo.RealName,
  497. CreateTime: time.Now(),
  498. })
  499. }
  500. // 修改创建人
  501. err = data_manage.ModifyEdbInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  502. // 移除当前用户的不可操作权限
  503. {
  504. obj := data_manage.EdbInfoNoPermissionAdmin{}
  505. for _, v := range dataId {
  506. edbInfoId, _ := strconv.Atoi(v)
  507. go obj.DeleteByEdbInfoIdAndAdminId(edbInfoId, adminInfo.AdminId)
  508. }
  509. }
  510. }
  511. case 5: //图库
  512. content += `(图库)`
  513. // 只展示eta图库
  514. subSource = utils.CHART_SOURCE_DEFAULT
  515. chartInfoIdList := make([]int, 0)
  516. for _, id := range dataId {
  517. edbInfoId, tmpErr := strconv.Atoi(id)
  518. if tmpErr != nil {
  519. err = tmpErr
  520. return
  521. }
  522. chartInfoIdList = append(chartInfoIdList, edbInfoId)
  523. }
  524. tmpList, tmpErr := data_manage.GetChartInfoListByChartIdList(chartInfoIdList)
  525. if tmpErr != nil {
  526. err = tmpErr
  527. return
  528. }
  529. if len(tmpList) > 0 {
  530. for _, v := range tmpList {
  531. //if v.SysUserId == newUserId {
  532. // errMsg = "新创建人不可和原创建人一致"
  533. // err = errors.New(errMsg)
  534. // return
  535. //}
  536. // 操作记录
  537. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  538. DataPermissionMoveRecordId: 0,
  539. Source: int32(source),
  540. SubSource: int32(subSource),
  541. OpUniqueCode: uniqueCode,
  542. DataId: fmt.Sprint(v.ChartInfoId),
  543. DataCode: fmt.Sprint(v.ChartInfoId),
  544. DataName: v.ChartName,
  545. OriginalUserId: int32(v.SysUserId),
  546. OriginalUserName: v.SysUserRealName,
  547. NewUserId: int32(adminInfo.AdminId),
  548. NewUserName: adminInfo.RealName,
  549. CreateTime: time.Now(),
  550. })
  551. }
  552. // 修改创建人
  553. err = data_manage.ModifyChartInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  554. }
  555. case 6: // ETA表格
  556. content += `(表格)`
  557. tmpList, tmpErr := excel.GetNoContentExcelListByExcelInfoIdList(dataId)
  558. if tmpErr != nil {
  559. err = tmpErr
  560. return
  561. }
  562. var customAnalysisIds []int
  563. if len(tmpList) > 0 {
  564. for _, v := range tmpList {
  565. //if v.SysUserId == newUserId {
  566. // errMsg = "新创建人不可和原创建人一致"
  567. // err = errors.New(errMsg)
  568. // return
  569. //}
  570. // 操作记录
  571. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  572. DataPermissionMoveRecordId: 0,
  573. Source: int32(source),
  574. SubSource: int32(subSource),
  575. OpUniqueCode: uniqueCode,
  576. DataId: fmt.Sprint(v.ExcelInfoId),
  577. DataCode: fmt.Sprint(v.ExcelInfoId),
  578. DataName: v.ExcelName,
  579. OriginalUserId: int32(v.SysUserId),
  580. OriginalUserName: v.SysUserRealName,
  581. NewUserId: int32(adminInfo.AdminId),
  582. NewUserName: adminInfo.RealName,
  583. CreateTime: time.Now(),
  584. })
  585. if v.Source == utils.CUSTOM_ANALYSIS_TABLE {
  586. customAnalysisIds = append(customAnalysisIds, v.ExcelInfoId)
  587. }
  588. }
  589. // 修改创建人
  590. err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  591. if err != nil {
  592. return
  593. }
  594. // 由于自定义分析表分类私有化, 如果转移的是自定义分析表, 那么需要将excel转移至未分类下
  595. if len(customAnalysisIds) > 0 {
  596. err = MoveCustomAnalysisExcel2DefaultClassify(customAnalysisIds, adminInfo.AdminId, adminInfo.RealName)
  597. }
  598. }
  599. default:
  600. return
  601. }
  602. // 转移失败了那么就直接返回了
  603. if err != nil {
  604. return
  605. }
  606. // 添加资产转移的记录
  607. dataPermissionMessage := &data_manage_permission.DataPermissionMessage{
  608. DataPermissionMessageId: 0,
  609. SendUserId: int32(opUserId),
  610. ReceiveUserId: int32(adminInfo.AdminId),
  611. Content: title,
  612. Remark: content,
  613. OpType: 1,
  614. Source: int32(source),
  615. SubSource: int32(subSource),
  616. OpUniqueCode: uniqueCode,
  617. IsRead: 0,
  618. CreateTime: time.Now(),
  619. ModifyTime: time.Now(),
  620. }
  621. tmpErr := data_manage_permission.AddDataPermissionMoveRecord(dataPermissionMoveRecordList, dataPermissionMessage)
  622. // 失败的话,日志记录
  623. if tmpErr != nil {
  624. // 序列化结构体为 JSON 数据
  625. recordListJsonBytes, tmpErr2 := json.Marshal(dataPermissionMoveRecordList)
  626. if tmpErr2 != nil {
  627. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;list转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  628. return
  629. }
  630. // 序列化结构体为 JSON 数据
  631. messageJsonBytes, tmpErr2 := json.Marshal(dataPermissionMessage)
  632. if tmpErr2 != nil {
  633. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;message转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  634. return
  635. }
  636. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;操作记录:%s;消息记录:%s", tmpErr.Error(), string(recordListJsonBytes), string(messageJsonBytes)))
  637. }
  638. return
  639. }
  640. // MoveAllEdbChart
  641. // @Description: 通过原创建人转移指标/图表创建人
  642. // @author: Roc
  643. // @datetime 2024-03-26 15:11:12
  644. // @param sourceList []int 1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
  645. // @param oldUserId []int
  646. // @param userId int
  647. // @param opUserId int
  648. // @return err error
  649. // @return errMsg string
  650. func MoveAllEdbChart(sourceList, oldUserIdList []int, userId, opUserId int) (err error, errMsg string) {
  651. adminInfo, err := system.GetSysAdminById(userId)
  652. if err != nil {
  653. return
  654. }
  655. // 操作记录
  656. dataPermissionMoveRecordList := make([]*data_manage_permission.DataPermissionMoveRecord, 0)
  657. uniqueCode := uuid.NewUUID().Hex32()
  658. title := `资产转移`
  659. content := `资产转入`
  660. sourceStrList := make([]string, 0)
  661. var isMoveManual, isMoveMysteelChemical, isMoveEdb, isMovePredictEdb, isMoveChart, isMoveExcel bool
  662. var customAnalysisIds []int
  663. // 遍历需要转移的模块,1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格,并找出当前需要转移的资产
  664. for _, source := range sourceList {
  665. switch source {
  666. case 1: //手工数据指标
  667. sourceStrList = append(sourceStrList, "手工指标数据")
  668. tmpList, tmpErr := models.GetEdbinfoListByCodeListByUserId(oldUserIdList)
  669. if tmpErr != nil {
  670. err = tmpErr
  671. return
  672. }
  673. if len(tmpList) > 0 {
  674. for _, v := range tmpList {
  675. // 操作记录
  676. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  677. DataPermissionMoveRecordId: 0,
  678. Source: int32(source),
  679. SubSource: 0,
  680. OpUniqueCode: uniqueCode,
  681. DataId: v.TradeCode,
  682. DataCode: v.TradeCode,
  683. DataName: v.SecName,
  684. OriginalUserId: int32(v.UserId),
  685. OriginalUserName: v.UserName,
  686. NewUserId: int32(adminInfo.AdminId),
  687. NewUserName: adminInfo.RealName,
  688. CreateTime: time.Now(),
  689. })
  690. }
  691. isMoveManual = true
  692. }
  693. case 3: //ETA指标库
  694. sourceStrList = append(sourceStrList, "ETA指标库")
  695. edbInfoType := 0
  696. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  697. if tmpErr != nil {
  698. err = tmpErr
  699. return
  700. }
  701. if len(tmpList) > 0 {
  702. for _, v := range tmpList {
  703. // 操作记录
  704. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  705. DataPermissionMoveRecordId: 0,
  706. Source: int32(source),
  707. SubSource: int32(edbInfoType),
  708. OpUniqueCode: uniqueCode,
  709. DataId: fmt.Sprint(v.EdbInfoId),
  710. DataCode: v.EdbCode,
  711. DataName: v.EdbName,
  712. OriginalUserId: int32(v.SysUserId),
  713. OriginalUserName: v.SysUserRealName,
  714. NewUserId: int32(adminInfo.AdminId),
  715. NewUserName: adminInfo.RealName,
  716. CreateTime: time.Now(),
  717. })
  718. }
  719. isMoveEdb = true
  720. }
  721. case 4: //ETA预测指标
  722. sourceStrList = append(sourceStrList, "ETA预测指标")
  723. edbInfoType := 1
  724. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  725. if tmpErr != nil {
  726. err = tmpErr
  727. return
  728. }
  729. if len(tmpList) > 0 {
  730. for _, v := range tmpList {
  731. // 操作记录
  732. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  733. DataPermissionMoveRecordId: 0,
  734. Source: int32(source),
  735. SubSource: int32(edbInfoType),
  736. OpUniqueCode: uniqueCode,
  737. DataId: fmt.Sprint(v.EdbInfoId),
  738. DataCode: v.EdbCode,
  739. DataName: v.EdbName,
  740. OriginalUserId: int32(v.SysUserId),
  741. OriginalUserName: v.SysUserRealName,
  742. NewUserId: int32(adminInfo.AdminId),
  743. NewUserName: adminInfo.RealName,
  744. CreateTime: time.Now(),
  745. })
  746. }
  747. isMovePredictEdb = true
  748. }
  749. case 5: //ETA图库
  750. sourceStrList = append(sourceStrList, "ETA图库")
  751. // 只展示eta图库
  752. subSource := utils.CHART_SOURCE_DEFAULT
  753. tmpList, tmpErr := data_manage.GetChartInfoListByUserId(oldUserIdList, subSource)
  754. if tmpErr != nil {
  755. err = tmpErr
  756. return
  757. }
  758. if len(tmpList) > 0 {
  759. for _, v := range tmpList {
  760. // 操作记录
  761. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  762. DataPermissionMoveRecordId: 0,
  763. Source: int32(source),
  764. SubSource: int32(subSource),
  765. OpUniqueCode: uniqueCode,
  766. DataId: fmt.Sprint(v.ChartInfoId),
  767. DataCode: fmt.Sprint(v.ChartInfoId),
  768. DataName: v.ChartName,
  769. OriginalUserId: int32(v.SysUserId),
  770. OriginalUserName: v.SysUserRealName,
  771. NewUserId: int32(adminInfo.AdminId),
  772. NewUserName: adminInfo.RealName,
  773. CreateTime: time.Now(),
  774. })
  775. }
  776. isMoveChart = true
  777. }
  778. case 6: // ETA表格
  779. sourceStrList = append(sourceStrList, "ETA表格")
  780. tmpList, tmpErr := excel.GetNoContentExcelListByUserId(oldUserIdList)
  781. if tmpErr != nil {
  782. err = tmpErr
  783. return
  784. }
  785. if len(tmpList) > 0 {
  786. for _, v := range tmpList {
  787. // 操作记录
  788. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  789. DataPermissionMoveRecordId: 0,
  790. Source: int32(source),
  791. SubSource: int32(v.Source),
  792. OpUniqueCode: uniqueCode,
  793. DataId: fmt.Sprint(v.ExcelInfoId),
  794. DataCode: fmt.Sprint(v.ExcelInfoId),
  795. DataName: v.ExcelName,
  796. OriginalUserId: int32(v.SysUserId),
  797. OriginalUserName: v.SysUserRealName,
  798. NewUserId: int32(adminInfo.AdminId),
  799. NewUserName: adminInfo.RealName,
  800. CreateTime: time.Now(),
  801. })
  802. if v.Source == utils.CUSTOM_ANALYSIS_TABLE {
  803. customAnalysisIds = append(customAnalysisIds, v.ExcelInfoId)
  804. }
  805. }
  806. isMoveExcel = true
  807. }
  808. default:
  809. }
  810. }
  811. // 修改创建人
  812. err = data_manage_permission.ModifyDataUserIdByOldUserId(oldUserIdList, adminInfo.AdminId, adminInfo.RealName, isMoveManual, isMoveMysteelChemical, isMoveEdb, isMovePredictEdb, isMoveChart, isMoveExcel)
  813. // 转移失败了那么就直接返回了
  814. if err != nil {
  815. return
  816. }
  817. // 由于自定义分析表分类私有化, 如果转移的含自定义分析表, 那么需要将excel转移至未分类下
  818. if len(customAnalysisIds) > 0 {
  819. err = MoveCustomAnalysisExcel2DefaultClassify(customAnalysisIds, adminInfo.AdminId, adminInfo.RealName)
  820. if err != nil {
  821. err = fmt.Errorf("MoveCustomAnalysisExcel2DefaultClassify, err: %v", err)
  822. return
  823. }
  824. }
  825. // 添加资产转移的记录
  826. content += fmt.Sprintf("(%s)", strings.Join(sourceStrList, ","))
  827. dataPermissionMessage := &data_manage_permission.DataPermissionMessage{
  828. DataPermissionMessageId: 0,
  829. SendUserId: int32(opUserId),
  830. ReceiveUserId: int32(adminInfo.AdminId),
  831. Content: title,
  832. Remark: content,
  833. OpType: 2,
  834. OpUniqueCode: uniqueCode,
  835. IsRead: 0,
  836. CreateTime: time.Now(),
  837. ModifyTime: time.Now(),
  838. }
  839. tmpErr := data_manage_permission.AddDataPermissionMoveRecord(dataPermissionMoveRecordList, dataPermissionMessage)
  840. // 失败的话,日志记录
  841. if tmpErr != nil {
  842. // 序列化结构体为 JSON 数据
  843. recordListJsonBytes, tmpErr2 := json.Marshal(dataPermissionMoveRecordList)
  844. if tmpErr2 != nil {
  845. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;list转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  846. return
  847. }
  848. // 序列化结构体为 JSON 数据
  849. messageJsonBytes, tmpErr2 := json.Marshal(dataPermissionMessage)
  850. if tmpErr2 != nil {
  851. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;message转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  852. return
  853. }
  854. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;操作记录:%s;消息记录:%s", tmpErr.Error(), string(recordListJsonBytes), string(messageJsonBytes)))
  855. }
  856. return
  857. }
  858. // GetMoveEdbChartCount 获取待转移的指标/图表列表
  859. // @param userId 用户
  860. // @param countType 来源 :1:设置资产权限;2:设置数据权限
  861. func GetMoveEdbChartCount(userId, countType int) (sourceMap map[int]int, err error) {
  862. sourceMap = make(map[int]int)
  863. {
  864. // 手工数据指标
  865. var condition string
  866. var pars []interface{}
  867. if userId > 0 {
  868. condition += ` AND a.user_id = ? `
  869. pars = append(pars, userId)
  870. }
  871. total, tmpErr := models.GetEdbinfoListCount(condition, pars, "", 0)
  872. if tmpErr != nil {
  873. err = tmpErr
  874. return
  875. }
  876. sourceMap[1] = total
  877. }
  878. {
  879. // 基础指标
  880. var condition string
  881. var pars []interface{}
  882. if userId > 0 {
  883. condition += ` AND sys_user_id = ? `
  884. pars = append(pars, userId)
  885. }
  886. condition += ` AND edb_info_type = ? AND edb_type = ? `
  887. pars = append(pars, 0, utils.EdbTypeBase)
  888. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  889. if tmpErr != nil {
  890. err = tmpErr
  891. return
  892. }
  893. sourceMap[3] = total
  894. }
  895. {
  896. // ETA预测指标库
  897. var condition string
  898. var pars []interface{}
  899. if userId > 0 {
  900. condition += ` AND sys_user_id = ? `
  901. pars = append(pars, userId)
  902. }
  903. //ETA预测指标
  904. condition += ` AND edb_info_type = ? `
  905. pars = append(pars, 1)
  906. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  907. if tmpErr != nil {
  908. err = tmpErr
  909. return
  910. }
  911. sourceMap[4] = total
  912. }
  913. {
  914. // 图库
  915. var condition string
  916. var pars []interface{}
  917. condition += ` AND source = ? `
  918. pars = append(pars, utils.CHART_SOURCE_DEFAULT)
  919. if userId > 0 {
  920. condition += ` AND sys_user_id = ? `
  921. pars = append(pars, userId)
  922. }
  923. total, tmpErr := data_manage.GetChartInfoCountByCondition(condition, pars)
  924. if tmpErr != nil {
  925. err = tmpErr
  926. return
  927. }
  928. sourceMap[5] = total
  929. }
  930. {
  931. // ETA表格
  932. var condition string
  933. var pars []interface{}
  934. condition += ` AND is_delete = 0 `
  935. if userId > 0 {
  936. condition += ` AND sys_user_id = ? `
  937. pars = append(pars, userId)
  938. }
  939. switch countType {
  940. case 2:
  941. condition += ` AND source in (2,3,5) `
  942. default:
  943. condition += ` AND source in (2,3,4,5) `
  944. }
  945. // 平衡表
  946. condition += " AND (parent_id = 0 AND balance_type = 0)"
  947. total, tmpErr := excel.GetExcelInfoCountByCondition(condition, pars)
  948. if tmpErr != nil {
  949. err = tmpErr
  950. return
  951. }
  952. sourceMap[6] = total
  953. }
  954. {
  955. // 计算指标
  956. var condition string
  957. var pars []interface{}
  958. if userId > 0 {
  959. condition += ` AND sys_user_id = ? `
  960. pars = append(pars, userId)
  961. }
  962. condition += ` AND edb_info_type = ? AND edb_type = ? `
  963. pars = append(pars, 0, utils.EdbTypeCalculate)
  964. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  965. if tmpErr != nil {
  966. err = tmpErr
  967. return
  968. }
  969. sourceMap[7] = total
  970. }
  971. return
  972. }
  973. // afterMoveManualEdb
  974. // @Description: 手工数据移动后的操作
  975. // @author: Roc
  976. // @datetime 2024-08-01 13:55:59
  977. // @param tmpList []*models.Edbinfo
  978. // @param adminInfo *system.Admin
  979. // @param opUserId int
  980. // @param opUserName string
  981. func afterMoveManualEdb(tmpList []*models.Edbinfo, adminInfo *system.Admin, opUserId int, opUserName string) {
  982. recordList := make([]*models.EdbinfoOpRecord, 0)
  983. for _, tmpManualInfo := range tmpList {
  984. remark := fmt.Sprintf("数据资产由%s转移给%s", tmpManualInfo.UserName, adminInfo.RealName)
  985. recordList = append(recordList, &models.EdbinfoOpRecord{
  986. TradeCode: tmpManualInfo.TradeCode,
  987. Remark: remark,
  988. UserId: opUserId,
  989. UserName: opUserName,
  990. CreateTime: time.Now(),
  991. })
  992. }
  993. obj := models.EdbinfoOpRecord{}
  994. _ = obj.MulCreate(recordList)
  995. }
  996. // MoveCustomAnalysisExcel2DefaultClassify 移动表格至用户未分类目录下
  997. func MoveCustomAnalysisExcel2DefaultClassify(excelIds []int, adminId int, realName string) (err error) {
  998. if len(excelIds) == 0 {
  999. return
  1000. }
  1001. var moveClassifyId int
  1002. // 查询默认分类
  1003. cond := ` AND excel_classify_name = ? AND sys_user_id = ?`
  1004. pars := make([]interface{}, 0)
  1005. pars = append(pars, "未分类", adminId)
  1006. classify, e := excel.GetExcelClassifyByCondition(cond, pars)
  1007. if e != nil && !utils.IsErrNoRow(e) {
  1008. err = fmt.Errorf("获取默认分类失败, %v", e)
  1009. return
  1010. }
  1011. if e == nil && classify.ExcelClassifyId > 0 {
  1012. moveClassifyId = classify.ExcelClassifyId
  1013. }
  1014. // 新增一个新的分类
  1015. if classify == nil || classify.ExcelClassifyId <= 0 {
  1016. classifyNew := &excel.ExcelClassify{
  1017. ExcelClassifyName: "未分类",
  1018. Source: utils.CUSTOM_ANALYSIS_TABLE,
  1019. SysUserId: adminId,
  1020. SysUserRealName: realName,
  1021. Level: 1,
  1022. UniqueCode: utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + strconv.FormatInt(time.Now().UnixNano(), 10)),
  1023. CreateTime: time.Now(),
  1024. ModifyTime: time.Now(),
  1025. }
  1026. if _, e = excel.AddExcelClassify(classifyNew); e != nil {
  1027. err = fmt.Errorf("新增默认分类失败, %v", e)
  1028. return
  1029. }
  1030. moveClassifyId = classifyNew.ExcelClassifyId
  1031. }
  1032. if moveClassifyId <= 0 {
  1033. err = fmt.Errorf("移动分类ID有误")
  1034. return
  1035. }
  1036. // 更新表格分类ID
  1037. if e = excel.UpdateExcelInfoClassifyIdByIds(moveClassifyId, excelIds); e != nil {
  1038. err = fmt.Errorf("移动多表格分类失败, %v", e)
  1039. return
  1040. }
  1041. return
  1042. }