manual_edb.go 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599
  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/models/system"
  8. "eta/eta_api/services/data"
  9. etaTrialService "eta/eta_api/services/eta_trial"
  10. "eta/eta_api/utils"
  11. "fmt"
  12. "github.com/rdlucklib/rdluck_tools/paging"
  13. "github.com/shopspring/decimal"
  14. "os"
  15. "strconv"
  16. "strings"
  17. "time"
  18. )
  19. // ManualEdbController 手工指标服务(鉴权)
  20. type ManualEdbController struct {
  21. controllers.BaseAuthController
  22. }
  23. // EdbDetail
  24. // @Title 指标列表
  25. // @Description 指标列表
  26. // @Param TradeCode query string true "指标编码"
  27. // @Success 200 {object} models.TargetDetailResp
  28. // @router /target/edb/detail [get]
  29. func (c *ManualEdbController) EdbDetail() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. c.Data["json"] = br
  33. c.ServeJSON()
  34. }()
  35. sysUser := c.SysUser
  36. if sysUser == nil {
  37. br.Msg = "请重新登录"
  38. return
  39. }
  40. // 指标编码
  41. tradeCode := c.GetString("TradeCode")
  42. if tradeCode == `` {
  43. br.Msg = "请输入指标编码"
  44. br.IsSendEmail = false
  45. return
  46. }
  47. manualEdbInfo, err := models.GetTargetByTradeCode(tradeCode)
  48. if err != nil {
  49. br.Msg = "获取指标失败"
  50. br.ErrMsg = "获取指标失败,err:" + err.Error()
  51. return
  52. }
  53. // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限
  54. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  55. //获取账户所拥有权限的分类id集合
  56. count, err := models.GetCountManualUserClassify(sysUser.AdminId, manualEdbInfo.ClassifyId)
  57. if err != nil {
  58. br.Msg = "获取分类数据失败"
  59. br.ErrMsg = "获取分类数据失败,err:" + err.Error()
  60. return
  61. }
  62. if count <= 0 {
  63. br.Msg = "无权访问"
  64. br.ErrMsg = "无权访问"
  65. br.IsSendEmail = false
  66. return
  67. }
  68. }
  69. classifyList := make([]*models.EdbdataClassify, 0)
  70. {
  71. classify, err := models.GetManualClassifyByClassifyId(manualEdbInfo.ClassifyId)
  72. if err != nil {
  73. br.Msg = "获取分类信息失败"
  74. br.ErrMsg = "获取分类信息失败,err:" + err.Error()
  75. return
  76. }
  77. parentClassify, err := models.GetManualClassifyByClassifyId(classify.ParentId)
  78. if err != nil {
  79. br.Msg = "获取分类信息失败"
  80. br.ErrMsg = "获取父级分类信息失败,err:" + err.Error()
  81. return
  82. }
  83. classifyList = []*models.EdbdataClassify{
  84. parentClassify, classify,
  85. }
  86. }
  87. // 明细数据
  88. {
  89. dataList, err := models.GetEdbDataListByCode(manualEdbInfo.TradeCode)
  90. if err != nil {
  91. br.Msg = "获取明细数据失败"
  92. br.ErrMsg = "获取明细数据失败,err:" + err.Error()
  93. return
  94. }
  95. // 获取下期时间
  96. dataNextDateTime, err := fillDataNextDateTime(dataList)
  97. if err != nil {
  98. return
  99. }
  100. manualEdbInfo.DataList = dataNextDateTime
  101. }
  102. resp := models.TargetDetailResp{
  103. Detail: manualEdbInfo,
  104. ClassifyList: classifyList,
  105. }
  106. br.Ret = 200
  107. br.Success = true
  108. br.Msg = "获取成功"
  109. //br.Data = resp
  110. br.Data = resp
  111. }
  112. // 封装指标数据下期时间
  113. func fillDataNextDateTime(list []*models.Edbdata) ([]*models.Edbdata, error) {
  114. if len(list) == 0 {
  115. return nil, nil
  116. }
  117. nextDataDateTime := models.Edbdata{}
  118. indexCodes := []string{list[0].TradeCode}
  119. edbinfoList, err := models.GetEdbinfoListByCodeListByCodeIdList(indexCodes)
  120. if err != nil {
  121. return nil, err
  122. }
  123. if len(edbinfoList) == 0 {
  124. return list, nil
  125. }
  126. date := utils.StrDateToDate(list[0].Dt)
  127. frequency := edbinfoList[0].Frequency
  128. switch frequency {
  129. case "日度":
  130. nextDataDateTime.Dt = date.AddDate(0, 0, 1).Format(utils.FormatDate)
  131. case "周度":
  132. nextDataDateTime.Dt = date.AddDate(0, 0, 7).Format(utils.FormatDate)
  133. case "旬度":
  134. nextDataDateTime.Dt = date.AddDate(0, 0, 10).Format(utils.FormatDate)
  135. case "月度":
  136. nextDataDateTime.Dt = date.AddDate(0, 1, 0).Format(utils.FormatDate)
  137. case "季度":
  138. nextDataDateTime.Dt = date.AddDate(0, 3, 0).Format(utils.FormatDate)
  139. case "半年度":
  140. nextDataDateTime.Dt = date.AddDate(0, 6, 0).Format(utils.FormatDate)
  141. case "年度":
  142. nextDataDateTime.Dt = date.AddDate(1, 0, 0).Format(utils.FormatDate)
  143. }
  144. list = append(list, &nextDataDateTime)
  145. return list, nil
  146. }
  147. // ClassifyEdbList
  148. // @Title 分类指标列表
  149. // @Description 指标列表
  150. // @Param ClassifyId query string true "分类id"
  151. // @Success 200 {object} models.TargetDetailResp
  152. // @router /target/classify/edb/list [get]
  153. func (c *ManualEdbController) ClassifyEdbList() {
  154. br := new(models.BaseResponse).Init()
  155. defer func() {
  156. c.Data["json"] = br
  157. c.ServeJSON()
  158. }()
  159. sysUser := c.SysUser
  160. if sysUser == nil {
  161. br.Msg = "请登录"
  162. br.Ret = 408
  163. return
  164. }
  165. resp := new(models.EdbdataClassifyResp)
  166. classifyId, _ := c.GetInt("ClassifyId") //分类
  167. if classifyId <= 0 {
  168. br.Msg = "请传入分类"
  169. br.ErrMsg = "请传入分类"
  170. br.IsSendEmail = false
  171. }
  172. var condition string
  173. var pars []interface{}
  174. // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限
  175. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  176. //获取账户所拥有权限的分类id集合
  177. count, err := models.GetCountManualUserClassify(sysUser.AdminId, classifyId)
  178. if err != nil {
  179. br.Msg = "获取分类数据失败"
  180. br.ErrMsg = "获取分类数据失败,err:" + err.Error()
  181. return
  182. }
  183. if count <= 0 {
  184. br.Msg = "无权访问"
  185. br.ErrMsg = "无权访问"
  186. br.IsSendEmail = false
  187. return
  188. }
  189. }
  190. list := make([]*models.EdbdataClassifyList, 0)
  191. condition += ` AND a.classify_id = ? `
  192. pars = append(pars, classifyId)
  193. tmpList, err := models.GetEdbInfoList(condition, pars, 0, 0)
  194. if err != nil {
  195. br.Msg = "获取失败"
  196. br.ErrMsg = "获取失败,Err:" + err.Error()
  197. return
  198. }
  199. for _, v := range tmpList {
  200. list = append(list, &models.EdbdataClassifyList{
  201. ClassifyId: 0,
  202. ClassifyName: v.SecName,
  203. ParentId: v.ClassifyId,
  204. Child: nil,
  205. TradeCode: v.TradeCode,
  206. UniqueCode: utils.MD5(v.TradeCode),
  207. })
  208. }
  209. resp.List = list
  210. br.Ret = 200
  211. br.Success = true
  212. br.Msg = "获取成功"
  213. br.Data = resp
  214. }
  215. // EdbSearch
  216. // @Title 指标搜索
  217. // @Description 指标搜索
  218. // @Param Keyword query string false "关键字搜索"
  219. // @Success 200 {object} models.TargetItemListResp
  220. // @router /target/edb/search [get]
  221. func (c *ManualEdbController) EdbSearch() {
  222. br := new(models.BaseResponse).Init()
  223. defer func() {
  224. c.Data["json"] = br
  225. c.ServeJSON()
  226. }()
  227. sysUser := c.SysUser
  228. if sysUser == nil {
  229. br.Msg = "请重新登录"
  230. return
  231. }
  232. pageSize, _ := c.GetInt("PageSize")
  233. currentIndex, _ := c.GetInt("CurrentIndex")
  234. var startSize int
  235. if pageSize <= 0 {
  236. pageSize = utils.PageSize20
  237. }
  238. if currentIndex <= 0 {
  239. currentIndex = 1
  240. }
  241. startSize = utils.StartIndex(currentIndex, pageSize)
  242. //关键字
  243. keyword := c.GetString("Keyword")
  244. var condition string
  245. var pars []interface{}
  246. //userId := sysUser.AdminId
  247. //超管账号可以查看分类下的所有频度数据
  248. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  249. classifyIdList, err := data.GetUserManualClassifyIdList(sysUser.AdminId)
  250. if err != nil {
  251. br.Msg = "获取分类数据失败"
  252. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  253. return
  254. }
  255. num := len(classifyIdList)
  256. if num > 0 {
  257. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  258. pars = append(pars, classifyIdList)
  259. }
  260. }
  261. if keyword != "" {
  262. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  263. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  264. }
  265. total, err := models.GetCountEdbInfoList(condition, pars)
  266. if err != nil {
  267. br.Msg = "获取失败"
  268. br.ErrMsg = "获取失败,Err:" + err.Error()
  269. return
  270. }
  271. list, err := models.GetEdbInfoList(condition, pars, startSize, pageSize)
  272. if err != nil {
  273. br.Msg = "获取失败"
  274. br.ErrMsg = "获取失败,Err:" + err.Error()
  275. return
  276. }
  277. for _, v := range list {
  278. v.UniqueCode = utils.MD5(v.TradeCode)
  279. }
  280. resp := models.EdbListResp{
  281. List: list,
  282. Paging: paging.GetPaging(currentIndex, pageSize, total),
  283. }
  284. br.Ret = 200
  285. br.Success = true
  286. br.Msg = "获取成功"
  287. br.Data = resp
  288. }
  289. // EdbList
  290. // @Title 获取研究员指标
  291. // @Description 获取研究员指标
  292. // @Param Frequency query string false "频度;枚举值:日度、周度、月度、季度、半年度、年度"
  293. // @Param Keyword query string false "关键字搜索"
  294. // @Param TradeCode query string false "指标唯一编码"
  295. // @Param ClassifyId query int false "分类id"
  296. // @Param UserId query int false "用户id"
  297. // @Success 200 {object} models.TargetItemListResp
  298. // @router /target/edb/list [get]
  299. func (c *ManualEdbController) EdbList() {
  300. br := new(models.BaseResponse).Init()
  301. defer func() {
  302. c.Data["json"] = br
  303. c.ServeJSON()
  304. }()
  305. sysUser := c.SysUser
  306. if sysUser == nil {
  307. br.Msg = "请重新登录"
  308. return
  309. }
  310. pageSize, _ := c.GetInt("PageSize")
  311. currentIndex, _ := c.GetInt("CurrentIndex")
  312. var startSize int
  313. if pageSize <= 0 {
  314. pageSize = utils.PageSize20
  315. }
  316. if currentIndex <= 0 {
  317. currentIndex = 1
  318. }
  319. startSize = utils.StartIndex(currentIndex, pageSize)
  320. // 频度
  321. frequency := c.GetString("Frequency")
  322. //关键字
  323. keyword := c.GetString("Keyword")
  324. //关键字
  325. classifyId, _ := c.GetInt("ClassifyId", 0)
  326. //用户ID
  327. userId, _ := c.GetInt("UserId", 0)
  328. var condition string
  329. var pars []interface{}
  330. // 权限用户id
  331. permissionUserId := sysUser.AdminId
  332. //超管账号可以查看分类下的所有频度数据
  333. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  334. classifyIdList, err := data.GetUserManualClassifyIdList(sysUser.AdminId)
  335. if err != nil {
  336. br.Msg = "获取分类数据失败"
  337. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  338. return
  339. }
  340. num := len(classifyIdList)
  341. if num > 0 {
  342. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  343. pars = append(pars, classifyIdList)
  344. }
  345. } else {
  346. permissionUserId = 0
  347. }
  348. // 关键词
  349. if keyword != "" {
  350. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  351. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  352. }
  353. if frequency != "" {
  354. condition += ` AND a.frequency = ?`
  355. pars = append(pars, frequency)
  356. }
  357. // 所属分类
  358. if classifyId > 0 {
  359. // 获取有用权限的分类
  360. classifyList, err := models.GetEdbdataClassify(int64(permissionUserId))
  361. if err != nil {
  362. return
  363. }
  364. var isParent bool
  365. classifyIdList := make([]int, 0)
  366. for _, v := range classifyList {
  367. if v.ClassifyId == classifyId {
  368. isParent = true
  369. classifyIdList = append(classifyIdList, v.ClassifyId)
  370. if v.Child != nil && len(v.Child) > 0 {
  371. for _, vv := range v.Child {
  372. classifyIdList = append(classifyIdList, vv.ClassifyId)
  373. }
  374. }
  375. break
  376. }
  377. }
  378. num := len(classifyIdList)
  379. if num > 0 && isParent {
  380. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  381. pars = append(pars, classifyIdList)
  382. } else {
  383. condition += ` AND a.classify_id = ? `
  384. pars = append(pars, classifyId)
  385. }
  386. }
  387. // 所属用户
  388. if userId > 0 {
  389. condition += ` AND a.user_id = ? `
  390. pars = append(pars, userId)
  391. }
  392. total, err := models.GetCountEdbInfoList(condition, pars)
  393. if err != nil {
  394. br.Msg = "获取失败"
  395. br.ErrMsg = "获取失败,Err:" + err.Error()
  396. return
  397. }
  398. list, err := models.GetEdbInfoList(condition, pars, startSize, pageSize)
  399. if err != nil {
  400. br.Msg = "获取失败"
  401. br.ErrMsg = "获取失败,Err:" + err.Error()
  402. return
  403. }
  404. // 获取预测时间
  405. fillNextDateTime(list)
  406. resp := models.EdbListResp{
  407. List: list,
  408. Paging: paging.GetPaging(currentIndex, pageSize, total),
  409. }
  410. br.Ret = 200
  411. br.Success = true
  412. br.Msg = "获取成功"
  413. br.Data = resp
  414. }
  415. // 封装指标列表下期时间
  416. func fillNextDateTime(list []*models.EdbInfoListItem) {
  417. for _, item := range list {
  418. date := utils.StrDateToDate(item.EndDate)
  419. switch item.Frequency {
  420. case "日度":
  421. item.NextDateTime = date.AddDate(0, 0, 1).Format(utils.FormatDate)
  422. case "周度":
  423. item.NextDateTime = date.AddDate(0, 0, 7).Format(utils.FormatDate)
  424. case "旬度":
  425. item.NextDateTime = date.AddDate(0, 0, 10).Format(utils.FormatDate)
  426. case "月度":
  427. item.NextDateTime = date.AddDate(0, 1, 0).Format(utils.FormatDate)
  428. case "季度":
  429. item.NextDateTime = date.AddDate(0, 3, 0).Format(utils.FormatDate)
  430. case "半年度":
  431. item.NextDateTime = date.AddDate(0, 6, 0).Format(utils.FormatDate)
  432. case "年度":
  433. item.NextDateTime = date.AddDate(1, 0, 0).Format(utils.FormatDate)
  434. }
  435. }
  436. }
  437. // EditExcelData
  438. // @Title 根据excel的样式去编辑指标
  439. // @Description 根据excel的样式去编辑指标
  440. // @Param request body models.ManualEdbExcelStyleEditReq true "type json string"
  441. // @Success 200
  442. // @router /target/edb/excel_style/edit [post]
  443. func (c *ManualEdbController) EditExcelData() {
  444. br := new(models.BaseResponse).Init()
  445. var err error
  446. errs := make([]string, 0)
  447. defer func() {
  448. if len(errs) > 0 {
  449. utils.FileLog.Info("编辑EXCEL数据 新增或修改数据失败,Err:" + strings.Join(errs, "\n"))
  450. }
  451. c.Data["json"] = br
  452. c.ServeJSON()
  453. }()
  454. sysUser := c.SysUser
  455. if sysUser == nil {
  456. br.Msg = "请重新登录"
  457. return
  458. }
  459. var req data_manage.ManualEdbExcelStyleEditReq
  460. err = json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  461. if err != nil {
  462. br.Msg = "参数解析异常!"
  463. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  464. return
  465. }
  466. if req.TradeCode == `` {
  467. br.Msg = "指标编码异常!"
  468. br.ErrMsg = "指标编码异常!"
  469. return
  470. }
  471. if req.Unit == `` {
  472. br.Msg = "单位填写异常!"
  473. br.ErrMsg = "单位填写异常!"
  474. return
  475. }
  476. if req.Frequency == `` {
  477. br.Msg = "频度填写异常!"
  478. br.ErrMsg = "频度填写异常!"
  479. return
  480. }
  481. if req.ClassifyId <= 0 {
  482. br.Msg = "品种填写异常!"
  483. br.ErrMsg = "品种填写异常!"
  484. return
  485. }
  486. // 获取指标信息
  487. manualEdbInfo, err := models.GetEdbinfoByTradeCode(req.TradeCode)
  488. if err != nil {
  489. br.Msg = `找不到该指标`
  490. br.Msg = `找不到该指标,ERR:` + err.Error()
  491. return
  492. }
  493. // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限
  494. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  495. count, err := models.GetCountManualUserClassify(sysUser.AdminId, manualEdbInfo.ClassifyId)
  496. if err != nil {
  497. br.Msg = "获取分类数据失败"
  498. br.ErrMsg = "获取分类数据失败,err:" + err.Error()
  499. return
  500. }
  501. if count <= 0 {
  502. br.Msg = "无权访问"
  503. br.ErrMsg = "无权访问"
  504. br.IsSendEmail = false
  505. return
  506. }
  507. }
  508. dateValueMap := make(map[string]string)
  509. //取到所有数据
  510. for _, dateValue := range req.Data {
  511. dateValueMap[dateValue.Date] = strconv.FormatFloat(dateValue.Value, 'f', -1, 64)
  512. }
  513. //操作指标,新增指标及数据等
  514. {
  515. var isUpdateEdb, isUpdateData bool
  516. secName := strings.TrimSpace(req.EdbName)
  517. frequency := strings.TrimSpace(req.Frequency)
  518. unit := strings.TrimSpace(req.Unit)
  519. // 指标基础信息变更
  520. {
  521. updateCols := make([]string, 0)
  522. if manualEdbInfo.SecName != secName {
  523. // 校验是否存在相同指标名称
  524. var condition string
  525. var pars []interface{}
  526. condition += " AND SEC_NAME=? AND left(TRADE_CODE,1)='W' AND REMARK='手动' AND TRADE_CODE != ? "
  527. pars = append(pars, secName, req.TradeCode)
  528. count, err := models.GetManualEdbCountByCondition(condition, pars)
  529. if err != nil {
  530. br.Msg = `指标保存失败`
  531. br.ErrMsg = `获取同名指标信息异常,ERR:` + err.Error()
  532. return
  533. }
  534. if count > 0 {
  535. br.Msg = `已存在同名指标`
  536. br.ErrMsg = `已存在同名指标`
  537. br.IsSendEmail = false
  538. return
  539. }
  540. updateCols = append(updateCols, "SecName")
  541. manualEdbInfo.SecName = secName
  542. }
  543. if manualEdbInfo.ClassifyId != req.ClassifyId {
  544. updateCols = append(updateCols, "ClassifyId")
  545. manualEdbInfo.ClassifyId = req.ClassifyId
  546. }
  547. if manualEdbInfo.Frequency != frequency {
  548. updateCols = append(updateCols, "Frequency")
  549. manualEdbInfo.Frequency = frequency
  550. }
  551. if manualEdbInfo.Unit != unit {
  552. updateCols = append(updateCols, "Unit")
  553. manualEdbInfo.Unit = unit
  554. }
  555. if len(updateCols) > 0 {
  556. isUpdateEdb = true
  557. manualEdbInfo.ModifyTime = time.Now().Format(utils.FormatDateTime)
  558. updateCols = append(updateCols, "ModifyTime")
  559. err = manualEdbInfo.Update(updateCols)
  560. if err != nil {
  561. br.Msg = `指标保存失败`
  562. br.ErrMsg = `指标保存失败,ERR:` + err.Error()
  563. return
  564. }
  565. }
  566. }
  567. // 当前已经存在的指标明细数据
  568. targetDataList, tmpErr := models.GetTargetsDataList(manualEdbInfo.TradeCode)
  569. if tmpErr != nil {
  570. err = tmpErr
  571. }
  572. existDataMap := make(map[string]string)
  573. deleteDataMap := make(map[string]string)
  574. for _, tmpData := range targetDataList {
  575. existDataMap[tmpData.Dt] = tmpData.Close
  576. deleteDataMap[tmpData.Dt] = tmpData.Dt
  577. }
  578. addDataList := make([]*models.Edbdata, 0)
  579. for createDate, closeVal := range dateValueMap {
  580. if createDate == "" || closeVal == "" {
  581. continue
  582. }
  583. //判断数据是否已经存在
  584. tmpVal, ok3 := existDataMap[createDate]
  585. // 不存在,那么后面进行插入
  586. if !ok3 {
  587. addDataList = append(addDataList, &models.Edbdata{
  588. TradeCode: manualEdbInfo.TradeCode,
  589. Dt: createDate,
  590. Close: closeVal,
  591. ModifyTime: time.Now(),
  592. })
  593. continue
  594. }
  595. delete(deleteDataMap, createDate)
  596. // 库里面的数据
  597. tmpValDecimal, tmpErr := decimal.NewFromString(tmpVal)
  598. if tmpErr != nil {
  599. fmt.Println("tmpVal Parse err:", tmpErr.Error())
  600. err = tmpErr
  601. continue
  602. }
  603. // 用户填写的数据
  604. closeValDecimal, tmpErr := decimal.NewFromString(closeVal)
  605. if tmpErr != nil {
  606. fmt.Println("closeVal Parse err:", tmpErr.Error())
  607. err = tmpErr
  608. continue
  609. }
  610. if !tmpValDecimal.Equal(closeValDecimal) {
  611. isUpdateData = true
  612. fmt.Println("更新数值")
  613. err = models.ModifyTargetsDataByImport(manualEdbInfo.TradeCode, createDate, closeVal)
  614. if err != nil {
  615. fmt.Println("ModifyTargetsDataByImport err:", err.Error())
  616. errs = append(errs, err.Error())
  617. //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 修改数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
  618. }
  619. }
  620. }
  621. // 新增指标
  622. if len(addDataList) > 0 {
  623. isUpdateData = true
  624. err = models.OnlyMultiAddEdbdata(addDataList)
  625. if err != nil {
  626. fmt.Println("MultiAddEdbdata err:", err.Error())
  627. errs = append(errs, err.Error())
  628. }
  629. }
  630. // 删除不需要的日期数据
  631. num := len(deleteDataMap)
  632. if num > 0 {
  633. isUpdateData = true
  634. deleteDateList := make([]string, 0)
  635. for date := range deleteDataMap {
  636. deleteDateList = append(deleteDateList, date)
  637. }
  638. err = models.DelEdbdataByCodeAndDateList(manualEdbInfo.TradeCode, deleteDateList)
  639. if err != nil {
  640. fmt.Println("DelEdbdataByCodeAndDateList err:", err.Error())
  641. errs = append(errs, err.Error())
  642. }
  643. }
  644. // 添加记录
  645. if isUpdateEdb {
  646. record := &models.EdbinfoOpRecord{
  647. TradeCode: manualEdbInfo.TradeCode,
  648. Remark: "编辑指标",
  649. UserId: sysUser.AdminId,
  650. UserName: sysUser.RealName,
  651. CreateTime: time.Now(),
  652. }
  653. go func() {
  654. _ = record.Create()
  655. }()
  656. }
  657. // 更新数据
  658. if isUpdateData {
  659. record := &models.EdbinfoOpRecord{
  660. TradeCode: manualEdbInfo.TradeCode,
  661. Remark: "更新数据",
  662. UserId: sysUser.AdminId,
  663. UserName: sysUser.RealName,
  664. CreateTime: time.Now(),
  665. }
  666. go func() {
  667. data.ModifyManualEdbMaxMinDate(manualEdbInfo.TradeCode)
  668. _ = record.Create()
  669. }()
  670. }
  671. //将该指标的code加入到 “手工数据导入后刷新” 缓存
  672. if utils.Re == nil {
  673. err := utils.Rc.LPush(utils.CACHE_IMPORT_MANUAL_DATA, manualEdbInfo.TradeCode)
  674. if err != nil {
  675. fmt.Println("CACHE_IMPORT_MANUAL_DATA LPush Err:" + err.Error())
  676. }
  677. }
  678. }
  679. br.Ret = 200
  680. br.Success = true
  681. br.Msg = "保存成功"
  682. }
  683. // BatchEdbList
  684. // @Title 获取研究员指标
  685. // @Description 获取研究员指标
  686. // @Param request body models.BatchAddEdbReq true "type json string"
  687. // @Success 200 {object} models.TargetItemListResp
  688. // @router /target/edb/batch/list [post]
  689. func (c *ManualEdbController) BatchEdbList() {
  690. br := new(models.BaseResponse).Init()
  691. defer func() {
  692. c.Data["json"] = br
  693. c.ServeJSON()
  694. }()
  695. sysUser := c.SysUser
  696. if sysUser == nil {
  697. br.Msg = "请重新登录"
  698. return
  699. }
  700. var req models.BatchManualEdbReq
  701. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  702. pageSize := req.PageSize
  703. currentIndex := req.CurrentIndex
  704. var startSize int
  705. if pageSize <= 0 {
  706. pageSize = utils.PageSize20
  707. }
  708. if currentIndex <= 0 {
  709. currentIndex = 1
  710. }
  711. startSize = utils.StartIndex(currentIndex, pageSize)
  712. req.Keyword = strings.TrimSpace(req.Keyword)
  713. var condition string
  714. var pars []interface{}
  715. // 是否加到指标库
  716. condition += ` AND a.is_join_edb = ? `
  717. pars = append(pars, 0)
  718. //超管账号可以查看分类下的所有频度数据
  719. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  720. classifyIdList, err := data.GetUserManualClassifyIdList(sysUser.AdminId)
  721. if err != nil {
  722. br.Msg = "获取分类数据失败"
  723. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  724. return
  725. }
  726. num := len(classifyIdList)
  727. if num > 0 {
  728. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  729. pars = append(pars, classifyIdList)
  730. }
  731. }
  732. // 关键词
  733. if req.Keyword != "" {
  734. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  735. pars = utils.GetLikeKeywordPars(pars, req.Keyword, 2)
  736. }
  737. // 所属分类
  738. lenFrequency := len(req.FrequencyList)
  739. if lenFrequency > 0 {
  740. condition += ` AND a.frequency in (` + utils.GetOrmInReplace(lenFrequency) + `) `
  741. pars = append(pars, req.FrequencyList)
  742. }
  743. // 所属分类
  744. lenClassify := len(req.ClassifyIdList)
  745. if lenClassify > 0 {
  746. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(lenClassify) + `) `
  747. pars = append(pars, req.ClassifyIdList)
  748. }
  749. // 所属用户
  750. lenUser := len(req.UserIdList)
  751. if lenUser > 0 {
  752. condition += ` AND a.user_id in (` + utils.GetOrmInReplace(lenUser) + `) `
  753. pars = append(pars, req.UserIdList)
  754. }
  755. total, err := models.GetCountEdbInfoList(condition, pars)
  756. if err != nil {
  757. br.Msg = "获取失败"
  758. br.ErrMsg = "获取失败,Err:" + err.Error()
  759. return
  760. }
  761. list, err := models.GetEdbInfoList(condition, pars, startSize, pageSize)
  762. if err != nil {
  763. br.Msg = "获取失败"
  764. br.ErrMsg = "获取失败,Err:" + err.Error()
  765. return
  766. }
  767. resp := models.EdbListResp{
  768. List: list,
  769. Paging: paging.GetPaging(currentIndex, pageSize, total),
  770. }
  771. br.Ret = 200
  772. br.Success = true
  773. br.Msg = "获取成功"
  774. br.Data = resp
  775. br.IsAddLog = false
  776. }
  777. // BatchAddEdbCheck
  778. // @Title 新增校验
  779. // @Description 新增校验
  780. // @Param request body data_manage.BatchManualEdbReq true "type json string"
  781. // @Success 200 string "操作成功"
  782. // @router /target/edb/batch/add/check [post]
  783. func (c *ManualEdbController) BatchAddEdbCheck() {
  784. br := new(models.BaseResponse).Init()
  785. defer func() {
  786. if br.ErrMsg == "" {
  787. br.IsSendEmail = false
  788. }
  789. c.Data["json"] = br
  790. c.ServeJSON()
  791. }()
  792. sysUser := c.SysUser
  793. if sysUser == nil {
  794. br.Msg = "请登录"
  795. br.ErrMsg = "请登录,SysUser Is Empty"
  796. br.Ret = 408
  797. return
  798. }
  799. // 最大批量添加的数量
  800. codeMax := 30
  801. var req models.BatchManualEdbReq
  802. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  803. req.Keyword = strings.TrimSpace(req.Keyword)
  804. var condition string
  805. var pars []interface{}
  806. //
  807. condition += ` AND a.is_join_edb = 0 `
  808. //超管账号可以查看分类下的所有频度数据
  809. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  810. classifyIdList, err := data.GetUserManualClassifyIdList(sysUser.AdminId)
  811. if err != nil {
  812. br.Msg = "获取分类数据失败"
  813. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  814. return
  815. }
  816. num := len(classifyIdList)
  817. if num > 0 {
  818. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  819. pars = append(pars, classifyIdList)
  820. }
  821. }
  822. if req.ListAll {
  823. // 关键词
  824. if req.Keyword != "" {
  825. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  826. pars = utils.GetLikeKeywordPars(pars, req.Keyword, 2)
  827. }
  828. // 所属分类
  829. lenFrequency := len(req.FrequencyList)
  830. if lenFrequency > 0 {
  831. condition += ` AND a.frequency in (` + utils.GetOrmInReplace(lenFrequency) + `) `
  832. pars = append(pars, req.FrequencyList)
  833. }
  834. // 所属分类
  835. lenClassify := len(req.ClassifyIdList)
  836. if lenClassify > 0 {
  837. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(lenClassify) + `) `
  838. pars = append(pars, req.ClassifyIdList)
  839. }
  840. // 所属用户
  841. lenUser := len(req.UserIdList)
  842. if lenUser > 0 {
  843. condition += ` AND a.user_id in (` + utils.GetOrmInReplace(lenUser) + `) `
  844. pars = append(pars, req.UserIdList)
  845. }
  846. lenTradeList := len(req.TradeCodeList)
  847. // 指标
  848. if lenTradeList > 0 {
  849. condition += ` AND a.TRADE_CODE not in (` + utils.GetOrmInReplace(lenTradeList) + `) `
  850. pars = append(pars, req.TradeCodeList)
  851. }
  852. } else {
  853. lenTradeList := len(req.TradeCodeList)
  854. if lenTradeList <= 0 {
  855. br.Msg = "请选择指标"
  856. br.ErrMsg = "请选择指标"
  857. return
  858. }
  859. // 指标
  860. if lenTradeList > 0 {
  861. condition += ` AND a.TRADE_CODE in (` + utils.GetOrmInReplace(lenTradeList) + `) `
  862. pars = append(pars, req.TradeCodeList)
  863. }
  864. }
  865. list, err := models.GetEdbInfoList(condition, pars, 0, 0)
  866. if err != nil {
  867. br.Msg = "获取失败"
  868. br.ErrMsg = "获取失败,Err:" + err.Error()
  869. return
  870. }
  871. if len(list) > codeMax {
  872. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  873. return
  874. }
  875. br.Data = list
  876. br.Msg = "校验成功"
  877. br.Ret = 200
  878. br.Success = true
  879. }
  880. // NameCheck
  881. // @Title 重名校验
  882. // @Description 批量新增
  883. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  884. // @Success 200 string "操作成功"
  885. // @router /target/edb/batch/add/name_check [post]
  886. func (c *ManualEdbController) NameCheck() {
  887. br := new(models.BaseResponse).Init()
  888. defer func() {
  889. if br.ErrMsg == "" {
  890. br.IsSendEmail = false
  891. }
  892. c.Data["json"] = br
  893. c.ServeJSON()
  894. }()
  895. sysUser := c.SysUser
  896. if sysUser == nil {
  897. br.Msg = "请登录"
  898. br.ErrMsg = "请登录,SysUser Is Empty"
  899. br.Ret = 408
  900. return
  901. }
  902. var req []*data_manage.AddEdbInfoReq
  903. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  904. br.Msg = "参数解析异常!"
  905. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  906. return
  907. }
  908. if len(req) == 0 {
  909. br.Msg = "请选择指标"
  910. return
  911. }
  912. type NameCheckResult struct {
  913. EdbCode string
  914. EdbName string
  915. Exist bool
  916. }
  917. indexNames := make([]string, 0)
  918. resp := make([]*NameCheckResult, 0)
  919. for _, v := range req {
  920. v.EdbCode = strings.TrimSpace(v.EdbCode)
  921. if v.EdbCode == "" {
  922. br.Msg = "指标ID不可为空"
  923. return
  924. }
  925. v.EdbName = strings.TrimSpace(v.EdbName)
  926. if v.EdbName == "" {
  927. br.Msg = "请输入指标名称"
  928. return
  929. }
  930. indexNames = append(indexNames, v.EdbName)
  931. resp = append(resp, &NameCheckResult{
  932. EdbCode: v.EdbCode,
  933. EdbName: v.EdbName,
  934. })
  935. }
  936. // 重名校验
  937. edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
  938. if e != nil {
  939. br.Msg = "操作失败"
  940. br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
  941. return
  942. }
  943. nameExists := make(map[string]bool)
  944. for _, v := range edbList {
  945. nameExists[v.EdbName] = true
  946. }
  947. if len(nameExists) > 0 {
  948. for _, v := range resp {
  949. v.Exist = nameExists[v.EdbName]
  950. }
  951. }
  952. br.Data = resp
  953. br.Msg = "操作成功"
  954. br.Ret = 200
  955. br.Success = true
  956. }
  957. // BatchAdd2Edb
  958. // @Title 批量新增到指标库
  959. // @Description 批量新增到指标库
  960. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  961. // @Success 200 string "操作成功"
  962. // @router /target/edb/batch/add [post]
  963. func (c *ManualEdbController) BatchAdd2Edb() {
  964. br := new(models.BaseResponse).Init()
  965. defer func() {
  966. if br.ErrMsg == "" {
  967. br.IsSendEmail = false
  968. }
  969. c.Data["json"] = br
  970. c.ServeJSON()
  971. }()
  972. sysUser := c.SysUser
  973. if sysUser == nil {
  974. br.Msg = "请登录"
  975. br.ErrMsg = "请登录,SysUser Is Empty"
  976. br.Ret = 408
  977. return
  978. }
  979. // 最大批量添加的数量
  980. codeMax := 30
  981. deleteCache := true
  982. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_MANUAL_" + strconv.Itoa(sysUser.AdminId)
  983. defer func() {
  984. if deleteCache {
  985. _ = utils.Rc.Delete(cacheKey)
  986. }
  987. }()
  988. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  989. deleteCache = false
  990. br.Msg = "系统处理中,请稍后重试!"
  991. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  992. return
  993. }
  994. var req []*data_manage.AddEdbInfoReq
  995. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  996. br.Msg = "参数解析异常!"
  997. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  998. return
  999. }
  1000. if len(req) == 0 {
  1001. br.Msg = "请选择指标"
  1002. return
  1003. }
  1004. if len(req) > codeMax {
  1005. br.Msg = "批量添加指标数量不得超过30个"
  1006. return
  1007. }
  1008. indexNames := make([]string, 0)
  1009. for _, v := range req {
  1010. v.EdbCode = strings.TrimSpace(v.EdbCode)
  1011. if v.EdbCode == "" {
  1012. br.Msg = "指标ID不可为空"
  1013. return
  1014. }
  1015. v.EdbName = strings.TrimSpace(v.EdbName)
  1016. if v.EdbName == "" {
  1017. br.Msg = "请输入指标名称"
  1018. return
  1019. }
  1020. indexNames = append(indexNames, v.EdbName)
  1021. v.Frequency = strings.TrimSpace(v.Frequency)
  1022. if v.Frequency == "" {
  1023. br.Msg = "请选择频度"
  1024. return
  1025. }
  1026. v.Unit = strings.TrimSpace(v.Unit)
  1027. if v.Unit == "" {
  1028. br.Msg = "请输入单位"
  1029. return
  1030. }
  1031. if v.ClassifyId <= 0 {
  1032. br.Msg = "请选择分类"
  1033. return
  1034. }
  1035. }
  1036. // 限定同一时间最多批量新增30个指标
  1037. for _, v := range req {
  1038. var r data.ManualIndexSource2EdbReq
  1039. r.EdbCode = v.EdbCode
  1040. r.EdbName = v.EdbName
  1041. r.Frequency = v.Frequency
  1042. r.Unit = v.Unit
  1043. r.ClassifyId = v.ClassifyId
  1044. r.AdminId = sysUser.AdminId
  1045. r.AdminRealName = sysUser.RealName
  1046. edbInfo, e, errMsg, skip := data.ManualIndexSource2Edb(r, c.Lang)
  1047. if e != nil {
  1048. br.Msg = "操作失败"
  1049. if errMsg != "" {
  1050. br.Msg = errMsg
  1051. }
  1052. br.ErrMsg = e.Error()
  1053. return
  1054. }
  1055. if skip {
  1056. continue
  1057. }
  1058. // 试用平台更新用户累计新增指标数
  1059. if utils.BusinessCode == utils.BusinessCodeSandbox {
  1060. go func() {
  1061. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  1062. if e != nil {
  1063. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  1064. utils.FileLog.Info(tips)
  1065. return
  1066. }
  1067. if adminItem.DepartmentName != "ETA试用客户" {
  1068. return
  1069. }
  1070. var ur etaTrialService.EtaTrialUserReq
  1071. ur.Mobile = adminItem.Mobile
  1072. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  1073. }()
  1074. }
  1075. // 新增操作日志
  1076. {
  1077. edbLog := new(data_manage.EdbInfoLog)
  1078. edbLog.EdbInfoId = edbInfo.EdbInfoId
  1079. edbLog.SourceName = edbInfo.SourceName
  1080. edbLog.Source = edbInfo.Source
  1081. edbLog.EdbCode = edbInfo.EdbCode
  1082. edbLog.EdbName = edbInfo.EdbName
  1083. edbLog.ClassifyId = edbInfo.ClassifyId
  1084. edbLog.SysUserId = sysUser.AdminId
  1085. edbLog.SysUserRealName = sysUser.RealName
  1086. edbLog.CreateTime = time.Now()
  1087. edbLog.Content = string(c.Ctx.Input.RequestBody)
  1088. edbLog.Status = "新增指标"
  1089. edbLog.Method = c.Ctx.Input.URI()
  1090. go data_manage.AddEdbInfoLog(edbLog)
  1091. }
  1092. }
  1093. br.Msg = "操作成功"
  1094. br.Ret = 200
  1095. br.Success = true
  1096. br.IsAddLog = true
  1097. }
  1098. // BatchDelEdbCheck
  1099. // @Title 新增校验
  1100. // @Description 新增校验
  1101. // @Param request body data_manage.BatchManualEdbReq true "type json string"
  1102. // @Success 200 string "操作成功"
  1103. // @router /target/edb/batch/del/check [post]
  1104. func (c *ManualEdbController) BatchDelEdbCheck() {
  1105. br := new(models.BaseResponse).Init()
  1106. defer func() {
  1107. if br.ErrMsg == "" {
  1108. br.IsSendEmail = false
  1109. }
  1110. c.Data["json"] = br
  1111. c.ServeJSON()
  1112. }()
  1113. sysUser := c.SysUser
  1114. if sysUser == nil {
  1115. br.Msg = "请登录"
  1116. br.ErrMsg = "请登录,SysUser Is Empty"
  1117. br.Ret = 408
  1118. return
  1119. }
  1120. var req models.BatchManualEdbReq
  1121. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  1122. req.Keyword = strings.TrimSpace(req.Keyword)
  1123. var condition string
  1124. var pars []interface{}
  1125. // 就是为了找出已经加入指标库的指标
  1126. condition += ` AND a.is_join_edb = ? `
  1127. pars = append(pars, 1)
  1128. //超管账号可以查看分类下的所有频度数据
  1129. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  1130. classifyIdList, err := data.GetUserManualClassifyIdList(sysUser.AdminId)
  1131. if err != nil {
  1132. br.Msg = "获取分类数据失败"
  1133. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  1134. return
  1135. }
  1136. num := len(classifyIdList)
  1137. if num > 0 {
  1138. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  1139. pars = append(pars, classifyIdList)
  1140. }
  1141. }
  1142. if req.ListAll {
  1143. // 关键词
  1144. if req.Keyword != "" {
  1145. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  1146. pars = utils.GetLikeKeywordPars(pars, req.Keyword, 2)
  1147. }
  1148. // 所属分类
  1149. lenFrequency := len(req.FrequencyList)
  1150. if lenFrequency > 0 {
  1151. condition += ` AND a.frequency in (` + utils.GetOrmInReplace(lenFrequency) + `) `
  1152. pars = append(pars, req.FrequencyList)
  1153. }
  1154. // 所属分类
  1155. lenClassify := len(req.ClassifyIdList)
  1156. if lenClassify > 0 {
  1157. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(lenClassify) + `) `
  1158. pars = append(pars, req.ClassifyIdList)
  1159. }
  1160. // 所属用户
  1161. lenUser := len(req.UserIdList)
  1162. if lenUser > 0 {
  1163. condition += ` AND a.user_id in (` + utils.GetOrmInReplace(lenUser) + `) `
  1164. pars = append(pars, req.UserIdList)
  1165. }
  1166. lenTradeList := len(req.TradeCodeList)
  1167. // 指标
  1168. if lenTradeList > 0 {
  1169. condition += ` AND a.TRADE_CODE not in (` + utils.GetOrmInReplace(lenTradeList) + `) `
  1170. pars = append(pars, req.TradeCodeList)
  1171. }
  1172. } else {
  1173. lenTradeList := len(req.TradeCodeList)
  1174. if lenTradeList <= 0 {
  1175. br.Msg = "请选择指标"
  1176. br.ErrMsg = "请选择指标"
  1177. return
  1178. }
  1179. // 指标
  1180. if lenTradeList > 0 {
  1181. condition += ` AND a.TRADE_CODE in (` + utils.GetOrmInReplace(lenTradeList) + `) `
  1182. pars = append(pars, req.TradeCodeList)
  1183. }
  1184. }
  1185. list, err := models.GetEdbInfoList(condition, pars, 0, 0)
  1186. if err != nil {
  1187. br.Msg = "获取失败"
  1188. br.ErrMsg = "获取失败,Err:" + err.Error()
  1189. return
  1190. }
  1191. br.Data = list
  1192. br.Msg = "校验成功"
  1193. br.Ret = 200
  1194. br.Success = true
  1195. }
  1196. // BatchDel
  1197. // @Title 批量删除
  1198. // @Description 批量新增
  1199. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  1200. // @Success 200 string "操作成功"
  1201. // @router /target/edb/batch/del [post]
  1202. func (c *ManualEdbController) BatchDel() {
  1203. br := new(models.BaseResponse).Init()
  1204. defer func() {
  1205. if br.ErrMsg == "" {
  1206. br.IsSendEmail = false
  1207. }
  1208. c.Data["json"] = br
  1209. c.ServeJSON()
  1210. }()
  1211. sysUser := c.SysUser
  1212. if sysUser == nil {
  1213. br.Msg = "请登录"
  1214. br.ErrMsg = "请登录,SysUser Is Empty"
  1215. br.Ret = 408
  1216. return
  1217. }
  1218. deleteCache := true
  1219. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_MANUAL_" + strconv.Itoa(sysUser.AdminId)
  1220. defer func() {
  1221. if deleteCache {
  1222. _ = utils.Rc.Delete(cacheKey)
  1223. }
  1224. }()
  1225. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  1226. deleteCache = false
  1227. br.Msg = "系统处理中,请稍后重试!"
  1228. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  1229. return
  1230. }
  1231. var req models.BatchManualEdbReq
  1232. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  1233. req.Keyword = strings.TrimSpace(req.Keyword)
  1234. var condition string
  1235. var pars []interface{}
  1236. // 就是为了找出已经加入指标库的指标
  1237. condition += ` AND a.is_join_edb = ? `
  1238. pars = append(pars, 0)
  1239. //超管账号可以查看分类下的所有频度数据
  1240. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  1241. classifyIdList, err := data.GetUserManualClassifyIdList(sysUser.AdminId)
  1242. if err != nil {
  1243. br.Msg = "获取分类数据失败"
  1244. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  1245. return
  1246. }
  1247. num := len(classifyIdList)
  1248. if num > 0 {
  1249. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  1250. pars = append(pars, classifyIdList)
  1251. }
  1252. }
  1253. if req.ListAll {
  1254. // 关键词
  1255. if req.Keyword != "" {
  1256. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  1257. pars = utils.GetLikeKeywordPars(pars, req.Keyword, 2)
  1258. }
  1259. // 所属分类
  1260. lenFrequency := len(req.FrequencyList)
  1261. if lenFrequency > 0 {
  1262. condition += ` AND a.frequency in (` + utils.GetOrmInReplace(lenFrequency) + `) `
  1263. pars = append(pars, req.FrequencyList)
  1264. }
  1265. // 所属分类
  1266. lenClassify := len(req.ClassifyIdList)
  1267. if lenClassify > 0 {
  1268. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(lenClassify) + `) `
  1269. pars = append(pars, req.ClassifyIdList)
  1270. }
  1271. // 所属用户
  1272. lenUser := len(req.UserIdList)
  1273. if lenUser > 0 {
  1274. condition += ` AND a.user_id in (` + utils.GetOrmInReplace(lenUser) + `) `
  1275. pars = append(pars, req.UserIdList)
  1276. }
  1277. lenTradeList := len(req.TradeCodeList)
  1278. // 指标
  1279. if lenTradeList > 0 {
  1280. condition += ` AND a.TRADE_CODE not in (` + utils.GetOrmInReplace(lenTradeList) + `) `
  1281. pars = append(pars, req.TradeCodeList)
  1282. }
  1283. } else {
  1284. lenTradeList := len(req.TradeCodeList)
  1285. if lenTradeList <= 0 {
  1286. br.Msg = "请选择指标"
  1287. br.ErrMsg = "请选择指标"
  1288. return
  1289. }
  1290. // 指标
  1291. if lenTradeList > 0 {
  1292. condition += ` AND a.TRADE_CODE in (` + utils.GetOrmInReplace(lenTradeList) + `) `
  1293. pars = append(pars, req.TradeCodeList)
  1294. }
  1295. }
  1296. list, err := models.GetEdbInfoList(condition, pars, 0, 0)
  1297. if err != nil {
  1298. br.Msg = "删除失败"
  1299. br.ErrMsg = "删除失败,Err:" + err.Error()
  1300. return
  1301. }
  1302. // TODO 二次校验指标是否已经加到指标库
  1303. {
  1304. codeList := make([]string, 0)
  1305. // 限定同一时间最多批量新增30个指标
  1306. for _, v := range list {
  1307. codeList = append(codeList, v.TradeCode)
  1308. }
  1309. err = models.DelManualIndexByCodeList(codeList)
  1310. if err != nil {
  1311. br.Msg = "删除失败"
  1312. br.ErrMsg = "删除失败,Err:" + err.Error()
  1313. return
  1314. }
  1315. }
  1316. br.Msg = "删除成功"
  1317. br.Ret = 200
  1318. br.Success = true
  1319. br.IsAddLog = true
  1320. }
  1321. // ImportData
  1322. // @Title 导入数据
  1323. // @Description 导入数据
  1324. // @Param EntryFile query file true "文件"
  1325. // @Success 200 Ret=200 录入成功
  1326. // @router /import/data [post]
  1327. func (c *ManualEdbController) ImportData() {
  1328. br := new(models.BaseResponse).Init()
  1329. defer func() {
  1330. c.Data["json"] = br
  1331. c.ServeJSON()
  1332. }()
  1333. sysUser := c.SysUser
  1334. if sysUser == nil {
  1335. br.Msg = "请重新登录"
  1336. return
  1337. }
  1338. file, _, err := c.GetFile("EntryFile")
  1339. if err != nil {
  1340. br.Msg = "获取文件失败"
  1341. br.ErrMsg = "获取文件失败,Err:" + err.Error()
  1342. return
  1343. }
  1344. path := "./static/数据导入_" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1345. defer file.Close()
  1346. err = c.SaveToFile("EntryFile", path)
  1347. if err != nil {
  1348. br.Msg = "文件保存失败"
  1349. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  1350. return
  1351. }
  1352. if utils.RunMode == "debug" {
  1353. defer os.Remove(path)
  1354. }
  1355. successCount, failCount, indexCount, err, errMsg := data.ImportManualData(path, sysUser)
  1356. if err != nil {
  1357. br.Msg = errMsg
  1358. br.ErrMsg = err.Error()
  1359. return
  1360. }
  1361. resp := models.EdbdataImportResp{
  1362. SuccessCount: successCount,
  1363. FailCount: failCount,
  1364. IndexCount: indexCount,
  1365. }
  1366. if failCount > 0 {
  1367. if successCount == 0 {
  1368. resp.Status = -1
  1369. resp.Msg = "导入失败"
  1370. } else {
  1371. resp.Status = 1
  1372. resp.Msg = "存在部分导入失败"
  1373. }
  1374. } else {
  1375. resp.Status = 0
  1376. }
  1377. br.Msg = "导入成功"
  1378. br.Ret = 200
  1379. br.Success = true
  1380. br.Data = resp
  1381. }
  1382. // RecordList
  1383. // @Title 获取指标操作记录列表
  1384. // @Description 获取指标操作记录列表
  1385. // @Param TradeCode query string false "指标编码"
  1386. // @Success 200 {object} models.EdbinfoOpRecordListResp
  1387. // @router /target/edb/op/record/list [get]
  1388. func (c *ManualEdbController) RecordList() {
  1389. br := new(models.BaseResponse).Init()
  1390. defer func() {
  1391. c.Data["json"] = br
  1392. c.ServeJSON()
  1393. }()
  1394. sysUser := c.SysUser
  1395. if sysUser == nil {
  1396. br.Msg = "请重新登录"
  1397. return
  1398. }
  1399. pageSize, _ := c.GetInt("PageSize")
  1400. currentIndex, _ := c.GetInt("CurrentIndex")
  1401. var startSize int
  1402. if pageSize <= 0 {
  1403. pageSize = utils.PageSize20
  1404. }
  1405. if currentIndex <= 0 {
  1406. currentIndex = 1
  1407. }
  1408. startSize = utils.StartIndex(currentIndex, pageSize)
  1409. // 频度
  1410. tradeCode := c.GetString("TradeCode")
  1411. if tradeCode == `` {
  1412. br.Msg = `请选择指标`
  1413. br.ErrMsg = `请选择指标`
  1414. br.IsSendEmail = false
  1415. return
  1416. }
  1417. total, list, err := models.GetEdbinfoOpRecordPageList(tradeCode, startSize, pageSize)
  1418. if err != nil {
  1419. br.Msg = "获取失败"
  1420. br.ErrMsg = "获取失败,Err:" + err.Error()
  1421. return
  1422. }
  1423. resp := models.EdbinfoOpRecordListResp{
  1424. List: list,
  1425. Paging: paging.GetPaging(currentIndex, pageSize, total),
  1426. }
  1427. br.Ret = 200
  1428. br.Success = true
  1429. br.Msg = "获取成功"
  1430. br.Data = resp
  1431. }