data_move.go 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106
  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)
  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)
  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. tmpList, tmpErr := data_manage.GetEdbInfoListByEdbInfoId(dataId)
  464. if tmpErr != nil {
  465. err = tmpErr
  466. return
  467. }
  468. if len(tmpList) > 0 {
  469. for _, v := range tmpList {
  470. //if v.SysUserId == newUserId {
  471. // errMsg = "新创建人不可和原创建人一致"
  472. // err = errors.New(errMsg)
  473. // return
  474. //}
  475. // 操作记录
  476. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  477. DataPermissionMoveRecordId: 0,
  478. Source: int32(source),
  479. SubSource: int32(subSource),
  480. OpUniqueCode: uniqueCode,
  481. DataId: fmt.Sprint(v.EdbInfoId),
  482. DataCode: v.EdbCode,
  483. DataName: v.EdbName,
  484. OriginalUserId: int32(v.SysUserId),
  485. OriginalUserName: v.SysUserRealName,
  486. NewUserId: int32(adminInfo.AdminId),
  487. NewUserName: adminInfo.RealName,
  488. CreateTime: time.Now(),
  489. })
  490. }
  491. // 修改创建人
  492. err = data_manage.ModifyEdbInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  493. // 移除当前用户的不可操作权限
  494. {
  495. obj := data_manage.EdbInfoNoPermissionAdmin{}
  496. for _, v := range dataId {
  497. edbInfoId, _ := strconv.Atoi(v)
  498. go obj.DeleteByEdbInfoIdAndAdminId(edbInfoId, adminInfo.AdminId)
  499. }
  500. }
  501. }
  502. case 5: //图库
  503. content += `(图库)`
  504. // 只展示eta图库
  505. subSource = utils.CHART_SOURCE_DEFAULT
  506. tmpList, tmpErr := data_manage.GetChartInfoListByChartIdList(dataId)
  507. if tmpErr != nil {
  508. err = tmpErr
  509. return
  510. }
  511. if len(tmpList) > 0 {
  512. for _, v := range tmpList {
  513. //if v.SysUserId == newUserId {
  514. // errMsg = "新创建人不可和原创建人一致"
  515. // err = errors.New(errMsg)
  516. // return
  517. //}
  518. // 操作记录
  519. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  520. DataPermissionMoveRecordId: 0,
  521. Source: int32(source),
  522. SubSource: int32(subSource),
  523. OpUniqueCode: uniqueCode,
  524. DataId: fmt.Sprint(v.ChartInfoId),
  525. DataCode: fmt.Sprint(v.ChartInfoId),
  526. DataName: v.ChartName,
  527. OriginalUserId: int32(v.SysUserId),
  528. OriginalUserName: v.SysUserRealName,
  529. NewUserId: int32(adminInfo.AdminId),
  530. NewUserName: adminInfo.RealName,
  531. CreateTime: time.Now(),
  532. })
  533. }
  534. // 修改创建人
  535. err = data_manage.ModifyChartInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  536. }
  537. case 6: // ETA表格
  538. content += `(表格)`
  539. tmpList, tmpErr := excel.GetNoContentExcelListByExcelInfoIdList(dataId)
  540. if tmpErr != nil {
  541. err = tmpErr
  542. return
  543. }
  544. var customAnalysisIds []int
  545. if len(tmpList) > 0 {
  546. for _, v := range tmpList {
  547. //if v.SysUserId == newUserId {
  548. // errMsg = "新创建人不可和原创建人一致"
  549. // err = errors.New(errMsg)
  550. // return
  551. //}
  552. // 操作记录
  553. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  554. DataPermissionMoveRecordId: 0,
  555. Source: int32(source),
  556. SubSource: int32(subSource),
  557. OpUniqueCode: uniqueCode,
  558. DataId: fmt.Sprint(v.ExcelInfoId),
  559. DataCode: fmt.Sprint(v.ExcelInfoId),
  560. DataName: v.ExcelName,
  561. OriginalUserId: int32(v.SysUserId),
  562. OriginalUserName: v.SysUserRealName,
  563. NewUserId: int32(adminInfo.AdminId),
  564. NewUserName: adminInfo.RealName,
  565. CreateTime: time.Now(),
  566. })
  567. if v.Source == utils.CUSTOM_ANALYSIS_TABLE {
  568. customAnalysisIds = append(customAnalysisIds, v.ExcelInfoId)
  569. }
  570. }
  571. // 修改创建人
  572. err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  573. if err != nil {
  574. return
  575. }
  576. // 由于自定义分析表分类私有化, 如果转移的是自定义分析表, 那么需要将excel转移至未分类下
  577. if len(customAnalysisIds) > 0 {
  578. err = MoveCustomAnalysisExcel2DefaultClassify(customAnalysisIds, adminInfo.AdminId, adminInfo.RealName)
  579. }
  580. }
  581. default:
  582. return
  583. }
  584. // 转移失败了那么就直接返回了
  585. if err != nil {
  586. return
  587. }
  588. // 添加资产转移的记录
  589. dataPermissionMessage := &data_manage_permission.DataPermissionMessage{
  590. DataPermissionMessageId: 0,
  591. SendUserId: int32(opUserId),
  592. ReceiveUserId: int32(adminInfo.AdminId),
  593. Content: title,
  594. Remark: content,
  595. OpType: 1,
  596. Source: int32(source),
  597. SubSource: int32(subSource),
  598. OpUniqueCode: uniqueCode,
  599. IsRead: 0,
  600. CreateTime: time.Now(),
  601. ModifyTime: time.Now(),
  602. }
  603. tmpErr := data_manage_permission.AddDataPermissionMoveRecord(dataPermissionMoveRecordList, dataPermissionMessage)
  604. // 失败的话,日志记录
  605. if tmpErr != nil {
  606. // 序列化结构体为 JSON 数据
  607. recordListJsonBytes, tmpErr2 := json.Marshal(dataPermissionMoveRecordList)
  608. if tmpErr2 != nil {
  609. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;list转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  610. return
  611. }
  612. // 序列化结构体为 JSON 数据
  613. messageJsonBytes, tmpErr2 := json.Marshal(dataPermissionMessage)
  614. if tmpErr2 != nil {
  615. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;message转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  616. return
  617. }
  618. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;操作记录:%s;消息记录:%s", tmpErr.Error(), string(recordListJsonBytes), string(messageJsonBytes)))
  619. }
  620. return
  621. }
  622. // MoveAllEdbChart
  623. // @Description: 通过原创建人转移指标/图表创建人
  624. // @author: Roc
  625. // @datetime 2024-03-26 15:11:12
  626. // @param sourceList []int 1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
  627. // @param oldUserId []int
  628. // @param userId int
  629. // @param opUserId int
  630. // @return err error
  631. // @return errMsg string
  632. func MoveAllEdbChart(sourceList, oldUserIdList []int, userId, opUserId int) (err error, errMsg string) {
  633. adminInfo, err := system.GetSysAdminById(userId)
  634. if err != nil {
  635. return
  636. }
  637. // 操作记录
  638. dataPermissionMoveRecordList := make([]*data_manage_permission.DataPermissionMoveRecord, 0)
  639. uniqueCode := uuid.NewUUID().Hex32()
  640. title := `资产转移`
  641. content := `资产转入`
  642. sourceStrList := make([]string, 0)
  643. var isMoveManual, isMoveMysteelChemical, isMoveEdb, isMovePredictEdb, isMoveChart, isMoveExcel bool
  644. var customAnalysisIds []int
  645. // 遍历需要转移的模块,1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格,并找出当前需要转移的资产
  646. for _, source := range sourceList {
  647. switch source {
  648. case 1: //手工数据指标
  649. sourceStrList = append(sourceStrList, "手工指标数据")
  650. tmpList, tmpErr := models.GetEdbinfoListByCodeListByUserId(oldUserIdList)
  651. if tmpErr != nil {
  652. err = tmpErr
  653. return
  654. }
  655. if len(tmpList) > 0 {
  656. for _, v := range tmpList {
  657. // 操作记录
  658. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  659. DataPermissionMoveRecordId: 0,
  660. Source: int32(source),
  661. SubSource: 0,
  662. OpUniqueCode: uniqueCode,
  663. DataId: v.TradeCode,
  664. DataCode: v.TradeCode,
  665. DataName: v.SecName,
  666. OriginalUserId: int32(v.UserId),
  667. OriginalUserName: v.UserName,
  668. NewUserId: int32(adminInfo.AdminId),
  669. NewUserName: adminInfo.RealName,
  670. CreateTime: time.Now(),
  671. })
  672. }
  673. isMoveManual = true
  674. }
  675. case 3: //ETA指标库
  676. sourceStrList = append(sourceStrList, "ETA指标库")
  677. edbInfoType := 0
  678. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  679. if tmpErr != nil {
  680. err = tmpErr
  681. return
  682. }
  683. if len(tmpList) > 0 {
  684. for _, v := range tmpList {
  685. // 操作记录
  686. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  687. DataPermissionMoveRecordId: 0,
  688. Source: int32(source),
  689. SubSource: int32(edbInfoType),
  690. OpUniqueCode: uniqueCode,
  691. DataId: fmt.Sprint(v.EdbInfoId),
  692. DataCode: v.EdbCode,
  693. DataName: v.EdbName,
  694. OriginalUserId: int32(v.SysUserId),
  695. OriginalUserName: v.SysUserRealName,
  696. NewUserId: int32(adminInfo.AdminId),
  697. NewUserName: adminInfo.RealName,
  698. CreateTime: time.Now(),
  699. })
  700. }
  701. isMoveEdb = true
  702. }
  703. case 4: //ETA预测指标
  704. sourceStrList = append(sourceStrList, "ETA预测指标")
  705. edbInfoType := 1
  706. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  707. if tmpErr != nil {
  708. err = tmpErr
  709. return
  710. }
  711. if len(tmpList) > 0 {
  712. for _, v := range tmpList {
  713. // 操作记录
  714. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  715. DataPermissionMoveRecordId: 0,
  716. Source: int32(source),
  717. SubSource: int32(edbInfoType),
  718. OpUniqueCode: uniqueCode,
  719. DataId: fmt.Sprint(v.EdbInfoId),
  720. DataCode: v.EdbCode,
  721. DataName: v.EdbName,
  722. OriginalUserId: int32(v.SysUserId),
  723. OriginalUserName: v.SysUserRealName,
  724. NewUserId: int32(adminInfo.AdminId),
  725. NewUserName: adminInfo.RealName,
  726. CreateTime: time.Now(),
  727. })
  728. }
  729. isMovePredictEdb = true
  730. }
  731. case 5: //ETA图库
  732. sourceStrList = append(sourceStrList, "ETA图库")
  733. // 只展示eta图库
  734. subSource := utils.CHART_SOURCE_DEFAULT
  735. tmpList, tmpErr := data_manage.GetChartInfoListByUserId(oldUserIdList, subSource)
  736. if tmpErr != nil {
  737. err = tmpErr
  738. return
  739. }
  740. if len(tmpList) > 0 {
  741. for _, v := range tmpList {
  742. // 操作记录
  743. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  744. DataPermissionMoveRecordId: 0,
  745. Source: int32(source),
  746. SubSource: int32(subSource),
  747. OpUniqueCode: uniqueCode,
  748. DataId: fmt.Sprint(v.ChartInfoId),
  749. DataCode: fmt.Sprint(v.ChartInfoId),
  750. DataName: v.ChartName,
  751. OriginalUserId: int32(v.SysUserId),
  752. OriginalUserName: v.SysUserRealName,
  753. NewUserId: int32(adminInfo.AdminId),
  754. NewUserName: adminInfo.RealName,
  755. CreateTime: time.Now(),
  756. })
  757. }
  758. isMoveChart = true
  759. }
  760. case 6: // ETA表格
  761. sourceStrList = append(sourceStrList, "ETA表格")
  762. tmpList, tmpErr := excel.GetNoContentExcelListByUserId(oldUserIdList)
  763. if tmpErr != nil {
  764. err = tmpErr
  765. return
  766. }
  767. if len(tmpList) > 0 {
  768. for _, v := range tmpList {
  769. // 操作记录
  770. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  771. DataPermissionMoveRecordId: 0,
  772. Source: int32(source),
  773. SubSource: int32(v.Source),
  774. OpUniqueCode: uniqueCode,
  775. DataId: fmt.Sprint(v.ExcelInfoId),
  776. DataCode: fmt.Sprint(v.ExcelInfoId),
  777. DataName: v.ExcelName,
  778. OriginalUserId: int32(v.SysUserId),
  779. OriginalUserName: v.SysUserRealName,
  780. NewUserId: int32(adminInfo.AdminId),
  781. NewUserName: adminInfo.RealName,
  782. CreateTime: time.Now(),
  783. })
  784. if v.Source == utils.CUSTOM_ANALYSIS_TABLE {
  785. customAnalysisIds = append(customAnalysisIds, v.ExcelInfoId)
  786. }
  787. }
  788. isMoveExcel = true
  789. }
  790. default:
  791. }
  792. }
  793. // 修改创建人
  794. err = data_manage_permission.ModifyDataUserIdByOldUserId(oldUserIdList, adminInfo.AdminId, adminInfo.RealName, isMoveManual, isMoveMysteelChemical, isMoveEdb, isMovePredictEdb, isMoveChart, isMoveExcel)
  795. // 转移失败了那么就直接返回了
  796. if err != nil {
  797. return
  798. }
  799. // 由于自定义分析表分类私有化, 如果转移的含自定义分析表, 那么需要将excel转移至未分类下
  800. if len(customAnalysisIds) > 0 {
  801. err = MoveCustomAnalysisExcel2DefaultClassify(customAnalysisIds, adminInfo.AdminId, adminInfo.RealName)
  802. if err != nil {
  803. err = fmt.Errorf("MoveCustomAnalysisExcel2DefaultClassify, err: %v", err)
  804. return
  805. }
  806. }
  807. // 添加资产转移的记录
  808. content += fmt.Sprintf("(%s)", strings.Join(sourceStrList, ","))
  809. dataPermissionMessage := &data_manage_permission.DataPermissionMessage{
  810. DataPermissionMessageId: 0,
  811. SendUserId: int32(opUserId),
  812. ReceiveUserId: int32(adminInfo.AdminId),
  813. Content: title,
  814. Remark: content,
  815. OpType: 2,
  816. OpUniqueCode: uniqueCode,
  817. IsRead: 0,
  818. CreateTime: time.Now(),
  819. ModifyTime: time.Now(),
  820. }
  821. tmpErr := data_manage_permission.AddDataPermissionMoveRecord(dataPermissionMoveRecordList, dataPermissionMessage)
  822. // 失败的话,日志记录
  823. if tmpErr != nil {
  824. // 序列化结构体为 JSON 数据
  825. recordListJsonBytes, tmpErr2 := json.Marshal(dataPermissionMoveRecordList)
  826. if tmpErr2 != nil {
  827. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;list转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  828. return
  829. }
  830. // 序列化结构体为 JSON 数据
  831. messageJsonBytes, tmpErr2 := json.Marshal(dataPermissionMessage)
  832. if tmpErr2 != nil {
  833. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;message转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  834. return
  835. }
  836. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;操作记录:%s;消息记录:%s", tmpErr.Error(), string(recordListJsonBytes), string(messageJsonBytes)))
  837. }
  838. return
  839. }
  840. // GetMoveEdbChartCount 获取待转移的指标/图表列表
  841. // @param userId 用户
  842. // @param countType 来源 :1:设置资产权限;2:设置数据权限
  843. func GetMoveEdbChartCount(userId, countType int) (sourceMap map[int]int, err error) {
  844. sourceMap = make(map[int]int)
  845. {
  846. // 手工数据指标
  847. var condition string
  848. var pars []interface{}
  849. if userId > 0 {
  850. condition += ` AND a.user_id = ? `
  851. pars = append(pars, userId)
  852. }
  853. total, tmpErr := models.GetEdbinfoListCount(condition, pars, "", 0)
  854. if tmpErr != nil {
  855. err = tmpErr
  856. return
  857. }
  858. sourceMap[1] = total
  859. }
  860. {
  861. // 基础指标
  862. var condition string
  863. var pars []interface{}
  864. if userId > 0 {
  865. condition += ` AND sys_user_id = ? `
  866. pars = append(pars, userId)
  867. }
  868. condition += ` AND edb_info_type = ? AND edb_type = ? `
  869. pars = append(pars, 0, utils.EdbTypeBase)
  870. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  871. if tmpErr != nil {
  872. err = tmpErr
  873. return
  874. }
  875. sourceMap[3] = total
  876. }
  877. {
  878. // ETA预测指标库
  879. var condition string
  880. var pars []interface{}
  881. if userId > 0 {
  882. condition += ` AND sys_user_id = ? `
  883. pars = append(pars, userId)
  884. }
  885. //ETA预测指标
  886. condition += ` AND edb_info_type = ? `
  887. pars = append(pars, 1)
  888. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  889. if tmpErr != nil {
  890. err = tmpErr
  891. return
  892. }
  893. sourceMap[4] = total
  894. }
  895. {
  896. // 图库
  897. var condition string
  898. var pars []interface{}
  899. condition += ` AND source = ? `
  900. pars = append(pars, utils.CHART_SOURCE_DEFAULT)
  901. if userId > 0 {
  902. condition += ` AND sys_user_id = ? `
  903. pars = append(pars, userId)
  904. }
  905. total, tmpErr := data_manage.GetChartInfoCountByCondition(condition, pars)
  906. if tmpErr != nil {
  907. err = tmpErr
  908. return
  909. }
  910. sourceMap[5] = total
  911. }
  912. {
  913. // ETA表格
  914. var condition string
  915. var pars []interface{}
  916. condition += ` AND is_delete = 0 `
  917. if userId > 0 {
  918. condition += ` AND sys_user_id = ? `
  919. pars = append(pars, userId)
  920. }
  921. switch countType {
  922. case 2:
  923. condition += ` AND source in (2,3,5) `
  924. default:
  925. condition += ` AND source in (2,3,4,5) `
  926. }
  927. // 平衡表
  928. condition += " AND (parent_id = 0 AND balance_type = 0)"
  929. total, tmpErr := excel.GetExcelInfoCountByCondition(condition, pars)
  930. if tmpErr != nil {
  931. err = tmpErr
  932. return
  933. }
  934. sourceMap[6] = total
  935. }
  936. {
  937. // 计算指标
  938. var condition string
  939. var pars []interface{}
  940. if userId > 0 {
  941. condition += ` AND sys_user_id = ? `
  942. pars = append(pars, userId)
  943. }
  944. condition += ` AND edb_info_type = ? AND edb_type = ? `
  945. pars = append(pars, 0, utils.EdbTypeCalculate)
  946. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  947. if tmpErr != nil {
  948. err = tmpErr
  949. return
  950. }
  951. sourceMap[7] = total
  952. }
  953. return
  954. }
  955. // afterMoveManualEdb
  956. // @Description: 手工数据移动后的操作
  957. // @author: Roc
  958. // @datetime 2024-08-01 13:55:59
  959. // @param tmpList []*models.Edbinfo
  960. // @param adminInfo *system.Admin
  961. // @param opUserId int
  962. // @param opUserName string
  963. func afterMoveManualEdb(tmpList []*models.Edbinfo, adminInfo *system.Admin, opUserId int, opUserName string) {
  964. recordList := make([]*models.EdbinfoOpRecord, 0)
  965. for _, tmpManualInfo := range tmpList {
  966. remark := fmt.Sprintf("数据资产由%s转移给%s", tmpManualInfo.UserName, adminInfo.RealName)
  967. recordList = append(recordList, &models.EdbinfoOpRecord{
  968. TradeCode: tmpManualInfo.TradeCode,
  969. Remark: remark,
  970. UserId: opUserId,
  971. UserName: opUserName,
  972. CreateTime: time.Now(),
  973. })
  974. }
  975. obj := models.EdbinfoOpRecord{}
  976. _ = obj.MulCreate(recordList)
  977. }
  978. // MoveCustomAnalysisExcel2DefaultClassify 移动表格至用户未分类目录下
  979. func MoveCustomAnalysisExcel2DefaultClassify(excelIds []int, adminId int, realName string) (err error) {
  980. if len(excelIds) == 0 {
  981. return
  982. }
  983. var moveClassifyId int
  984. // 查询默认分类
  985. cond := ` AND excel_classify_name = ? AND sys_user_id = ?`
  986. pars := make([]interface{}, 0)
  987. pars = append(pars, "未分类", adminId)
  988. classify, e := excel.GetExcelClassifyByCondition(cond, pars)
  989. if e != nil && !utils.IsErrNoRow(e) {
  990. err = fmt.Errorf("获取默认分类失败, %v", e)
  991. return
  992. }
  993. if e == nil && classify.ExcelClassifyId > 0 {
  994. moveClassifyId = classify.ExcelClassifyId
  995. }
  996. // 新增一个新的分类
  997. if classify == nil || classify.ExcelClassifyId <= 0 {
  998. classifyNew := &excel.ExcelClassify{
  999. ExcelClassifyName: "未分类",
  1000. Source: utils.CUSTOM_ANALYSIS_TABLE,
  1001. SysUserId: adminId,
  1002. SysUserRealName: realName,
  1003. Level: 1,
  1004. UniqueCode: utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + strconv.FormatInt(time.Now().UnixNano(), 10)),
  1005. CreateTime: time.Now(),
  1006. ModifyTime: time.Now(),
  1007. }
  1008. if _, e = excel.AddExcelClassify(classifyNew); e != nil {
  1009. err = fmt.Errorf("新增默认分类失败, %v", e)
  1010. return
  1011. }
  1012. moveClassifyId = classifyNew.ExcelClassifyId
  1013. }
  1014. if moveClassifyId <= 0 {
  1015. err = fmt.Errorf("移动分类ID有误")
  1016. return
  1017. }
  1018. // 更新表格分类ID
  1019. if e = excel.UpdateExcelInfoClassifyIdByIds(moveClassifyId, excelIds); e != nil {
  1020. err = fmt.Errorf("移动多表格分类失败, %v", e)
  1021. return
  1022. }
  1023. return
  1024. }