edb_info_calculate.go 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/services/data"
  8. "eta/eta_api/utils"
  9. "fmt"
  10. "github.com/rdlucklib/rdluck_tools/paging"
  11. "net/url"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // 计算指标
  17. type EdbInfoCalculateController struct {
  18. controllers.BaseAuthController
  19. }
  20. // @Title 生成计算指标
  21. // @Description 生成计算指标接口
  22. // @Param request body data_manage.EdbInfoCalculateSaveReq true "type json string"
  23. // @Success Ret=200 返回图表id
  24. // @router /edb_info/calculate/save [post]
  25. func (this *ChartInfoController) CalculateSave() {
  26. br := new(models.BaseResponse).Init()
  27. defer func() {
  28. this.Data["json"] = br
  29. this.ServeJSON()
  30. }()
  31. sysUser := this.SysUser
  32. if sysUser == nil {
  33. br.Msg = "请登录"
  34. br.ErrMsg = "请登录,SysUser Is Empty"
  35. br.Ret = 408
  36. return
  37. }
  38. var req data_manage.EdbInfoCalculateSaveReq
  39. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  40. if err != nil {
  41. br.Msg = "参数解析异常!"
  42. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  43. return
  44. }
  45. req.EdbName = strings.Trim(req.EdbName, " ")
  46. if req.EdbName == "" {
  47. br.Msg = "指标名称不能为空"
  48. return
  49. }
  50. if req.Frequency == "" {
  51. br.Msg = "频率不能为空"
  52. return
  53. }
  54. if req.Unit == "" {
  55. br.Msg = "单位不能为空"
  56. return
  57. }
  58. if req.ClassifyId <= 0 {
  59. br.Msg = "请选择分类"
  60. return
  61. }
  62. if len(req.EdbInfoIdArr) <= 0 {
  63. br.Msg = "请选择指标"
  64. return
  65. }
  66. if req.CalculateFormula == "" {
  67. br.Msg = "请填写指标"
  68. return
  69. }
  70. calculateFormula := req.CalculateFormula
  71. calculateFormula = strings.Replace(calculateFormula, "(", "(", -1)
  72. calculateFormula = strings.Replace(calculateFormula, ")", ")", -1)
  73. calculateFormula = strings.Replace(calculateFormula, ",", ",", -1)
  74. calculateFormula = strings.Replace(calculateFormula, "。", ".", -1)
  75. calculateFormula = strings.Replace(calculateFormula, "%", "*0.01", -1)
  76. req.CalculateFormula = calculateFormula
  77. //判断是否重复指标
  78. edbInfoMap := make(map[int]string)
  79. //移除研究员选择指标中的未使用的指标
  80. {
  81. //转大写的计算公式
  82. upperCalculateFormulaStr := strings.ToUpper(req.CalculateFormula)
  83. //用到的指标
  84. newEdbInfoIdArr := make([]data_manage.EdbInfoFromTag, 0)
  85. for _, tmpEdbInfo := range req.EdbInfoIdArr {
  86. _, ok := edbInfoMap[tmpEdbInfo.EdbInfoId]
  87. if ok {
  88. br.Msg = "选择指标失败,请勿选择重复指标!"
  89. return
  90. }
  91. edbInfoMap[tmpEdbInfo.EdbInfoId] = tmpEdbInfo.FromTag
  92. upperFromTag := strings.ToUpper(tmpEdbInfo.FromTag)
  93. if strings.Contains(upperCalculateFormulaStr, upperFromTag) {
  94. newEdbInfoIdArr = append(newEdbInfoIdArr, tmpEdbInfo)
  95. }
  96. }
  97. req.EdbInfoIdArr = newEdbInfoIdArr
  98. }
  99. var condition string
  100. var pars []interface{}
  101. condition += " AND edb_name=? "
  102. pars = append(pars, req.EdbName)
  103. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  104. if err != nil {
  105. br.Msg = "判断指标名称是否存在失败"
  106. br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
  107. return
  108. }
  109. if count > 0 {
  110. br.Msg = "指标名称已存在,请重新填写"
  111. br.ErrMsg = "指标名称已存在,请重新填写"
  112. br.IsSendEmail = false
  113. return
  114. }
  115. //检验公式
  116. var formulaStr string
  117. var edbInfoIdBytes []string
  118. for _, v := range req.EdbInfoIdArr {
  119. formulaStr += v.FromTag + ","
  120. edbInfoIdBytes = append(edbInfoIdBytes, v.FromTag)
  121. }
  122. formulaSlice, err := data.CheckFormulaJson(req.CalculateFormula)
  123. if err != nil {
  124. br.Msg = "公式格式错误,请重新填写"
  125. return
  126. }
  127. for _, formula := range formulaSlice {
  128. formulaMap := data.CheckFormula(formula)
  129. for _, v := range formulaMap {
  130. if !strings.Contains(formulaStr, v) {
  131. br.Msg = "公式错误,请重新填写"
  132. return
  133. }
  134. }
  135. }
  136. // 调用指标库去新增
  137. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  138. AdminId: sysUser.AdminId,
  139. AdminName: sysUser.RealName,
  140. //EdbInfoId: req.EdbInfoId,
  141. EdbName: req.EdbName,
  142. Frequency: req.Frequency,
  143. Unit: req.Unit,
  144. ClassifyId: req.ClassifyId,
  145. CalculateFormula: req.CalculateFormula,
  146. EdbInfoIdArr: req.EdbInfoIdArr,
  147. EmptyType: req.EmptyType,
  148. MaxEmptyType: req.MaxEmptyType,
  149. Extra: req.Extra,
  150. }
  151. reqJson, err := json.Marshal(req2)
  152. if err != nil {
  153. br.Msg = "参数解析异常!"
  154. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  155. return
  156. }
  157. respItem, err := data.AddEdbCalculateData(string(reqJson))
  158. if err != nil {
  159. br.Msg = "新增失败"
  160. br.ErrMsg = "新增失败,Err:" + err.Error()
  161. return
  162. }
  163. if respItem.Ret != 200 {
  164. br.Msg = respItem.Msg
  165. br.ErrMsg = respItem.ErrMsg
  166. return
  167. }
  168. resp := respItem.Data
  169. //添加es
  170. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  171. br.Ret = 200
  172. br.Success = true
  173. br.Msg = "保存成功"
  174. br.Data = resp
  175. br.IsAddLog = true
  176. }
  177. // @Title 获取计算指标详情
  178. // @Description 获取计算指标详情接口
  179. // @Param EdbInfoId query int true "指标id"
  180. // @Success 200 {object} data_manage.CalculateDetailResp
  181. // @router /edb_info/calculate/detail [get]
  182. func (this *ChartInfoController) CalculateDetail() {
  183. br := new(models.BaseResponse).Init()
  184. defer func() {
  185. this.Data["json"] = br
  186. this.ServeJSON()
  187. }()
  188. sysUser := this.SysUser
  189. if sysUser == nil {
  190. br.Msg = "请登录"
  191. br.ErrMsg = "请登录,SysUser Is Empty"
  192. br.Ret = 408
  193. return
  194. }
  195. edbInfoId, _ := this.GetInt("EdbInfoId")
  196. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  197. if err != nil {
  198. br.Msg = "获取失败"
  199. br.ErrMsg = "获取失败,Err:" + err.Error()
  200. return
  201. }
  202. calculateList, err := data_manage.GetEdbInfoCalculateDetail(edbInfoId, edbInfo.Source)
  203. if err != nil {
  204. br.Msg = "获取失败"
  205. br.ErrMsg = "获取失败,Err:" + err.Error()
  206. return
  207. }
  208. fullEdb := new(data_manage.EdbInfoFullClassify)
  209. classifyList, err, errMsg := data.GetFullClassifyByClassifyId(edbInfo.ClassifyId)
  210. if err != nil {
  211. br.Msg = err.Error()
  212. br.ErrMsg = errMsg
  213. return
  214. }
  215. fullEdb.EdbInfo = edbInfo
  216. fullEdb.ClassifyList = classifyList
  217. // 拟合残差计算相关系数
  218. if edbInfo.Source == utils.DATA_SOURCE_CALCULATE_NHCC {
  219. var aEdbInfo, bEdbInfo *data_manage.EdbInfoCalculateDetail
  220. for _, v := range calculateList {
  221. if v.FromTag == "A" {
  222. aEdbInfo = v
  223. continue
  224. }
  225. if v.FromTag == "B" {
  226. bEdbInfo = v
  227. continue
  228. }
  229. }
  230. if aEdbInfo != nil && bEdbInfo != nil {
  231. edbInfoFromTagList := []data_manage.EdbInfoFromTag{
  232. {
  233. EdbInfoId: aEdbInfo.FromEdbInfoId,
  234. FromTag: aEdbInfo.FromTag,
  235. MoveValue: aEdbInfo.MoveValue,
  236. }, {
  237. EdbInfoId: bEdbInfo.FromEdbInfoId,
  238. FromTag: bEdbInfo.FromTag,
  239. MoveValue: bEdbInfo.MoveValue,
  240. },
  241. }
  242. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  243. AdminId: sysUser.AdminId,
  244. AdminName: sysUser.RealName,
  245. Formula: edbInfo.CalculateFormula,
  246. EdbInfoIdArr: edbInfoFromTagList,
  247. }
  248. // 计算
  249. val, err, _ := data.CallCalculateComputeCorrelation(req2)
  250. if err == nil {
  251. fullEdb.CorrelationStr = val
  252. }
  253. }
  254. }
  255. resp := new(data_manage.CalculateDetailResp)
  256. resp.EdbInfoDetail = fullEdb
  257. resp.CalculateList = calculateList
  258. br.Ret = 200
  259. br.Success = true
  260. br.Msg = "保存成功"
  261. br.Data = resp
  262. }
  263. // @Title 修改计算指标
  264. // @Description 修改计算指标接口
  265. // @Param request body data_manage.EdbInfoCalculateEditReq true "type json string"
  266. // @Success Ret=200 返回图表id
  267. // @router /edb_info/calculate/edit [post]
  268. func (this *ChartInfoController) CalculateEdit() {
  269. br := new(models.BaseResponse).Init()
  270. defer func() {
  271. this.Data["json"] = br
  272. this.ServeJSON()
  273. }()
  274. sysUser := this.SysUser
  275. if sysUser == nil {
  276. br.Msg = "请登录"
  277. br.ErrMsg = "请登录,SysUser Is Empty"
  278. br.Ret = 408
  279. return
  280. }
  281. var req data_manage.EdbInfoCalculateEditReq
  282. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  283. if err != nil {
  284. br.Msg = "参数解析异常!"
  285. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  286. return
  287. }
  288. if req.EdbInfoId <= 0 {
  289. br.Msg = "参数错误"
  290. br.ErrMsg = "指标ID:" + strconv.Itoa(req.EdbInfoId)
  291. return
  292. }
  293. req.EdbName = strings.Trim(req.EdbName, " ")
  294. if req.EdbName == "" {
  295. br.Msg = "指标名称不能为空"
  296. return
  297. }
  298. if req.Frequency == "" {
  299. br.Msg = "频率不能为空"
  300. return
  301. }
  302. if req.Unit == "" {
  303. br.Msg = "单位不能为空"
  304. return
  305. }
  306. if req.ClassifyId <= 0 {
  307. br.Msg = "请选择分类"
  308. return
  309. }
  310. if len(req.EdbInfoIdArr) <= 0 {
  311. br.Msg = "请选择指标"
  312. return
  313. }
  314. if req.CalculateFormula == "" {
  315. br.Msg = "请填写指标"
  316. return
  317. }
  318. calculateFormula := req.CalculateFormula
  319. calculateFormula = strings.Replace(calculateFormula, "(", "(", -1)
  320. calculateFormula = strings.Replace(calculateFormula, ")", ")", -1)
  321. calculateFormula = strings.Replace(calculateFormula, ",", ",", -1)
  322. calculateFormula = strings.Replace(calculateFormula, "。", ".", -1)
  323. calculateFormula = strings.Replace(calculateFormula, "%", "*0.01", -1)
  324. req.CalculateFormula = calculateFormula
  325. fmt.Println("calculateFormula:" + calculateFormula)
  326. //判断是否重复指标
  327. edbInfoMap := make(map[int]string)
  328. //移除研究员选择指标中的未使用的指标
  329. {
  330. //转大写的计算公式
  331. upperCalculateFormulaStr := strings.ToUpper(req.CalculateFormula)
  332. //用到的指标
  333. newEdbInfoIdArr := make([]data_manage.EdbInfoFromTag, 0)
  334. for _, tmpEdbInfo := range req.EdbInfoIdArr {
  335. _, ok := edbInfoMap[tmpEdbInfo.EdbInfoId]
  336. if ok {
  337. br.Msg = "选择指标失败,请勿选择重复指标!"
  338. return
  339. }
  340. edbInfoMap[tmpEdbInfo.EdbInfoId] = tmpEdbInfo.FromTag
  341. upperFromTag := strings.ToUpper(tmpEdbInfo.FromTag)
  342. if strings.Contains(upperCalculateFormulaStr, upperFromTag) {
  343. newEdbInfoIdArr = append(newEdbInfoIdArr, tmpEdbInfo)
  344. }
  345. }
  346. req.EdbInfoIdArr = newEdbInfoIdArr
  347. }
  348. var condition string
  349. var pars []interface{}
  350. condition += " AND edb_name=? "
  351. pars = append(pars, req.EdbName)
  352. condition += " AND edb_info_id<>? "
  353. pars = append(pars, req.EdbInfoId)
  354. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  355. if err != nil {
  356. br.Msg = "判断指标名称是否存在失败"
  357. br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
  358. return
  359. }
  360. if count > 0 {
  361. br.Msg = "指标名称已存在,请重新填写"
  362. br.ErrMsg = "指标名称已存在,请重新填写"
  363. br.IsSendEmail = false
  364. return
  365. }
  366. //判断公式,指标是否有改动
  367. edbInfoDetail, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  368. if err != nil {
  369. br.Msg = "修改失败"
  370. br.Msg = "获取指标信息失败,GetEdbInfoById Err:" + err.Error()
  371. return
  372. }
  373. if edbInfoDetail == nil {
  374. br.Msg = "修改失败"
  375. br.Msg = "指标信息不存在,EdbInfoId:" + strconv.Itoa(req.EdbInfoId)
  376. return
  377. }
  378. // 调用指标库去更新
  379. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  380. AdminId: sysUser.AdminId,
  381. AdminName: sysUser.RealName,
  382. EdbInfoId: req.EdbInfoId,
  383. EdbName: req.EdbName,
  384. Frequency: req.Frequency,
  385. Unit: req.Unit,
  386. ClassifyId: req.ClassifyId,
  387. CalculateFormula: req.CalculateFormula,
  388. EdbInfoIdArr: req.EdbInfoIdArr,
  389. EmptyType: req.EmptyType,
  390. MaxEmptyType: req.MaxEmptyType,
  391. Extra: req.Extra,
  392. }
  393. reqJson, err := json.Marshal(req2)
  394. if err != nil {
  395. br.Msg = "参数解析异常!"
  396. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  397. return
  398. }
  399. respItem, err := data.EditEdbCalculateData(string(reqJson))
  400. if err != nil {
  401. br.Msg = "编辑失败"
  402. br.ErrMsg = "编辑失败,Err:" + err.Error()
  403. return
  404. }
  405. if respItem.Ret != 200 {
  406. br.Msg = respItem.Msg
  407. br.ErrMsg = respItem.ErrMsg
  408. return
  409. }
  410. resp := respItem.Data
  411. //添加es
  412. data.AddOrEditEdbInfoToEs(req.EdbInfoId)
  413. // 修改关联的预测指标基础信息
  414. go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfoDetail, req.Frequency, req.Unit)
  415. br.Ret = 200
  416. br.Success = true
  417. br.Msg = "保存成功"
  418. br.IsAddLog = true
  419. br.Data = resp
  420. }
  421. // CalculateBatchSave
  422. // @Title 累计值转月-同比值-同差等计算新增
  423. // @Description 累计值转月-同比值-同差等计算新增接口
  424. // @Param request body data_manage.EdbInfoCalculateBatchSaveReq true "type json string"
  425. // @Success Ret=200 返回指标id
  426. // @router /edb_info/calculate/batch/save [post]
  427. func (this *ChartInfoController) CalculateBatchSave() {
  428. br := new(models.BaseResponse).Init()
  429. defer func() {
  430. if br.ErrMsg == "" {
  431. br.IsSendEmail = false
  432. }
  433. this.Data["json"] = br
  434. this.ServeJSON()
  435. }()
  436. sysUser := this.SysUser
  437. if sysUser == nil {
  438. br.Msg = "请登录"
  439. br.ErrMsg = "请登录,SysUser Is Empty"
  440. br.Ret = 408
  441. return
  442. }
  443. var req data_manage.EdbInfoCalculateBatchSaveReq
  444. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  445. if err != nil {
  446. br.Msg = "参数解析异常!"
  447. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  448. return
  449. }
  450. req.EdbName = strings.Trim(req.EdbName, " ")
  451. if req.EdbName == "" {
  452. br.Msg = "指标名称不能为空"
  453. return
  454. }
  455. if req.Frequency == "" {
  456. br.Msg = "频率不能为空"
  457. return
  458. }
  459. if req.Unit == "" {
  460. br.Msg = "单位不能为空"
  461. return
  462. }
  463. if req.ClassifyId <= 0 {
  464. br.Msg = "请选择分类"
  465. return
  466. }
  467. fromEdbInfoId := req.FromEdbInfoId
  468. var formulaInt int
  469. switch req.Source {
  470. case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_CALCULATE_CJJX:
  471. if req.Formula == "" {
  472. br.Msg = "请填写N值"
  473. return
  474. }
  475. formulaInt, _ = strconv.Atoi(req.Formula)
  476. if formulaInt <= 0 {
  477. br.Msg = "N值输入错误,请重新输入"
  478. return
  479. }
  480. case utils.DATA_SOURCE_CALCULATE_ZJPJ:
  481. //直接拼接指标
  482. //校验时间格式
  483. _, err = time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
  484. if err != nil {
  485. br.Msg = "拼接日期有误,请重新输入"
  486. return
  487. }
  488. case utils.DATA_SOURCE_CALCULATE_NHCC: //拟合残差指标
  489. //指标校验
  490. if len(req.EdbInfoIdArr) != 2 {
  491. br.Msg = "选择的指标异常,请重新选择"
  492. return
  493. }
  494. fromEdbInfoId = req.EdbInfoIdArr[0].EdbInfoId
  495. //校验时间格式
  496. //数据格式:2022-11-01,2022-11-10
  497. timeList := strings.Split(req.Formula, ",")
  498. if len(timeList) != 2 {
  499. br.Msg = "选择时间有误,请重新输入"
  500. return
  501. }
  502. startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
  503. if err != nil {
  504. br.Msg = "开始日期有误,请重新输入"
  505. return
  506. }
  507. endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
  508. if err != nil {
  509. br.Msg = "结束日期有误,请重新输入"
  510. return
  511. }
  512. if utils.GetTimeSubDay(startDate, endDate) < 2 {
  513. br.Msg = "日期间隔不得少于两天"
  514. return
  515. }
  516. case utils.DATA_SOURCE_CALCULATE_ZSXY: // 指数修匀
  517. if req.Formula == "" {
  518. br.Msg = "请填写alpha值"
  519. return
  520. }
  521. alpha, e := strconv.ParseFloat(req.Formula, 64)
  522. if e != nil {
  523. br.Msg = "alpha值输入错误, 请重新输入"
  524. return
  525. }
  526. if alpha <= 0 || alpha >= 1 {
  527. br.Msg = "alpha值输入错误, 请重新输入"
  528. return
  529. }
  530. }
  531. notNeedFromEdbSourceList := []int{utils.DATA_SOURCE_CALCULATE_KSZS} // 不需要传入来源指标id的 指标类型
  532. if fromEdbInfoId <= 0 && !utils.InArrayByInt(notNeedFromEdbSourceList, req.Source) {
  533. br.Msg = "请选择指标"
  534. return
  535. }
  536. //加入缓存机制,避免创建同一个名称的指标 start
  537. redisKey := fmt.Sprint("edb_info:calculate:batch:save:", req.Source, ":", req.EdbName)
  538. isExist := utils.Rc.IsExist(redisKey)
  539. if isExist {
  540. br.Msg = "指标正在处理,请勿重复提交"
  541. return
  542. } else {
  543. //设置3分钟缓存
  544. utils.Rc.SetNX(redisKey, 1, time.Second*300)
  545. defer func() {
  546. utils.Rc.Delete(redisKey)
  547. }()
  548. }
  549. //加入缓存机制,避免创建同一个名称的指标 end
  550. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  551. AdminId: sysUser.AdminId,
  552. AdminName: sysUser.RealName,
  553. EdbInfoId: req.EdbInfoId,
  554. EdbName: req.EdbName,
  555. Frequency: req.Frequency,
  556. Unit: req.Unit,
  557. ClassifyId: req.ClassifyId,
  558. Formula: req.Formula, //N数值移动平均计算、环比值、环差值
  559. FromEdbInfoId: req.FromEdbInfoId,
  560. CalculateFormula: req.CalculateFormula,
  561. Source: req.Source,
  562. MoveType: req.MoveType,
  563. MoveFrequency: req.MoveFrequency,
  564. //CalculateFormula: edbInfo.CalculateFormula,
  565. EdbInfoIdArr: req.EdbInfoIdArr,
  566. Calendar: req.Calendar,
  567. Extra: req.Extra,
  568. }
  569. // 调用指标库去更新
  570. reqJson, err := json.Marshal(req2)
  571. if err != nil {
  572. br.Msg = "参数解析异常!"
  573. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  574. return
  575. }
  576. respItem, err := data.BatchSaveEdbCalculateData(string(reqJson))
  577. if err != nil {
  578. br.Msg = "新增失败"
  579. br.ErrMsg = "新增失败,Err:" + err.Error()
  580. return
  581. }
  582. if respItem.Ret != 200 {
  583. br.Msg = respItem.Msg
  584. br.ErrMsg = respItem.ErrMsg
  585. return
  586. }
  587. resp := respItem.Data
  588. //添加es
  589. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  590. br.Ret = 200
  591. br.Success = true
  592. br.Msg = "保存成功"
  593. br.Data = resp
  594. br.IsAddLog = true
  595. }
  596. // @Title 累计值转月-同比值-同差等计算编辑
  597. // @Description 累计值转月-同比值-同差等计算编辑接口
  598. // @Param request body data_manage.EdbInfoCalculateBatchEditReq true "type json string"
  599. // @Success Ret=200 返回指标id
  600. // @router /edb_info/calculate/batch/edit [post]
  601. func (this *ChartInfoController) CalculateBatchEdit() {
  602. br := new(models.BaseResponse).Init()
  603. defer func() {
  604. if br.ErrMsg == "" {
  605. br.IsSendEmail = false
  606. }
  607. this.Data["json"] = br
  608. this.ServeJSON()
  609. }()
  610. sysUser := this.SysUser
  611. if sysUser == nil {
  612. br.Msg = "请登录"
  613. br.ErrMsg = "请登录,SysUser Is Empty"
  614. br.Ret = 408
  615. return
  616. }
  617. var req data_manage.EdbInfoCalculateBatchEditReq
  618. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  619. if err != nil {
  620. br.Msg = "参数解析异常!"
  621. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  622. return
  623. }
  624. if req.EdbName == "" {
  625. br.Msg = "指标名称不能为空"
  626. return
  627. }
  628. if req.Frequency == "" {
  629. br.Msg = "频率不能为空"
  630. return
  631. }
  632. if req.Unit == "" {
  633. br.Msg = "单位不能为空"
  634. return
  635. }
  636. if req.ClassifyId <= 0 {
  637. br.Msg = "请选择分类"
  638. return
  639. }
  640. if req.EdbInfoId <= 0 {
  641. br.Msg = "请选择指标"
  642. return
  643. }
  644. var condition string
  645. var pars []interface{}
  646. condition += " AND edb_name=? "
  647. pars = append(pars, req.EdbName)
  648. condition += " AND edb_info_id<>? "
  649. pars = append(pars, req.EdbInfoId)
  650. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  651. if err != nil {
  652. br.Msg = "判断指标名称是否存在失败"
  653. br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
  654. return
  655. }
  656. if count > 0 {
  657. br.Msg = "指标名称已存在,请重新填写"
  658. br.ErrMsg = "指标名称已存在,请重新填写"
  659. br.IsSendEmail = false
  660. return
  661. }
  662. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  663. if err != nil {
  664. if err.Error() == utils.ErrNoRow() {
  665. br.Msg = "指标已被删除,请刷新页面"
  666. br.ErrMsg = "指标已被删除,请刷新页面:Err:" + err.Error()
  667. return
  668. }
  669. br.Msg = "获取指标信息失败"
  670. br.ErrMsg = "获取指标信息失败:Err:" + err.Error()
  671. return
  672. }
  673. if req.Source <= 0 {
  674. req.Source = edbInfo.Source
  675. }
  676. var formulaInt int
  677. switch req.Source {
  678. case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_CALCULATE_CJJX:
  679. if req.Formula == "" {
  680. br.Msg = "请填写N值"
  681. return
  682. }
  683. formulaInt, _ = strconv.Atoi(req.Formula)
  684. if formulaInt <= 0 {
  685. br.Msg = "N值输入错误,请重新输入"
  686. return
  687. }
  688. case utils.DATA_SOURCE_CALCULATE_ZJPJ:
  689. //直接拼接指标
  690. //校验时间格式
  691. _, err = time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
  692. if err != nil {
  693. br.Msg = "拼接日期有误,请重新输入"
  694. return
  695. }
  696. case utils.DATA_SOURCE_CALCULATE_NHCC: //拟合残差指标
  697. //指标校验
  698. if len(req.EdbInfoIdArr) != 2 {
  699. br.Msg = "选择的指标异常,请重新选择"
  700. return
  701. }
  702. //校验时间格式
  703. //数据格式:2022-11-01,2022-11-10
  704. timeList := strings.Split(req.Formula, ",")
  705. if len(timeList) != 2 {
  706. br.Msg = "选择时间有误,请重新输入"
  707. return
  708. }
  709. startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
  710. if err != nil {
  711. br.Msg = "开始日期有误,请重新输入"
  712. return
  713. }
  714. endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
  715. if err != nil {
  716. br.Msg = "结束日期有误,请重新输入"
  717. return
  718. }
  719. if utils.GetTimeSubDay(startDate, endDate) < 2 {
  720. br.Msg = "日期间隔不得少于两天"
  721. return
  722. }
  723. case utils.DATA_SOURCE_CALCULATE_ZSXY: // 指数修匀
  724. if req.Formula == "" {
  725. br.Msg = "请填写alpha值"
  726. return
  727. }
  728. alpha, e := strconv.ParseFloat(req.Formula, 64)
  729. if e != nil {
  730. br.Msg = "alpha值输入错误, 请重新输入"
  731. return
  732. }
  733. if alpha <= 0 || alpha >= 1 {
  734. br.Msg = "alpha值输入错误, 请重新输入"
  735. return
  736. }
  737. }
  738. // 构造请求
  739. req2 := &data_manage.EdbInfoCalculateBatchEditReqByEdbLib{
  740. EdbInfoId: req.EdbInfoId,
  741. EdbName: req.EdbName,
  742. Frequency: req.Frequency,
  743. Unit: req.Unit,
  744. ClassifyId: req.ClassifyId,
  745. Formula: req.Formula, //N数值移动平均计算、环比值、环差值
  746. FromEdbInfoId: req.FromEdbInfoId,
  747. Source: req.Source,
  748. MoveType: req.MoveType,
  749. MoveFrequency: req.MoveFrequency,
  750. EdbInfoIdArr: req.EdbInfoIdArr,
  751. Calendar: req.Calendar,
  752. Extra: req.Extra,
  753. }
  754. // 调用指标库去更新
  755. reqJson, err := json.Marshal(req2)
  756. if err != nil {
  757. br.Msg = "参数解析异常!"
  758. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  759. return
  760. }
  761. respItem, err := data.BatchEditEdbCalculateData(string(reqJson))
  762. if err != nil {
  763. br.Msg = "编辑失败"
  764. br.ErrMsg = "编辑失败,Err:" + err.Error()
  765. return
  766. }
  767. if respItem.Ret != 200 {
  768. br.Msg = respItem.Msg
  769. br.ErrMsg = respItem.ErrMsg
  770. return
  771. }
  772. resp := respItem.Data
  773. //添加es
  774. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  775. // 修改关联的预测指标基础信息
  776. go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfo, req.Frequency, req.Unit)
  777. br.Ret = 200
  778. br.Success = true
  779. br.Msg = "保存成功"
  780. br.Data = resp
  781. br.IsAddLog = true
  782. }
  783. // @Title 累计值转月-同比值-同差等重新计算
  784. // @Description 累计值转月-同比值-同差等重新计算接口
  785. // @Param request body data_manage.EdbInfoCalculateBatchSaveReq true "type json string"
  786. // @Success Ret=200 返回指标id
  787. // @router /edb_info/calculate/batch/reset [post]
  788. func (this *ChartInfoController) CalculateBatchReset() {
  789. br := new(models.BaseResponse).Init()
  790. defer func() {
  791. this.Data["json"] = br
  792. this.ServeJSON()
  793. }()
  794. sysUser := this.SysUser
  795. if sysUser == nil {
  796. br.Msg = "请登录"
  797. br.ErrMsg = "请登录,SysUser Is Empty"
  798. br.Ret = 408
  799. return
  800. }
  801. var req data_manage.EdbInfoCalculateBatchSaveReq
  802. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  803. if err != nil {
  804. br.Msg = "参数解析异常!"
  805. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  806. return
  807. }
  808. if req.EdbInfoId <= 0 {
  809. br.Msg = "参数错误"
  810. br.ErrMsg = "参数错误:EdbInfoId:" + strconv.Itoa(req.EdbInfoId)
  811. return
  812. }
  813. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  814. if err != nil {
  815. if err.Error() == utils.ErrNoRow() {
  816. br.Msg = "指标已被删除,请刷新页面"
  817. br.ErrMsg = "指标已删除,请刷新页面:Err:" + err.Error()
  818. return
  819. }
  820. br.Msg = "重新计算失败"
  821. br.ErrMsg = "获取指标信息失败:Err:" + err.Error()
  822. return
  823. }
  824. uniqueCode := edbInfo.UniqueCode
  825. sourName := edbInfo.SourceName
  826. edbInfoId := edbInfo.EdbInfoId
  827. //if source == utils.DATA_SOURCE_CALCULATE {
  828. // //检验公式
  829. // var formulaStr string
  830. // var edbInfoIdBytes []string
  831. // for _, v := range fromEdbInfoList {
  832. // formulaStr += v.FromTag + ","
  833. // edbInfoIdBytes = append(edbInfoIdBytes, v.FromTag)
  834. // }
  835. // formulaStr = strings.Trim(formulaStr, ",")
  836. // formulaMap := data.CheckFormula(req.CalculateFormula)
  837. // for _, v := range formulaMap {
  838. // if !strings.Contains(formulaStr, v) {
  839. // br.Msg = "公式错误,请重新填写"
  840. // return
  841. // }
  842. // }
  843. //
  844. // edbInfoList := make([]*data_manage.EdbInfo, 0)
  845. //
  846. // for _, v := range fromEdbInfoList {
  847. // edbInfo, err := data_manage.GetEdbInfoById(v.FromEdbInfoId)
  848. // if err != nil {
  849. // if err.Error() == utils.ErrNoRow() {
  850. // br.Msg = "重新计算失败"
  851. // br.Msg = "指标 " + strconv.Itoa(v.FromEdbInfoId) + " 不存在"
  852. // return
  853. // }
  854. // br.Msg = "重新计算失败"
  855. // br.Msg = "获取指标失败:Err:" + err.Error()
  856. // return
  857. // }
  858. // edbInfoList = append(edbInfoList, edbInfo)
  859. // }
  860. // //清除历史数据
  861. // err = data_manage.DeleteCalculateData(edbInfoId)
  862. // if err != nil {
  863. // br.Msg = "重新计算失败"
  864. // br.Msg = "获取指标失败:Err:" + err.Error()
  865. // return
  866. // }
  867. // err = data.Calculate(edbInfoList, int(edbInfoId), edbCode, edbInfo.CalculateFormula, edbInfoIdBytes)
  868. // if err != nil {
  869. // br.Msg = "重新计算失败"
  870. // br.Msg = "生成计算指标失败,Calculate Err:" + err.Error()
  871. // return
  872. // }
  873. //} else if source == utils.DATA_SOURCE_CALCULATE_LJZZY {
  874. // _, err = data_manage.AddCalculateLjzzy(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName)
  875. //} else if source == utils.DATA_SOURCE_CALCULATE_TBZ {
  876. // sourName = "同比值"
  877. // edbInfoId, err = data_manage.AddCalculateTbz(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName)
  878. //} else if source == utils.DATA_SOURCE_CALCULATE_TCZ {
  879. // sourName = "同差值"
  880. // edbInfoId, err = data_manage.AddCalculateTcz(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName)
  881. //} else if source == utils.DATA_SOURCE_CALCULATE_NSZYDPJJS {
  882. // sourName = "N数值移动平均计算"
  883. // formulaInt, _ := strconv.Atoi(edbInfo.CalculateFormula)
  884. // edbInfoId, err = data_manage.AddCalculateNszydpjjs(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName, formulaInt)
  885. //} else if source == utils.DATA_SOURCE_CALCULATE_HBZ {
  886. // sourName = "环比值"
  887. // formulaInt, _ := strconv.Atoi(edbInfo.CalculateFormula)
  888. // edbInfoId, err = data_manage.AddCalculateHbz(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName, formulaInt)
  889. //} else if source == utils.DATA_SOURCE_CALCULATE_HCZ {
  890. // sourName = "环差值"
  891. // formulaInt, _ := strconv.Atoi(edbInfo.CalculateFormula)
  892. // edbInfoId, err = data_manage.AddCalculateHcz(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName, formulaInt)
  893. //} else if source == utils.DATA_SOURCE_CALCULATE_BP {
  894. // sourName = "变频"
  895. // edbInfoId, err = data_manage.AddCalculateBp(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName)
  896. //} else if source == utils.DATA_SOURCE_CALCULATE_TIME_SHIFT {
  897. // sourName = "时间移位"
  898. // if req.MoveFrequency == "" {
  899. // req.MoveFrequency = edbInfo.MoveFrequency
  900. // }
  901. // if req.Formula == "" {
  902. // req.Formula = edbInfo.CalculateFormula
  903. // }
  904. // edbInfoId, err = data_manage.AddCalculateTimeShift(&req, fromEdbInfo, edbCode, uniqueCode, sysUser.AdminId, sysUser.RealName)
  905. //} else if source == utils.DATA_SOURCE_CALCULATE_ZJPJ {
  906. // sourName = "直接拼接"
  907. // err = data_manage.RefreshAllCalculateZjpj(edbInfo)
  908. //} else if source == utils.DATA_SOURCE_CALCULATE_LJZTBPJ {
  909. // sourName = "累计值同比拼接"
  910. // err = data_manage.RefreshAllCalculateLjztbpj(edbInfo)
  911. //} else {
  912. // br.Msg = "无效计算方式"
  913. // br.ErrMsg = "无效计算方式,source:" + strconv.Itoa(source)
  914. // return
  915. //}
  916. // 重新计算
  917. err, isAsync := data.EdbInfoRefreshAllFromBaseV2(edbInfoId, true, false)
  918. if err != nil {
  919. fmt.Println(edbInfoId, "RefreshEdbCalculateData err", time.Now())
  920. br.Msg = "重新计算失败"
  921. br.ErrMsg = "生成" + sourName + "失败,RefreshEdbCalculateData Err:" + err.Error()
  922. return
  923. }
  924. resp := new(data_manage.AddEdbInfoResp)
  925. resp.EdbInfoId = edbInfoId
  926. resp.UniqueCode = uniqueCode
  927. br.Ret = 200
  928. br.Success = true
  929. br.Msg = "重新计算成功"
  930. if isAsync {
  931. br.Msg = "该指标关联指标较多,请10分钟后刷新页面查看最新数据"
  932. }
  933. br.Data = resp
  934. br.IsAddLog = true
  935. }
  936. //累计值转月值
  937. //func init() {
  938. // fmt.Println("start CalculateBatchSave")
  939. // req := new(data_manage.EdbInfoCalculateBatchSaveReq)
  940. // req.EdbInfoId = 100282
  941. //
  942. // randStr := utils.GetRandDigit(4)
  943. // edbCode := `C` + time.Now().Format("060102") + randStr
  944. // timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  945. // uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  946. // fromEdbInfo, _ := data_manage.GetEdbInfoById(req.EdbInfoId)
  947. // data_manage.AddCalculateLjzzy(req, fromEdbInfo, edbCode, uniqueCode, 1, "rdluck")
  948. // fmt.Println("end CalculateBatchSave")
  949. // return
  950. //}
  951. ////同比值
  952. //func init() {
  953. // fmt.Println("start AddCalculateTbz")
  954. // req := new(data_manage.EdbInfoCalculateBatchSaveReq)
  955. // req.EdbInfoId = 100092
  956. //
  957. // randStr := utils.GetRandDigit(4)
  958. // edbCode := `C` + time.Now().Format("060102") + randStr
  959. // timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  960. // uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  961. // fromEdbInfo, _ := data_manage.GetEdbInfoById(req.EdbInfoId)
  962. //
  963. // data_manage.AddCalculateTbz(req, fromEdbInfo, edbCode, uniqueCode, 1, "rdluck")
  964. // fmt.Println("end AddCalculateTbz")
  965. // return
  966. //}
  967. //同差值
  968. //func init() {
  969. // fmt.Println("start AddCalculateTbz")
  970. // req := new(data_manage.EdbInfoCalculateBatchSaveReq)
  971. // req.EdbInfoId = 100092
  972. //
  973. // randStr := utils.GetRandDigit(4)
  974. // edbCode := `C` + time.Now().Format("060102") + randStr
  975. // timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  976. // uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  977. // fromEdbInfo, _ := data_manage.GetEdbInfoById(req.EdbInfoId)
  978. //
  979. // data_manage.AddCalculateTcz(req, fromEdbInfo, edbCode, uniqueCode, 1, "rdluck")
  980. //
  981. // fmt.Println("end AddCalculateTbz")
  982. // return
  983. //}
  984. //N数值移动平均计算
  985. //func init() {
  986. // fmt.Println("start AddCalculateTbz")
  987. // req := new(data_manage.EdbInfoCalculateBatchSaveReq)
  988. // req.FromEdbInfoId = 100081
  989. //
  990. // randStr := utils.GetRandDigit(4)
  991. // edbCode := `C` + time.Now().Format("060102") + randStr
  992. // timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  993. // uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  994. // fromEdbInfo, _ := data_manage.GetEdbInfoById(req.FromEdbInfoId)
  995. // formulaInt := 3
  996. // fmt.Println("edbCode:", edbCode)
  997. // data_manage.AddCalculateNszydpjjs(req, fromEdbInfo, edbCode, uniqueCode, 1, "rdluck", formulaInt)
  998. //
  999. // fmt.Println("end AddCalculateTbz")
  1000. // return
  1001. //}
  1002. // ExecPythonCode
  1003. // @Title 执行python代码
  1004. // @Description 执行python代码接口
  1005. // @Param request body data_manage.EdbInfoCalculateSaveReq true "type json string"
  1006. // @Success Ret=200 返回图表id
  1007. // @router /edb_info/python/exec [post]
  1008. func (this *ChartInfoController) ExecPythonCode() {
  1009. br := new(models.BaseResponse).Init()
  1010. defer func() {
  1011. this.Data["json"] = br
  1012. this.ServeJSON()
  1013. }()
  1014. sysUser := this.SysUser
  1015. if sysUser == nil {
  1016. br.Msg = "请登录"
  1017. br.ErrMsg = "请登录,SysUser Is Empty"
  1018. br.Ret = 408
  1019. return
  1020. }
  1021. var req data_manage.ExecPythonEdbReq
  1022. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1023. if err != nil {
  1024. br.Msg = "参数解析异常!"
  1025. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1026. return
  1027. }
  1028. if req.PythonCode == "" {
  1029. br.Msg = "python代码不能为空"
  1030. return
  1031. }
  1032. resp, err := data.ExecPythonCode(req.PythonCode)
  1033. if err != nil {
  1034. br.Msg = "python代码执行失败,请检查代码"
  1035. br.ErrMsg = "python代码执行失败,Err:" + err.Error()
  1036. return
  1037. }
  1038. if resp.Ret != 200 {
  1039. br.Msg = "python代码执行失败,请检查代码"
  1040. br.ErrMsg = "python代码执行失败,Err:" + resp.ErrMsg
  1041. return
  1042. }
  1043. br.Ret = 200
  1044. br.Success = true
  1045. br.Msg = "运行成功"
  1046. br.Data = resp.Data
  1047. }
  1048. // AddPythonEdb
  1049. // @Title 添加python指标
  1050. // @Description 添加python指标接口
  1051. // @Param request body data_manage.AddPythonEdbReq true "type json string"
  1052. // @Success 200 {object} data_manage.AddEdbInfoResp
  1053. // @router /edb_info/python/add [post]
  1054. func (this *ChartInfoController) AddPythonEdb() {
  1055. br := new(models.BaseResponse).Init()
  1056. defer func() {
  1057. this.Data["json"] = br
  1058. this.ServeJSON()
  1059. }()
  1060. sysUser := this.SysUser
  1061. if sysUser == nil {
  1062. br.Msg = "请登录"
  1063. br.ErrMsg = "请登录,SysUser Is Empty"
  1064. br.Ret = 408
  1065. return
  1066. }
  1067. var req data_manage.PostAddPythonEdbReq
  1068. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1069. if err != nil {
  1070. br.Msg = "参数解析异常!"
  1071. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1072. return
  1073. }
  1074. //传入操作人
  1075. req.AdminId = sysUser.AdminId
  1076. req.AdminName = sysUser.RealName
  1077. reqJson, err := json.Marshal(req)
  1078. if err != nil {
  1079. br.Msg = "参数解析异常!"
  1080. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1081. return
  1082. }
  1083. // 判断指标名称是否重复
  1084. {
  1085. var condition string
  1086. var pars []interface{}
  1087. condition += " AND edb_name=? "
  1088. pars = append(pars, req.EdbName)
  1089. condition += " AND edb_info_id<>? "
  1090. pars = append(pars, req.EdbInfoId)
  1091. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  1092. if err != nil {
  1093. br.Msg = "判断指标名称是否存在失败"
  1094. br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
  1095. return
  1096. }
  1097. if count > 0 {
  1098. br.Msg = "指标名称已存在,请重新填写"
  1099. br.ErrMsg = "指标名称已存在,请重新填写"
  1100. br.IsSendEmail = false
  1101. return
  1102. }
  1103. }
  1104. // 添加python指标
  1105. respItem, err := data.AddPythonEdbData(string(reqJson))
  1106. if err != nil {
  1107. br.Msg = "添加失败"
  1108. br.ErrMsg = "获取失败,Err:" + err.Error()
  1109. return
  1110. }
  1111. if respItem.Ret != 200 {
  1112. br.Msg = "添加失败"
  1113. br.ErrMsg = respItem.ErrMsg + ";EdbName:" + req.EdbName
  1114. return
  1115. }
  1116. respData := respItem.Data.(map[string]interface{})
  1117. tmpEdbInfoId, ok := respData["EdbInfoId"]
  1118. if !ok {
  1119. br.Msg = `数据转换异常`
  1120. br.ErrMsg = fmt.Sprint("respData.EdbInfoId 数据转换异常;respData:", respData)
  1121. return
  1122. }
  1123. //指标id
  1124. edbInfoId := int64(tmpEdbInfoId.(float64))
  1125. uniqueCode, ok := respData["UniqueCode"]
  1126. if !ok {
  1127. br.Msg = `数据转换异常`
  1128. br.ErrMsg = fmt.Sprint("respData.UniqueCode 数据转换异常;respData:", respData)
  1129. return
  1130. }
  1131. //添加es
  1132. data.AddOrEditEdbInfoToEs(int(edbInfoId))
  1133. //
  1134. resp := data_manage.AddEdbInfoResp{
  1135. EdbInfoId: int(edbInfoId),
  1136. UniqueCode: uniqueCode.(string),
  1137. }
  1138. br.Ret = 200
  1139. br.Success = true
  1140. br.Msg = "保存成功"
  1141. br.Data = resp
  1142. br.IsAddLog = true
  1143. }
  1144. // EditPythonEdb
  1145. // @Title 修改python运算指标
  1146. // @Description 修改python运算指标接口
  1147. // @Param request body data_manage.AddPythonEdbReq true "type json string"
  1148. // @Success Ret=200 返回成功
  1149. // @router /edb_info/python/edit [post]
  1150. func (this *ChartInfoController) EditPythonEdb() {
  1151. br := new(models.BaseResponse).Init()
  1152. defer func() {
  1153. this.Data["json"] = br
  1154. this.ServeJSON()
  1155. }()
  1156. sysUser := this.SysUser
  1157. if sysUser == nil {
  1158. br.Msg = "请登录"
  1159. br.ErrMsg = "请登录,SysUser Is Empty"
  1160. br.Ret = 408
  1161. return
  1162. }
  1163. var req data_manage.PostAddPythonEdbReq
  1164. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1165. if err != nil {
  1166. br.Msg = "参数解析异常!"
  1167. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1168. return
  1169. }
  1170. //传入操作人
  1171. req.AdminId = sysUser.AdminId
  1172. req.AdminName = sysUser.RealName
  1173. reqJson, err := json.Marshal(req)
  1174. if err != nil {
  1175. br.Msg = "参数解析异常!"
  1176. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1177. return
  1178. }
  1179. // 判断指标名称是否重复
  1180. {
  1181. var condition string
  1182. var pars []interface{}
  1183. condition += " AND edb_name=? "
  1184. pars = append(pars, req.EdbName)
  1185. condition += " AND edb_info_id<>? "
  1186. pars = append(pars, req.EdbInfoId)
  1187. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  1188. if err != nil {
  1189. br.Msg = "判断指标名称是否存在失败"
  1190. br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
  1191. return
  1192. }
  1193. if count > 0 {
  1194. br.Msg = "指标名称已存在,请重新填写"
  1195. br.ErrMsg = "指标名称已存在,请重新填写"
  1196. br.IsSendEmail = false
  1197. return
  1198. }
  1199. }
  1200. //获取指标信息
  1201. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  1202. if err != nil {
  1203. if err.Error() == utils.ErrNoRow() {
  1204. br.Msg = "指标已被删除,请刷新页面"
  1205. br.ErrMsg = "指标已被删除,请刷新页面:Err:" + err.Error()
  1206. return
  1207. }
  1208. br.Msg = "获取指标信息失败"
  1209. br.ErrMsg = "获取指标信息失败:Err:" + err.Error()
  1210. return
  1211. }
  1212. // 修改python运算指标
  1213. respItem, err := data.EditPythonEdbData(string(reqJson))
  1214. if err != nil {
  1215. br.Msg = "保存失败"
  1216. br.ErrMsg = "保存失败,Err:" + err.Error()
  1217. return
  1218. }
  1219. if respItem.Ret != 200 {
  1220. br.Msg = "保存失败"
  1221. br.ErrMsg = respItem.ErrMsg + ";EdbName:" + req.EdbName
  1222. return
  1223. }
  1224. //添加es
  1225. data.AddOrEditEdbInfoToEs(req.EdbInfoId)
  1226. resp := new(data_manage.AddEdbInfoResp)
  1227. resp.EdbInfoId = req.EdbInfoId
  1228. resp.UniqueCode = edbInfo.UniqueCode
  1229. br.Ret = 200
  1230. br.Success = true
  1231. br.Data = resp
  1232. br.Msg = "保存成功"
  1233. br.IsAddLog = true
  1234. }
  1235. // GetPythonEdbCode
  1236. // @Title 获取python代码
  1237. // @Description 获取python代码接口
  1238. // @Param EdbInfoId query int true "指标id"
  1239. // @Success 200 {object} data_manage.PythonEdbDetailResp
  1240. // @router /edb_info/python/detail [get]
  1241. func (this *ChartInfoController) GetPythonEdbCode() {
  1242. br := new(models.BaseResponse).Init()
  1243. defer func() {
  1244. this.Data["json"] = br
  1245. this.ServeJSON()
  1246. }()
  1247. sysUser := this.SysUser
  1248. if sysUser == nil {
  1249. br.Msg = "请登录"
  1250. br.ErrMsg = "请登录,SysUser Is Empty"
  1251. br.Ret = 408
  1252. return
  1253. }
  1254. edbInfoId, _ := this.GetInt("EdbInfoId")
  1255. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  1256. if err != nil {
  1257. br.Msg = "获取失败"
  1258. br.ErrMsg = "获取失败,Err:" + err.Error()
  1259. return
  1260. }
  1261. if edbInfo.Source != utils.DATA_SOURCE_PYTHON {
  1262. br.Msg = "该指标不是Python运算指标"
  1263. br.ErrMsg = "该指标不是Python运算指标"
  1264. return
  1265. }
  1266. pythonCode, err := data_manage.GetEdbPythonCodeById(edbInfoId)
  1267. if err != nil {
  1268. br.Msg = "获取失败"
  1269. br.ErrMsg = "获取失败,Err:" + err.Error()
  1270. return
  1271. }
  1272. resp := data_manage.PythonEdbDetailResp{
  1273. EdbInfoDetail: edbInfo,
  1274. PythonCode: pythonCode.PythonCode,
  1275. }
  1276. br.Ret = 200
  1277. br.Success = true
  1278. br.Msg = "保存成功"
  1279. br.Data = resp
  1280. }
  1281. // QueryEdbDataTable
  1282. // @Title 指标筛选接口
  1283. // @Description 指标筛选接口
  1284. // @Param EdbInfoId query int false "指标id"
  1285. // @Success 200 {object} data_manage.EdbInfoList
  1286. // @router /edb_data/table/detail [get]
  1287. func (this *EdbInfoController) QueryEdbDataTable() {
  1288. br := new(models.BaseResponse).Init()
  1289. defer func() {
  1290. this.Data["json"] = br
  1291. this.ServeJSON()
  1292. }()
  1293. edbInfoId, _ := this.GetInt("EdbInfoId")
  1294. if edbInfoId <= 0 {
  1295. br.Msg = "请选择指标"
  1296. br.ErrMsg = "请选择指标"
  1297. return
  1298. }
  1299. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  1300. if err != nil {
  1301. br.Msg = "获取指标信息失败"
  1302. br.ErrMsg = "获取指标信息失败,err:" + err.Error()
  1303. return
  1304. }
  1305. tableName := data_manage.GetEdbDataTableName(edbInfo.Source, edbInfo.SubSource)
  1306. columnList := []map[string]string{
  1307. {
  1308. "edb_code": "指标code",
  1309. },
  1310. {
  1311. "data_time": "指标日期",
  1312. },
  1313. {
  1314. "value": "指标对应的值",
  1315. },
  1316. }
  1317. templateStr := fmt.Sprintf("sql1 = f\"\"\"SELECT data_time,`value` FROM %s WHERE edb_code = '%s' ORDER BY data_time DESC;\"\"\"\nraw = pandas_fetch_all(sql1, db)", tableName, edbInfo.EdbCode)
  1318. info := data_manage.TableInfoResp{
  1319. ColumnList: columnList,
  1320. TableName: tableName,
  1321. TemplateStr: url.PathEscape(templateStr),
  1322. }
  1323. br.Ret = 200
  1324. br.Success = true
  1325. br.Msg = "获取成功"
  1326. br.Data = info
  1327. }
  1328. // SaveAdjustEdbInfo
  1329. // @Title 保存数据调整接口
  1330. // @Description 保存数据调整接口
  1331. // @Param request body data_manage.AddPythonEdbReq true "type json string"
  1332. // @Success 200 {object} data_manage.AddEdbInfoResp
  1333. // @router /edb_info/adjust/save [post]
  1334. func (this *ChartInfoController) SaveAdjustEdbInfo() {
  1335. br := new(models.BaseResponse).Init()
  1336. defer func() {
  1337. this.Data["json"] = br
  1338. this.ServeJSON()
  1339. }()
  1340. sysUser := this.SysUser
  1341. if sysUser == nil {
  1342. br.Msg = "请登录"
  1343. br.ErrMsg = "请登录,SysUser Is Empty"
  1344. br.Ret = 408
  1345. return
  1346. }
  1347. var req data_manage.SaveAdjustEdbInfoReq
  1348. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1349. if err != nil {
  1350. br.Msg = "参数解析异常!"
  1351. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1352. return
  1353. }
  1354. //传入操作人
  1355. req.AdminId = sysUser.AdminId
  1356. req.AdminName = sysUser.RealName
  1357. reqJson, err := json.Marshal(req)
  1358. if err != nil {
  1359. br.Msg = "参数解析异常!"
  1360. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1361. return
  1362. }
  1363. // 判断指标名称是否重复
  1364. {
  1365. var condition string
  1366. var pars []interface{}
  1367. condition += " AND edb_name=? "
  1368. pars = append(pars, req.EdbName)
  1369. condition += " AND edb_info_id<>? "
  1370. pars = append(pars, req.EdbInfoId)
  1371. count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
  1372. if err != nil {
  1373. br.Msg = "判断指标名称是否存在失败"
  1374. br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
  1375. return
  1376. }
  1377. if count > 0 {
  1378. br.Msg = "指标名称已存在,请重新填写"
  1379. br.ErrMsg = "指标名称已存在,请重新填写"
  1380. br.IsSendEmail = false
  1381. return
  1382. }
  1383. }
  1384. // 添加数据调整指标
  1385. respItem, err := data.SaveAdjustEdbInfo(string(reqJson))
  1386. if err != nil {
  1387. br.Msg = "添加失败"
  1388. br.ErrMsg = "获取失败,Err:" + err.Error()
  1389. return
  1390. }
  1391. if respItem.Ret != 200 {
  1392. br.Msg = "添加失败"
  1393. br.ErrMsg = respItem.ErrMsg + ";EdbName:" + req.EdbName
  1394. return
  1395. }
  1396. respData := respItem.Data.(map[string]interface{})
  1397. tmpEdbInfoId, ok := respData["EdbInfoId"]
  1398. if !ok {
  1399. br.Msg = `数据转换异常`
  1400. br.ErrMsg = fmt.Sprint("respData.EdbInfoId 数据转换异常;respData:", respData)
  1401. return
  1402. }
  1403. //指标id
  1404. edbInfoId := int64(tmpEdbInfoId.(float64))
  1405. uniqueCode, ok := respData["UniqueCode"]
  1406. if !ok {
  1407. br.Msg = `数据转换异常`
  1408. br.ErrMsg = fmt.Sprint("respData.UniqueCode 数据转换异常;respData:", respData)
  1409. return
  1410. }
  1411. //添加es
  1412. data.AddOrEditEdbInfoToEs(int(edbInfoId))
  1413. //
  1414. resp := data_manage.AddEdbInfoResp{
  1415. EdbInfoId: int(edbInfoId),
  1416. UniqueCode: uniqueCode.(string),
  1417. }
  1418. br.Ret = 200
  1419. br.Success = true
  1420. br.Msg = "保存成功"
  1421. br.Data = resp
  1422. br.IsAddLog = true
  1423. }
  1424. // BatchCalculateBatchSave
  1425. // @Title 批量添加 累计值转月-同比值-同差等计算新增
  1426. // @Description 批量添加 累计值转月-同比值-同差等计算新增接口
  1427. // @Param request body data_manage.EdbInfoCalculateBatchSaveReq true "type json string"
  1428. // @Success Ret=200 返回指标id
  1429. // @router /edb_info/calculate/batch/save/batch [post]
  1430. func (this *ChartInfoController) BatchCalculateBatchSave() {
  1431. br := new(models.BaseResponse).Init()
  1432. defer func() {
  1433. if br.ErrMsg == "" {
  1434. br.IsSendEmail = false
  1435. }
  1436. this.Data["json"] = br
  1437. this.ServeJSON()
  1438. }()
  1439. sysUser := this.SysUser
  1440. if sysUser == nil {
  1441. br.Msg = "请登录"
  1442. br.ErrMsg = "请登录,SysUser Is Empty"
  1443. br.Ret = 408
  1444. return
  1445. }
  1446. var req data_manage.BatchEdbInfoCalculateBatchSaveReq
  1447. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1448. if err != nil {
  1449. br.Msg = "参数解析异常!"
  1450. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1451. return
  1452. }
  1453. resp := data_manage.BatchEdbInfoCalculateBatchSaveResp{
  1454. Fail: make([]data_manage.BatchEdbInfoCalculateBatchSaveFailResp, 0),
  1455. Success: make([]data_manage.BatchEdbInfoCalculateBatchSaveSuccessResp, 0),
  1456. }
  1457. var formulaInt int
  1458. switch req.Source {
  1459. case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_CALCULATE_CJJX:
  1460. if req.Formula == "" {
  1461. br.Msg = "请输入N值"
  1462. return
  1463. }
  1464. formulaInt, _ = strconv.Atoi(req.Formula)
  1465. if formulaInt <= 0 {
  1466. br.Msg = "N值输入错误,请重新输入"
  1467. return
  1468. }
  1469. case utils.DATA_SOURCE_CALCULATE_ZJPJ:
  1470. //直接拼接指标
  1471. //校验时间格式
  1472. _, err = time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
  1473. if err != nil {
  1474. br.Msg = "拼接日期有误,请重新输入"
  1475. return
  1476. }
  1477. case utils.DATA_SOURCE_CALCULATE_NHCC: //拟合残差指标
  1478. //指标校验
  1479. if len(req.EdbInfoIdArr) != 2 {
  1480. br.Msg = "选择的指标异常,请重新选择"
  1481. return
  1482. }
  1483. fromEdbInfoId := req.EdbInfoIdArr[0].EdbInfoId
  1484. if fromEdbInfoId <= 0 {
  1485. br.Msg = "请选择指标"
  1486. return
  1487. }
  1488. //校验时间格式
  1489. //数据格式:2022-11-01,2022-11-10
  1490. timeList := strings.Split(req.Formula, ",")
  1491. if len(timeList) != 2 {
  1492. br.Msg = "选择的指标异常,请重新选择"
  1493. return
  1494. }
  1495. startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
  1496. if err != nil {
  1497. br.Msg = "开始日期有误,请重新输入"
  1498. return
  1499. }
  1500. endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
  1501. if err != nil {
  1502. br.Msg = "结束日期有误,请重新输入"
  1503. return
  1504. }
  1505. if utils.GetTimeSubDay(startDate, endDate) < 2 {
  1506. br.Msg = "日期间隔不得少于两天"
  1507. return
  1508. }
  1509. case utils.DATA_SOURCE_CALCULATE_ZSXY: // 指数修匀
  1510. if req.Formula == "" {
  1511. br.Msg = "请填写alpha值"
  1512. return
  1513. }
  1514. alpha, e := strconv.ParseFloat(req.Formula, 64)
  1515. if e != nil {
  1516. br.Msg = "alpha值输入错误, 请重新输入"
  1517. return
  1518. }
  1519. if alpha <= 0 || alpha >= 1 {
  1520. br.Msg = "alpha值输入错误, 请重新输入"
  1521. return
  1522. }
  1523. }
  1524. if len(req.EdbList) > 100 {
  1525. br.Msg = "最多只能选择100个指标"
  1526. return
  1527. }
  1528. reqEdbList := make([]*data_manage.CalculateEdbInfoItem, 0)
  1529. for _, v := range req.EdbList {
  1530. v.EdbName = strings.Trim(v.EdbName, " ")
  1531. if v.EdbName == "" {
  1532. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1533. CalculateId: v.CalculateId,
  1534. Msg: "指标名称不能为空",
  1535. })
  1536. continue
  1537. }
  1538. if v.Frequency == "" {
  1539. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1540. CalculateId: v.CalculateId,
  1541. Msg: "频率不能为空",
  1542. })
  1543. continue
  1544. }
  1545. if v.Unit == "" {
  1546. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1547. CalculateId: v.CalculateId,
  1548. Msg: "单位不能为空",
  1549. })
  1550. continue
  1551. }
  1552. if v.ClassifyId <= 0 {
  1553. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1554. CalculateId: v.CalculateId,
  1555. Msg: "请选择分类",
  1556. })
  1557. continue
  1558. }
  1559. //加入缓存机制,避免创建同一个名称的指标 start
  1560. redisKey := fmt.Sprint("edb_info:calculate:batch:save:", req.Source, ":", v.EdbName)
  1561. isExist := utils.Rc.IsExist(redisKey)
  1562. if isExist {
  1563. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1564. CalculateId: v.CalculateId,
  1565. Msg: "指标正在处理,请勿重复提交",
  1566. })
  1567. continue
  1568. } else {
  1569. //设置3分钟缓存
  1570. //utils.Rc.SetNX(redisKey, 1, time.Second*300)
  1571. //redisKeyList = append(redisKeyList, redisKey)
  1572. }
  1573. reqEdbList = append(reqEdbList, v)
  1574. }
  1575. if len(reqEdbList) <= 0 {
  1576. br.Msg = "新增失败!"
  1577. if len(resp.Fail) > 0 {
  1578. br.ErrMsg = resp.Fail[0].Msg
  1579. } else {
  1580. br.Msg = "请选择指标"
  1581. }
  1582. return
  1583. }
  1584. req.AdminId = sysUser.AdminId
  1585. req.AdminName = sysUser.RealName
  1586. req.EdbList = reqEdbList
  1587. // 调用指标库去更新
  1588. reqJson, err := json.Marshal(req)
  1589. if err != nil {
  1590. br.Msg = "参数解析异常!"
  1591. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1592. return
  1593. }
  1594. respItem, err := data.BatchSaveEdbCalculateMultiData(string(reqJson))
  1595. if err != nil {
  1596. br.Msg = "新增失败!"
  1597. br.ErrMsg = "新增失败,Err:" + err.Error()
  1598. return
  1599. }
  1600. if respItem.Ret != 200 {
  1601. br.Msg = respItem.Msg
  1602. br.ErrMsg = respItem.ErrMsg
  1603. return
  1604. }
  1605. br.Ret = 200
  1606. br.Success = true
  1607. br.Msg = "批量保存成功"
  1608. br.Data = respItem.Data
  1609. br.IsAddLog = true
  1610. }
  1611. // BatchCalculateBatchEdit
  1612. // @Title 多指标求和和多指标求平均编辑接口
  1613. // @Description 多指标求和和多指标求平均编辑接口
  1614. // @Param request body data_manage.EdbInfoCalculateBatchSaveReq true "type json string"
  1615. // @Success Ret=200 返回指标id
  1616. // @router /edb_info/calculate/batch/edit/batch [post]
  1617. func (this *ChartInfoController) BatchCalculateBatchEdit() {
  1618. br := new(models.BaseResponse).Init()
  1619. defer func() {
  1620. if br.ErrMsg == "" {
  1621. br.IsSendEmail = false
  1622. }
  1623. this.Data["json"] = br
  1624. this.ServeJSON()
  1625. }()
  1626. sysUser := this.SysUser
  1627. if sysUser == nil {
  1628. br.Msg = "请登录"
  1629. br.ErrMsg = "请登录,SysUser Is Empty"
  1630. br.Ret = 408
  1631. return
  1632. }
  1633. var req data_manage.BatchEdbInfoCalculateBatchSaveReq
  1634. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1635. if err != nil {
  1636. br.Msg = "参数解析异常!"
  1637. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1638. return
  1639. }
  1640. resp := data_manage.BatchEdbInfoCalculateBatchSaveResp{
  1641. Fail: make([]data_manage.BatchEdbInfoCalculateBatchSaveFailResp, 0),
  1642. Success: make([]data_manage.BatchEdbInfoCalculateBatchSaveSuccessResp, 0),
  1643. }
  1644. var formulaInt int
  1645. switch req.Source {
  1646. case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS, utils.DATA_SOURCE_CALCULATE_HBZ, utils.DATA_SOURCE_CALCULATE_HCZ, utils.DATA_SOURCE_CALCULATE_TIME_SHIFT, utils.DATA_SOURCE_CALCULATE_CJJX:
  1647. if req.Formula == "" {
  1648. br.Msg = "请输入N值"
  1649. return
  1650. }
  1651. formulaInt, _ = strconv.Atoi(req.Formula)
  1652. if formulaInt <= 0 {
  1653. br.Msg = "N值输入错误,请重新输入"
  1654. return
  1655. }
  1656. case utils.DATA_SOURCE_CALCULATE_ZJPJ:
  1657. //直接拼接指标
  1658. //校验时间格式
  1659. _, err = time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
  1660. if err != nil {
  1661. br.Msg = "拼接日期有误,请重新输入"
  1662. return
  1663. }
  1664. case utils.DATA_SOURCE_CALCULATE_NHCC: //拟合残差指标
  1665. //指标校验
  1666. if len(req.EdbInfoIdArr) != 2 {
  1667. br.Msg = "选择的指标异常,请重新选择"
  1668. return
  1669. }
  1670. fromEdbInfoId := req.EdbInfoIdArr[0].EdbInfoId
  1671. if fromEdbInfoId <= 0 {
  1672. br.Msg = "请选择指标"
  1673. return
  1674. }
  1675. //校验时间格式
  1676. //数据格式:2022-11-01,2022-11-10
  1677. timeList := strings.Split(req.Formula, ",")
  1678. if len(timeList) != 2 {
  1679. br.Msg = "选择的指标异常,请重新选择"
  1680. return
  1681. }
  1682. startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
  1683. if err != nil {
  1684. br.Msg = "开始日期有误,请重新输入"
  1685. return
  1686. }
  1687. endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
  1688. if err != nil {
  1689. br.Msg = "结束日期有误,请重新输入"
  1690. return
  1691. }
  1692. if utils.GetTimeSubDay(startDate, endDate) < 2 {
  1693. br.Msg = "日期间隔不得少于两天"
  1694. return
  1695. }
  1696. case utils.DATA_SOURCE_CALCULATE_ZSXY: // 指数修匀
  1697. if req.Formula == "" {
  1698. br.Msg = "请填写alpha值"
  1699. return
  1700. }
  1701. alpha, e := strconv.ParseFloat(req.Formula, 64)
  1702. if e != nil {
  1703. br.Msg = "alpha值输入错误, 请重新输入"
  1704. return
  1705. }
  1706. if alpha <= 0 || alpha >= 1 {
  1707. br.Msg = "alpha值输入错误, 请重新输入"
  1708. return
  1709. }
  1710. }
  1711. if len(req.EdbList) > 50 {
  1712. br.Msg = "最多只能选择50个指标"
  1713. return
  1714. }
  1715. reqEdbList := make([]*data_manage.CalculateEdbInfoItem, 0)
  1716. for _, v := range req.EdbList {
  1717. if v.EdbInfoId <= 0 {
  1718. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1719. CalculateId: v.CalculateId,
  1720. Msg: "请选择要编辑的指标",
  1721. })
  1722. continue
  1723. }
  1724. v.EdbName = strings.Trim(v.EdbName, " ")
  1725. if v.EdbName == "" {
  1726. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1727. CalculateId: v.CalculateId,
  1728. Msg: "指标名称不能为空",
  1729. })
  1730. continue
  1731. }
  1732. if v.Frequency == "" {
  1733. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1734. CalculateId: v.CalculateId,
  1735. Msg: "频率不能为空",
  1736. })
  1737. continue
  1738. }
  1739. if v.Unit == "" {
  1740. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1741. CalculateId: v.CalculateId,
  1742. Msg: "单位不能为空",
  1743. })
  1744. continue
  1745. }
  1746. if v.ClassifyId <= 0 {
  1747. resp.Fail = append(resp.Fail, data_manage.BatchEdbInfoCalculateBatchSaveFailResp{
  1748. CalculateId: v.CalculateId,
  1749. Msg: "请选择分类",
  1750. })
  1751. continue
  1752. }
  1753. reqEdbList = append(reqEdbList, v)
  1754. }
  1755. if len(reqEdbList) <= 0 {
  1756. br.Msg = "编辑失败!"
  1757. if len(resp.Fail) > 0 {
  1758. br.ErrMsg = resp.Fail[0].Msg
  1759. } else {
  1760. br.Msg = "请选择指标"
  1761. }
  1762. return
  1763. }
  1764. req.EdbList = reqEdbList
  1765. // 调用指标库去更新
  1766. reqJson, err := json.Marshal(req)
  1767. if err != nil {
  1768. br.Msg = "参数解析异常!"
  1769. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1770. return
  1771. }
  1772. respItem, err := data.BatchEditEdbCalculateMultiData(string(reqJson))
  1773. if err != nil {
  1774. br.Msg = "编辑失败!"
  1775. br.ErrMsg = "编辑失败,Err:" + err.Error()
  1776. return
  1777. }
  1778. if respItem.Ret != 200 {
  1779. br.Msg = respItem.Msg
  1780. br.ErrMsg = respItem.ErrMsg
  1781. return
  1782. }
  1783. br.Ret = 200
  1784. br.Success = true
  1785. br.Msg = "批量编辑成功"
  1786. br.Data = respItem.Data
  1787. br.IsAddLog = true
  1788. }
  1789. // CalculateMapping
  1790. // @Title 获取计算指标与基础指标关联
  1791. // @Description 获取计算指标与基础指标关联
  1792. // @Param EdbInfoId query int true "指标id"
  1793. // @Success 200 {object} data_manage.CalculateDetailResp
  1794. // @router /edb_info/calculate/mapping [get]
  1795. func (this *ChartInfoController) CalculateMapping() {
  1796. br := new(models.BaseResponse).Init()
  1797. defer func() {
  1798. this.Data["json"] = br
  1799. this.ServeJSON()
  1800. }()
  1801. sysUser := this.SysUser
  1802. if sysUser == nil {
  1803. br.Msg = "请登录"
  1804. br.ErrMsg = "请登录,SysUser Is Empty"
  1805. br.Ret = 408
  1806. return
  1807. }
  1808. edbInfoId, _ := this.GetInt("EdbInfoId")
  1809. if edbInfoId <= 0 {
  1810. br.Msg = "参数有误"
  1811. return
  1812. }
  1813. item, e := data_manage.GetEdbInfoCalculateMappingDetail(edbInfoId)
  1814. if e != nil {
  1815. br.Msg = "获取失败"
  1816. br.ErrMsg = "获取失败,Err:" + e.Error()
  1817. return
  1818. }
  1819. br.Ret = 200
  1820. br.Success = true
  1821. br.Msg = "保存成功"
  1822. br.Data = item
  1823. }
  1824. // CalculateComputeCorrelation
  1825. // @Title 拟合残差计算相关性
  1826. // @Description 拟合残差计算相关性接口
  1827. // @Param request body data_manage.EdbInfoCalculateBatchSaveReq true "type json string"
  1828. // @Success Ret=200 返回指标id
  1829. // @router /edb_info/calculate/compute_correlation [post]
  1830. func (this *ChartInfoController) CalculateComputeCorrelation() {
  1831. br := new(models.BaseResponse).Init()
  1832. defer func() {
  1833. this.Data["json"] = br
  1834. this.ServeJSON()
  1835. }()
  1836. sysUser := this.SysUser
  1837. if sysUser == nil {
  1838. br.Msg = "请登录"
  1839. br.ErrMsg = "请登录,SysUser Is Empty"
  1840. br.Ret = 408
  1841. return
  1842. }
  1843. var req data_manage.EdbInfoCalculateBatchSaveReq
  1844. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1845. if err != nil {
  1846. br.Msg = "参数解析异常!"
  1847. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1848. return
  1849. }
  1850. if len(req.EdbInfoIdArr) != 2 {
  1851. br.Msg = "选择的指标异常,请重新选择"
  1852. return
  1853. }
  1854. fromEdbInfoId := req.EdbInfoIdArr[0].EdbInfoId
  1855. //校验时间格式
  1856. //数据格式:2022-11-01,2022-11-10
  1857. timeList := strings.Split(req.Formula, ",")
  1858. if len(timeList) != 2 {
  1859. br.Msg = "选择时间有误,请重新输入"
  1860. return
  1861. }
  1862. startDate, err := time.ParseInLocation(utils.FormatDate, timeList[0], time.Local)
  1863. if err != nil {
  1864. br.Msg = "开始日期有误,请重新输入"
  1865. return
  1866. }
  1867. endDate, err := time.ParseInLocation(utils.FormatDate, timeList[1], time.Local)
  1868. if err != nil {
  1869. br.Msg = "结束日期有误,请重新输入"
  1870. return
  1871. }
  1872. if utils.GetTimeSubDay(startDate, endDate) < 2 {
  1873. br.Msg = "日期间隔不得少于两天"
  1874. return
  1875. }
  1876. if fromEdbInfoId <= 0 {
  1877. br.Msg = "请选择指标"
  1878. return
  1879. }
  1880. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  1881. AdminId: sysUser.AdminId,
  1882. AdminName: sysUser.RealName,
  1883. EdbInfoId: req.EdbInfoId,
  1884. EdbName: req.EdbName,
  1885. Frequency: req.Frequency,
  1886. Unit: req.Unit,
  1887. ClassifyId: req.ClassifyId,
  1888. Formula: req.Formula, //N数值移动平均计算、环比值、环差值
  1889. FromEdbInfoId: req.FromEdbInfoId,
  1890. CalculateFormula: req.CalculateFormula,
  1891. Source: req.Source,
  1892. MoveType: req.MoveType,
  1893. MoveFrequency: req.MoveFrequency,
  1894. //CalculateFormula: edbInfo.CalculateFormula,
  1895. EdbInfoIdArr: req.EdbInfoIdArr,
  1896. Calendar: req.Calendar,
  1897. }
  1898. val, err, errMsg := data.CallCalculateComputeCorrelation(req2)
  1899. if err != nil {
  1900. br.Msg = "计算失败"
  1901. if errMsg != `` {
  1902. br.Msg = errMsg
  1903. }
  1904. br.ErrMsg = err.Error()
  1905. return
  1906. }
  1907. br.Data = val
  1908. br.Ret = 200
  1909. br.Success = true
  1910. br.Msg = "计算成功"
  1911. br.IsAddLog = true
  1912. }
  1913. // CalculateMultiChoice
  1914. // @Title 批量计算-加入已选指标
  1915. // @Description 批量计算-加入已选指标
  1916. // @Param ClassifyIds query int true "指标库分类IDs"
  1917. // @Param SysUserIds query int true "创建人"
  1918. // @Param Keyword query string false "关键词搜索"
  1919. // @Param Frequency query string false "频度"
  1920. // @Success 200 {object} data_manage.EdbInfoSearchResp
  1921. // @router /edb_info/calculate/multi/choice [get]
  1922. func (this *ChartInfoController) CalculateMultiChoice() {
  1923. br := new(models.BaseResponse).Init()
  1924. defer func() {
  1925. this.Data["json"] = br
  1926. this.ServeJSON()
  1927. }()
  1928. //来源类型,1:中文,2:英文
  1929. frequency := this.GetString("Frequency")
  1930. keyword := this.GetString("Keyword")
  1931. sysUserIds := this.GetString("SysUserIds")
  1932. classifyIds := this.GetString("ClassifyIds")
  1933. edbInfoIds := this.GetString("EdbInfoIds")
  1934. selectAll, _ := this.GetBool("SelectAll")
  1935. notFrequency := this.GetString("NotFrequency")
  1936. var edbIdArr []int
  1937. if selectAll {
  1938. // 如果勾了列表全选,那么EdbCode传的就是排除的code
  1939. var condition string
  1940. var pars []interface{}
  1941. if classifyIds != "" {
  1942. classifyIdsArr := strings.Split(classifyIds, ",")
  1943. condition += ` AND classify_id IN (` + utils.GetOrmInReplace(len(classifyIdsArr)) + `) `
  1944. pars = append(pars, classifyIdsArr)
  1945. }
  1946. if frequency != "" {
  1947. frequencyArr := strings.Split(frequency, ",")
  1948. condition += ` AND frequency IN (` + utils.GetOrmInReplace(len(frequencyArr)) + `) `
  1949. pars = append(pars, frequencyArr)
  1950. }
  1951. if notFrequency != "" {
  1952. notFrequencyArr := strings.Split(notFrequency, ",")
  1953. condition += ` AND frequency NOT IN (` + utils.GetOrmInReplace(len(notFrequencyArr)) + `) `
  1954. pars = append(pars, notFrequencyArr)
  1955. }
  1956. if sysUserIds != "" {
  1957. sysUserIdSlice := strings.Split(sysUserIds, ",")
  1958. condition += ` AND sys_user_id IN (` + utils.GetOrmInReplace(len(sysUserIdSlice)) + `)`
  1959. pars = append(pars, sysUserIdSlice)
  1960. }
  1961. if keyword != "" {
  1962. keyWordArr := strings.Split(keyword, " ")
  1963. if len(keyWordArr) > 0 {
  1964. for _, v := range keyWordArr {
  1965. condition += ` AND CONCAT(edb_name,edb_code) LIKE ?`
  1966. pars = append(pars, utils.GetLikeKeyword(v))
  1967. }
  1968. }
  1969. }
  1970. edbList, e := data_manage.GetEdbInfoFilter(condition, pars)
  1971. if e != nil {
  1972. br.Msg = "获取指标列表失败"
  1973. br.ErrMsg = "获取指标列表失败,Err:" + e.Error()
  1974. return
  1975. }
  1976. for _, v := range edbList {
  1977. edbIdArr = append(edbIdArr, v.EdbInfoId)
  1978. }
  1979. } else {
  1980. //未勾选全选EdbCode就是需要的code
  1981. edbIdStrArr := strings.Split(edbInfoIds, ",")
  1982. for _, v := range edbIdStrArr {
  1983. id, e := strconv.Atoi(v)
  1984. if e != nil {
  1985. br.Msg = "获取指标列表失败"
  1986. br.ErrMsg = "获取指标列表失败,Err:" + e.Error()
  1987. return
  1988. }
  1989. edbIdArr = append(edbIdArr, id)
  1990. }
  1991. }
  1992. if len(edbIdArr) > 100 {
  1993. br.Msg = "最多只能选择100个指标"
  1994. return
  1995. }
  1996. if len(edbIdArr) <= 0 {
  1997. br.Msg = "无符合指标或指标代码错误"
  1998. return
  1999. }
  2000. list, err := data_manage.GetEdbInfoByIdList(edbIdArr)
  2001. if err != nil && err.Error() != utils.ErrNoRow() {
  2002. br.Msg = "获取指标列表失败"
  2003. br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
  2004. return
  2005. }
  2006. searchItemList := make([]data_manage.EdbInfoBase, 0)
  2007. resp := new(data_manage.CalculateMultiChoiceResp)
  2008. for _, info := range list {
  2009. searchItem := data_manage.EdbInfoBase{
  2010. Frequency: info.Frequency,
  2011. Unit: info.Unit,
  2012. EdbName: info.EdbName,
  2013. EdbInfoId: info.EdbInfoId,
  2014. ClassifyId: info.ClassifyId,
  2015. }
  2016. searchItemList = append(searchItemList, searchItem)
  2017. }
  2018. resp.SearchItem = searchItemList
  2019. br.Ret = 200
  2020. br.Success = true
  2021. br.Msg = "获取成功"
  2022. br.Data = resp
  2023. }
  2024. // CalculateMultiSearch
  2025. // @Title 批量计算-查询指标
  2026. // @Description 批量计算-查询指标
  2027. // @Param ClassifyIds query int true "指标库分类IDs"
  2028. // @Param SysUserIds query int true "创建人"
  2029. // @Param Keyword query string false "关键词搜索"
  2030. // @Param Frequency query string false "频度"
  2031. // @Success 200 {object} data_manage.EdbInfoSearchResp
  2032. // @router /edb_info/calculate/multi/search [get]
  2033. func (this *ChartInfoController) CalculateMultiSearch() {
  2034. br := new(models.BaseResponse).Init()
  2035. defer func() {
  2036. this.Data["json"] = br
  2037. this.ServeJSON()
  2038. }()
  2039. //来源类型,1:中文,2:英文
  2040. frequency := this.GetString("Frequency")
  2041. keyword := this.GetString("Keyword")
  2042. sysUserIds := this.GetString("SysUserIds")
  2043. classifyIds := this.GetString("ClassifyIds")
  2044. pageSize, _ := this.GetInt("PageSize")
  2045. currentIndex, _ := this.GetInt("CurrentIndex")
  2046. notFrequency := this.GetString("NotFrequency")
  2047. var startSize int
  2048. if pageSize <= 0 {
  2049. pageSize = utils.PageSize50
  2050. }
  2051. if currentIndex <= 0 {
  2052. currentIndex = 1
  2053. }
  2054. startSize = utils.StartIndex(currentIndex, pageSize)
  2055. var edbIdArr []int
  2056. condition := ` AND edb_info_type = 0 `
  2057. var pars []interface{}
  2058. if classifyIds != "" {
  2059. classifyIdsArr := strings.Split(classifyIds, ",")
  2060. condition += ` AND classify_id IN (` + utils.GetOrmInReplace(len(classifyIdsArr)) + `) `
  2061. pars = append(pars, classifyIdsArr)
  2062. }
  2063. if frequency != "" {
  2064. frequencyArr := strings.Split(frequency, ",")
  2065. condition += ` AND frequency IN (` + utils.GetOrmInReplace(len(frequencyArr)) + `) `
  2066. pars = append(pars, frequencyArr)
  2067. }
  2068. if notFrequency != "" {
  2069. notFrequencyArr := strings.Split(notFrequency, ",")
  2070. condition += ` AND frequency NOT IN (` + utils.GetOrmInReplace(len(notFrequencyArr)) + `) `
  2071. pars = append(pars, notFrequencyArr)
  2072. }
  2073. if sysUserIds != "" {
  2074. sysUserIdSlice := strings.Split(sysUserIds, ",")
  2075. condition += ` AND sys_user_id IN (` + utils.GetOrmInReplace(len(sysUserIdSlice)) + `)`
  2076. pars = append(pars, sysUserIdSlice)
  2077. }
  2078. if keyword != "" {
  2079. keyWordArr := strings.Split(keyword, " ")
  2080. if len(keyWordArr) > 0 {
  2081. for _, v := range keyWordArr {
  2082. condition += ` AND CONCAT(edb_name,edb_code) LIKE ?`
  2083. pars = append(pars, utils.GetLikeKeyword(v))
  2084. }
  2085. }
  2086. }
  2087. total, e := data_manage.GetEdbInfoByConditionCount(condition, pars)
  2088. if e != nil {
  2089. br.Msg = "获取指标列表总数失败"
  2090. br.ErrMsg = "获取指标列表总数失败,Err:" + e.Error()
  2091. return
  2092. }
  2093. searchItemList := make([]data_manage.CalculateMultiEdbSearchItem, 0)
  2094. page := paging.GetPaging(currentIndex, pageSize, total)
  2095. resp := new(data_manage.CalculateMultiEdbSearchResp)
  2096. edbList, e := data_manage.GetEdbInfoListByCondition(condition, pars, startSize, pageSize)
  2097. if e != nil {
  2098. br.Msg = "获取指标列表失败"
  2099. br.ErrMsg = "获取指标列表失败,Err:" + e.Error()
  2100. return
  2101. }
  2102. for _, v := range edbList {
  2103. edbIdArr = append(edbIdArr, v.EdbInfoId)
  2104. }
  2105. if len(edbIdArr) > 0 {
  2106. list, err := data_manage.GetEdbInfoByIdList(edbIdArr)
  2107. if err != nil && err.Error() != utils.ErrNoRow() {
  2108. br.Msg = "获取指标列表失败"
  2109. br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
  2110. return
  2111. }
  2112. for _, info := range list {
  2113. searchItem := data_manage.CalculateMultiEdbSearchItem{
  2114. Frequency: info.Frequency,
  2115. Unit: info.Unit,
  2116. EdbName: info.EdbName,
  2117. EdbInfoId: info.EdbInfoId,
  2118. ClassifyId: info.ClassifyId,
  2119. SysUserRealName: info.SysUserRealName,
  2120. SysUserId: info.SysUserId,
  2121. EndDate: info.EndDate,
  2122. EndValue: info.EndValue,
  2123. }
  2124. searchItemList = append(searchItemList, searchItem)
  2125. }
  2126. }
  2127. resp.SearchItem = searchItemList
  2128. resp.Paging = page
  2129. br.Ret = 200
  2130. br.Success = true
  2131. br.Msg = "获取成功"
  2132. br.Data = resp
  2133. }