data_move.go 40 KB

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