mysteel_chemical.go 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. package data
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/models/system"
  8. "eta/eta_api/utils"
  9. "fmt"
  10. "strings"
  11. "time"
  12. "github.com/rdlucklib/rdluck_tools/http"
  13. )
  14. // AddMysteelChemicalClassify 添加钢联化工分类
  15. func AddMysteelChemicalClassify(classifyName string, parentId, level, sysUserId int, sysUserName, lange string) (classifyInfo *data_manage.BaseFromMysteelChemicalClassify, err error, errMsg string) {
  16. // 校验分类名称相同的数量
  17. {
  18. var count int
  19. switch lange {
  20. case utils.EnLangVersion:
  21. count, err = data_manage.GetBaseFromMysteelChemicalClassifyEnCount(classifyName, parentId)
  22. default:
  23. count, err = data_manage.GetBaseFromMysteelChemicalClassifyCount(classifyName, parentId)
  24. }
  25. if err != nil {
  26. errMsg = `判断名称是否已存在失败`
  27. return
  28. }
  29. if count > 0 {
  30. errMsg = `分类名称:` + classifyName + ` 已存在,请重新输入`
  31. err = errors.New(errMsg)
  32. return
  33. }
  34. }
  35. //获取该层级下最大的排序数
  36. maxSort, err := data_manage.GetBaseFromMysteelChemicalClassifyMaxSort(parentId)
  37. classifyInfo = &data_manage.BaseFromMysteelChemicalClassify{
  38. //BaseFromMysteelChemicalClassifyId: 0,
  39. ClassifyName: classifyName,
  40. ClassifyNameEn: classifyName,
  41. ParentId: parentId,
  42. SysUserId: sysUserId,
  43. SysUserRealName: sysUserName,
  44. Sort: maxSort + 1,
  45. Level: level + 1,
  46. ModifyTime: time.Now(),
  47. CreateTime: time.Now(),
  48. }
  49. classifyId, err := data_manage.AddBaseFromMysteelChemicalClassify(classifyInfo)
  50. if err != nil {
  51. errMsg = "保存分类失败"
  52. }
  53. classifyInfo.BaseFromMysteelChemicalClassifyId = int(classifyId)
  54. return
  55. }
  56. // EditMysteelChemicalClassify 编辑钢联化工分类
  57. func EditMysteelChemicalClassify(classifyId int, classifyName, lang string, sysUser *system.Admin) (err error, errMsg string) {
  58. item, err := data_manage.GetBaseFromMysteelChemicalClassifyById(classifyId)
  59. if err != nil {
  60. errMsg = `保存失败`
  61. return
  62. }
  63. // 操作权限校验
  64. button := GetMysteelChemicalOpButton(sysUser, item.SysUserId)
  65. if !button.OpButton {
  66. errMsg = "无权限操作"
  67. return
  68. }
  69. switch lang {
  70. case utils.EnLangVersion:
  71. // 名字相同,那么就直接返回
  72. if item.ClassifyNameEn == classifyName {
  73. return
  74. }
  75. // 判断名称是否已存在
  76. count, tmpErr := data_manage.GetBaseFromMysteelChemicalClassifyEnCount(classifyName, item.ParentId)
  77. if tmpErr != nil {
  78. err = tmpErr
  79. errMsg = "判断名称是否已存在失败"
  80. return
  81. }
  82. if count > 0 {
  83. errMsg = "分类名称已存在,请重新输入"
  84. err = errors.New(errMsg)
  85. return
  86. }
  87. // 修改数据
  88. err = data_manage.EditBaseFromMysteelChemicalClassifyEn(classifyId, classifyName)
  89. if err != nil {
  90. errMsg = "保存失败"
  91. }
  92. default:
  93. // 名字相同,那么就直接返回
  94. if item.ClassifyName == classifyName {
  95. return
  96. }
  97. // 判断名称是否已存在
  98. count, tmpErr := data_manage.GetBaseFromMysteelChemicalClassifyCount(classifyName, item.ParentId)
  99. if tmpErr != nil {
  100. err = tmpErr
  101. errMsg = "判断名称是否已存在失败"
  102. return
  103. }
  104. if count > 0 {
  105. errMsg = "分类名称已存在,请重新输入"
  106. err = errors.New(errMsg)
  107. return
  108. }
  109. // 修改数据
  110. err = data_manage.EditBaseFromMysteelChemicalClassify(classifyId, classifyName)
  111. if err != nil {
  112. errMsg = "保存失败"
  113. }
  114. }
  115. return
  116. }
  117. // MoveMysteelChemicalClassify 移动钢联化工分类
  118. func MoveMysteelChemicalClassify(classifyId, parentClassifyId, prevClassifyId, nextClassifyId int, sysUser *system.Admin) (err error, errMsg string) {
  119. //判断分类是否存在
  120. classifyInfo, err := data_manage.GetBaseFromMysteelChemicalClassifyById(classifyId)
  121. if err != nil {
  122. errMsg = "移动失败"
  123. err = errors.New("获取分类信息失败,Err:" + err.Error())
  124. return
  125. }
  126. // 操作权限校验
  127. button := GetMysteelChemicalOpButton(sysUser, classifyInfo.SysUserId)
  128. if !button.MoveButton {
  129. errMsg = "无权限操作"
  130. return
  131. }
  132. updateCol := make([]string, 0)
  133. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  134. if classifyInfo.ParentId != parentClassifyId && parentClassifyId != 0 {
  135. parentClassifyInfo, tmpErr := data_manage.GetBaseFromMysteelChemicalClassifyById(parentClassifyId)
  136. if tmpErr != nil {
  137. errMsg = "移动失败"
  138. err = errors.New("获取上级分类信息失败,Err:" + tmpErr.Error())
  139. return
  140. }
  141. classifyInfo.ParentId = parentClassifyInfo.BaseFromMysteelChemicalClassifyId
  142. classifyInfo.Level = parentClassifyInfo.Level + 1
  143. classifyInfo.ModifyTime = time.Now()
  144. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  145. }
  146. //如果有传入 上一个兄弟节点分类id
  147. if prevClassifyId > 0 {
  148. prevClassify, tmpErr := data_manage.GetBaseFromMysteelChemicalClassifyById(prevClassifyId)
  149. if tmpErr != nil {
  150. errMsg = "移动失败"
  151. err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + tmpErr.Error())
  152. return
  153. }
  154. //如果是移动在两个兄弟节点之间
  155. if nextClassifyId > 0 {
  156. //下一个兄弟节点
  157. nextClassify, tmpErr := data_manage.GetBaseFromMysteelChemicalClassifyById(nextClassifyId)
  158. if tmpErr != nil {
  159. errMsg = "移动失败"
  160. err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + tmpErr.Error())
  161. return
  162. }
  163. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  164. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == classifyInfo.Sort {
  165. //变更兄弟节点的排序
  166. updateSortStr := `sort + 2`
  167. _ = data_manage.UpdateBaseFromMysteelChemicalClassifySortByClassifyId(parentClassifyId, prevClassify.BaseFromMysteelChemicalClassifyId, prevClassify.Sort, updateSortStr)
  168. } else {
  169. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  170. if nextClassify.Sort-prevClassify.Sort == 1 {
  171. //变更兄弟节点的排序
  172. updateSortStr := `sort + 1`
  173. _ = data_manage.UpdateBaseFromMysteelChemicalClassifySortByClassifyId(parentClassifyId, 0, prevClassify.Sort, updateSortStr)
  174. }
  175. }
  176. }
  177. classifyInfo.Sort = prevClassify.Sort + 1
  178. classifyInfo.ModifyTime = time.Now()
  179. updateCol = append(updateCol, "Sort", "ModifyTime")
  180. } else {
  181. firstClassify, tmpErr := data_manage.GetFirstBaseFromMysteelChemicalClassify()
  182. if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  183. errMsg = "移动失败"
  184. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  185. return
  186. }
  187. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  188. if firstClassify != nil && firstClassify.Sort == 0 {
  189. updateSortStr := ` sort + 1 `
  190. _ = data_manage.UpdateBaseFromMysteelChemicalClassifySortByClassifyId(parentClassifyId, firstClassify.BaseFromMysteelChemicalClassifyId-1, 0, updateSortStr)
  191. }
  192. classifyInfo.Sort = 0 //那就是排在第一位
  193. classifyInfo.ModifyTime = time.Now()
  194. updateCol = append(updateCol, "Sort", "ModifyTime")
  195. }
  196. //更新
  197. if len(updateCol) > 0 {
  198. err = classifyInfo.Update(updateCol)
  199. if err != nil {
  200. errMsg = "移动失败"
  201. err = errors.New("修改失败,Err:" + err.Error())
  202. return
  203. }
  204. }
  205. return
  206. }
  207. // DelMysteelChemicalClassify 删除钢联化工分类
  208. func DelMysteelChemicalClassify(classifyId int, sysUser *system.Admin) (err error, errMsg string) {
  209. //判断分类是否存在
  210. classifyInfo, err := data_manage.GetBaseFromMysteelChemicalClassifyById(classifyId)
  211. if err != nil {
  212. errMsg = "删除失败"
  213. err = errors.New("获取分类信息失败,Err:" + err.Error())
  214. return
  215. }
  216. // 操作权限校验
  217. button := GetMysteelChemicalOpButton(sysUser, classifyInfo.SysUserId)
  218. if !button.DeleteButton {
  219. errMsg = "无权限操作"
  220. return
  221. }
  222. // 需要删除的分类id集合
  223. classifyIdList := make([]int, 0)
  224. classifyIdList = append(classifyIdList, classifyId)
  225. mysteelChemicalIndexIdList := make([]int, 0)
  226. indexCodeList := make([]string, 0)
  227. // 查找所有的子集id
  228. if classifyInfo.ParentId <= 0 {
  229. childrenClassifyInfoList, tmpErr := data_manage.GetBaseFromMysteelChemicalClassifyByParentId(classifyId)
  230. if tmpErr != nil {
  231. errMsg = "删除失败"
  232. err = errors.New("获取分类信息失败,Err:" + tmpErr.Error())
  233. return
  234. }
  235. for _, v := range childrenClassifyInfoList {
  236. classifyIdList = append(classifyIdList, v.BaseFromMysteelChemicalClassifyId)
  237. }
  238. }
  239. // 获取分类下的所有指标
  240. baseFromMysteelChemicalIndexList, err := data_manage.GetBaseFromMysteelChemicalIndexListByClassifyIdList(classifyIdList)
  241. if err != nil {
  242. errMsg = "删除失败"
  243. err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
  244. return
  245. }
  246. for _, v := range baseFromMysteelChemicalIndexList {
  247. mysteelChemicalIndexIdList = append(mysteelChemicalIndexIdList, v.BaseFromMysteelChemicalIndexId)
  248. indexCodeList = append(indexCodeList, v.IndexCode)
  249. }
  250. // 获取已经加入到EDB指标库的钢联化工指标
  251. edbInfoList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_MYSTEEL_CHEMICAL, indexCodeList)
  252. if err != nil {
  253. errMsg = "删除失败"
  254. err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
  255. return
  256. }
  257. if len(edbInfoList) > 0 {
  258. errMsg = "该分类下存在指标加入到ETA图库,无法删除"
  259. return
  260. }
  261. // 删除对应的分类和指标
  262. err = data_manage.DeleteMysteelChemicalByClassifyId(classifyIdList, mysteelChemicalIndexIdList)
  263. if err != nil {
  264. return
  265. }
  266. // 删除指标服务的excel表
  267. go func(list []*data_manage.BaseFromMysteelChemicalIndex) {
  268. for _, v := range list {
  269. CurlDelMysteelChemicalData(v.IndexCode, v.UpdateWeek)
  270. }
  271. }(baseFromMysteelChemicalIndexList)
  272. return
  273. }
  274. // BatchAddMysteelChemicalIndex 批量添加钢联化工指标
  275. func BatchAddMysteelChemicalIndex(items []*data_manage.BaseFromMysteelChemicalIndex, lang string) (baseFromMysteelChemicalIndexs []*data_manage.BaseFromMysteelChemicalIndex, err error, errMsg string) {
  276. indexCodeList := make([]string, 0)
  277. for _, v := range items {
  278. indexCodeList = append(indexCodeList, v.IndexCode)
  279. }
  280. baseFromMysteelChemicalIndexs, err = data_manage.GetBaseFromMysteelChemicalIndexByCodeList(indexCodeList)
  281. if err != nil && err.Error() != utils.ErrNoRow() {
  282. errMsg = `获取数据失败`
  283. return
  284. }
  285. err = nil
  286. // 过滤已存在的指标
  287. filterMap := make(map[string]struct{})
  288. if len(baseFromMysteelChemicalIndexs) > 0 {
  289. existIndexCodeList := make([]string, 0)
  290. for _, v := range baseFromMysteelChemicalIndexs {
  291. existIndexCodeList = append(existIndexCodeList, v.IndexCode)
  292. filterMap[v.IndexCode] = struct{}{}
  293. }
  294. if lang == utils.EnLangVersion {
  295. errMsg = fmt.Sprintf(`Metric ID: %s already exists, please re-enter.`, strings.Join(existIndexCodeList, ","))
  296. } else {
  297. errMsg = fmt.Sprintf(`指标ID: %s 已存在,请重新输入`, strings.Join(existIndexCodeList, ","))
  298. }
  299. return
  300. }
  301. addItems := make([]*data_manage.BaseFromMysteelChemicalIndex, 0)
  302. preAddIndexCodeItems := make([]string, 0)
  303. for _, v := range items {
  304. if _, ok := filterMap[v.IndexCode]; ok {
  305. continue
  306. }
  307. addItems = append(addItems, v)
  308. preAddIndexCodeItems = append(preAddIndexCodeItems, v.IndexCode)
  309. }
  310. _, err = data_manage.BatchAddBaseFromMysteelChemicalIndex(addItems)
  311. if err != nil {
  312. errMsg = "保存分类失败"
  313. }
  314. baseFromMysteelChemicalIndexs, err = data_manage.GetBaseFromMysteelChemicalIndexByCodeList(preAddIndexCodeItems)
  315. if err != nil {
  316. errMsg = "获取数据失败"
  317. return
  318. }
  319. return
  320. }
  321. type HandleMysteelChemicalIndexReq struct {
  322. List []*data_manage.BaseFromMysteelChemicalIndex
  323. }
  324. func BatchAddMysteelChemicalData(items []*data_manage.BaseFromMysteelChemicalIndex, lang string) (resp *models.BaseResponse, err error) {
  325. url := utils.EDB_LIB_URL + "mysteel_chemical/handle/api/mysteel/index"
  326. req := new(HandleMysteelChemicalIndexReq)
  327. req.List = items
  328. postData, err := json.Marshal(req)
  329. if err != nil {
  330. return
  331. }
  332. body, err := HttpPost(url, string(postData), lang)
  333. if err != nil {
  334. return
  335. }
  336. if err = json.Unmarshal(body, &resp); err != nil {
  337. return
  338. }
  339. return
  340. }
  341. type MysteelChemicalIndexSource2EdbReq struct {
  342. EdbCode string
  343. EdbName string
  344. Frequency string
  345. Unit string
  346. ClassifyId int
  347. AdminId int
  348. AdminRealName string
  349. }
  350. // MysteelChemicalIndexSource2Edb 新增钢联化工数据源到指标库
  351. func MysteelChemicalIndexSource2Edb(req MysteelChemicalIndexSource2EdbReq, lang string) (edb *data_manage.EdbInfo, err error, errMsg string, skip bool) {
  352. if req.EdbCode == "" {
  353. err = fmt.Errorf("指标ID为空")
  354. return
  355. }
  356. defer func() {
  357. if err != nil {
  358. tips := fmt.Sprintf("MysteelChemicalIndexSource2Edb新增失败, Err: %s", err.Error())
  359. fmt.Println(tips)
  360. utils.FileLog.Info(tips)
  361. }
  362. }()
  363. source := utils.DATA_SOURCE_MYSTEEL_CHEMICAL
  364. // 是否新增过指标
  365. exist, e := data_manage.GetEdbInfoByEdbCode(source, req.EdbCode)
  366. if e != nil && e.Error() != utils.ErrNoRow() {
  367. err = fmt.Errorf("获取指标是否存在失败, err: %s", e.Error())
  368. return
  369. }
  370. if exist != nil {
  371. skip = true
  372. return
  373. }
  374. // 开始结束时间
  375. var startDate, endDate string
  376. // 新增指标库
  377. edbInfo, e, msg, _ := EdbInfoAdd(source, utils.DATA_SUB_SOURCE_EDB, req.ClassifyId, req.EdbCode, req.EdbName, req.Frequency, req.Unit, startDate, endDate, req.AdminId, req.AdminRealName, lang)
  378. if e != nil {
  379. errMsg = msg
  380. err = fmt.Errorf("EdbInfo: 新增指标失败, err: %s", e.Error())
  381. return
  382. }
  383. edb = edbInfo
  384. return
  385. }
  386. // AddMysteelChemicalIndex 添加钢联化工指标
  387. func AddMysteelChemicalIndex(classifyId int, indexCode, updateWeek, updateTimeStr string, sysUserId int, sysUserName, lang string) (baseFromMysteelChemicalIndex *data_manage.BaseFromMysteelChemicalIndex, err error, errMsg string) {
  388. baseFromMysteelChemicalIndex, err = data_manage.GetBaseFromMysteelChemicalIndexByCode(indexCode)
  389. if err != nil && err.Error() != utils.ErrNoRow() {
  390. errMsg = `获取数据失败`
  391. return
  392. }
  393. if baseFromMysteelChemicalIndex != nil {
  394. if lang == utils.EnLangVersion {
  395. errMsg = `Metric ID:` + indexCode + ` already exists, please re-enter.`
  396. } else {
  397. errMsg = `指标ID:` + indexCode + ` 已存在,请重新输入`
  398. }
  399. return
  400. }
  401. // 更新时间切割
  402. var updateTime1, updateTime2 string
  403. if updateTimeStr != `` {
  404. updateTimeList := strings.Split(updateTimeStr, ",")
  405. updateTime1 = updateTimeList[0]
  406. if len(updateTimeList) > 1 {
  407. updateTime2 = updateTimeList[1]
  408. }
  409. }
  410. edbTerminal := getEdbTerminal(utils.DATA_SOURCE_MYSTEEL_CHEMICAL)
  411. if edbTerminal == nil {
  412. errMsg = `钢联终端信息未配置`
  413. err = errors.New(errMsg)
  414. return
  415. }
  416. baseFromMysteelChemicalIndex = &data_manage.BaseFromMysteelChemicalIndex{
  417. //BaseFromMysteelChemicalIndexId: 0,
  418. BaseFromMysteelChemicalClassifyId: classifyId,
  419. IndexCode: indexCode,
  420. IndexName: "",
  421. Unit: "",
  422. Source: "",
  423. Frequency: "",
  424. StartDate: "",
  425. EndDate: "",
  426. Describe: "",
  427. UpdateWeek: updateWeek,
  428. UpdateTime: updateTime1,
  429. UpdateTime2: updateTime2,
  430. SysUserId: sysUserId,
  431. SysUserRealName: sysUserName,
  432. ModifyTime: time.Now(),
  433. CreateTime: time.Now(),
  434. TerminalCode: edbTerminal.TerminalCode, // 终端编码
  435. }
  436. _, err = data_manage.AddBaseFromMysteelChemicalIndex(baseFromMysteelChemicalIndex)
  437. if err != nil {
  438. errMsg = "保存分类失败"
  439. }
  440. return
  441. }
  442. // EditMysteelChemicalIndex 编辑钢联化工指标
  443. func EditMysteelChemicalIndex(indexId, classifyId int, updateWeek, updateTimeStr string, sysUser *system.Admin) (baseFromMysteelChemicalIndex *data_manage.BaseFromMysteelChemicalIndex, err error, errMsg string) {
  444. baseFromMysteelChemicalIndex, err = data_manage.GetBaseFromMysteelChemicalIndexByIndexId(indexId)
  445. if err != nil {
  446. errMsg = `获取数据失败`
  447. if err.Error() == utils.ErrNoRow() {
  448. errMsg = `该指标未入库`
  449. err = nil
  450. }
  451. return
  452. }
  453. // 操作权限校验
  454. button := GetMysteelChemicalOpButton(sysUser, baseFromMysteelChemicalIndex.SysUserId)
  455. if !button.OpButton {
  456. errMsg = "无权限操作"
  457. return
  458. }
  459. oldUpdateWeek := baseFromMysteelChemicalIndex.UpdateWeek
  460. // 更新时间切割
  461. var updateTime1, updateTime2 string
  462. if updateTimeStr != `` {
  463. updateTimeList := strings.Split(updateTimeStr, ",")
  464. updateTime1 = updateTimeList[0]
  465. if len(updateTimeList) > 1 {
  466. updateTime2 = updateTimeList[1]
  467. }
  468. }
  469. baseFromMysteelChemicalIndex.BaseFromMysteelChemicalClassifyId = classifyId
  470. baseFromMysteelChemicalIndex.UpdateWeek = updateWeek
  471. baseFromMysteelChemicalIndex.UpdateTime = updateTime1
  472. baseFromMysteelChemicalIndex.UpdateTime2 = updateTime2
  473. baseFromMysteelChemicalIndex.ModifyTime = time.Now()
  474. err = baseFromMysteelChemicalIndex.Update([]string{"BaseFromMysteelChemicalClassifyId", "UpdateWeek", "UpdateTime", "UpdateTime2", "ModifyTime"})
  475. if err != nil {
  476. errMsg = "保存分类失败"
  477. }
  478. go func(oldUpdateWeek string, indexInfo *data_manage.BaseFromMysteelChemicalIndex) {
  479. // 先删除excel表
  480. CurlDelMysteelChemicalData(indexInfo.IndexCode, oldUpdateWeek)
  481. }(oldUpdateWeek, baseFromMysteelChemicalIndex)
  482. return
  483. }
  484. // DelMysteelChemical 删除钢联化工指标
  485. func DelMysteelChemical(indexId int, sysUser *system.Admin) (err error, errMsg string) {
  486. baseFromMysteelChemicalIndex, err := data_manage.GetBaseFromMysteelChemicalIndexByIndexId(indexId)
  487. if err != nil {
  488. errMsg = `获取数据失败`
  489. if err.Error() == utils.ErrNoRow() {
  490. errMsg = `该指标未入库`
  491. err = nil
  492. }
  493. return
  494. }
  495. // 操作权限校验
  496. button := GetMysteelChemicalOpButton(sysUser, baseFromMysteelChemicalIndex.SysUserId)
  497. if !button.DeleteButton {
  498. errMsg = "无权限操作"
  499. return
  500. }
  501. // 获取已经加入到EDB指标库的钢联化工指标
  502. edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_MYSTEEL_CHEMICAL, baseFromMysteelChemicalIndex.IndexCode)
  503. if err != nil && err.Error() != utils.ErrNoRow() {
  504. errMsg = "删除失败"
  505. err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
  506. return
  507. }
  508. if edbInfo != nil {
  509. errMsg = "当前指标已被引用,不可删除"
  510. err = nil
  511. return
  512. }
  513. // 删除对应的分类和指标
  514. err = data_manage.DeleteMysteelChemical(indexId)
  515. if err != nil {
  516. return
  517. }
  518. // 删除指标服务的excel表
  519. go CurlDelMysteelChemicalData(baseFromMysteelChemicalIndex.IndexCode, baseFromMysteelChemicalIndex.UpdateWeek)
  520. return
  521. }
  522. // MoveMysteelChemical 移动钢联化工指标
  523. func MoveMysteelChemical(indexId, classifyId, prevIndexId, nextIndexId int, sysUser *system.Admin) (err error, errMsg string) {
  524. //分类信息
  525. baseFromMysteelChemicalIndex, err := data_manage.GetBaseFromMysteelChemicalIndexByIndexId(indexId)
  526. if err != nil {
  527. errMsg = `获取数据失败`
  528. if err.Error() == utils.ErrNoRow() {
  529. errMsg = `该指标未入库`
  530. err = nil
  531. }
  532. return
  533. }
  534. // 操作权限校验
  535. button := GetMysteelChemicalOpButton(sysUser, baseFromMysteelChemicalIndex.SysUserId)
  536. if !button.MoveButton {
  537. errMsg = "无权限操作"
  538. return
  539. }
  540. //判断分类是否存在
  541. _, err = data_manage.GetBaseFromMysteelChemicalClassifyById(classifyId)
  542. if err != nil {
  543. errMsg = "移动失败"
  544. err = errors.New("获取分类信息失败,Err:" + err.Error())
  545. if err.Error() == utils.ErrNoRow() {
  546. errMsg = "找不到该分类"
  547. err = nil
  548. }
  549. return
  550. }
  551. //如果改变了分类,那么移动该图表数据
  552. if baseFromMysteelChemicalIndex.BaseFromMysteelChemicalClassifyId != classifyId {
  553. tmpErr := data_manage.MoveBaseFromMysteelChemicalIndex(indexId, classifyId)
  554. if err != nil {
  555. errMsg = "移动失败"
  556. err = errors.New("移动失败,Err:" + tmpErr.Error())
  557. return
  558. }
  559. }
  560. //移动排序
  561. updateCol := make([]string, 0)
  562. //如果有传入 上一个兄弟节点分类id
  563. if prevIndexId > 0 {
  564. prevIndex, tmpErr := data_manage.GetBaseFromMysteelChemicalIndexByIndexId(prevIndexId)
  565. if err != nil {
  566. errMsg = "移动失败"
  567. err = errors.New("获取上一个兄弟节点指标信息失败,Err:" + tmpErr.Error())
  568. return
  569. }
  570. //如果是移动在两个兄弟节点之间
  571. if nextIndexId > 0 {
  572. //下一个兄弟节点
  573. nextIndex, tmpErr := data_manage.GetBaseFromMysteelChemicalIndexByIndexId(nextIndexId)
  574. if err != nil {
  575. errMsg = "移动失败"
  576. err = errors.New("获取下一个兄弟节点指标信息失败,Err:" + tmpErr.Error())
  577. return
  578. }
  579. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  580. if prevIndex.Sort == nextIndex.Sort || prevIndex.Sort == baseFromMysteelChemicalIndex.Sort {
  581. //变更兄弟节点的排序
  582. updateSortStr := `sort + 2`
  583. _ = data_manage.UpdateBaseFromMysteelChemicalIndexByClassifyId(prevIndex.BaseFromMysteelChemicalClassifyId, prevIndex.Sort, prevIndex.BaseFromMysteelChemicalIndexId, updateSortStr)
  584. } else {
  585. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  586. if nextIndex.Sort-prevIndex.Sort == 1 {
  587. //变更兄弟节点的排序
  588. updateSortStr := `sort + 1`
  589. _ = data_manage.UpdateBaseFromMysteelChemicalIndexByClassifyId(prevIndex.BaseFromMysteelChemicalClassifyId, prevIndex.Sort, prevIndex.BaseFromMysteelChemicalIndexId, updateSortStr)
  590. }
  591. }
  592. }
  593. baseFromMysteelChemicalIndex.Sort = prevIndex.Sort + 1
  594. baseFromMysteelChemicalIndex.ModifyTime = time.Now()
  595. updateCol = append(updateCol, "Sort", "ModifyTime")
  596. } else {
  597. firstClassify, tmpErr := data_manage.GetFirstBaseFromMysteelChemicalIndexByClassifyId(classifyId)
  598. if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  599. errMsg = "移动失败"
  600. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  601. return
  602. }
  603. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  604. if firstClassify != nil && firstClassify.Sort == 0 {
  605. updateSortStr := ` sort + 1 `
  606. _ = data_manage.UpdateBaseFromMysteelChemicalIndexByClassifyId(firstClassify.BaseFromMysteelChemicalClassifyId, 0, firstClassify.BaseFromMysteelChemicalIndexId-1, updateSortStr)
  607. }
  608. baseFromMysteelChemicalIndex.Sort = 0 //那就是排在第一位
  609. baseFromMysteelChemicalIndex.ModifyTime = time.Now()
  610. updateCol = append(updateCol, "Sort", "ModifyTime")
  611. }
  612. //更新
  613. if len(updateCol) > 0 {
  614. err = baseFromMysteelChemicalIndex.Update(updateCol)
  615. if err != nil {
  616. errMsg = "移动失败"
  617. err = errors.New("修改失败,Err:" + err.Error())
  618. return
  619. }
  620. }
  621. if err != nil {
  622. errMsg = "移动失败"
  623. err = errors.New("修改失败,Err:" + err.Error())
  624. return
  625. }
  626. return
  627. }
  628. // GetMysteelChemicalOpButton 获取钢联化工的操作权限
  629. func GetMysteelChemicalOpButton(sysUser *system.Admin, belongUserId int) (button data_manage.BaseFromMysteelChemicalClassifyItemsButton) {
  630. //2、用户对于自己添加的分类,有权限编辑、移动和删除该分类;
  631. //3、ficc管理员和超管对所有分类有编辑、移动和删除权限;
  632. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || sysUser.AdminId == belongUserId || sysUser.MysteelChemicalPermission == 1 {
  633. button.AddButton = true
  634. button.OpButton = true
  635. button.DeleteButton = true
  636. button.MoveButton = true
  637. }
  638. return
  639. }
  640. // CurlDelMysteelChemicalData 请求钢联服务器删除指标
  641. func CurlDelMysteelChemicalData(indexCode, updateWeek string) {
  642. postUrl := utils.MySteelPostUrl + `/api/index/delete`
  643. //type IndexAddReq struct {
  644. // IndexCode string `json:"IndexCode" binding:"required"` //指标编码
  645. // UpdateWeek string `json:"UpdateWeek"` //更新周期
  646. // RunMode string `description:"运行环境:debug:测试(默认),release:生产" json:"UpdateWeek"` //更新周期
  647. //}
  648. paramsMap := make(map[string]interface{})
  649. updateWeek = WeekMap[updateWeek]
  650. paramsMap["IndexCode"] = indexCode
  651. paramsMap["UpdateWeek"] = updateWeek
  652. paramsMap["RunMode"] = utils.RunMode
  653. paramJson, err := json.Marshal(paramsMap)
  654. if err != nil {
  655. fmt.Println("param json.Marshal Err:" + err.Error())
  656. err = errors.New("param json.Marshal Err:" + err.Error())
  657. return
  658. }
  659. utils.FileLog.Info(fmt.Sprintf("CurlDelMysteelChemicalData parms:%s", string(paramJson)))
  660. result, err := http.Post(postUrl, string(paramJson), "application/json")
  661. if err != nil {
  662. fmt.Println("post err:" + err.Error())
  663. err = errors.New("post Err:" + err.Error())
  664. return
  665. }
  666. utils.FileLog.Info("CurlDelMysteelChemicalData Result:%s", string(result))
  667. }
  668. // WeekMap 中英文日期转换
  669. var WeekMap = map[string]string{
  670. "": "",
  671. "周一": "monday",
  672. "周二": "tuesday",
  673. "周三": "wednesday",
  674. "周四": "thursday",
  675. "周五": "friday",
  676. "周六": "saturday",
  677. "周日": "sunday",
  678. }
  679. // CurlRefreshMysteelChemicalData 请求钢联服务器添加指标
  680. func CurlRefreshMysteelChemicalData(mergeFilePath string) {
  681. postUrl := utils.MySteelPostUrl + `/api/index/refresh`
  682. //type IndexAddReq struct {
  683. // IndexCode string `json:"IndexCode" binding:"required"` //指标编码
  684. // UpdateWeek string `json:"UpdateWeek"` //更新周期
  685. // RunMode string `description:"运行环境:debug:测试(默认),release:生产" json:"UpdateWeek"` //更新周期
  686. //}
  687. paramsMap := make(map[string]interface{})
  688. paramsMap["MergeFilePath"] = mergeFilePath
  689. paramJson, err := json.Marshal(paramsMap)
  690. if err != nil {
  691. fmt.Println("param json.Marshal Err:" + err.Error())
  692. err = errors.New("param json.Marshal Err:" + err.Error())
  693. return
  694. }
  695. utils.FileLog.Info(fmt.Sprintf("CurlRefreshMysteelChemicalData parms:%s", string(paramJson)))
  696. result, err := http.Post(postUrl, string(paramJson), "application/json")
  697. if err != nil {
  698. fmt.Println("post err:" + err.Error())
  699. err = errors.New("post Err:" + err.Error())
  700. return
  701. }
  702. utils.FileLog.Info("CurlRefreshMysteelChemicalData Result:%s", string(result))
  703. }
  704. // getEdbTerminal 根据指标来源获取可用指标终端信息
  705. func getEdbTerminal(source int) (edbTerminal *data_manage.EdbTerminal) {
  706. terminalNumList, err := data_manage.GetMysteelChemicalGroupTerminalNum()
  707. if err != nil {
  708. return
  709. }
  710. terminalNumMap := make(map[string]int)
  711. for _, v := range terminalNumList {
  712. terminalNumMap[v.TerminalCode] = v.Num
  713. }
  714. terminalList, err := data_manage.GetEdbTerminalListBySource(source)
  715. if err != nil {
  716. return
  717. }
  718. num := 0
  719. for _, v := range terminalList {
  720. tmpNum := terminalNumMap[v.TerminalCode]
  721. if edbTerminal == nil {
  722. edbTerminal = v
  723. num = tmpNum
  724. } else if tmpNum < num {
  725. edbTerminal = v
  726. num = tmpNum
  727. }
  728. }
  729. return
  730. }