data_move.go 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505
  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, 7: //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 := 1
  304. if source == 7 {
  305. edbType = 2
  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表格
  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: //ETA指标库、ETA预测指标
  567. if source == 3 {
  568. content += `(ETA指标库)`
  569. } else {
  570. content += `(ETA预测指标)`
  571. }
  572. tmpList, tmpErr := data_manage.GetEdbInfoListByEdbInfoId(dataId)
  573. if tmpErr != nil {
  574. err = tmpErr
  575. return
  576. }
  577. if len(tmpList) > 0 {
  578. for _, v := range tmpList {
  579. //if v.SysUserId == newUserId {
  580. // errMsg = "新创建人不可和原创建人一致"
  581. // err = errors.New(errMsg)
  582. // return
  583. //}
  584. // 操作记录
  585. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  586. DataPermissionMoveRecordId: 0,
  587. Source: int32(source),
  588. SubSource: int32(subSource),
  589. OpUniqueCode: uniqueCode,
  590. DataId: fmt.Sprint(v.EdbInfoId),
  591. DataCode: v.EdbCode,
  592. DataName: v.EdbName,
  593. OriginalUserId: int32(v.SysUserId),
  594. OriginalUserName: v.SysUserRealName,
  595. NewUserId: int32(adminInfo.AdminId),
  596. NewUserName: adminInfo.RealName,
  597. CreateTime: time.Now(),
  598. })
  599. }
  600. // 修改创建人
  601. err = data_manage.ModifyEdbInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  602. // 移除当前用户的不可操作权限
  603. {
  604. obj := data_manage.EdbInfoNoPermissionAdmin{}
  605. for _, v := range dataId {
  606. edbInfoId, _ := strconv.Atoi(v)
  607. go obj.DeleteByEdbInfoIdAndAdminId(edbInfoId, adminInfo.AdminId)
  608. }
  609. }
  610. }
  611. case 5: //图库
  612. content += `(ETA图库)`
  613. // 只展示eta图库
  614. subSource = utils.CHART_SOURCE_DEFAULT
  615. tmpList, tmpErr := data_manage.GetChartInfoListByChartIdList(dataId)
  616. if tmpErr != nil {
  617. err = tmpErr
  618. return
  619. }
  620. if len(tmpList) > 0 {
  621. for _, v := range tmpList {
  622. //if v.SysUserId == newUserId {
  623. // errMsg = "新创建人不可和原创建人一致"
  624. // err = errors.New(errMsg)
  625. // return
  626. //}
  627. // 操作记录
  628. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  629. DataPermissionMoveRecordId: 0,
  630. Source: int32(source),
  631. SubSource: int32(subSource),
  632. OpUniqueCode: uniqueCode,
  633. DataId: fmt.Sprint(v.ChartInfoId),
  634. DataCode: fmt.Sprint(v.ChartInfoId),
  635. DataName: v.ChartName,
  636. OriginalUserId: int32(v.SysUserId),
  637. OriginalUserName: v.SysUserRealName,
  638. NewUserId: int32(adminInfo.AdminId),
  639. NewUserName: adminInfo.RealName,
  640. CreateTime: time.Now(),
  641. })
  642. }
  643. // 修改创建人
  644. err = data_manage.ModifyChartInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  645. }
  646. case 6: // ETA表格
  647. content += `(ETA表格)`
  648. tmpList, tmpErr := excel.GetNoContentExcelListByExcelInfoIdList(dataId)
  649. if tmpErr != nil {
  650. err = tmpErr
  651. return
  652. }
  653. var customAnalysisIds []int
  654. if len(tmpList) > 0 {
  655. for _, v := range tmpList {
  656. //if v.SysUserId == newUserId {
  657. // errMsg = "新创建人不可和原创建人一致"
  658. // err = errors.New(errMsg)
  659. // return
  660. //}
  661. // 操作记录
  662. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  663. DataPermissionMoveRecordId: 0,
  664. Source: int32(source),
  665. SubSource: int32(subSource),
  666. OpUniqueCode: uniqueCode,
  667. DataId: fmt.Sprint(v.ExcelInfoId),
  668. DataCode: fmt.Sprint(v.ExcelInfoId),
  669. DataName: v.ExcelName,
  670. OriginalUserId: int32(v.SysUserId),
  671. OriginalUserName: v.SysUserRealName,
  672. NewUserId: int32(adminInfo.AdminId),
  673. NewUserName: adminInfo.RealName,
  674. CreateTime: time.Now(),
  675. })
  676. if v.Source == utils.CUSTOM_ANALYSIS_TABLE {
  677. customAnalysisIds = append(customAnalysisIds, v.ExcelInfoId)
  678. }
  679. }
  680. // 修改创建人
  681. err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
  682. if err != nil {
  683. return
  684. }
  685. // 由于自定义分析表分类私有化, 如果转移的是自定义分析表, 那么需要将excel转移至未分类下
  686. if len(customAnalysisIds) > 0 {
  687. err = MoveCustomAnalysisExcel2DefaultClassify(customAnalysisIds, adminInfo.AdminId, adminInfo.RealName)
  688. }
  689. }
  690. default:
  691. return
  692. }
  693. // 转移失败了那么就直接返回了
  694. if err != nil {
  695. return
  696. }
  697. // 添加资产转移的记录
  698. dataPermissionMessage := &data_manage_permission.DataPermissionMessage{
  699. DataPermissionMessageId: 0,
  700. SendUserId: int32(opUserId),
  701. ReceiveUserId: int32(adminInfo.AdminId),
  702. Content: title,
  703. Remark: content,
  704. OpType: 1,
  705. Source: int32(source),
  706. SubSource: int32(subSource),
  707. OpUniqueCode: uniqueCode,
  708. IsRead: 0,
  709. CreateTime: time.Now(),
  710. ModifyTime: time.Now(),
  711. }
  712. tmpErr := data_manage_permission.AddDataPermissionMoveRecord(dataPermissionMoveRecordList, dataPermissionMessage)
  713. // 失败的话,日志记录
  714. if tmpErr != nil {
  715. // 序列化结构体为 JSON 数据
  716. recordListJsonBytes, tmpErr2 := json.Marshal(dataPermissionMoveRecordList)
  717. if tmpErr2 != nil {
  718. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;list转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  719. return
  720. }
  721. // 序列化结构体为 JSON 数据
  722. messageJsonBytes, tmpErr2 := json.Marshal(dataPermissionMessage)
  723. if tmpErr2 != nil {
  724. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;message转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  725. return
  726. }
  727. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;操作记录:%s;消息记录:%s", tmpErr.Error(), string(recordListJsonBytes), string(messageJsonBytes)))
  728. }
  729. return
  730. }
  731. // MoveAllEdbChartOld
  732. // @Description: 通过原创建人转移指标/图表创建人
  733. // @author: Roc
  734. // @datetime 2024-03-26 15:11:12
  735. // @param sourceList []int 1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
  736. // @param oldUserId []int
  737. // @param userId int
  738. // @param opUserId int
  739. // @return err error
  740. // @return errMsg string
  741. func MoveAllEdbChartOld(sourceList, oldUserIdList []int, userId, opUserId int) (err error, errMsg string) {
  742. adminInfo, err := system.GetSysAdminById(userId)
  743. if err != nil {
  744. return
  745. }
  746. // 操作记录
  747. dataPermissionMoveRecordList := make([]*data_manage_permission.DataPermissionMoveRecord, 0)
  748. uniqueCode := uuid.NewUUID().Hex32()
  749. title := `资产转移`
  750. content := `资产转入`
  751. sourceStrList := make([]string, 0)
  752. for _, source := range sourceList {
  753. switch source {
  754. case 1: //手工数据指标
  755. sourceStrList = append(sourceStrList, "手工指标数据")
  756. tmpList, tmpErr := models.GetEdbinfoListByCodeListByUserId(oldUserIdList)
  757. if tmpErr != nil {
  758. err = tmpErr
  759. return
  760. }
  761. if len(tmpList) > 0 {
  762. for _, v := range tmpList {
  763. // 操作记录
  764. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  765. DataPermissionMoveRecordId: 0,
  766. Source: int32(source),
  767. SubSource: 0,
  768. OpUniqueCode: uniqueCode,
  769. DataId: v.TradeCode,
  770. DataCode: v.TradeCode,
  771. DataName: v.SecName,
  772. OriginalUserId: int32(v.UserId),
  773. OriginalUserName: v.UserName,
  774. NewUserId: int32(adminInfo.AdminId),
  775. NewUserName: adminInfo.RealName,
  776. CreateTime: time.Now(),
  777. })
  778. }
  779. // 修改创建人
  780. err = models.ModifyEdbinfoUserIdByOldUserId(oldUserIdList, userId)
  781. }
  782. case 2: //钢联化工数据库
  783. sourceStrList = append(sourceStrList, "钢联化工数据库")
  784. tmpList, tmpErr := data_manage.GetMysteelChemicalIndexListByUserId(oldUserIdList)
  785. if tmpErr != nil {
  786. err = tmpErr
  787. return
  788. }
  789. if len(tmpList) > 0 {
  790. for _, v := range tmpList {
  791. //if v.SysUserId == newUserId {
  792. // errMsg = "新创建人不可和原创建人一致"
  793. // err = errors.New(errMsg)
  794. // return
  795. //}
  796. // 操作记录
  797. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  798. DataPermissionMoveRecordId: 0,
  799. Source: int32(source),
  800. SubSource: 0,
  801. OpUniqueCode: uniqueCode,
  802. DataId: fmt.Sprint(v.BaseFromMysteelChemicalIndexId),
  803. DataCode: v.IndexCode,
  804. DataName: v.IndexName,
  805. OriginalUserId: int32(v.SysUserId),
  806. OriginalUserName: v.SysUserRealName,
  807. NewUserId: int32(adminInfo.AdminId),
  808. NewUserName: adminInfo.RealName,
  809. CreateTime: time.Now(),
  810. })
  811. }
  812. // 修改创建人
  813. err = data_manage.ModifyMysteelChemicalIndexUserIdByOldUserId(oldUserIdList, adminInfo.AdminId, adminInfo.RealName)
  814. }
  815. case 3: //ETA指标库
  816. sourceStrList = append(sourceStrList, "ETA指标库")
  817. edbInfoType := 0
  818. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  819. if tmpErr != nil {
  820. err = tmpErr
  821. return
  822. }
  823. if len(tmpList) > 0 {
  824. for _, v := range tmpList {
  825. // 操作记录
  826. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  827. DataPermissionMoveRecordId: 0,
  828. Source: int32(source),
  829. SubSource: int32(edbInfoType),
  830. OpUniqueCode: uniqueCode,
  831. DataId: fmt.Sprint(v.EdbInfoId),
  832. DataCode: v.EdbCode,
  833. DataName: v.EdbName,
  834. OriginalUserId: int32(v.SysUserId),
  835. OriginalUserName: v.SysUserRealName,
  836. NewUserId: int32(adminInfo.AdminId),
  837. NewUserName: adminInfo.RealName,
  838. CreateTime: time.Now(),
  839. })
  840. }
  841. // 修改创建人
  842. err = data_manage.ModifyEdbInfoUserIdByOldUserId(oldUserIdList, edbInfoType, adminInfo.AdminId, adminInfo.RealName)
  843. }
  844. case 4: //ETA预测指标
  845. sourceStrList = append(sourceStrList, "ETA预测指标")
  846. edbInfoType := 1
  847. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  848. if tmpErr != nil {
  849. err = tmpErr
  850. return
  851. }
  852. if len(tmpList) > 0 {
  853. for _, v := range tmpList {
  854. // 操作记录
  855. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  856. DataPermissionMoveRecordId: 0,
  857. Source: int32(source),
  858. SubSource: int32(edbInfoType),
  859. OpUniqueCode: uniqueCode,
  860. DataId: fmt.Sprint(v.EdbInfoId),
  861. DataCode: v.EdbCode,
  862. DataName: v.EdbName,
  863. OriginalUserId: int32(v.SysUserId),
  864. OriginalUserName: v.SysUserRealName,
  865. NewUserId: int32(adminInfo.AdminId),
  866. NewUserName: adminInfo.RealName,
  867. CreateTime: time.Now(),
  868. })
  869. }
  870. // 修改创建人
  871. err = data_manage.ModifyEdbInfoUserIdByOldUserId(oldUserIdList, edbInfoType, adminInfo.AdminId, adminInfo.RealName)
  872. }
  873. case 5: //ETA图库
  874. sourceStrList = append(sourceStrList, "ETA图库")
  875. // 只展示eta图库
  876. subSource := utils.CHART_SOURCE_DEFAULT
  877. tmpList, tmpErr := data_manage.GetChartInfoListByUserId(oldUserIdList, subSource)
  878. if tmpErr != nil {
  879. err = tmpErr
  880. return
  881. }
  882. if len(tmpList) > 0 {
  883. for _, v := range tmpList {
  884. // 操作记录
  885. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  886. DataPermissionMoveRecordId: 0,
  887. Source: int32(source),
  888. SubSource: int32(subSource),
  889. OpUniqueCode: uniqueCode,
  890. DataId: fmt.Sprint(v.ChartInfoId),
  891. DataCode: fmt.Sprint(v.ChartInfoId),
  892. DataName: v.ChartName,
  893. OriginalUserId: int32(v.SysUserId),
  894. OriginalUserName: v.SysUserRealName,
  895. NewUserId: int32(adminInfo.AdminId),
  896. NewUserName: adminInfo.RealName,
  897. CreateTime: time.Now(),
  898. })
  899. }
  900. // 修改创建人
  901. err = data_manage.ModifyChartInfoUserIdByOldUserId(oldUserIdList, adminInfo.AdminId, adminInfo.RealName)
  902. }
  903. case 6: // ETA表格
  904. sourceStrList = append(sourceStrList, "ETA表格")
  905. tmpList, tmpErr := excel.GetNoContentExcelListByUserId(oldUserIdList)
  906. if tmpErr != nil {
  907. err = tmpErr
  908. return
  909. }
  910. if len(tmpList) > 0 {
  911. for _, v := range tmpList {
  912. // 操作记录
  913. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  914. DataPermissionMoveRecordId: 0,
  915. Source: int32(source),
  916. SubSource: int32(v.Source),
  917. OpUniqueCode: uniqueCode,
  918. DataId: fmt.Sprint(v.ExcelInfoId),
  919. DataCode: fmt.Sprint(v.ExcelInfoId),
  920. DataName: v.ExcelName,
  921. OriginalUserId: int32(v.SysUserId),
  922. OriginalUserName: v.SysUserRealName,
  923. NewUserId: int32(adminInfo.AdminId),
  924. NewUserName: adminInfo.RealName,
  925. CreateTime: time.Now(),
  926. })
  927. }
  928. // 修改创建人
  929. err = excel.ModifyExcelInfoUserIdByOldUserId(oldUserIdList, adminInfo.AdminId, adminInfo.RealName)
  930. }
  931. default:
  932. }
  933. // 转移失败了那么就直接返回了
  934. if err != nil {
  935. return
  936. }
  937. }
  938. content += fmt.Sprintf("(%s)", strings.Join(sourceStrList, ","))
  939. // 添加资产转移的记录
  940. dataPermissionMessage := &data_manage_permission.DataPermissionMessage{
  941. DataPermissionMessageId: 0,
  942. SendUserId: int32(opUserId),
  943. ReceiveUserId: int32(adminInfo.AdminId),
  944. Content: title,
  945. Remark: content,
  946. OpType: 2,
  947. OpUniqueCode: uniqueCode,
  948. IsRead: 0,
  949. CreateTime: time.Now(),
  950. ModifyTime: time.Now(),
  951. }
  952. tmpErr := data_manage_permission.AddDataPermissionMoveRecord(dataPermissionMoveRecordList, dataPermissionMessage)
  953. // 失败的话,日志记录
  954. if tmpErr != nil {
  955. // 序列化结构体为 JSON 数据
  956. recordListJsonBytes, tmpErr2 := json.Marshal(dataPermissionMoveRecordList)
  957. if tmpErr2 != nil {
  958. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;list转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  959. return
  960. }
  961. // 序列化结构体为 JSON 数据
  962. messageJsonBytes, tmpErr2 := json.Marshal(dataPermissionMessage)
  963. if tmpErr2 != nil {
  964. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;message转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  965. return
  966. }
  967. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;操作记录:%s;消息记录:%s", tmpErr.Error(), string(recordListJsonBytes), string(messageJsonBytes)))
  968. }
  969. return
  970. }
  971. // MoveAllEdbChart
  972. // @Description: 通过原创建人转移指标/图表创建人
  973. // @author: Roc
  974. // @datetime 2024-03-26 15:11:12
  975. // @param sourceList []int 1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
  976. // @param oldUserId []int
  977. // @param userId int
  978. // @param opUserId int
  979. // @return err error
  980. // @return errMsg string
  981. func MoveAllEdbChart(sourceList, oldUserIdList []int, userId, opUserId int) (err error, errMsg string) {
  982. adminInfo, err := system.GetSysAdminById(userId)
  983. if err != nil {
  984. return
  985. }
  986. // 操作记录
  987. dataPermissionMoveRecordList := make([]*data_manage_permission.DataPermissionMoveRecord, 0)
  988. uniqueCode := uuid.NewUUID().Hex32()
  989. title := `资产转移`
  990. content := `资产转入`
  991. sourceStrList := make([]string, 0)
  992. var isMoveManual, isMoveMysteelChemical, isMoveEdb, isMovePredictEdb, isMoveChart, isMoveExcel bool
  993. var customAnalysisIds []int
  994. // 遍历需要转移的模块,1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格,并找出当前需要转移的资产
  995. for _, source := range sourceList {
  996. switch source {
  997. case 1: //手工数据指标
  998. sourceStrList = append(sourceStrList, "手工指标数据")
  999. tmpList, tmpErr := models.GetEdbinfoListByCodeListByUserId(oldUserIdList)
  1000. if tmpErr != nil {
  1001. err = tmpErr
  1002. return
  1003. }
  1004. if len(tmpList) > 0 {
  1005. for _, v := range tmpList {
  1006. // 操作记录
  1007. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  1008. DataPermissionMoveRecordId: 0,
  1009. Source: int32(source),
  1010. SubSource: 0,
  1011. OpUniqueCode: uniqueCode,
  1012. DataId: v.TradeCode,
  1013. DataCode: v.TradeCode,
  1014. DataName: v.SecName,
  1015. OriginalUserId: int32(v.UserId),
  1016. OriginalUserName: v.UserName,
  1017. NewUserId: int32(adminInfo.AdminId),
  1018. NewUserName: adminInfo.RealName,
  1019. CreateTime: time.Now(),
  1020. })
  1021. }
  1022. isMoveManual = true
  1023. }
  1024. case 2: //钢联化工数据库
  1025. sourceStrList = append(sourceStrList, "钢联化工数据库")
  1026. tmpList, tmpErr := data_manage.GetMysteelChemicalIndexListByUserId(oldUserIdList)
  1027. if tmpErr != nil {
  1028. err = tmpErr
  1029. return
  1030. }
  1031. if len(tmpList) > 0 {
  1032. for _, v := range tmpList {
  1033. //if v.SysUserId == newUserId {
  1034. // errMsg = "新创建人不可和原创建人一致"
  1035. // err = errors.New(errMsg)
  1036. // return
  1037. //}
  1038. // 操作记录
  1039. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  1040. DataPermissionMoveRecordId: 0,
  1041. Source: int32(source),
  1042. SubSource: 0,
  1043. OpUniqueCode: uniqueCode,
  1044. DataId: fmt.Sprint(v.BaseFromMysteelChemicalIndexId),
  1045. DataCode: v.IndexCode,
  1046. DataName: v.IndexName,
  1047. OriginalUserId: int32(v.SysUserId),
  1048. OriginalUserName: v.SysUserRealName,
  1049. NewUserId: int32(adminInfo.AdminId),
  1050. NewUserName: adminInfo.RealName,
  1051. CreateTime: time.Now(),
  1052. })
  1053. }
  1054. isMoveMysteelChemical = true
  1055. }
  1056. case 3: //ETA指标库
  1057. sourceStrList = append(sourceStrList, "ETA指标库")
  1058. edbInfoType := 0
  1059. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  1060. if tmpErr != nil {
  1061. err = tmpErr
  1062. return
  1063. }
  1064. if len(tmpList) > 0 {
  1065. for _, v := range tmpList {
  1066. // 操作记录
  1067. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  1068. DataPermissionMoveRecordId: 0,
  1069. Source: int32(source),
  1070. SubSource: int32(edbInfoType),
  1071. OpUniqueCode: uniqueCode,
  1072. DataId: fmt.Sprint(v.EdbInfoId),
  1073. DataCode: v.EdbCode,
  1074. DataName: v.EdbName,
  1075. OriginalUserId: int32(v.SysUserId),
  1076. OriginalUserName: v.SysUserRealName,
  1077. NewUserId: int32(adminInfo.AdminId),
  1078. NewUserName: adminInfo.RealName,
  1079. CreateTime: time.Now(),
  1080. })
  1081. }
  1082. isMoveEdb = true
  1083. }
  1084. case 4: //ETA预测指标
  1085. sourceStrList = append(sourceStrList, "ETA预测指标")
  1086. edbInfoType := 1
  1087. tmpList, tmpErr := data_manage.GetEdbInfoListByUserId(oldUserIdList, edbInfoType)
  1088. if tmpErr != nil {
  1089. err = tmpErr
  1090. return
  1091. }
  1092. if len(tmpList) > 0 {
  1093. for _, v := range tmpList {
  1094. // 操作记录
  1095. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  1096. DataPermissionMoveRecordId: 0,
  1097. Source: int32(source),
  1098. SubSource: int32(edbInfoType),
  1099. OpUniqueCode: uniqueCode,
  1100. DataId: fmt.Sprint(v.EdbInfoId),
  1101. DataCode: v.EdbCode,
  1102. DataName: v.EdbName,
  1103. OriginalUserId: int32(v.SysUserId),
  1104. OriginalUserName: v.SysUserRealName,
  1105. NewUserId: int32(adminInfo.AdminId),
  1106. NewUserName: adminInfo.RealName,
  1107. CreateTime: time.Now(),
  1108. })
  1109. }
  1110. isMovePredictEdb = true
  1111. }
  1112. case 5: //ETA图库
  1113. sourceStrList = append(sourceStrList, "ETA图库")
  1114. // 只展示eta图库
  1115. subSource := utils.CHART_SOURCE_DEFAULT
  1116. tmpList, tmpErr := data_manage.GetChartInfoListByUserId(oldUserIdList, subSource)
  1117. if tmpErr != nil {
  1118. err = tmpErr
  1119. return
  1120. }
  1121. if len(tmpList) > 0 {
  1122. for _, v := range tmpList {
  1123. // 操作记录
  1124. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  1125. DataPermissionMoveRecordId: 0,
  1126. Source: int32(source),
  1127. SubSource: int32(subSource),
  1128. OpUniqueCode: uniqueCode,
  1129. DataId: fmt.Sprint(v.ChartInfoId),
  1130. DataCode: fmt.Sprint(v.ChartInfoId),
  1131. DataName: v.ChartName,
  1132. OriginalUserId: int32(v.SysUserId),
  1133. OriginalUserName: v.SysUserRealName,
  1134. NewUserId: int32(adminInfo.AdminId),
  1135. NewUserName: adminInfo.RealName,
  1136. CreateTime: time.Now(),
  1137. })
  1138. }
  1139. isMoveChart = true
  1140. }
  1141. case 6: // ETA表格
  1142. sourceStrList = append(sourceStrList, "ETA表格")
  1143. tmpList, tmpErr := excel.GetNoContentExcelListByUserId(oldUserIdList)
  1144. if tmpErr != nil {
  1145. err = tmpErr
  1146. return
  1147. }
  1148. if len(tmpList) > 0 {
  1149. for _, v := range tmpList {
  1150. // 操作记录
  1151. dataPermissionMoveRecordList = append(dataPermissionMoveRecordList, &data_manage_permission.DataPermissionMoveRecord{
  1152. DataPermissionMoveRecordId: 0,
  1153. Source: int32(source),
  1154. SubSource: int32(v.Source),
  1155. OpUniqueCode: uniqueCode,
  1156. DataId: fmt.Sprint(v.ExcelInfoId),
  1157. DataCode: fmt.Sprint(v.ExcelInfoId),
  1158. DataName: v.ExcelName,
  1159. OriginalUserId: int32(v.SysUserId),
  1160. OriginalUserName: v.SysUserRealName,
  1161. NewUserId: int32(adminInfo.AdminId),
  1162. NewUserName: adminInfo.RealName,
  1163. CreateTime: time.Now(),
  1164. })
  1165. if v.Source == utils.CUSTOM_ANALYSIS_TABLE {
  1166. customAnalysisIds = append(customAnalysisIds, v.ExcelInfoId)
  1167. }
  1168. }
  1169. isMoveExcel = true
  1170. }
  1171. default:
  1172. }
  1173. }
  1174. // 修改创建人
  1175. err = data_manage_permission.ModifyDataUserIdByOldUserId(oldUserIdList, adminInfo.AdminId, adminInfo.RealName, isMoveManual, isMoveMysteelChemical, isMoveEdb, isMovePredictEdb, isMoveChart, isMoveExcel)
  1176. // 转移失败了那么就直接返回了
  1177. if err != nil {
  1178. return
  1179. }
  1180. // 由于自定义分析表分类私有化, 如果转移的含自定义分析表, 那么需要将excel转移至未分类下
  1181. if len(customAnalysisIds) > 0 {
  1182. err = MoveCustomAnalysisExcel2DefaultClassify(customAnalysisIds, adminInfo.AdminId, adminInfo.RealName)
  1183. if err != nil {
  1184. err = fmt.Errorf("MoveCustomAnalysisExcel2DefaultClassify, err: %v", err)
  1185. return
  1186. }
  1187. }
  1188. // 添加资产转移的记录
  1189. content += fmt.Sprintf("(%s)", strings.Join(sourceStrList, ","))
  1190. dataPermissionMessage := &data_manage_permission.DataPermissionMessage{
  1191. DataPermissionMessageId: 0,
  1192. SendUserId: int32(opUserId),
  1193. ReceiveUserId: int32(adminInfo.AdminId),
  1194. Content: title,
  1195. Remark: content,
  1196. OpType: 2,
  1197. OpUniqueCode: uniqueCode,
  1198. IsRead: 0,
  1199. CreateTime: time.Now(),
  1200. ModifyTime: time.Now(),
  1201. }
  1202. tmpErr := data_manage_permission.AddDataPermissionMoveRecord(dataPermissionMoveRecordList, dataPermissionMessage)
  1203. // 失败的话,日志记录
  1204. if tmpErr != nil {
  1205. // 序列化结构体为 JSON 数据
  1206. recordListJsonBytes, tmpErr2 := json.Marshal(dataPermissionMoveRecordList)
  1207. if tmpErr2 != nil {
  1208. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;list转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  1209. return
  1210. }
  1211. // 序列化结构体为 JSON 数据
  1212. messageJsonBytes, tmpErr2 := json.Marshal(dataPermissionMessage)
  1213. if tmpErr2 != nil {
  1214. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;message转json失败:;操作记录:%+v;消息记录:%+v", tmpErr.Error(), dataPermissionMoveRecordList, dataPermissionMessage))
  1215. return
  1216. }
  1217. utils.FileLog.Error(fmt.Sprintf("添加资产转移的记录失败:%s;操作记录:%s;消息记录:%s", tmpErr.Error(), string(recordListJsonBytes), string(messageJsonBytes)))
  1218. }
  1219. return
  1220. }
  1221. // GetMoveEdbChartCount 获取待转移的指标/图表列表
  1222. // @param userId 用户
  1223. // @param countType 来源 :1:设置资产权限;2:设置数据权限
  1224. func GetMoveEdbChartCount(userId, countType int) (sourceMap map[int]int, err error) {
  1225. sourceMap = make(map[int]int)
  1226. {
  1227. // 手工数据指标
  1228. var condition string
  1229. var pars []interface{}
  1230. if userId > 0 {
  1231. condition += ` AND a.user_id = ? `
  1232. pars = append(pars, userId)
  1233. }
  1234. total, tmpErr := models.GetEdbinfoListCount(condition, pars, "", 0)
  1235. if tmpErr != nil {
  1236. err = tmpErr
  1237. return
  1238. }
  1239. sourceMap[1] = total
  1240. }
  1241. {
  1242. // 钢联化工数据库
  1243. var condition string
  1244. var pars []interface{}
  1245. if userId > 0 {
  1246. condition += ` AND sys_user_id = ? `
  1247. pars = append(pars, userId)
  1248. }
  1249. total, tmpErr := data_manage.GetMysteelChemicalIndexCount(condition, pars)
  1250. if tmpErr != nil {
  1251. err = tmpErr
  1252. return
  1253. }
  1254. sourceMap[2] = total
  1255. }
  1256. {
  1257. // ETA指标库
  1258. var condition string
  1259. var pars []interface{}
  1260. if userId > 0 {
  1261. condition += ` AND sys_user_id = ? `
  1262. pars = append(pars, userId)
  1263. }
  1264. //ETA指标库
  1265. condition += ` AND edb_info_type = ? `
  1266. pars = append(pars, 0)
  1267. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  1268. if tmpErr != nil {
  1269. err = tmpErr
  1270. return
  1271. }
  1272. sourceMap[3] = total
  1273. }
  1274. {
  1275. // ETA预测指标库
  1276. var condition string
  1277. var pars []interface{}
  1278. if userId > 0 {
  1279. condition += ` AND sys_user_id = ? `
  1280. pars = append(pars, userId)
  1281. }
  1282. //ETA预测指标
  1283. condition += ` AND edb_info_type = ? `
  1284. pars = append(pars, 1)
  1285. total, tmpErr := data_manage.GetEdbInfoByConditionCount(condition, pars)
  1286. if tmpErr != nil {
  1287. err = tmpErr
  1288. return
  1289. }
  1290. sourceMap[4] = total
  1291. }
  1292. {
  1293. // 图库
  1294. var condition string
  1295. var pars []interface{}
  1296. if userId > 0 {
  1297. condition += ` AND sys_user_id = ? `
  1298. pars = append(pars, userId)
  1299. }
  1300. total, tmpErr := data_manage.GetChartInfoCountByCondition(condition, pars)
  1301. if tmpErr != nil {
  1302. err = tmpErr
  1303. return
  1304. }
  1305. sourceMap[5] = total
  1306. }
  1307. {
  1308. // ETA表格
  1309. var condition string
  1310. var pars []interface{}
  1311. condition += ` AND is_delete = 0 `
  1312. if userId > 0 {
  1313. condition += ` AND sys_user_id = ? `
  1314. pars = append(pars, userId)
  1315. }
  1316. switch countType {
  1317. case 2:
  1318. condition += ` AND source in (2,3) `
  1319. default:
  1320. condition += ` AND source in (2,3,4) `
  1321. }
  1322. total, tmpErr := excel.GetExcelInfoCountByCondition(condition, pars)
  1323. if tmpErr != nil {
  1324. err = tmpErr
  1325. return
  1326. }
  1327. sourceMap[6] = total
  1328. }
  1329. return
  1330. }
  1331. // afterMoveManualEdb
  1332. // @Description: 手工数据移动后的操作
  1333. // @author: Roc
  1334. // @datetime 2024-08-01 13:55:59
  1335. // @param tmpList []*models.Edbinfo
  1336. // @param adminInfo *system.Admin
  1337. // @param opUserId int
  1338. // @param opUserName string
  1339. func afterMoveManualEdb(tmpList []*models.Edbinfo, adminInfo *system.Admin, opUserId int, opUserName string) {
  1340. recordList := make([]*models.EdbinfoOpRecord, 0)
  1341. for _, tmpManualInfo := range tmpList {
  1342. remark := fmt.Sprintf("数据资产由%s转移给%s", tmpManualInfo.UserName, adminInfo.RealName)
  1343. recordList = append(recordList, &models.EdbinfoOpRecord{
  1344. TradeCode: tmpManualInfo.TradeCode,
  1345. Remark: remark,
  1346. UserId: opUserId,
  1347. UserName: opUserName,
  1348. CreateTime: time.Now(),
  1349. })
  1350. }
  1351. obj := models.EdbinfoOpRecord{}
  1352. _ = obj.MulCreate(recordList)
  1353. }
  1354. // MoveCustomAnalysisExcel2DefaultClassify 移动表格至用户未分类目录下
  1355. func MoveCustomAnalysisExcel2DefaultClassify(excelIds []int, adminId int, realName string) (err error) {
  1356. if len(excelIds) == 0 {
  1357. return
  1358. }
  1359. var moveClassifyId int
  1360. // 查询默认分类
  1361. cond := ` AND excel_classify_name = ? AND sys_user_id = ?`
  1362. pars := make([]interface{}, 0)
  1363. pars = append(pars, "未分类", adminId)
  1364. classify, e := excel.GetExcelClassifyByCondition(cond, pars)
  1365. if e != nil && !utils.IsErrNoRow(e) {
  1366. err = fmt.Errorf("获取默认分类失败, %v", e)
  1367. return
  1368. }
  1369. if classify != nil {
  1370. moveClassifyId = classify.ExcelClassifyId
  1371. }
  1372. // 新增一个新的分类
  1373. if classify == nil {
  1374. classifyNew := &excel.ExcelClassify{
  1375. ExcelClassifyName: "未分类",
  1376. Source: utils.CUSTOM_ANALYSIS_TABLE,
  1377. SysUserId: adminId,
  1378. SysUserRealName: realName,
  1379. Level: 1,
  1380. UniqueCode: utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + strconv.FormatInt(time.Now().UnixNano(), 10)),
  1381. CreateTime: time.Now(),
  1382. ModifyTime: time.Now(),
  1383. }
  1384. if _, e = excel.AddExcelClassify(classifyNew); e != nil {
  1385. err = fmt.Errorf("新增默认分类失败, %v", e)
  1386. return
  1387. }
  1388. moveClassifyId = classifyNew.ExcelClassifyId
  1389. }
  1390. if moveClassifyId <= 0 {
  1391. err = fmt.Errorf("移动分类ID有误")
  1392. return
  1393. }
  1394. // 更新表格分类ID
  1395. if e = excel.UpdateExcelInfoClassifyIdByIds(moveClassifyId, excelIds); e != nil {
  1396. err = fmt.Errorf("移动多表格分类失败, %v", e)
  1397. return
  1398. }
  1399. return
  1400. }