base_from_ths_hf.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. package data_manage
  2. import (
  3. "eta_gn/eta_api/global"
  4. "eta_gn/eta_api/utils"
  5. "fmt"
  6. "github.com/rdlucklib/rdluck_tools/paging"
  7. "strings"
  8. "time"
  9. )
  10. // TODO:有时间还是放在配置里面吧...
  11. var (
  12. ThsHfPeriodArr = []int{1, 3, 5, 10, 15, 30, 60} // 时间周期
  13. ThsHfCPSArr = []string{"no", "forward1", "forward2", "forward3", "forward4", "backward1", "backward2", "backward3", "backward4"} // 复权方式
  14. ThsHfFillArr = []string{"Original", "Previous", "Blank"} // 非交易间隔处理
  15. ThsHfEdbCodeCn = map[string]string{"open": "开盘价", "close": "收盘价", "high": "最高价", "low": "最低价", "avgprice": "均价", "volume": "成交价", "amt": "成交额", "pct_chg": "涨跌幅", "oi": "持仓量"} // 可选指标代码对应中文
  16. )
  17. // BaseFromThsHfIndex 同花顺高频数据
  18. type BaseFromThsHfIndex struct {
  19. BaseFromThsHfIndexId int `orm:"column(base_from_ths_hf_index_id);pk" gorm:"primaryKey" `
  20. BaseFromThsHfClassifyId int `description:"分类ID"`
  21. IndexCode string `description:"指标编码"`
  22. IndexName string `description:"指标名称"`
  23. Unit string `description:"单位"`
  24. Source string `description:"数据来源"`
  25. Frequency string `description:"频度"`
  26. StartDate time.Time `description:"开始日期(至时分秒)"`
  27. EndDate time.Time `description:"结束日期(至时分秒)"`
  28. Describe string `description:"指标描述"`
  29. Sort int `description:"排序"`
  30. IsStop int `description:"是否停更:0-否;1-停更"`
  31. TerminalCode string `description:"所属终端编码"`
  32. StockCode string `description:"证券代码"`
  33. Indicator string `description:"同花顺指标代码"`
  34. ApiPars string `description:"API请求参数"`
  35. LatestValue float64 `description:"最新值"`
  36. SysUserId int `description:"创建人ID"`
  37. SysUserRealName string `description:"创建人姓名"`
  38. CreateTime time.Time `description:"创建时间"`
  39. ModifyTime time.Time `description:"修改时间"`
  40. }
  41. func (m *BaseFromThsHfIndex) TableName() string {
  42. return "base_from_ths_hf_index"
  43. }
  44. type BaseFromThsHfIndexCols struct {
  45. PrimaryId string
  46. BaseFromThsHfClassifyId string
  47. IndexCode string
  48. IndexName string
  49. Unit string
  50. Source string
  51. Frequency string
  52. StartDate string
  53. EndDate string
  54. Describe string
  55. Sort string
  56. IsStop string
  57. TerminalCode string
  58. StockCode string
  59. Indicator string
  60. ApiPars string
  61. LatestValue string
  62. SysUserId string
  63. SysUserRealName string
  64. CreateTime string
  65. ModifyTime string
  66. }
  67. func (m *BaseFromThsHfIndex) Cols() BaseFromThsHfIndexCols {
  68. return BaseFromThsHfIndexCols{
  69. PrimaryId: "base_from_ths_hf_index_id",
  70. BaseFromThsHfClassifyId: "base_from_ths_hf_classify_id",
  71. IndexCode: "index_code",
  72. IndexName: "index_name",
  73. Unit: "unit",
  74. Source: "source",
  75. Frequency: "frequency",
  76. StartDate: "start_date",
  77. EndDate: "end_date",
  78. Describe: "describe",
  79. Sort: "sort",
  80. IsStop: "is_stop",
  81. TerminalCode: "terminal_code",
  82. StockCode: "stock_code",
  83. Indicator: "indicator",
  84. ApiPars: "api_pars",
  85. LatestValue: "latest_value",
  86. SysUserId: "sys_user_id",
  87. SysUserRealName: "sys_user_real_name",
  88. CreateTime: "create_time",
  89. ModifyTime: "modify_time",
  90. }
  91. }
  92. func (m *BaseFromThsHfIndex) Create() (err error) {
  93. err = global.DmSQL["data"].Create(m).Error
  94. return
  95. }
  96. func (m *BaseFromThsHfIndex) CreateMulti(items []*BaseFromThsHfIndex) (err error) {
  97. if len(items) == 0 {
  98. return
  99. }
  100. err = global.DmSQL["data"].CreateInBatches(items, utils.MultiAddNum).Error
  101. return
  102. }
  103. func (m *BaseFromThsHfIndex) Update(cols []string) (err error) {
  104. o := global.DmSQL["data"]
  105. err = o.Select(cols).Updates(m).Error
  106. return
  107. }
  108. func (m *BaseFromThsHfIndex) Remove() (err error) {
  109. o := global.DmSQL["data"]
  110. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  111. err = o.Exec(sql, m.BaseFromThsHfIndexId).Error
  112. return
  113. }
  114. func (m *BaseFromThsHfIndex) MultiRemove(ids []int) (err error) {
  115. if len(ids) == 0 {
  116. return
  117. }
  118. o := global.DmSQL["data"]
  119. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
  120. err = o.Exec(sql, ids).Error
  121. return
  122. }
  123. func (m *BaseFromThsHfIndex) RemoveByCondition(condition string, pars []interface{}) (err error) {
  124. if condition == "" {
  125. return
  126. }
  127. o := global.DmSQL["data"]
  128. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
  129. err = o.Exec(sql, pars...).Error
  130. return
  131. }
  132. func (m *BaseFromThsHfIndex) GetItemById(id int) (item *BaseFromThsHfIndex, err error) {
  133. o := global.DmSQL["data"]
  134. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  135. err = o.Raw(sql, id).First(&item).Error
  136. return
  137. }
  138. func (m *BaseFromThsHfIndex) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *BaseFromThsHfIndex, err error) {
  139. o := global.DmSQL["data"]
  140. order := ``
  141. if orderRule != "" {
  142. order = ` ORDER BY ` + orderRule
  143. }
  144. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
  145. err = o.Raw(sql, pars...).First(&item).Error
  146. return
  147. }
  148. func (m *BaseFromThsHfIndex) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  149. o := global.DmSQL["data"]
  150. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
  151. err = o.Raw(sql, pars...).Scan(&count).Error
  152. return
  153. }
  154. func (m *BaseFromThsHfIndex) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*BaseFromThsHfIndex, err error) {
  155. o := global.DmSQL["data"]
  156. fields := strings.Join(fieldArr, ",")
  157. if len(fieldArr) == 0 {
  158. fields = `*`
  159. }
  160. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  161. if orderRule != "" {
  162. order = ` ORDER BY ` + orderRule
  163. }
  164. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  165. err = o.Raw(sql, pars...).Scan(&items).Error
  166. return
  167. }
  168. func (m *BaseFromThsHfIndex) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*BaseFromThsHfIndex, err error) {
  169. o := global.DmSQL["data"]
  170. fields := strings.Join(fieldArr, ",")
  171. if len(fieldArr) == 0 {
  172. fields = `*`
  173. }
  174. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  175. if orderRule != "" {
  176. order = ` ORDER BY ` + orderRule
  177. }
  178. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
  179. pars = append(pars, startSize)
  180. pars = append(pars, pageSize)
  181. err = o.Raw(sql, pars...).Scan(&items).Error
  182. return
  183. }
  184. // BaseFromThsHfIndexItem 同花顺高频数据信息
  185. type BaseFromThsHfIndexItem struct {
  186. IndexId int `description:"同花顺高频数据ID"`
  187. ClassifyId int `description:"分类ID"`
  188. IndexCode string `description:"指标编码"`
  189. IndexName string `description:"指标名称"`
  190. Unit string `description:"单位"`
  191. Source string `description:"数据来源"`
  192. Frequency string `description:"频度"`
  193. StartDate string `description:"开始日期(至时分秒)"`
  194. EndDate string `description:"结束日期(至时分秒)"`
  195. Describe string `description:"指标描述"`
  196. Sort int `description:"排序"`
  197. StockCode string `description:"证券代码"`
  198. Indicator string `description:"同花顺指标代码"`
  199. LatestValue float64 `description:"最新值"`
  200. ClassifyPath string `description:"完整分类路径"`
  201. CreateTime string `description:"创建时间"`
  202. ModifyTime string `description:"修改时间"`
  203. }
  204. func (m *BaseFromThsHfIndex) Format2Item() (item *BaseFromThsHfIndexItem) {
  205. item = new(BaseFromThsHfIndexItem)
  206. item.ClassifyId = m.BaseFromThsHfClassifyId
  207. item.IndexId = m.BaseFromThsHfIndexId
  208. item.IndexCode = m.IndexCode
  209. item.IndexName = m.IndexName
  210. item.Unit = m.Unit
  211. item.Source = m.Source
  212. item.Frequency = m.Frequency
  213. item.StartDate = utils.TimeTransferString(utils.FormatDateTime, m.StartDate)
  214. item.EndDate = utils.TimeTransferString(utils.FormatDateTime, m.EndDate)
  215. item.Describe = m.Describe
  216. item.Sort = m.Sort
  217. item.StockCode = m.StockCode
  218. item.Indicator = m.Indicator
  219. item.LatestValue = m.LatestValue
  220. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
  221. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime)
  222. return
  223. }
  224. func (m *BaseFromThsHfIndex) UpdateClassifyMulti(ids []int, classifyId int) (err error) {
  225. if len(ids) == 0 || classifyId <= 0 {
  226. return
  227. }
  228. o := global.DmSQL["data"]
  229. sql := fmt.Sprintf(`UPDATE %s SET %s = ?, %s = NOW() WHERE %s IN (%s)`, m.TableName(), m.Cols().BaseFromThsHfClassifyId, m.Cols().ModifyTime, m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
  230. err = o.Exec(sql, classifyId, ids).Error
  231. return
  232. }
  233. // ThsHfSearchEdbReq 搜索指标请求体
  234. type ThsHfSearchEdbReq struct {
  235. StockCode string `form:"StockCode" description:"证券代码" `
  236. EdbCode string `form:"EdbCode" description:"指标代码"`
  237. StartTime string `form:"StartTime" description:"每日数据开始时间"`
  238. EndTime string `form:"EndTime" description:"每日数据结束时间"`
  239. Interval int `form:"Interval" description:"时间周期"`
  240. Fill string `form:"Fill" description:"非交易间隔处理"`
  241. CPS string `form:"CPS" description:"复权方式"`
  242. BaseDate string `form:"BaseDate" description:"复权基点"`
  243. }
  244. // ThsHfExistCheckResp 指标存在校验响应
  245. type ThsHfExistCheckResp struct {
  246. ExistAll bool `description:"指标是否全部存在: true-是; false-否"`
  247. ExistIndex []ThsHfExistCheckIndex `description:"已存在的指标信息"`
  248. }
  249. // ThsHfExistCheckIndex 指标存在校验-指标信息
  250. type ThsHfExistCheckIndex struct {
  251. IndexId int `description:"指标ID"`
  252. IndexCode string `description:"指标编码"`
  253. IndexName string `description:"指标名称"`
  254. }
  255. // ThsHfSearchEdbResp 响应体
  256. type ThsHfSearchEdbResp struct {
  257. StockCode string `description:"证券代码" `
  258. EdbCode string `description:"指标代码"`
  259. IndexName string `description:"指标名称"`
  260. Frequency int `description:"频度: 1-60"`
  261. IndexData []ThsHfSearchEdbData `description:"指标数据"`
  262. }
  263. type ThsHfSearchEdbData struct {
  264. DataTime string
  265. Value string
  266. }
  267. // ThsHfIndexWithData 同花顺高频指标
  268. type ThsHfIndexWithData struct {
  269. StockCode string `description:"证券代码"`
  270. EdbCode string `description:"指标代码"`
  271. IndexData []*ThsHfIndexData `description:"指标数据"`
  272. }
  273. // ThsHfIndexData 同花顺高频指标数据
  274. type ThsHfIndexData struct {
  275. DataTime time.Time `description:"数据时间(2006-01-02 15:04)"`
  276. Value float64 `description:"数据值"`
  277. }
  278. // ThsHfIndexDataLibResp 同花顺高频指标-指标库响应
  279. type ThsHfIndexDataLibResp struct {
  280. Ret int
  281. Msg string
  282. ErrMsg string
  283. ErrCode string
  284. Data []*ThsHfIndexWithData
  285. Success bool `description:"true 执行成功,false 执行失败"`
  286. }
  287. // ThsHfAddEdbReq 新增指标请求体
  288. type ThsHfAddEdbReq struct {
  289. StartTime string `description:"每日数据开始时间"`
  290. EndTime string `description:"每日数据结束时间"`
  291. Interval int `description:"时间周期"`
  292. Fill string `description:"非交易间隔处理"`
  293. CPS string `description:"复权方式"`
  294. BaseDate string `description:"复权基点"`
  295. IndexList []*ThsHfBaseAddIndexItem `description:"指标信息"`
  296. }
  297. type ThsHfBaseAddIndexItem struct {
  298. ClassifyId int `description:"分类ID"`
  299. Unit string `description:"单位"`
  300. IndexName string `description:"指标名称"`
  301. Frequency string `description:"频度"`
  302. StockCode string `description:"证券代码"`
  303. EdbCode string `description:"指标代码"`
  304. }
  305. type ThsHfBaseAddReq struct {
  306. StartTime string `description:"每日数据开始时间"`
  307. EndTime string `description:"每日数据结束时间"`
  308. Interval int `description:"时间周期"`
  309. Fill string `description:"非交易间隔处理"`
  310. CPS string `description:"复权方式"`
  311. BaseDate string `description:"复权基点"`
  312. SysAdminId int `description:"创建人ID"`
  313. SysAdminName string `description:"创建人姓名"`
  314. ThsHfBaseAddIndexItem `description:"指标信息"`
  315. }
  316. // ThsHfIndexEditReq 编辑指标请求
  317. type ThsHfIndexEditReq struct {
  318. IndexId int `description:"指标ID"`
  319. IndexName string `description:"指标名称"`
  320. ClassifyId int `description:"分类ID"`
  321. Unit string `description:"单位"`
  322. }
  323. // ThsHfIndexOptReq 指标操作请求
  324. type ThsHfIndexOptReq struct {
  325. IndexId int `description:"指标ID"`
  326. }
  327. // ThsHfIndexListChoiceReq 指标列表选择请求
  328. type ThsHfIndexListChoiceReq struct {
  329. ClassifyId string `form:"ClassifyId" description:"分类ID(多选)"`
  330. IncludeChild bool `form:"IncludeChild" description:"是否包含子分类"`
  331. Frequency string `form:"Frequency" description:"频度(多选)"`
  332. SysAdminId string `form:"SysAdminId" description:"创建人ID(多选)"`
  333. Keywords string `form:"Keywords" description:"关键词: 指标ID/指标名称"`
  334. ListIds string `form:"ListIds" description:"列表选择项/排除项(全选为true时为排除项)"`
  335. SelectAll bool `form:"SelectAll" description:"是否全选: true/false"`
  336. }
  337. // ThsHfIndexListChoiceItem 指标列表选择响应
  338. type ThsHfIndexListChoiceItem struct {
  339. IndexId int `description:"指标ID"`
  340. IndexCode string `description:"指标编码"`
  341. IndexName string `description:"指标名称"`
  342. }
  343. // ThsHfIndexMultiOptReq 指标批量操作请求
  344. type ThsHfIndexMultiOptReq struct {
  345. IndexIds []int `description:"指标IDs"`
  346. OptType int `description:"操作类型: 1-移动分类; 2-删除; 3-刷新"`
  347. MoveClassifyId int `description:"移动至分类ID"`
  348. RefreshType int `description:"刷新类型: 1-最近6小时; 2-全部刷新"`
  349. }
  350. // ThsHfIndexListForm 指标列表表单
  351. type ThsHfIndexListForm struct {
  352. PageSize int `form:"PageSize" description:"每页数据量"`
  353. CurrentIndex int `form:"CurrentIndex" description:"页码"`
  354. SortField int `form:"SortField" description:"排序字段: 1-指标开始时间; 2-指标最新时间; 3-更新时间; 4-最新值"`
  355. SortType int `form:"SortType" description:"排序类型: 1-升序; 2-降序"`
  356. ClassifyId string `form:"ClassifyId" description:"分类ID(多选)"`
  357. IncludeChild bool `form:"IncludeChild" description:"是否包含子分类"`
  358. Frequency string `form:"Frequency" description:"频度(多选)"`
  359. SysAdminId string `form:"SysAdminId" description:"创建人ID(多选)"`
  360. Keywords string `form:"Keywords" description:"关键词: 指标ID/指标名称"`
  361. }
  362. type ThsHfIndexPageListResp struct {
  363. List []*BaseFromThsHfIndexItem
  364. Paging *paging.PagingItem `description:"分页数据"`
  365. }
  366. func GetThsHfIndexById(indexId int) (item *BaseFromThsHfIndex, err error) {
  367. o := global.DmSQL["data"]
  368. sql := ` SELECT * FROM base_from_ths_hf_index WHERE base_from_ths_hf_index_id = ?`
  369. err = o.Raw(sql, indexId).First(&item).Error
  370. return
  371. }
  372. // UpdateThsHfIndexSortByClassifyId 根据分类id更新排序
  373. func UpdateThsHfIndexSortByClassifyId(classifyId, nowSort int, prevEdbInfoId int, updateSort string) (err error) {
  374. o := global.DmSQL["data"]
  375. sql := ` update base_from_ths_hf_index set sort = ` + updateSort + ` WHERE base_from_ths_hf_classify_id=?`
  376. if prevEdbInfoId > 0 {
  377. sql += ` AND ( sort > ? or ( base_from_ths_hf_index_id > ` + fmt.Sprint(prevEdbInfoId) + ` and sort=` + fmt.Sprint(nowSort) + ` )) `
  378. } else {
  379. sql += ` AND ( sort > ? )`
  380. }
  381. err = o.Exec(sql, classifyId, nowSort).Error
  382. return
  383. }
  384. // GetThsHfIndexMaxSortByClassifyId 获取分类下指标的最大的排序数
  385. func GetThsHfIndexMaxSortByClassifyId(classifyId int) (sort int, err error) {
  386. o := global.DmSQL["data"]
  387. sql := `SELECT Max(sort) AS sort FROM base_from_ths_hf_index WHERE base_from_ths_hf_classify_id = ?`
  388. err = o.Raw(sql, classifyId).Scan(&sort).Error
  389. return
  390. }
  391. // GetFirstThsHfIndexByClassifyId 获取当前分类下,且排序数相同 的排序第一条的数据
  392. func GetFirstThsHfIndexByClassifyId(classifyId int) (item *BaseFromThsHfIndex, err error) {
  393. o := global.DmSQL["data"]
  394. sql := ` SELECT * FROM base_from_ths_hf_index WHERE base_from_ths_hf_classify_id = ? order by sort asc,base_from_ths_hf_index_id asc limit 1`
  395. err = o.Raw(sql, classifyId).First(&item).Error
  396. return
  397. }
  398. type ThsHfIndexConvert2EdbRule struct {
  399. ConvertType int `description:"转换类型: 1-指定时间值; 2-区间计算值"`
  400. ConvertFixed struct {
  401. FixedDay int `description:"指定时间值日期: 1-当日; 2-前一日"`
  402. FixedTime string `description:"指定时间值时点(HH:mm:ss)"`
  403. } `description:"指定时间值"`
  404. ConvertArea struct {
  405. StartDay int `description:"起始时间日期: 1-当日; 2-前一日"`
  406. StartTime string `description:"起始时间时点(HH:mm:ss)"`
  407. EndDay int `description:"截止时间日期: 1-当日; 2-前一日"`
  408. EndTime string `description:"截止时间时点(HH:mm:ss)"`
  409. CalculateType int `description:"计算类型: 1-区间均值; 2-最大值; 3-最小值"`
  410. } `description:"区间计算值"`
  411. }
  412. // ThsHfIndexMultiSave2EdbPreReq 批量添加指标库请求
  413. type ThsHfIndexMultiSave2EdbPreReq struct {
  414. ConvertRule ThsHfIndexConvert2EdbRule
  415. IndexIds []int `description:"指标IDs"`
  416. }
  417. type ThsHfIndexMultiSave2EdbReq struct {
  418. ConvertRule ThsHfIndexConvert2EdbRule
  419. NewIndexes []*ThsHfIndexMultiSave2EdbPreItem `description:"新增指标"`
  420. }
  421. type ThsHfIndexMultiSave2EdbLibReq struct {
  422. ConvertRule ThsHfIndexConvert2EdbRule
  423. NewIndex *ThsHfIndexMultiSave2EdbPreItem `description:"新增指标"`
  424. }
  425. // ThsHfIndexMultiSave2EdbPreItem 批量新增指标库信息
  426. type ThsHfIndexMultiSave2EdbPreItem struct {
  427. IndexId int `description:"指标ID"`
  428. IndexCode string `description:"指标编码"`
  429. IndexName string `description:"原指标名称"`
  430. NewIndexName string `description:"新指标名称"`
  431. StockCode string `description:"证券代码"`
  432. EdbCode string `description:"指标代码"`
  433. Unit string `description:"单位"`
  434. Frequency string `description:"原频度"`
  435. NewFrequency string `description:"新频度(固定日度)"`
  436. ClassifyId int `description:"指标库分类ID"`
  437. SysAdminId int `description:"创建人ID"`
  438. SysAdminName string `description:"创建人姓名"`
  439. Tips string `description:"提示信息"`
  440. ErrMsg string `description:"错误信息"`
  441. }
  442. type ThsHfIndexMultiSave2EdbResp struct {
  443. Exist []*ThsHfIndexMultiSave2EdbPreItem `description:"已存在的指标"`
  444. Success []*ThsHfIndexMultiSave2EdbPreItem `description:"添加成功的指标"`
  445. Fail []*ThsHfIndexMultiSave2EdbPreItem `description:"添加失败的指标"`
  446. }
  447. type ThsHfIndexMultiOptResp struct {
  448. Success []*ThsHfIndexBaseInfo `description:"操作成功的指标"`
  449. Fail []*ThsHfIndexBaseInfo `description:"操作失败的指标"`
  450. }
  451. type ThsHfIndexBaseInfo struct {
  452. IndexId int `description:"指标ID"`
  453. IndexCode string `description:"指标编码"`
  454. IndexName string `description:"指标名称"`
  455. }