manual_edb.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/data_manage"
  6. "eta/eta_api/models/system"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "github.com/shopspring/decimal"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. // EdbDetail
  16. // @Title 指标列表
  17. // @Description 指标列表
  18. // @Param TradeCode query string true "指标编码"
  19. // @Success 200 {object} models.TargetDetailResp
  20. // @router /target/edb/detail [get]
  21. func (this *TargetController) EdbDetail() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. sysUser := this.SysUser
  28. if sysUser == nil {
  29. br.Msg = "请重新登录"
  30. return
  31. }
  32. // 指标编码
  33. tradeCode := this.GetString("TradeCode")
  34. if tradeCode == `` {
  35. br.Msg = "请输入指标编码"
  36. br.IsSendEmail = false
  37. return
  38. }
  39. manualEdbInfo, err := models.GetTargetByTradeCode(tradeCode)
  40. if err != nil {
  41. br.Msg = "获取指标失败"
  42. br.ErrMsg = "获取指标失败,err:" + err.Error()
  43. return
  44. }
  45. // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限
  46. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  47. //获取账户所拥有权限的分类id集合
  48. count, err := models.GetCountManualUserClassify(sysUser.AdminId, manualEdbInfo.ClassifyId)
  49. if err != nil {
  50. br.Msg = "获取分类数据失败"
  51. br.ErrMsg = "获取分类数据失败,err:" + err.Error()
  52. return
  53. }
  54. if count <= 0 {
  55. br.Msg = "无权访问"
  56. br.ErrMsg = "无权访问"
  57. br.IsSendEmail = false
  58. return
  59. }
  60. }
  61. classifyList := make([]*models.EdbdataClassify, 0)
  62. {
  63. classify, err := models.GetManualClassifyByClassifyId(manualEdbInfo.ClassifyId)
  64. if err != nil {
  65. br.Msg = "获取分类信息失败"
  66. br.ErrMsg = "获取分类信息失败,err:" + err.Error()
  67. return
  68. }
  69. parentClassify, err := models.GetManualClassifyByClassifyId(classify.ParentId)
  70. if err != nil {
  71. br.Msg = "获取分类信息失败"
  72. br.ErrMsg = "获取父级分类信息失败,err:" + err.Error()
  73. return
  74. }
  75. classifyList = []*models.EdbdataClassify{
  76. parentClassify, classify,
  77. }
  78. }
  79. // 录入的用户名称
  80. adminInfo, err := system.GetSysAdminById(manualEdbInfo.UserId)
  81. if err == nil {
  82. manualEdbInfo.UserName = adminInfo.RealName
  83. }
  84. // 明细数据
  85. {
  86. dataList, err := models.GetEdbDataListByCode(manualEdbInfo.TradeCode)
  87. if err != nil {
  88. br.Msg = "获取明细数据失败"
  89. br.ErrMsg = "获取明细数据失败,err:" + err.Error()
  90. return
  91. }
  92. manualEdbInfo.DataList = dataList
  93. }
  94. // 查找是否加入到指标库
  95. {
  96. edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_MANUAL, manualEdbInfo.TradeCode)
  97. if err != nil && err.Error() != utils.ErrNoRow() {
  98. br.Msg = "获取失败"
  99. br.ErrMsg = "获取失败,Err:" + err.Error()
  100. return
  101. }
  102. if edbInfo != nil {
  103. manualEdbInfo.EdbExist = 1
  104. }
  105. }
  106. resp := models.TargetDetailResp{
  107. Detail: manualEdbInfo,
  108. ClassifyList: classifyList,
  109. }
  110. br.Ret = 200
  111. br.Success = true
  112. br.Msg = "获取成功"
  113. //br.Data = resp
  114. br.Data = resp
  115. }
  116. // ClassifyEdbList
  117. // @Title 分类指标列表
  118. // @Description 指标列表
  119. // @Param ClassifyId query string true "分类id"
  120. // @Success 200 {object} models.TargetDetailResp
  121. // @router /target/classify/edb/list [get]
  122. func (this *TargetController) ClassifyEdbList() {
  123. br := new(models.BaseResponse).Init()
  124. defer func() {
  125. this.Data["json"] = br
  126. this.ServeJSON()
  127. }()
  128. sysUser := this.SysUser
  129. if sysUser == nil {
  130. br.Msg = "请登录"
  131. br.Ret = 408
  132. return
  133. }
  134. resp := new(models.EdbdataClassifyResp)
  135. classifyId, _ := this.GetInt("ClassifyId") //分类
  136. if classifyId <= 0 {
  137. br.Msg = "请传入分类"
  138. br.ErrMsg = "请传入分类"
  139. br.IsSendEmail = false
  140. }
  141. var condition string
  142. var pars []interface{}
  143. // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限
  144. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  145. //获取账户所拥有权限的分类id集合
  146. count, err := models.GetCountManualUserClassify(sysUser.AdminId, classifyId)
  147. if err != nil {
  148. br.Msg = "获取分类数据失败"
  149. br.ErrMsg = "获取分类数据失败,err:" + err.Error()
  150. return
  151. }
  152. if count <= 0 {
  153. br.Msg = "无权访问"
  154. br.ErrMsg = "无权访问"
  155. br.IsSendEmail = false
  156. return
  157. }
  158. }
  159. list := make([]*models.EdbdataClassifyList, 0)
  160. condition += ` AND a.classify_id = ? `
  161. pars = append(pars, classifyId)
  162. tmpList, err := models.GetEdbInfoList(condition, pars, 0, 0)
  163. if err != nil {
  164. br.Msg = "获取失败"
  165. br.ErrMsg = "获取失败,Err:" + err.Error()
  166. return
  167. }
  168. for _, v := range tmpList {
  169. list = append(list, &models.EdbdataClassifyList{
  170. ClassifyId: 0,
  171. ClassifyName: v.SecName,
  172. ParentId: v.ClassifyId,
  173. Child: nil,
  174. TradeCode: v.TradeCode,
  175. UniqueCode: utils.MD5(v.TradeCode),
  176. })
  177. }
  178. resp.List = list
  179. br.Ret = 200
  180. br.Success = true
  181. br.Msg = "获取成功"
  182. br.Data = resp
  183. }
  184. // EdbSearch
  185. // @Title 指标搜索
  186. // @Description 指标搜索
  187. // @Param Keyword query string false "关键字搜索"
  188. // @Success 200 {object} models.TargetItemListResp
  189. // @router /target/edb/search [get]
  190. func (this *TargetController) EdbSearch() {
  191. br := new(models.BaseResponse).Init()
  192. defer func() {
  193. this.Data["json"] = br
  194. this.ServeJSON()
  195. }()
  196. sysUser := this.SysUser
  197. if sysUser == nil {
  198. br.Msg = "请重新登录"
  199. return
  200. }
  201. pageSize, _ := this.GetInt("PageSize")
  202. currentIndex, _ := this.GetInt("CurrentIndex")
  203. var startSize int
  204. if pageSize <= 0 {
  205. pageSize = utils.PageSize20
  206. }
  207. if currentIndex <= 0 {
  208. currentIndex = 1
  209. }
  210. startSize = utils.StartIndex(currentIndex, pageSize)
  211. //关键字
  212. keyword := this.GetString("Keyword")
  213. var condition string
  214. var pars []interface{}
  215. userId := sysUser.AdminId
  216. //超管账号可以查看分类下的所有频度数据
  217. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  218. classifyList, err := models.GetEdbdataClassify(int64(userId))
  219. if err != nil {
  220. br.Msg = "获取分类数据失败"
  221. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  222. return
  223. }
  224. num := len(classifyList)
  225. if num > 0 {
  226. classifyIdList := make([]int, 0)
  227. for _, v := range classifyList {
  228. classifyIdList = append(classifyIdList, v.ClassifyId)
  229. }
  230. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  231. pars = append(pars, classifyIdList)
  232. }
  233. }
  234. if keyword != "" {
  235. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  236. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  237. }
  238. total, err := models.GetCountEdbInfoList(condition, pars)
  239. if err != nil {
  240. br.Msg = "获取失败"
  241. br.ErrMsg = "获取失败,Err:" + err.Error()
  242. return
  243. }
  244. list, err := models.GetEdbInfoList(condition, pars, startSize, pageSize)
  245. if err != nil {
  246. br.Msg = "获取失败"
  247. br.ErrMsg = "获取失败,Err:" + err.Error()
  248. return
  249. }
  250. for _, v := range list {
  251. v.UniqueCode = utils.MD5(v.TradeCode)
  252. }
  253. resp := models.EdbListResp{
  254. List: list,
  255. Paging: paging.GetPaging(currentIndex, pageSize, total),
  256. }
  257. br.Ret = 200
  258. br.Success = true
  259. br.Msg = "获取成功"
  260. br.Data = resp
  261. }
  262. // EdbList
  263. // @Title 获取研究员指标
  264. // @Description 获取研究员指标
  265. // @Param Frequency query string false "频度;枚举值:日度、周度、月度、季度、半年度、年度"
  266. // @Param Keyword query string false "关键字搜索"
  267. // @Param TradeCode query string false "指标唯一编码"
  268. // @Param ClassifyId query int false "分类id"
  269. // @Param EdbShowType query string true "指标展示类型:0,1,2; 0:不管有没有数据,指标都展示出来, 1:只展示有数据的指标, 2:只展示没有数据的指标"
  270. // @Success 200 {object} models.TargetItemListResp
  271. // @router /target/edb/list [get]
  272. func (this *TargetController) EdbList() {
  273. br := new(models.BaseResponse).Init()
  274. defer func() {
  275. this.Data["json"] = br
  276. this.ServeJSON()
  277. }()
  278. sysUser := this.SysUser
  279. if sysUser == nil {
  280. br.Msg = "请重新登录"
  281. return
  282. }
  283. pageSize, _ := this.GetInt("PageSize")
  284. currentIndex, _ := this.GetInt("CurrentIndex")
  285. var startSize int
  286. if pageSize <= 0 {
  287. pageSize = utils.PageSize20
  288. }
  289. if currentIndex <= 0 {
  290. currentIndex = 1
  291. }
  292. startSize = utils.StartIndex(currentIndex, pageSize)
  293. //关键字
  294. keyword := this.GetString("Keyword")
  295. //关键字
  296. classifyId, _ := this.GetInt("ClassifyId", 0)
  297. var condition string
  298. var pars []interface{}
  299. userId := sysUser.AdminId
  300. //超管账号可以查看分类下的所有频度数据
  301. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  302. classifyList, err := models.GetEdbdataClassify(int64(userId))
  303. if err != nil {
  304. br.Msg = "获取分类数据失败"
  305. br.Msg = "获取拥有的分类数据失败,Err:" + err.Error()
  306. return
  307. }
  308. num := len(classifyList)
  309. if num > 0 {
  310. classifyIdList := make([]int, 0)
  311. for _, v := range classifyList {
  312. classifyIdList = append(classifyIdList, v.ClassifyId)
  313. }
  314. condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) `
  315. pars = append(pars, classifyIdList)
  316. }
  317. }
  318. // 关键词
  319. if keyword != "" {
  320. condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )`
  321. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  322. }
  323. // 所属分类
  324. if classifyId > 0 {
  325. condition += ` AND a.classify_id = ? `
  326. pars = append(pars, classifyId)
  327. }
  328. total, err := models.GetCountEdbInfoList(condition, pars)
  329. if err != nil {
  330. br.Msg = "获取失败"
  331. br.ErrMsg = "获取失败,Err:" + err.Error()
  332. return
  333. }
  334. list, err := models.GetEdbInfoList(condition, pars, startSize, pageSize)
  335. if err != nil {
  336. br.Msg = "获取失败"
  337. br.ErrMsg = "获取失败,Err:" + err.Error()
  338. return
  339. }
  340. edbCodeMap := make(map[string]bool)
  341. listNum := len(list)
  342. if listNum > 0 {
  343. tradeCodeList := make([]string, 0)
  344. for _, v := range list {
  345. v.UniqueCode = utils.MD5(v.TradeCode)
  346. tradeCodeList = append(tradeCodeList, v.TradeCode)
  347. }
  348. // 查找是否加入到指标库
  349. {
  350. var edbCondition string
  351. var edbPars []interface{}
  352. edbCondition = ` AND source = ? AND edb_code in (` + utils.GetOrmInReplace(listNum) + `) `
  353. edbPars = append(edbPars, utils.DATA_SOURCE_MANUAL, tradeCodeList)
  354. edbInfoList, err := data_manage.GetEdbInfoListByCond(edbCondition, edbPars)
  355. if err != nil {
  356. br.Msg = "获取失败"
  357. br.ErrMsg = "获取失败,Err:" + err.Error()
  358. return
  359. }
  360. for _, v := range edbInfoList {
  361. edbCodeMap[v.EdbCode] = true
  362. }
  363. }
  364. for _, v := range list {
  365. // 如果能通过指标编码下标找到,那么说明是加到指标库中
  366. if _, ok := edbCodeMap[v.TradeCode]; ok {
  367. v.EdbExist = 1
  368. }
  369. }
  370. }
  371. resp := models.EdbListResp{
  372. List: list,
  373. Paging: paging.GetPaging(currentIndex, pageSize, total),
  374. }
  375. br.Ret = 200
  376. br.Success = true
  377. br.Msg = "获取成功"
  378. br.Data = resp
  379. }
  380. // EditExcelData
  381. // @Title 根据excel的样式去编辑指标
  382. // @Description 根据excel的样式去编辑指标
  383. // @Param request body models.ManualEdbExcelStyleEditReq true "type json string"
  384. // @Success 200
  385. // @router /target/edb/excel_style/edit [post]
  386. func (this *TargetController) EditExcelData() {
  387. br := new(models.BaseResponse).Init()
  388. var err error
  389. errs := make([]string, 0)
  390. defer func() {
  391. if len(errs) > 0 {
  392. utils.FileLog.Info("编辑EXCEL数据 新增或修改数据失败,Err:" + strings.Join(errs, "\n"))
  393. }
  394. this.Data["json"] = br
  395. this.ServeJSON()
  396. }()
  397. sysUser := this.SysUser
  398. if sysUser == nil {
  399. br.Msg = "请重新登录"
  400. return
  401. }
  402. var req data_manage.ManualEdbExcelStyleEditReq
  403. err = json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  404. if err != nil {
  405. br.Msg = "参数解析异常!"
  406. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  407. return
  408. }
  409. if req.TradeCode == `` {
  410. br.Msg = "指标编码异常!"
  411. br.ErrMsg = "指标编码异常!"
  412. return
  413. }
  414. if req.Unit == `` {
  415. br.Msg = "单位填写异常!"
  416. br.ErrMsg = "单位填写异常!"
  417. return
  418. }
  419. if req.Frequency == `` {
  420. br.Msg = "频度填写异常!"
  421. br.ErrMsg = "频度填写异常!"
  422. return
  423. }
  424. if req.ClassifyId <= 0 {
  425. br.Msg = "品种填写异常!"
  426. br.ErrMsg = "品种填写异常!"
  427. return
  428. }
  429. // 获取指标信息
  430. manualEdbInfo, err := models.GetEdbinfoByTradeCode(req.TradeCode)
  431. if err != nil {
  432. br.Msg = `找不到该指标`
  433. br.Msg = `找不到该指标,ERR:` + err.Error()
  434. return
  435. }
  436. // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限
  437. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  438. //获取账户所拥有权限的分类id集合
  439. count, err := models.GetCountManualUserClassify(sysUser.AdminId, manualEdbInfo.ClassifyId)
  440. if err != nil {
  441. br.Msg = "获取分类数据失败"
  442. br.ErrMsg = "获取分类数据失败,err:" + err.Error()
  443. return
  444. }
  445. if count <= 0 {
  446. br.Msg = "无权访问"
  447. br.ErrMsg = "无权访问"
  448. br.IsSendEmail = false
  449. return
  450. }
  451. }
  452. dateValueMap := make(map[string]string)
  453. //取到所有数据
  454. for i := range req.Data {
  455. // 过滤第一行
  456. if i == 0 {
  457. continue
  458. }
  459. if req.Data[i] == nil {
  460. continue
  461. }
  462. tmpData := req.Data[i]
  463. // 少于两列,说明数据是异常的,得过滤
  464. if len(tmpData) < 2 {
  465. continue
  466. }
  467. var tmpDate string
  468. //先拿下日期列表
  469. {
  470. dateMap := tmpData[0].(map[string]interface{})
  471. _, ok := dateMap["m"]
  472. if !ok {
  473. continue
  474. }
  475. tmpDate = dateMap["m"].(string)
  476. }
  477. // 数据处理
  478. {
  479. if tmpData[1] == nil {
  480. continue
  481. }
  482. valueMap := tmpData[1].(map[string]interface{})
  483. value, _ := valueMap["m"]
  484. if value == nil {
  485. continue
  486. }
  487. dateValueMap[tmpDate] = valueMap["m"].(string)
  488. // 09-27 千位分隔符时用 "m" 取字符串存数据库会把逗号当小数点,现在换用 "v" 直接取数字再转为字符串,看看会不会有问题
  489. if ct, ok := valueMap["ct"].(map[string]interface{}); ok {
  490. fa, _ := ct["fa"]
  491. if fa == "#,##0.000" {
  492. value = valueMap["v"]
  493. floatValue := valueMap["v"].(float64)
  494. dateValueMap[tmpDate] = strconv.FormatFloat(floatValue, 'f', -1, 64)
  495. }
  496. }
  497. }
  498. }
  499. //操作指标,新增指标及数据等
  500. {
  501. secName := strings.TrimSpace(req.Name)
  502. frequency := strings.TrimSpace(req.Frequency)
  503. unit := strings.TrimSpace(req.Unit)
  504. // 指标基础信息变更
  505. {
  506. updateCols := make([]string, 0)
  507. if manualEdbInfo.SecName != secName {
  508. updateCols = append(updateCols, "SecName")
  509. manualEdbInfo.SecName = secName
  510. }
  511. if manualEdbInfo.ClassifyId != req.ClassifyId {
  512. updateCols = append(updateCols, "ClassifyId")
  513. manualEdbInfo.ClassifyId = req.ClassifyId
  514. }
  515. if manualEdbInfo.Frequency != frequency {
  516. updateCols = append(updateCols, "Frequency")
  517. manualEdbInfo.Frequency = frequency
  518. }
  519. if manualEdbInfo.Unit != unit {
  520. updateCols = append(updateCols, "Unit")
  521. manualEdbInfo.Unit = unit
  522. }
  523. if len(updateCols) > 0 {
  524. err = manualEdbInfo.Update(updateCols)
  525. if err != nil {
  526. br.Msg = `指标保存失败`
  527. br.Msg = `指标保存失败,ERR:` + err.Error()
  528. return
  529. }
  530. }
  531. }
  532. // 当前已经存在的指标明细数据
  533. targetDataList, tmpErr := models.GetTargetsDataList(manualEdbInfo.TradeCode)
  534. if tmpErr != nil {
  535. err = tmpErr
  536. }
  537. existDataMap := make(map[string]string)
  538. deleteDataMap := make(map[string]string)
  539. for _, tmpData := range targetDataList {
  540. existDataMap[tmpData.Dt] = tmpData.Close
  541. deleteDataMap[tmpData.Dt] = tmpData.Dt
  542. }
  543. addDataList := make([]*models.Edbdata, 0)
  544. for createDate, closeVal := range dateValueMap {
  545. if createDate == "" || closeVal == "" {
  546. continue
  547. }
  548. //判断数据是否已经存在
  549. tmpVal, ok3 := existDataMap[createDate]
  550. // 不存在,那么后面进行插入
  551. if !ok3 {
  552. addDataList = append(addDataList, &models.Edbdata{
  553. TradeCode: manualEdbInfo.TradeCode,
  554. Dt: createDate,
  555. Close: closeVal,
  556. ModifyTime: time.Now(),
  557. })
  558. continue
  559. }
  560. delete(deleteDataMap, createDate)
  561. // 库里面的数据
  562. tmpValDecimal, tmpErr := decimal.NewFromString(tmpVal)
  563. if tmpErr != nil {
  564. fmt.Println("tmpVal Parse err:", tmpErr.Error())
  565. err = tmpErr
  566. continue
  567. }
  568. // 用户填写的数据
  569. closeValDecimal, tmpErr := decimal.NewFromString(closeVal)
  570. if tmpErr != nil {
  571. fmt.Println("closeVal Parse err:", tmpErr.Error())
  572. err = tmpErr
  573. continue
  574. }
  575. if !tmpValDecimal.Equal(closeValDecimal) {
  576. fmt.Println("更新数值")
  577. err = models.ModifyTargetsDataByImport(manualEdbInfo.TradeCode, createDate, closeVal)
  578. if err != nil {
  579. fmt.Println("ModifyTargetsDataByImport err:", err.Error())
  580. errs = append(errs, err.Error())
  581. //go utils.SendEmail(utils.APPNAME+"失败提醒", "导入数据 修改数据失败:Err:"+err.Error(), utils.EmailSendToUsers)
  582. }
  583. }
  584. }
  585. // 新增指标
  586. if len(addDataList) > 0 {
  587. err = models.MultiAddEdbdata(addDataList)
  588. if err != nil {
  589. fmt.Println("MultiAddEdbdata err:", err.Error())
  590. errs = append(errs, err.Error())
  591. }
  592. }
  593. // 删除不需要的日期数据
  594. num := len(deleteDataMap)
  595. if num > 0 {
  596. deleteDateList := make([]string, 0)
  597. for date := range deleteDataMap {
  598. deleteDateList = append(deleteDateList, date)
  599. }
  600. err = models.DelEdbdataByCodeAndDateList(manualEdbInfo.TradeCode, deleteDateList)
  601. if err != nil {
  602. fmt.Println("DelEdbdataByCodeAndDateList err:", err.Error())
  603. errs = append(errs, err.Error())
  604. }
  605. }
  606. }
  607. br.Ret = 200
  608. br.Success = true
  609. br.Msg = "保存成功"
  610. }