base_from_sci_hq.go 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. package data
  2. import (
  3. "errors"
  4. "eta/eta_api/models/data_manage"
  5. "eta/eta_api/utils"
  6. "fmt"
  7. "time"
  8. )
  9. func AddSciHqClassify(classifyName, lang string, parentId int) (ok bool, err error) {
  10. var count int
  11. switch lang {
  12. case utils.EnLangVersion:
  13. count, err = data_manage.GetBaseFromSciHqClassifyEnCount(classifyName, parentId)
  14. default:
  15. count, err = data_manage.GetBaseFromSciHqClassifyCount(classifyName, parentId)
  16. }
  17. if err != nil {
  18. return
  19. }
  20. if count > 0 {
  21. return false, errors.New("分类已存在")
  22. }
  23. sort, err := data_manage.GetChildSciHqClassifyMaxSortById(parentId)
  24. if err != nil {
  25. return false, err
  26. }
  27. if parentId > 0 {
  28. count, err = data_manage.GetSciHqClassifyCountById(parentId)
  29. if err != nil {
  30. return false, err
  31. }
  32. if count == 0 {
  33. return false, errors.New("父分类不存在")
  34. }
  35. sciHqClassify := &data_manage.BaseFromSciHqClassify{
  36. ClassifyName: classifyName,
  37. ClassifyNameEn: classifyName,
  38. ParentId: parentId,
  39. Level: 2,
  40. Sort: sort + 1,
  41. ModifyTime: time.Now(),
  42. CreateTime: time.Now(),
  43. }
  44. _, err = sciHqClassify.Add()
  45. if err != nil {
  46. return
  47. }
  48. } else {
  49. sciHqClassify := &data_manage.BaseFromSciHqClassify{
  50. ClassifyName: classifyName,
  51. ClassifyNameEn: classifyName,
  52. ParentId: 0,
  53. Level: 1,
  54. Sort: sort + 1,
  55. ModifyTime: time.Now(),
  56. CreateTime: time.Now(),
  57. }
  58. insertId, er := sciHqClassify.Add()
  59. if er != nil {
  60. return false, er
  61. }
  62. sciHqClassifyList := []*data_manage.BaseFromSciHqClassify{
  63. {
  64. ClassifyName: "价格",
  65. ClassifyNameEn: "价格",
  66. ParentId: int(insertId),
  67. Level: 2,
  68. Sort: 1,
  69. ModifyTime: time.Now(),
  70. CreateTime: time.Now(),
  71. },
  72. {
  73. ClassifyName: "供应",
  74. ClassifyNameEn: "供应",
  75. ParentId: int(insertId),
  76. Level: 2,
  77. Sort: 2,
  78. ModifyTime: time.Now(),
  79. CreateTime: time.Now(),
  80. },
  81. {
  82. ClassifyName: "需求",
  83. ClassifyNameEn: "需求",
  84. ParentId: int(insertId),
  85. Level: 2,
  86. Sort: 3,
  87. ModifyTime: time.Now(),
  88. CreateTime: time.Now(),
  89. },
  90. {
  91. ClassifyName: "库存",
  92. ClassifyNameEn: "库存",
  93. ParentId: int(insertId),
  94. Level: 2,
  95. Sort: 4,
  96. ModifyTime: time.Now(),
  97. CreateTime: time.Now(),
  98. },
  99. }
  100. err = data_manage.BatchAddSciHqClassify(sciHqClassifyList)
  101. if err != nil {
  102. return
  103. }
  104. }
  105. return true, nil
  106. }
  107. func DelSciHqClassify(classifyId int) (err error) {
  108. classify, err := data_manage.GetSciHqClassifyById(classifyId)
  109. if err != nil {
  110. return
  111. }
  112. var classifyIds []int
  113. if classify.ParentId == 0 {
  114. classifyIds, err = data_manage.GetChildSciHqClassifyIdsById(classify.ClassifyId)
  115. if err != nil {
  116. return
  117. }
  118. } else {
  119. classifyIds = append(classifyIds, classify.ClassifyId)
  120. }
  121. // 获取分类下的所有指标
  122. count, err := data_manage.GetBaseFromSciIndexCountByClassifyIds(classifyIds)
  123. if err != nil {
  124. err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
  125. return
  126. }
  127. if count > 0 {
  128. err = errors.New("该分类下有指标,不可删除")
  129. return
  130. }
  131. // 删除对应的分类
  132. err = data_manage.DeleteSciHqClassifyByClassifyId(classifyIds)
  133. if err != nil {
  134. return
  135. }
  136. return
  137. }
  138. // ResetSciHqIndex 指标数据清除分类接口
  139. func ResetSciHqIndex(indexId int) (err error) {
  140. sciHqIndex, err := data_manage.GetSciHqIndexByIndexId(indexId)
  141. if err != nil {
  142. return
  143. }
  144. // 更新指标在未分类下的排序,永远排在未分类的最后一个
  145. //移动排序
  146. classifyId := 0
  147. updateCol := make([]string, 0)
  148. var currentSort, prevSort int
  149. currentSort = sciHqIndex.Sort
  150. //未分类的最大的sort值
  151. prevSort, err = data_manage.GetSciHqIndexMaxSortByClassifyId(classifyId)
  152. if err != nil {
  153. err = errors.New("获取上一个兄弟节点指标信息失败,Err:" + err.Error())
  154. return
  155. }
  156. //如果前面一个节点的sort值比当前大,则当前节点往下移动
  157. if prevSort >= currentSort {
  158. //往下移动
  159. err = data_manage.MoveDownSciIndexBySort(classifyId, prevSort, currentSort)
  160. if err != nil {
  161. err = errors.New("向下移动出错:" + err.Error())
  162. return
  163. }
  164. sciHqIndex.Sort = prevSort
  165. }
  166. //更新
  167. sciHqIndex.ModifyTime = time.Now()
  168. sciHqIndex.ClassifyId = classifyId
  169. updateCol = append(updateCol, "Sort", "ModifyTime", "ClassifyId")
  170. err = sciHqIndex.Update(updateCol)
  171. if err != nil {
  172. err = errors.New("移动失败,Err:" + err.Error())
  173. return
  174. }
  175. return
  176. }
  177. // 批量删除卓创红期指标
  178. func BatchDelSciHqData(indexIds []int) (existIndex []*data_manage.BaseFromSciHqIndex, err error) {
  179. sciHqIndexList, err := data_manage.GetSciHqIndexListByIndexIds(indexIds)
  180. if err != nil {
  181. return
  182. }
  183. indexCodes := make([]string, 0)
  184. codeToIndex := make(map[string]*data_manage.BaseFromSciHqIndex)
  185. for _, v := range sciHqIndexList {
  186. indexCodes = append(indexCodes, v.IndexCode)
  187. codeToIndex[v.IndexCode] = v
  188. }
  189. edbInfoList, err := data_manage.GetEdbInfoListByEdbCodes(utils.DATA_SOURCE_SCI_HQ, indexCodes)
  190. if err != nil {
  191. return
  192. }
  193. for _, v := range edbInfoList {
  194. if index, ok := codeToIndex[v.EdbCode]; ok {
  195. existIndex = append(existIndex, index)
  196. delete(codeToIndex, v.EdbCode)
  197. }
  198. }
  199. // 删除对应的指标
  200. err = data_manage.DeleteSciHqIndexByIds(indexIds)
  201. if err != nil {
  202. return
  203. }
  204. return
  205. }
  206. // DelSciHqData 删除卓创红期指标
  207. func DelSciHqData(indexId int) (err error, errMsg string) {
  208. baseFromSciHqIndex, err := data_manage.GetSciHqIndexByIndexId(indexId)
  209. if err != nil {
  210. errMsg = `获取数据失败`
  211. if err.Error() == utils.ErrNoRow() {
  212. errMsg = `该指标未入库`
  213. err = nil
  214. }
  215. return
  216. }
  217. // 获取已经加入到EDB指标库的Sci指标
  218. edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_SCI_HQ, baseFromSciHqIndex.IndexCode)
  219. if err != nil && err.Error() != utils.ErrNoRow() {
  220. errMsg = "删除失败"
  221. err = errors.New("获取分类下的指标信息失败,Err:" + err.Error())
  222. return
  223. }
  224. if edbInfo != nil {
  225. errMsg = "当前指标已被引用,不可删除"
  226. err = nil
  227. return
  228. }
  229. // 删除对应的指标
  230. err = data_manage.DeleteSciHqIndexById(indexId)
  231. if err != nil {
  232. return
  233. }
  234. return
  235. }
  236. // EditSciHqIndex 编辑卓创红期指标
  237. func EditSciHqIndex(indexId, classifyId int) (baseFromSciHqIndex *data_manage.BaseFromSciHqIndex, err error) {
  238. baseFromSciHqIndex, err = data_manage.GetSciHqIndexByIndexId(indexId)
  239. if err != nil {
  240. return
  241. }
  242. baseFromSciHqIndex.ClassifyId = classifyId
  243. baseFromSciHqIndex.ModifyTime = time.Now()
  244. err = baseFromSciHqIndex.Update([]string{"ClassifyId", "ModifyTime"})
  245. return
  246. }
  247. type SciIndexSource2EdbReq struct {
  248. EdbCode string
  249. EdbName string
  250. Frequency string
  251. Unit string
  252. ClassifyId int
  253. AdminId int
  254. AdminRealName string
  255. }
  256. // SciHqIndexSource2Edb 新增卓创红期数据从数据源到指标库
  257. func SciHqIndexSource2Edb(req SciIndexSource2EdbReq, lang string) (edb *data_manage.EdbInfo, errMsg string, skip bool, err error) {
  258. if req.EdbCode == "" {
  259. err = fmt.Errorf("指标ID为空")
  260. return
  261. }
  262. defer func() {
  263. if err != nil {
  264. tips := fmt.Sprintf("SciHqIndexSource2Edb新增失败, Err: %s", err.Error())
  265. fmt.Println(tips)
  266. utils.FileLog.Info(tips)
  267. }
  268. }()
  269. source := utils.DATA_SOURCE_SCI_HQ
  270. // 是否新增过指标
  271. exist, e := data_manage.GetEdbInfoByEdbCode(source, req.EdbCode)
  272. if e != nil && e.Error() != utils.ErrNoRow() {
  273. err = fmt.Errorf("获取指标是否存在失败, err: %s", e.Error())
  274. return
  275. }
  276. if exist != nil {
  277. skip = true
  278. return
  279. }
  280. // 开始结束时间
  281. var startDate, endDate string
  282. // 新增指标库
  283. 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)
  284. if e != nil {
  285. errMsg = msg
  286. err = fmt.Errorf("EdbInfo: 新增指标失败, err: %s", e.Error())
  287. return
  288. }
  289. edb = edbInfo
  290. return
  291. }