data_move.go 49 KB

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