target.go 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/tealeg/xlsx"
  6. "hongze/hongze_admin/models"
  7. "hongze/hongze_admin/utils"
  8. "os"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. //指标
  14. type TargetController struct {
  15. BaseAuthController
  16. }
  17. // @Title 获取ppt列表
  18. // @Description 获取ppt列表接口
  19. // @Param PageSize query int true "每页数据条数"
  20. // @Param CurrentIndex query int true "当前页页码,从1开始"
  21. // @Param StartDate query string true "开始日期"
  22. // @Param EndDate query string true "结束日期"
  23. // @Param Frequency query string true "频度"
  24. // @Param ClassifyId query int true "分类"
  25. // @Param KeyWord query string true "名称关键词"
  26. // @Param TradeCode query string true "指标唯一编码"
  27. // @Success 200 {object} models.DataListResp
  28. // @router /data/list [get]
  29. func (this *TargetController) DataList() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. pageSize, _ := this.GetInt("PageSize")
  36. currentIndex, _ := this.GetInt("CurrentIndex")
  37. keyWord := this.GetString("KeyWord")
  38. startDate := this.GetString("StartDate")
  39. endDate := this.GetString("EndDate")
  40. frequency := this.GetString("Frequency")
  41. tradeCode := this.GetString("TradeCode")
  42. classifyId, _ := this.GetInt("ClassifyId") //分类
  43. var startSize int
  44. if pageSize <= 0 {
  45. pageSize = utils.PageSize20
  46. }
  47. if currentIndex <= 0 {
  48. currentIndex = 1
  49. }
  50. startSize = utils.StartIndex(currentIndex, pageSize)
  51. var condition string
  52. var pars []interface{}
  53. if keyWord != "" {
  54. condition += ` AND a.SEC_NAME LIKE '%` + keyWord + `%' `
  55. }
  56. if startDate != "" {
  57. condition += ` AND c.DT >= ? `
  58. pars = append(pars, startDate)
  59. }
  60. if endDate != "" {
  61. condition += ` AND c.DT <= ? `
  62. pars = append(pars, endDate)
  63. }
  64. if frequency != "" {
  65. condition += ` AND a.frequency = ? `
  66. pars = append(pars, frequency)
  67. }
  68. if classifyId > 0 {
  69. condition += ` AND a.classify_id = ? `
  70. pars = append(pars, classifyId)
  71. }
  72. if tradeCode != "" {
  73. condition += ` AND c.TRADE_CODE= = ? `
  74. pars = append(pars, tradeCode)
  75. }
  76. total, err := models.GetDataListCount(condition, pars)
  77. if err != nil {
  78. br.Msg = "获取失败"
  79. br.ErrMsg = "获取失败,Err:" + err.Error()
  80. return
  81. }
  82. list, err := models.GetDataList(condition, pars, startSize, pageSize)
  83. if err != nil {
  84. br.Msg = "获取失败"
  85. br.ErrMsg = "获取失败,Err:" + err.Error()
  86. return
  87. }
  88. page := models.GetPaging(currentIndex, pageSize, total)
  89. resp := new(models.DataListResp)
  90. resp.Paging = page
  91. resp.List = list
  92. br.Ret = 200
  93. br.Success = true
  94. br.Msg = "获取成功"
  95. br.Data = resp
  96. }
  97. // @Title 录入数据
  98. // @Description 录入数据接口
  99. // @Param request body models.DataAddReq true "type json string"
  100. // @Success 200 Ret=200 录入成功
  101. // @router /data/add [post]
  102. func (this *TargetController) DataAdd() {
  103. br := new(models.BaseResponse).Init()
  104. defer func() {
  105. this.Data["json"] = br
  106. this.ServeJSON()
  107. }()
  108. var req models.DataAddReq
  109. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  110. if err != nil {
  111. br.Msg = "参数解析异常!"
  112. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  113. return
  114. }
  115. if req.TradeCode == "" {
  116. br.Msg = "指标编码不可为空!"
  117. return
  118. }
  119. if req.CreateDate == "" {
  120. br.Msg = "请选择日期"
  121. return
  122. }
  123. item, err := models.GetDataInfo(req.TradeCode, req.CreateDate)
  124. if err != nil && err.Error() != utils.ErrNoRow() {
  125. br.Msg = "获取信息失败!"
  126. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  127. return
  128. }
  129. if item != nil {
  130. br.Msg = "该指标当前日期下,数据已录入"
  131. return
  132. }
  133. edbdata := new(models.Edbdata)
  134. edbdata.TradeCode = req.TradeCode
  135. edbdata.Dt = req.CreateDate
  136. edbdata.Close = req.Close
  137. edbdata.ModifyTime = time.Now()
  138. _, err = models.AddEdbdata(edbdata)
  139. if err != nil {
  140. br.Msg = "新增失败"
  141. br.ErrMsg = "新增失败,Err:" + err.Error()
  142. return
  143. }
  144. br.Ret = 200
  145. br.Success = true
  146. br.Msg = "新增成功"
  147. }
  148. // @Title 编辑数据
  149. // @Description 编辑数据接口
  150. // @Param request body models.DataEditReq true "type json string"
  151. // @Success 200 Ret=200 编辑数据成功
  152. // @router /data/edit [post]
  153. func (this *TargetController) DataEdit() {
  154. br := new(models.BaseResponse).Init()
  155. defer func() {
  156. this.Data["json"] = br
  157. this.ServeJSON()
  158. }()
  159. var req models.DataEditReq
  160. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  161. if err != nil {
  162. br.Msg = "参数解析异常!"
  163. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  164. return
  165. }
  166. if req.TradeCode == "" {
  167. br.Msg = "指标编码不可为空!"
  168. return
  169. }
  170. if req.CreateDate == "" {
  171. br.Msg = "请选择日期"
  172. return
  173. }
  174. edbdata := new(models.Edbdata)
  175. edbdata.TradeCode = req.TradeCode
  176. edbdata.Dt = req.CreateDate
  177. edbdata.Close = req.Close
  178. edbdata.ModifyTime = time.Now()
  179. if req.OldCreateDate == "" {
  180. item, err := models.GetDataInfo(req.TradeCode, req.CreateDate)
  181. if err != nil && err.Error() != utils.ErrNoRow() {
  182. br.Msg = "获取信息失败!"
  183. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  184. return
  185. }
  186. if item == nil { //新增
  187. _, err = models.AddEdbdata(edbdata)
  188. if err != nil {
  189. br.Msg = "新增失败"
  190. br.ErrMsg = "新增失败,Err:" + err.Error()
  191. return
  192. }
  193. } else { //修改
  194. err = models.EditEdbdata(edbdata)
  195. if err != nil {
  196. br.Msg = "编辑失败"
  197. br.ErrMsg = "编辑失败,Err:" + err.Error()
  198. return
  199. }
  200. }
  201. } else {
  202. if req.CreateDate == req.OldCreateDate { //修改
  203. err = models.EditEdbdata(edbdata)
  204. if err != nil {
  205. br.Msg = "编辑失败"
  206. br.ErrMsg = "编辑失败,Err:" + err.Error()
  207. return
  208. }
  209. } else {
  210. item, err := models.GetDataInfo(req.TradeCode, req.CreateDate)
  211. if err != nil && err.Error() != utils.ErrNoRow() {
  212. br.Msg = "获取信息失败!"
  213. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  214. return
  215. }
  216. if item == nil {
  217. _, err = models.AddEdbdata(edbdata)
  218. if err != nil {
  219. br.Msg = "新增失败"
  220. br.ErrMsg = "新增失败,Err:" + err.Error()
  221. return
  222. }
  223. } else {
  224. err = models.EditEdbdata(edbdata)
  225. if err != nil {
  226. br.Msg = "编辑失败"
  227. br.ErrMsg = "编辑失败,Err:" + err.Error()
  228. return
  229. }
  230. }
  231. oldItem, err := models.GetDataInfo(req.TradeCode, req.OldCreateDate)
  232. if err != nil && err.Error() != utils.ErrNoRow() {
  233. br.Msg = "获取信息失败!"
  234. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  235. return
  236. }
  237. if oldItem != nil {
  238. record := new(models.EdbdataDeleteRecord)
  239. record.TradeCode = oldItem.TradeCode
  240. record.Dt = oldItem.Dt
  241. record.Close = oldItem.Close
  242. record.ModifyTime = oldItem.ModifyTime
  243. record.CreateTime = time.Now()
  244. record.SysUserId = this.SysUser.AdminId
  245. _, err = models.AddEdbdataDeleteRecord(record)
  246. if err != nil {
  247. br.Msg = "编辑失败"
  248. br.ErrMsg = "新增删除记录失败,Err:" + err.Error()
  249. return
  250. }
  251. //删除数据
  252. models.DeleteEdbData(req.TradeCode, req.OldCreateDate)
  253. }
  254. }
  255. }
  256. br.Ret = 200
  257. br.Success = true
  258. br.Msg = "编辑成功"
  259. }
  260. // @Title 指标列表
  261. // @Description 指标列表接口
  262. // @Param PageSize query int true "每页数据条数"
  263. // @Param CurrentIndex query int true "当前页页码,从1开始"
  264. // @Param StartDate query string true "开始日期"
  265. // @Param EndDate query string true "结束日期"
  266. // @Param Frequency query string true "频度"
  267. // @Param ClassifyId query int true "分类"
  268. // @Param KeyWord query string true "名称关键词"
  269. // @Success 200 {object} models.TargetListResp
  270. // @router /target/list [get]
  271. func (this *TargetController) TargetList() {
  272. br := new(models.BaseResponse).Init()
  273. defer func() {
  274. this.Data["json"] = br
  275. this.ServeJSON()
  276. }()
  277. sysUser := this.SysUser
  278. if sysUser == nil {
  279. br.Msg = "请登录"
  280. br.Ret = 408
  281. return
  282. }
  283. pageSize, _ := this.GetInt("PageSize")
  284. currentIndex, _ := this.GetInt("CurrentIndex")
  285. keyWord := this.GetString("KeyWord")
  286. startDate := this.GetString("StartDate")
  287. endDate := this.GetString("EndDate")
  288. frequency := this.GetString("Frequency")
  289. classifyId, _ := this.GetInt("ClassifyId") //分类
  290. var startSize int
  291. if pageSize <= 0 {
  292. pageSize = utils.PageSize20
  293. }
  294. if currentIndex <= 0 {
  295. currentIndex = 1
  296. }
  297. startSize = utils.StartIndex(currentIndex, pageSize)
  298. var condition string
  299. var pars []interface{}
  300. if keyWord != "" {
  301. condition += ` AND a.SEC_NAME LIKE '%` + keyWord + `%' `
  302. }
  303. if startDate != "" {
  304. condition += ` AND c.DT >= ? `
  305. pars = append(pars, startDate)
  306. }
  307. if endDate != "" {
  308. condition += ` AND c.DT <= ? `
  309. pars = append(pars, endDate)
  310. }
  311. if frequency != "" {
  312. condition += ` AND a.frequency = ? `
  313. pars = append(pars, frequency)
  314. }
  315. if classifyId > 0 {
  316. condition += ` AND a.classify_id = ? `
  317. pars = append(pars, classifyId)
  318. }
  319. mobile := sysUser.Mobile
  320. total, err := models.GetEdbinfoListCount(condition, pars, mobile)
  321. if err != nil {
  322. br.Msg = "获取失败"
  323. br.ErrMsg = "获取失败,Err:" + err.Error()
  324. return
  325. }
  326. list, err := models.GetEdbinfoList(condition, pars, startSize, pageSize, mobile)
  327. if err != nil {
  328. br.Msg = "获取失败"
  329. br.ErrMsg = "获取失败,Err:" + err.Error()
  330. return
  331. }
  332. page := models.GetPaging(currentIndex, pageSize, total)
  333. resp := new(models.TargetListResp)
  334. resp.Paging = page
  335. resp.List = list
  336. br.Ret = 200
  337. br.Success = true
  338. br.Msg = "获取成功"
  339. br.Data = resp
  340. }
  341. // @Title 录入指标
  342. // @Description 录入指标接口
  343. // @Param request body models.EdbinfoAddReq true "type json string"
  344. // @Success 200 Ret=200 录入成功
  345. // @router /target/add [post]
  346. func (this *TargetController) TargetAdd() {
  347. br := new(models.BaseResponse).Init()
  348. defer func() {
  349. this.Data["json"] = br
  350. this.ServeJSON()
  351. }()
  352. var req models.EdbinfoAddReq
  353. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  354. if err != nil {
  355. br.Msg = "参数解析异常!"
  356. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  357. return
  358. }
  359. sysUser := this.SysUser
  360. if sysUser == nil {
  361. br.Msg = "请重新登录"
  362. return
  363. }
  364. tradeCode, err := models.GetMaxTradeCode()
  365. if err != nil {
  366. br.Msg = "获取数据失败"
  367. br.ErrMsg = "获取最大交易编码失败,Err:" + err.Error()
  368. return
  369. }
  370. if tradeCode == "" {
  371. br.Msg = "数据异常"
  372. br.ErrMsg = "最大编码为空"
  373. return
  374. }
  375. maxTradeCode, err := utils.GetMaxTradeCode(tradeCode)
  376. if err != nil {
  377. br.Msg = "数据异常"
  378. br.ErrMsg = "获取编码信息失败,Err:" + err.Error()
  379. return
  380. }
  381. if maxTradeCode == "" {
  382. br.Msg = "编码为空,请联系技术"
  383. br.ErrMsg = "编码为空,请联系技术"
  384. return
  385. }
  386. if req.SecName == "" {
  387. br.Msg = "指标名称不能为空"
  388. return
  389. }
  390. item, err := models.GetEdbinfoBySecName(req.SecName)
  391. if err != nil && err.Error() != utils.ErrNoRow() {
  392. br.Msg = "获取信息失败!"
  393. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  394. return
  395. }
  396. if item != nil {
  397. br.Msg = "指标名称已存在"
  398. return
  399. }
  400. err = models.AddEdbinfo(maxTradeCode, req.SecName, req.Unit, "手动", req.Frequency, req.NoticeTime, req.ClassifyId, sysUser.AdminId)
  401. if err != nil {
  402. br.Msg = "新增失败"
  403. br.ErrMsg = "新增失败,Err:" + err.Error()
  404. return
  405. }
  406. err = models.AddEdbinfoUser(maxTradeCode, sysUser.Mobile)
  407. if err != nil {
  408. br.Msg = "新增失败"
  409. br.ErrMsg = "新增失败,Err:" + err.Error()
  410. return
  411. }
  412. br.Ret = 200
  413. br.Success = true
  414. br.Msg = "新增成功"
  415. }
  416. // @Title 编辑指标
  417. // @Description 编辑指标
  418. // @Param request body models.EdbinfoEditReq true "type json string"
  419. // @Success 200 Ret=200 录入成功
  420. // @router /target/edit [post]
  421. func (this *TargetController) TargetEdit() {
  422. br := new(models.BaseResponse).Init()
  423. defer func() {
  424. this.Data["json"] = br
  425. this.ServeJSON()
  426. }()
  427. var req models.EdbinfoEditReq
  428. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  429. if err != nil {
  430. br.Msg = "参数解析异常!"
  431. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  432. return
  433. }
  434. sysUser := this.SysUser
  435. if sysUser == nil {
  436. br.Msg = "请重新登录"
  437. return
  438. }
  439. if req.TradeCode == "" {
  440. br.Msg = "数据异常"
  441. br.ErrMsg = "最大编码为空"
  442. return
  443. }
  444. if req.SecName == "" {
  445. br.Msg = "指标名称不能为空"
  446. return
  447. }
  448. item, err := models.GetEdbinfoBySecName(req.SecName)
  449. if err != nil && err.Error() != utils.ErrNoRow() {
  450. br.Msg = "获取信息失败!"
  451. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  452. return
  453. }
  454. if item != nil {
  455. if req.TradeCode != item.TradeCode {
  456. br.Msg = "指标名称已存在"
  457. return
  458. }
  459. }
  460. err = models.EditEdbinfo(req.TradeCode, req.SecName, req.Unit, req.Frequency, req.NoticeTime, req.ClassifyId)
  461. if err != nil {
  462. br.Msg = "编辑失败"
  463. br.ErrMsg = "编辑失败,Err:" + err.Error()
  464. return
  465. }
  466. br.Ret = 200
  467. br.Success = true
  468. br.Msg = "编辑成功"
  469. }
  470. // @Title 搜索指标
  471. // @Description 搜索指标
  472. // @Param ClassifyId query int true "分类"
  473. // @Param KeyWord query string true "名称关键词"
  474. // @Success 200 {object} models.SearchTargetListResp
  475. // @router /target/search [get]
  476. func (this *TargetController) TargetSearch() {
  477. br := new(models.BaseResponse).Init()
  478. defer func() {
  479. this.Data["json"] = br
  480. this.ServeJSON()
  481. }()
  482. sysUser := this.SysUser
  483. if sysUser == nil {
  484. br.Msg = "请登录"
  485. br.Ret = 408
  486. return
  487. }
  488. classifyId, _ := this.GetInt("ClassifyId")
  489. keyWord := this.GetString("KeyWord")
  490. list, err := models.SearchTargetEntry(classifyId, keyWord)
  491. if err != nil {
  492. br.Msg = "获取失败"
  493. br.ErrMsg = "获取失败,Err:" + err.Error()
  494. return
  495. }
  496. resp := new(models.SearchTargetListResp)
  497. resp.List = list
  498. br.Ret = 200
  499. br.Success = true
  500. br.Msg = "获取成功"
  501. br.Data = resp
  502. }
  503. // @Title 获取分类
  504. // @Description 获取分类
  505. // @Success 200 {object} models.EdbdataClassifyResp
  506. // @router /classify [get]
  507. func (this *TargetController) ClassifyList() {
  508. br := new(models.BaseResponse).Init()
  509. defer func() {
  510. this.Data["json"] = br
  511. this.ServeJSON()
  512. }()
  513. sysUser := this.SysUser
  514. if sysUser == nil {
  515. br.Msg = "请登录"
  516. br.Ret = 408
  517. return
  518. }
  519. mobile := sysUser.Mobile
  520. var wxUserId int64
  521. if mobile != "" {
  522. wxUser, err := models.GetUserByMobile(mobile)
  523. if err != nil && err.Error() != utils.ErrNoRow() {
  524. br.Msg = "获取用户信息失败"
  525. br.ErrMsg = "获取用户信息失败,err:" + err.Error()
  526. return
  527. }
  528. if wxUser != nil {
  529. wxUserId = wxUser.UserId
  530. }
  531. }
  532. list, err := models.GetEdbdataClassify(wxUserId)
  533. if err != nil {
  534. br.Msg = "获取失败"
  535. br.ErrMsg = "获取失败,Err:" + err.Error()
  536. return
  537. }
  538. resp := new(models.EdbdataClassifyResp)
  539. resp.List = list
  540. br.Ret = 200
  541. br.Success = true
  542. br.Msg = "获取成功"
  543. br.Data = resp
  544. }
  545. // @Title 下载模板
  546. // @Description 下载模板
  547. // @Success 200 {object} models.EdbdataClassifyResp
  548. // @router /template [get]
  549. func (this *TargetController) TemplateDownload() {
  550. br := new(models.BaseResponse).Init()
  551. defer func() {
  552. this.Data["json"] = br
  553. this.ServeJSON()
  554. }()
  555. this.Ctx.Output.Download("./static./数据导入模板.xlsx", "数据导入模板.xlsx")
  556. }
  557. // @Title 导入数据
  558. // @Description 导入数据
  559. // @Param EntryFile query file true "文件"
  560. // @Success 200 Ret=200 录入成功
  561. // @router /import/data [post]
  562. func (this *TargetController) ImportData() {
  563. br := new(models.BaseResponse).Init()
  564. defer func() {
  565. this.Data["json"] = br
  566. this.ServeJSON()
  567. }()
  568. sysUser := this.SysUser
  569. if sysUser == nil {
  570. br.Msg = "请重新登录"
  571. return
  572. }
  573. file, h, err := this.GetFile("EntryFile")
  574. if err != nil {
  575. br.Msg = "获取文件失败"
  576. br.ErrMsg = "获取文件失败,Err:" + err.Error()
  577. return
  578. }
  579. path := "./static/" + h.Filename
  580. defer file.Close()
  581. err = this.SaveToFile("EntryFile", path)
  582. if err != nil {
  583. br.Msg = "文件保存失败"
  584. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  585. return
  586. }
  587. xlFile, err := xlsx.OpenFile(path)
  588. if err != nil {
  589. fmt.Println(err.Error())
  590. return
  591. }
  592. failDatas := make([]*models.EdbdataImportFail, 0)
  593. // 遍历sheet页读取
  594. for _, sheet := range xlFile.Sheets {
  595. fmt.Println("sheet name: ", sheet.Name)
  596. //遍历行读取
  597. maxRow := sheet.MaxRow
  598. fmt.Println("maxRow:", maxRow)
  599. fmt.Println("maxRow")
  600. for i := 0; i < maxRow; i++ {
  601. if i >= 2 {
  602. row, err := sheet.Row(i)
  603. fmt.Println(err)
  604. classifyName := row.GetCell(0).Value //分类
  605. cell1 := row.GetCell(1).Value
  606. createDate := utils.ConvertToFormatDay(cell1) //录入日期
  607. cell2 := row.GetCell(2).Value //指标名称
  608. secName := strings.Trim(cell2, " ")
  609. close := row.GetCell(3).Value //值
  610. //判断指标,类型,等数据是否正常
  611. classifyName = strings.Trim(classifyName, " ")
  612. fmt.Println(classifyName, createDate, secName, close)
  613. classify, err := models.GetEdbdataClassifyByClassifyName(classifyName)
  614. if err != nil {
  615. go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取分类:Err:"+err.Error(), utils.EmailSendToUsers)
  616. continue
  617. }
  618. if classify == nil {
  619. failItem := new(models.EdbdataImportFail)
  620. failItem.SysUserId = strconv.Itoa(sysUser.AdminId)
  621. failItem.ClassifyName = classifyName
  622. failItem.CreateDate = createDate
  623. failItem.SecName = secName
  624. failItem.Close = close
  625. failItem.Remark = "指标分类不存在"
  626. failDatas = append(failDatas, failItem)
  627. continue
  628. }
  629. //判断指标是否存在
  630. target, err := models.GetTargetBySecName(secName)
  631. if err != nil {
  632. fmt.Println("导入数据 获取指标:Err:" + err.Error())
  633. //utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取指标:Err:"+err.Error(), utils.EmailSendToUsers)
  634. }
  635. if target == nil {
  636. fmt.Println("line 158")
  637. failItem := new(models.EdbdataImportFail)
  638. failItem.SysUserId = strconv.Itoa(sysUser.AdminId)
  639. failItem.ClassifyName = classifyName
  640. failItem.CreateDate = createDate
  641. failItem.SecName = secName
  642. failItem.Close = close
  643. failItem.Remark = "指标不存在"
  644. failDatas = append(failDatas, failItem)
  645. continue
  646. }
  647. //更新指标分类
  648. if target.ClassifyId <= 0 && classify.ClassifyId > 0 {
  649. models.ModifyTargetClassifyId(target.TradeCode, classify.ClassifyId)
  650. }
  651. //判断数据是否已经存在
  652. count, err := models.GetTargetsDataCount(target.TradeCode, createDate)
  653. if err != nil {
  654. go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 判断数据是否存在失败:Err:"+err.Error(), utils.EmailSendToUsers)
  655. }
  656. //数据已存在,进行更新操作
  657. if count > 0 {
  658. edbData, err := models.GetTargetsData(target.TradeCode, createDate)
  659. if err != nil {
  660. go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 获取指标数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
  661. }
  662. if edbData != nil {
  663. if edbData.Close <= 0 {
  664. err = models.ModifyTargetsDataByImport(target.TradeCode, createDate, close)
  665. if err != nil {
  666. go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 修改数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
  667. }
  668. }
  669. }
  670. } else { //数据不存在,进行新增操作
  671. models.AddTargetsDataByImport(target.TradeCode, createDate, close)
  672. if err != nil {
  673. go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
  674. }
  675. }
  676. }
  677. }
  678. }
  679. resp := new(models.EdbdataImportResp)
  680. fmt.Println("failDatas:", len(failDatas))
  681. if len(failDatas) > 0 {
  682. for _, v := range failDatas {
  683. err = models.AddEdbdataImportFail(v)
  684. if err != nil {
  685. go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 新增失败记录失败:Err:"+err.Error(), utils.EmailSendToUsers)
  686. }
  687. }
  688. resp.Status = 1
  689. resp.Msg = "存在部分导入失败"
  690. } else {
  691. resp.Status = 0
  692. }
  693. br.Msg = "导入成功"
  694. br.Ret = 200
  695. br.Success = true
  696. br.Data = resp
  697. }
  698. // @Title 下载失败列表
  699. // @Description 下载失败列表
  700. // @Success 200 {object} models.EdbdataClassifyResp
  701. // @router /import/failList [get]
  702. func (this *TargetController) ImportFailListDownload() {
  703. br := new(models.BaseResponse).Init()
  704. defer func() {
  705. this.Data["json"] = br
  706. this.ServeJSON()
  707. }()
  708. sysUser := this.SysUser
  709. if sysUser == nil {
  710. br.Msg = "请重新登录"
  711. return
  712. }
  713. item, err := models.GetFailList(sysUser.AdminId)
  714. if err != nil {
  715. br.Msg = "获取数据失败"
  716. br.Msg = "获取数据失败,Err:" + err.Error()
  717. return
  718. }
  719. xlsxFile := xlsx.NewFile()
  720. sheet, err := xlsxFile.AddSheet("导入失败数据")
  721. headRow := sheet.AddRow()
  722. headRow.AddCell().SetValue("品种分类")
  723. headRow.AddCell().SetValue("录入日期")
  724. headRow.AddCell().SetValue("指标名称")
  725. headRow.AddCell().SetValue("值")
  726. headRow.AddCell().SetValue("备注")
  727. for _, v := range item {
  728. row := sheet.AddRow()
  729. row.AddCell().SetValue(v.ClassifyName)
  730. row.AddCell().SetValue(v.CreateDate)
  731. row.AddCell().SetValue(v.SecName)
  732. row.AddCell().SetValue(v.Close)
  733. row.AddCell().SetValue(v.Remark)
  734. }
  735. fileName := time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  736. savePath := "./static/" + fileName
  737. err = xlsxFile.Save(savePath)
  738. if err != nil {
  739. br.Msg = "文件保存失败"
  740. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  741. return
  742. }
  743. defer func() {
  744. os.Remove(savePath)
  745. }()
  746. this.Ctx.Output.Download(savePath, "失败列表.xlsx")
  747. }
  748. // @Title 导出数据
  749. // @Description 导出数据列表
  750. // @Param StartDate query string true "开始日期"
  751. // @Param EndDate query string true "结束日期"
  752. // @Param Frequency query string true "频度"
  753. // @Param ClassifyId query int true "分类"
  754. // @Param KeyWord query string true "名称关键词"
  755. // @Success 200 导出成功
  756. // @router /export/dataList [get]
  757. func (this *TargetController) ExportDataList() {
  758. br := new(models.BaseResponse).Init()
  759. defer func() {
  760. this.Data["json"] = br
  761. this.ServeJSON()
  762. }()
  763. keyWord := this.GetString("KeyWord")
  764. startDate := this.GetString("StartDate")
  765. endDate := this.GetString("EndDate")
  766. frequency := this.GetString("Frequency")
  767. classifyId, _ := this.GetInt("ClassifyId") //分类
  768. sysUser := this.SysUser
  769. if sysUser == nil {
  770. br.Msg = "请重新登录"
  771. return
  772. }
  773. item, err := models.GetDataListForExport(startDate, endDate, frequency, keyWord, classifyId)
  774. if err != nil {
  775. br.Msg = "获取数据失败"
  776. br.Msg = "获取数据失败,Err:" + err.Error()
  777. return
  778. }
  779. xlsxFile := xlsx.NewFile()
  780. sheet, err := xlsxFile.AddSheet("导入失败数据")
  781. headRow := sheet.AddRow()
  782. headRow.AddCell().SetValue("录入日期")
  783. headRow.AddCell().SetValue("指标名称")
  784. headRow.AddCell().SetValue("频度")
  785. headRow.AddCell().SetValue("分类")
  786. headRow.AddCell().SetValue("单位")
  787. headRow.AddCell().SetValue("值")
  788. for _, v := range item {
  789. row := sheet.AddRow()
  790. row.AddCell().SetValue(v.Dt)
  791. row.AddCell().SetValue(v.SecName)
  792. row.AddCell().SetValue(v.Frequency)
  793. row.AddCell().SetValue(v.ClassifyName)
  794. row.AddCell().SetValue(v.Unit)
  795. row.AddCell().SetValue(v.Close)
  796. }
  797. fileName := time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  798. savePath := "./static/" + fileName
  799. err = xlsxFile.Save(savePath)
  800. if err != nil {
  801. br.Msg = "文件保存失败"
  802. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  803. return
  804. }
  805. defer func() {
  806. os.Remove(savePath)
  807. }()
  808. this.Ctx.Output.Download(savePath, "数据列表.xlsx")
  809. }
  810. // @Title 数据删除
  811. // @Description 数据删除
  812. // @Param request body models.DataDeleteReq true "type json string"
  813. // @Success 200 Ret=200 录入成功
  814. // @router /data/delete [post]
  815. func (this *TargetController) DataDelete() {
  816. br := new(models.BaseResponse).Init()
  817. defer func() {
  818. this.Data["json"] = br
  819. this.ServeJSON()
  820. }()
  821. var req models.DataDeleteReq
  822. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  823. if err != nil {
  824. br.Msg = "参数解析异常!"
  825. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  826. return
  827. }
  828. sysUser := this.SysUser
  829. if sysUser == nil {
  830. br.Msg = "请重新登录"
  831. return
  832. }
  833. if req.TradeCode == "" {
  834. br.Msg = "指标编码不可为空"
  835. br.ErrMsg = "指标编码不可为空"
  836. return
  837. }
  838. if req.CreateDate == "" {
  839. br.Msg = "数据录入日期不可为空"
  840. return
  841. }
  842. item, err := models.GetDataInfo(req.TradeCode, req.CreateDate)
  843. if err != nil && err.Error() != utils.ErrNoRow() {
  844. br.Msg = "获取信息失败!"
  845. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  846. return
  847. }
  848. if item == nil {
  849. br.Msg = "数据不存在"
  850. return
  851. }
  852. err = models.DataDelete(req.TradeCode, req.CreateDate, item.Close, item.ModifyTime, sysUser.AdminId)
  853. if err != nil {
  854. br.Msg = "删除失败"
  855. br.ErrMsg = "删除失败,Err:" + err.Error()
  856. return
  857. }
  858. br.Ret = 200
  859. br.Success = true
  860. br.Msg = "删除成功"
  861. }
  862. // @Title 数据删除校验
  863. // @Description 数据删除校验
  864. // @Param TradeCode query string true "指标唯一编码"
  865. // @Param CreateDate query string true "数据录入日期"
  866. // @Success Ret=200 可删除
  867. // @router /data/check [get]
  868. func (this *TargetController) DataCheck() {
  869. br := new(models.BaseResponse).Init()
  870. defer func() {
  871. this.Data["json"] = br
  872. this.ServeJSON()
  873. }()
  874. tradeCode := this.GetString("TradeCode")
  875. createDate := this.GetString("CreateDate")
  876. sysUser := this.SysUser
  877. if sysUser == nil {
  878. br.Msg = "请重新登录"
  879. return
  880. }
  881. if tradeCode == "" {
  882. br.Msg = "指标编码不可为空"
  883. return
  884. }
  885. if createDate == "" {
  886. br.Msg = "请选择日期"
  887. return
  888. }
  889. item, err := models.GetDataInfo(tradeCode, createDate)
  890. if err != nil {
  891. br.Msg = "获取数据失败"
  892. br.Msg = "获取数据失败,Err:" + err.Error()
  893. return
  894. }
  895. if item != nil {
  896. br.Msg = "改日期已存在数据,是否确认修改?"
  897. return
  898. }
  899. br.Ret = 200
  900. br.Success = true
  901. br.Msg = "检测成功"
  902. }
  903. // @Title 指标删除校验
  904. // @Description 指标删除校验
  905. // @Param TradeCode query string true "指标唯一编码"
  906. // @Success Ret=200 可删除
  907. // @router /target/check [get]
  908. func (this *TargetController) TargetCheck() {
  909. br := new(models.BaseResponse).Init()
  910. defer func() {
  911. this.Data["json"] = br
  912. this.ServeJSON()
  913. }()
  914. tradeCode := this.GetString("TradeCode")
  915. sysUser := this.SysUser
  916. if sysUser == nil {
  917. br.Msg = "请重新登录"
  918. return
  919. }
  920. if tradeCode == "" {
  921. br.Msg = "指标编码不可为空"
  922. return
  923. }
  924. count, err := models.GetTargetInfoCount(tradeCode)
  925. if err != nil {
  926. br.Msg = "获取数据失败"
  927. br.Msg = "获取数据失败,Err:" + err.Error()
  928. return
  929. }
  930. if count > 0 {
  931. br.Msg = "该指标有关联数据,请先删除数据"
  932. return
  933. }
  934. br.Ret = 200
  935. br.Success = true
  936. br.Msg = "指标不存在关联数据,可直接删除"
  937. }
  938. // @Title 指标删除
  939. // @Description 指标删除
  940. // @Param request body models.TargetDeleteReq true "type json string"
  941. // @Success Ret=200 删除成功
  942. // @router /target/delete [post]
  943. func (this *TargetController) TargetDelete() {
  944. br := new(models.BaseResponse).Init()
  945. defer func() {
  946. this.Data["json"] = br
  947. this.ServeJSON()
  948. }()
  949. var req models.TargetDeleteReq
  950. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  951. if err != nil {
  952. br.Msg = "参数解析异常!"
  953. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  954. return
  955. }
  956. if req.TradeCode == "" {
  957. br.Msg = "指标编码不可为空"
  958. return
  959. }
  960. err = models.TargetDelete(req.TradeCode)
  961. if err != nil {
  962. br.Msg = "删除失败"
  963. br.Msg = "删除失败,Err:" + err.Error()
  964. return
  965. }
  966. br.Ret = 200
  967. br.Success = true
  968. br.Msg = "删除成功"
  969. }
  970. // @Title 获取研究员
  971. // @Description 获取研究员
  972. // @Success 200 {object} models.ResearcherListResp
  973. // @router /getResearcher [get]
  974. func (this *TargetController) GetResearcher() {
  975. br := new(models.BaseResponse).Init()
  976. defer func() {
  977. this.Data["json"] = br
  978. this.ServeJSON()
  979. }()
  980. sysUser := this.SysUser
  981. if sysUser == nil {
  982. br.Msg = "请重新登录"
  983. return
  984. }
  985. var err error
  986. list := make([]*models.Researcher, 0)
  987. if sysUser.Role == "admin" {
  988. list, err = models.GetResearcherEntry()
  989. if err != nil {
  990. br.Msg = "获取数据失败"
  991. br.Msg = "获取数据失败,Err:" + err.Error()
  992. return
  993. }
  994. }
  995. resp := new(models.ResearcherListResp)
  996. resp.List = list
  997. br.Ret = 200
  998. br.Success = true
  999. br.Msg = "获取成功"
  1000. br.Data = resp
  1001. }
  1002. // @Title 获取研究员指标
  1003. // @Description 获取研究员指标
  1004. // @Param Mobile query string true "手机号"
  1005. // @Success 200 {object} models.ResearcherListResp
  1006. // @router /getTargetItems [get]
  1007. func (this *TargetController) GetTargetItems() {
  1008. br := new(models.BaseResponse).Init()
  1009. defer func() {
  1010. this.Data["json"] = br
  1011. this.ServeJSON()
  1012. }()
  1013. sysUser := this.SysUser
  1014. if sysUser == nil {
  1015. br.Msg = "请重新登录"
  1016. return
  1017. }
  1018. mobile := this.GetString("Mobile")
  1019. if mobile == "" {
  1020. mobile = sysUser.Mobile
  1021. }
  1022. items, err := models.GetTargetItems(mobile)
  1023. if err != nil {
  1024. br.ErrMsg = "获取失败,Err:" + err.Error()
  1025. br.Msg = "获取失败"
  1026. return
  1027. }
  1028. resp := new(models.TargetItemsResp)
  1029. resp.List = items
  1030. br.Ret = 200
  1031. br.Success = true
  1032. br.Msg = "获取成功"
  1033. br.Data = resp
  1034. }