edb_info.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_index_lib/logic"
  5. "eta_gn/eta_index_lib/models"
  6. "eta_gn/eta_index_lib/utils"
  7. "fmt"
  8. "strings"
  9. "time"
  10. )
  11. // 指标
  12. type EdbInfoController struct {
  13. BaseAuthController
  14. }
  15. // @Title 获取基础指标详情
  16. // @Description 获取基础指标详情
  17. // @Param request body models.EdbInfoDetailReq true "type json string"
  18. // @Success 200 {object} models.EdbInfo
  19. // @router /detail [post]
  20. func (this *EdbInfoController) EdbIndexDetail() {
  21. br := new(models.BaseResponse).Init()
  22. defer func() {
  23. this.Data["json"] = br
  24. this.ServeJSON()
  25. }()
  26. var req models.EdbInfoDetailReq
  27. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  28. if err != nil {
  29. br.Msg = "参数解析异常!"
  30. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  31. return
  32. }
  33. if req.EdbCode == "" {
  34. br.Msg = "请输入指标编码!"
  35. return
  36. }
  37. detail, err := models.GetEdbInfoOnlyByEdbCode(req.EdbCode)
  38. if err != nil {
  39. if err.Error() == utils.ErrNoRow() {
  40. br.Msg = "指标数据不存在!"
  41. br.ErrMsg = "指标数据不存在,Err:" + err.Error()
  42. br.ErrCode = "400"
  43. return
  44. }
  45. br.Msg = "获取数据失败!"
  46. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  47. return
  48. }
  49. br.Ret = 200
  50. br.Success = true
  51. br.Msg = "获取成功"
  52. br.Data = detail
  53. }
  54. // @Title 复制新增来自弘则的指标接口
  55. // @Description 复制新增来自弘则的指标接口
  56. // @Success 200 {object} models.EdbInfo
  57. // @router /copy/from/hz [post]
  58. func (this *EdbInfoController) CopyFromHz() {
  59. br := new(models.BaseResponse).Init()
  60. var cacheKey string
  61. defer func() {
  62. utils.Rc.Delete(cacheKey)
  63. this.Data["json"] = br
  64. this.ServeJSON()
  65. }()
  66. req := new(models.EdbInfo)
  67. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  68. if err != nil {
  69. br.Msg = "参数解析异常!"
  70. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  71. return
  72. }
  73. if req.EdbCode == "" {
  74. br.Msg = "请输入指标编码!"
  75. br.ErrMsg = "请输入指标编码,指标编码为空"
  76. return
  77. }
  78. deleteCache := true
  79. cacheKey = "CACHE_EDB_INFO_COPY_FROM_HZ_" + req.EdbCode
  80. defer func() {
  81. if deleteCache {
  82. utils.Rc.Delete(cacheKey)
  83. }
  84. }()
  85. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  86. deleteCache = false
  87. br.Msg = "系统处理中,请稍后重试!"
  88. br.ErrMsg = "系统处理中,请稍后重试!"
  89. return
  90. }
  91. if req.ClassifyId <= 0 {
  92. br.Msg = "请输入指标分类!"
  93. br.ErrMsg = "请输入指标分类"
  94. return
  95. }
  96. if req.Source <= 0 {
  97. br.Msg = "请输入指标来源!"
  98. br.ErrMsg = "请输入指标来源"
  99. return
  100. }
  101. if req.EdbName == "" {
  102. br.Msg = "请输入指标名称!"
  103. br.ErrMsg = "请输入指标名称"
  104. return
  105. }
  106. if req.Frequency == "" {
  107. br.Msg = "请输入指标频度!"
  108. br.ErrMsg = "请输入指标频度"
  109. return
  110. }
  111. if req.Unit == "" {
  112. br.Msg = "请输入指标单位!"
  113. br.ErrMsg = "请输入指标单位"
  114. return
  115. }
  116. var isAdd bool
  117. item, err := models.GetEdbInfoByEdbCode(req.Source, req.EdbCode)
  118. if err != nil {
  119. if err.Error() == utils.ErrNoRow() {
  120. isAdd = true
  121. } else {
  122. br.Msg = "判断指标是否存在失败!"
  123. br.ErrMsg = "判断指标是否存在失败"
  124. return
  125. }
  126. }
  127. if item != nil && item.EdbInfoId <= 0 {
  128. isAdd = true
  129. }
  130. if isAdd {
  131. req.EdbInfoId = 0
  132. req.StartDate = "1990-01-01"
  133. err = req.Add()
  134. if err != nil {
  135. br.Msg = "新增指标失败!"
  136. br.ErrMsg = "新增指标失败"
  137. return
  138. }
  139. }
  140. edbInfo, err := models.GetEdbInfoOnlyByEdbCode(req.EdbCode)
  141. // 更新ES
  142. go logic.UpdateEs(edbInfo.EdbInfoId)
  143. br.Ret = 200
  144. br.Msg = "新增成功"
  145. br.Data = edbInfo
  146. }
  147. // RefreshCheck @Title 指标数据更新检查
  148. // @Description 指标数据更新检查
  149. // @Param request body models.EdbInfoRefreshCheckReq true "type json string"
  150. // @Success 200 {object} models.EdbInfo
  151. // @router /refresh_check [post]
  152. func (this *EdbInfoController) RefreshCheck() {
  153. br := new(models.BaseResponse).Init()
  154. defer func() {
  155. this.Data["json"] = br
  156. this.ServeJSON()
  157. }()
  158. var req models.EdbInfoRefreshCheckReq
  159. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  160. if err != nil {
  161. br.Msg = "参数解析异常!"
  162. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  163. return
  164. }
  165. if req.Source == 0 {
  166. br.Msg = "请输入指标来源"
  167. return
  168. }
  169. if req.LatestDate == "" {
  170. br.Msg = "请输入查询日期"
  171. return
  172. }
  173. _, err = time.Parse(utils.FormatDate, req.LatestDate)
  174. if err != nil {
  175. br.Msg = "查询日期格式错误"
  176. return
  177. }
  178. condition := ` and source=? and no_update=0 `
  179. pars := make([]interface{}, 0)
  180. pars = append(pars, req.Source)
  181. if req.FrequencyBatch != "" {
  182. frequency := strings.Split(req.FrequencyBatch, ",")
  183. condition += ` and frequency in (` + utils.GetOrmInReplace(len(frequency)) + `)`
  184. for _, v := range frequency {
  185. pars = append(pars, v)
  186. }
  187. }
  188. updateCondition := condition + ` and latest_date = ?`
  189. pars = append(pars, req.LatestDate)
  190. unUpdateCondition := condition + ` and latest_date < ?`
  191. updateNum, err := models.GetEdbInfoCountByCondition(updateCondition, pars)
  192. if err != nil {
  193. br.Msg = "获取数据失败!"
  194. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  195. return
  196. }
  197. unUpdateNum, err := models.GetEdbInfoCountByCondition(unUpdateCondition, pars)
  198. if err != nil {
  199. br.Msg = "获取数据失败!"
  200. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  201. return
  202. }
  203. resp := models.EdbInfoRefreshCheckResp{
  204. UpdateNum: updateNum,
  205. UnUpdateNum: unUpdateNum,
  206. }
  207. br.Ret = 200
  208. br.Success = true
  209. br.Msg = "获取成功"
  210. br.Data = resp
  211. }
  212. // ResetEdbClassify
  213. // @Title 重置指标分类
  214. // @Description 重置指标分类
  215. // @Param request body models.ResetEdbClassifyReq true "type json string"
  216. // @Success 200 {object} models.EdbInfo
  217. // @router /classify_reset [post]
  218. func (this *EdbInfoController) ResetEdbClassify() {
  219. br := new(models.BaseResponse).Init()
  220. defer func() {
  221. if br.ErrMsg == "" {
  222. br.IsSendEmail = false
  223. }
  224. this.Data["json"] = br
  225. this.ServeJSON()
  226. }()
  227. var req models.ResetEdbClassifyReq
  228. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  229. if err != nil {
  230. br.Msg = "参数解析异常!"
  231. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  232. return
  233. }
  234. req.IndexCode = strings.TrimSpace(req.IndexCode)
  235. if req.IndexCode == "" {
  236. br.Msg = "指标编码不可为空"
  237. return
  238. }
  239. req.ClassifyFirst = strings.TrimSpace(req.ClassifyFirst)
  240. if req.ClassifyFirst == "" {
  241. br.Msg = "一级分类名称不可为空"
  242. return
  243. }
  244. req.ClassifySecond = strings.TrimSpace(req.ClassifySecond)
  245. if req.ClassifySecond == "" {
  246. br.Msg = "二级分类名称不可为空"
  247. return
  248. }
  249. req.ClassifyThird = strings.TrimSpace(req.ClassifyThird)
  250. if req.ClassifyThird == "" {
  251. br.Msg = "三级分类名称不可为空"
  252. return
  253. }
  254. // 获取指标信息
  255. edbInfo, e := models.GetEdbInfoOnlyByEdbCode(req.IndexCode)
  256. if e != nil {
  257. if e.Error() == utils.ErrNoRow() {
  258. br.Msg = "指标不存在"
  259. return
  260. }
  261. br.Msg = "获取指标信息失败"
  262. br.ErrMsg = "获取指标信息失败, Err: " + e.Error()
  263. return
  264. }
  265. edbInfoType := uint8(edbInfo.EdbInfoType)
  266. // 新增分类
  267. firstClassify, e, msg := models.SaveEdbClassify(req.ClassifyFirst, 0, 0, edbInfoType, utils.InitAdminId, utils.InitAdminName)
  268. if msg != "" {
  269. br.Msg = "新增一级分类失败"
  270. br.ErrMsg = "新增一级分类失败, ErrMsg: " + e.Error()
  271. if e != nil {
  272. br.ErrMsg = fmt.Sprintf("新增一级分类失败, Err: %s, ErrMsg: %s", e.Error(), msg)
  273. } else {
  274. br.IsSendEmail = false
  275. }
  276. return
  277. }
  278. secondClassify, e, msg := models.SaveEdbClassify(req.ClassifySecond, firstClassify.ClassifyId, 1, edbInfoType, utils.InitAdminId, utils.InitAdminName)
  279. if msg != "" {
  280. br.Msg = "新增二级分类失败"
  281. br.ErrMsg = "新增二级分类失败, ErrMsg: " + e.Error()
  282. if e != nil {
  283. br.ErrMsg = fmt.Sprintf("新增二级分类失败, Err: %s, ErrMsg: %s", e.Error(), msg)
  284. } else {
  285. br.IsSendEmail = false
  286. }
  287. return
  288. }
  289. thirdClassify, e, msg := models.SaveEdbClassify(req.ClassifyThird, secondClassify.ClassifyId, 2, edbInfoType, utils.InitAdminId, utils.InitAdminName)
  290. if msg != "" {
  291. br.Msg = "新增三级分类失败"
  292. br.ErrMsg = "新增三级分类失败, ErrMsg: " + e.Error()
  293. if e != nil {
  294. br.ErrMsg = fmt.Sprintf("新增三级分类失败, Err: %s, ErrMsg: %s", e.Error(), msg)
  295. } else {
  296. br.IsSendEmail = false
  297. }
  298. return
  299. }
  300. // 更新指标分类
  301. cols := []string{"ClassifyId", "ModifyTime"}
  302. edbInfo.ClassifyId = thirdClassify.ClassifyId
  303. edbInfo.ModifyTime = time.Now().Local()
  304. if e := edbInfo.Update(cols); e != nil {
  305. br.Msg = "更新指标失败"
  306. br.ErrMsg = "更新指标失败, Err: " + e.Error()
  307. return
  308. }
  309. // 更新ES
  310. go logic.UpdateEs(edbInfo.EdbInfoId)
  311. br.Data = edbInfo
  312. br.Ret = 200
  313. br.Success = true
  314. br.Msg = "操作成功"
  315. }