manual_edb.go 41 KB

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