manual_edb.go 52 KB

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