base_from_hisugar.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. package data_manage
  2. import (
  3. "eta/eta_api/utils"
  4. "github.com/beego/beego/v2/client/orm"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "time"
  7. )
  8. type BaseFromHisugarClassify struct {
  9. BaseFromHisugarClassifyId int // 分类ID
  10. ClassifyName string // 分类名称
  11. ParentID int // 上级ID
  12. Level int // 层级
  13. Sort int // 排序
  14. CreateTime string // 创建时间
  15. ModifyTime string // 修改时间
  16. }
  17. type BaseFromHisugarIndex struct {
  18. BaseFromHisugarIndexId int // 主键ID
  19. IndexCode string // 指标编码
  20. IndexName string // 指标名称
  21. ClassifyId uint // 分类ID
  22. Unit string // 单位
  23. Frequency string // 频度
  24. Describe string // 指标描述
  25. Sort int // 排序
  26. CreateTime time.Time // 创建时间
  27. ModifyTime time.Time // 修改时间
  28. StartDate time.Time `orm:"column(start_date)"`
  29. EndDate time.Time `orm:"column(end_date)"`
  30. LatestValue float64 `orm:"column(latest_value)" description:"数据值"`
  31. }
  32. type BaseFromHisugarData struct {
  33. BaseFromHisugarDataId int // 数据表ID
  34. BaseFromHisugarIndexId int // 指标ID
  35. IndexCode string // 指标编码
  36. DataTime time.Time
  37. Value string
  38. CreateTime time.Time
  39. ModifyTime time.Time
  40. }
  41. type BaseFromHisugarDataItem struct {
  42. BaseFromHisugarDataId int // 数据表ID
  43. BaseFromHisugarIndexId int // 指标ID
  44. IndexCode string // 指标编码
  45. DataTime string
  46. Value string
  47. CreateTime string
  48. ModifyTime string
  49. }
  50. func (m *BaseFromHisugarData) ToItem() (item *BaseFromHisugarDataItem) {
  51. return &BaseFromHisugarDataItem{
  52. BaseFromHisugarDataId: m.BaseFromHisugarDataId,
  53. BaseFromHisugarIndexId: m.BaseFromHisugarIndexId,
  54. IndexCode: m.IndexCode,
  55. DataTime: m.DataTime.Format(utils.FormatDate),
  56. Value: m.Value,
  57. CreateTime: m.CreateTime.Format(utils.FormatDateTime),
  58. ModifyTime: m.ModifyTime.Format(utils.FormatDateTime),
  59. }
  60. }
  61. func GetHisugarClassifyList() (list []*BaseFromHisugarClassify, err error) {
  62. o := orm.NewOrmUsingDB("data")
  63. sql := "SELECT * FROM base_from_hisugar_classify ORDER BY sort ASC"
  64. _, err = o.Raw(sql).QueryRows(&list)
  65. return
  66. }
  67. func (m *BaseFromHisugarIndex) ToIndex() (item *BaseFromHisugarIndexList) {
  68. return &BaseFromHisugarIndexList{
  69. BaseFromHisugarIndexId: m.BaseFromHisugarIndexId,
  70. IndexCode: m.IndexCode,
  71. IndexName: m.IndexName,
  72. ClassifyId: int(m.ClassifyId),
  73. Unit: m.Unit,
  74. Frequency: m.Frequency,
  75. Describe: m.Describe,
  76. Sort: m.Sort,
  77. CreateTime: m.CreateTime.Format(utils.FormatDateTime),
  78. ModifyTime: m.ModifyTime.Format(utils.FormatDateTime),
  79. //EdbExist: 0,
  80. //DataList: nil,
  81. //Paging: nil,
  82. //EdbInfoId: 0,
  83. }
  84. }
  85. type BaseFromHisugarIndexList struct {
  86. BaseFromHisugarIndexId int // 主键ID
  87. IndexCode string // 指标编码
  88. IndexName string // 指标名称
  89. ClassifyId int // 分类ID
  90. Unit string // 单位
  91. Frequency string // 频度
  92. Describe string // 指标描述
  93. Sort int // 排序
  94. CreateTime string // 创建时间
  95. ModifyTime string // 修改时间
  96. EdbExist int `description:"edb是否存在"`
  97. DataList []*BaseFromHisugarDataItem
  98. Paging *paging.PagingItem `description:"分页数据"`
  99. EdbInfoId int `description:"指标库主键id"`
  100. }
  101. type BaseFromHisugarIndexListResp struct {
  102. List []*BaseFromHisugarIndexView
  103. Paging *paging.PagingItem `description:"分页数据"`
  104. }
  105. func GetHisugarIndexById(indexId int) (item *BaseFromHisugarIndex, err error) {
  106. o := orm.NewOrmUsingDB("data")
  107. sql := ` SELECT * FROM base_from_hisugar_index WHERE 1=1 base_from_hisugar_index_id = ? `
  108. sql += `ORDER BY base_from_hisugar_index_id ASC `
  109. err = o.Raw(sql, indexId).QueryRow(&item)
  110. return
  111. }
  112. func GetHisugarIndexByCode(indexCode string) (item *BaseFromHisugarIndexView, err error) {
  113. o := orm.NewOrmUsingDB("data")
  114. sql := ` SELECT a.*,CASE WHEN e.edb_info_id IS NULL THEN 0 ELSE 1 END AS edb_exist,e.edb_info_id
  115. FROM base_from_hisugar_index as a
  116. LEFT JOIN edb_info AS e ON a.index_code=e.edb_code AND e.source=93
  117. WHERE 1=1 and a.index_code = ? `
  118. sql += `ORDER BY a.base_from_hisugar_index_id ASC `
  119. err = o.Raw(sql, indexCode).QueryRow(&item)
  120. return
  121. }
  122. func GetHisugarIndexList(condition string, pars interface{}, startSize, pageSize int) (items []*BaseFromHisugarIndex, err error) {
  123. o := orm.NewOrmUsingDB("data")
  124. sql := ` SELECT * FROM base_from_hisugar_index WHERE 1=1 `
  125. if condition != "" {
  126. sql += condition
  127. }
  128. sql += `group BY index_code ASC order by create_time DESC LIMIT ?,? `
  129. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  130. return
  131. }
  132. func GetHisugarIndexListCount(condition string, pars interface{}) (count int, err error) {
  133. o := orm.NewOrmUsingDB("data")
  134. sql := ` SELECT COUNT(1) AS count FROM base_from_hisugar_index WHERE 1=1 `
  135. if condition != "" {
  136. sql += condition
  137. }
  138. err = o.Raw(sql, pars).QueryRow(&count)
  139. return
  140. }
  141. func GetHisugarDataListCount(condition string, pars interface{}) (count int, err error) {
  142. o := orm.NewOrmUsingDB("data")
  143. sql := ` SELECT COUNT(1) AS count FROM base_from_hisugar_data WHERE 1=1 `
  144. if condition != "" {
  145. sql += condition
  146. }
  147. err = o.Raw(sql, pars).QueryRow(&count)
  148. return
  149. }
  150. func GetHisugarIndexData(condition string, pars interface{}, startSize, pageSize int) (items []*BaseFromHisugarDataItem, err error) {
  151. var ormList []*BaseFromHisugarData
  152. items = make([]*BaseFromHisugarDataItem, 0)
  153. o := orm.NewOrmUsingDB("data")
  154. sql := ` SELECT * FROM base_from_hisugar_data WHERE 1=1 `
  155. if condition != "" {
  156. sql += condition
  157. }
  158. sql += ` order by data_time DESC LIMIT ?,? `
  159. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&ormList)
  160. if err != nil {
  161. return
  162. }
  163. for _, ormItem := range ormList {
  164. items = append(items, ormItem.ToItem())
  165. }
  166. return
  167. }
  168. // GetHisugarItemList 模糊查询泛糖科技数据库指标列表
  169. func GetHisugarItemList(keyword string) (items []*BaseFromHisugarIndex, err error) {
  170. o := orm.NewOrmUsingDB("data")
  171. sql := "SELECT * FROM base_from_hisugar_index WHERE CONCAT(index_name,index_code) LIKE ? "
  172. _, err = o.Raw(sql, utils.GetLikeKeyword(keyword)).QueryRows(&items)
  173. return
  174. }
  175. // HisugarDataBatchListReq 泛糖科技指标批量列表
  176. type HisugarDataBatchListReq struct {
  177. ClassifyId int `description:"分类id"`
  178. KeyWord string `description:"关键字"`
  179. SelectedId []int `description:"已选指标id, 为true时表示反选"`
  180. IsSelectAll bool `description:"是否查询全部, 默认false, true:全选, false:查询已选"`
  181. }
  182. // GetHisugarIndexByCondition 根据条件获取泛糖科技指标列表
  183. func GetHisugarIndexByCondition(condition string, pars []interface{}) (items []*BaseFromHisugarIndex, err error) {
  184. o := orm.NewOrmUsingDB("data")
  185. sql := ` SELECT * FROM base_from_hisugar_index WHERE 1=1 `
  186. if condition != "" {
  187. sql += condition
  188. }
  189. sql += ` ORDER BY sort ASC, base_from_hisugar_index_id ASC`
  190. _, err = o.Raw(sql, pars).QueryRows(&items)
  191. return
  192. }
  193. // HisugarDataBatchAddCheckReq 泛糖科技指标批量添加校验
  194. type HisugarDataBatchAddCheckReq struct {
  195. IndexCodes []string `description:"指标编码"`
  196. }
  197. // GetHisugarIndexAndEdbInfoByCondition 根据条件获取泛糖科技index和指标库的信息
  198. func GetHisugarIndexAndEdbInfoByCondition(condition string, pars []interface{}) (items []*BaseFromHisugarIndexView, err error) {
  199. o := orm.NewOrmUsingDB("data")
  200. sql := ` SELECT b.*, e.edb_info_id, e.unique_code, e.classify_id AS edb_classify_id FROM base_from_hisugar_index AS b LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=? WHERE 1=1 `
  201. if condition != "" {
  202. sql += condition
  203. }
  204. sql += ` ORDER BY sort ASC `
  205. _, err = o.Raw(sql, utils.DATA_SOURCE_HISUGAR, pars).QueryRows(&items)
  206. return
  207. }
  208. type BaseFromHisugarIndexView struct {
  209. BaseFromHisugarIndexId int `orm:"pk"`
  210. EdbInfoId int `description:"指标库id"`
  211. ClassifyId int `description:"指标分类id"`
  212. IndexCode string `description:"指标编码"`
  213. IndexName string `description:"指标名称"`
  214. UniqueCode string `description:"唯一code"`
  215. Frequency string `description:"频度"`
  216. Unit string `description:"单位"`
  217. StartDate string `description:"开始日期"`
  218. EndDate string `description:"结束日期"`
  219. Sort int `description:"排序"`
  220. EdbExist int `description:"edb是否存在"`
  221. EdbClassifyId int `description:"edb分类id"`
  222. ModifyTime string
  223. DataTime string `description:"数据时间"`
  224. Value string `description:"值"`
  225. }
  226. // ExportHisugarExcelReq 导出泛糖科技excel指标
  227. type ExportHisugarExcelReq struct {
  228. KeyWord string `description:"关键字, 指标编码或指标ID"`
  229. IndexCode []string `description:"指标编码,全选时,表示反选"`
  230. IsSelectedAll bool `description:"是否全选:true:全选|false: 无"`
  231. ClassifyId int `description:"指标id"`
  232. }
  233. // GetHisugarIndexByConditionAndFrequency 根据条件获取泛糖科技指标列表
  234. func GetHisugarIndexByConditionAndFrequency(condition, frequency string, pars []interface{}) (items []*BaseFromHisugarIndex, err error) {
  235. o := orm.NewOrmUsingDB("data")
  236. sql := ` SELECT * FROM base_from_hisugar_index WHERE 1=1 `
  237. if condition != "" {
  238. sql += condition
  239. }
  240. sql += ` AND frequency=?`
  241. sql += ` ORDER BY sort ASC, base_from_hisugar_index_id ASC`
  242. _, err = o.Raw(sql, pars, frequency).QueryRows(&items)
  243. return
  244. }
  245. func GetHisugarDataMaxCount(classifyId int) (count int, err error) {
  246. o := orm.NewOrmUsingDB("data")
  247. sql := `SELECT MAX(t.num) AS count FROM (
  248. SELECT COUNT(1) AS num FROM base_from_hisugar_index AS a
  249. INNER JOIN base_from_hisugar_data AS b ON a.index_code=b.index_code
  250. WHERE a.classify_id=?
  251. GROUP BY a.base_from_hisugar_index_id
  252. )AS t `
  253. err = o.Raw(sql, classifyId).QueryRow(&count)
  254. return
  255. }
  256. func GetHisugarIndexDataByCode(indexCode string) (items []*BaseFromHisugarDataItem, err error) {
  257. var ormList []*BaseFromHisugarData
  258. items = make([]*BaseFromHisugarDataItem, 0)
  259. o := orm.NewOrmUsingDB("data")
  260. sql := ` SELECT * FROM base_from_hisugar_data WHERE index_code=? ORDER BY data_time DESC `
  261. _, err = o.Raw(sql, indexCode).QueryRows(&ormList)
  262. if err != nil {
  263. return
  264. }
  265. for _, ormItem := range ormList {
  266. items = append(items, ormItem.ToItem())
  267. }
  268. return
  269. }
  270. func GetHisugarFrequencyByCondition(condition string, pars []interface{}) (items []*string, err error) {
  271. sql := `SELECT DISTINCT frequency FROM base_from_hisugar_index WHERE 1=1 `
  272. if condition != "" {
  273. sql += condition
  274. }
  275. sql += ` ORDER BY FIELD(frequency,'日度','周度','月度','季度','半年','年度') `
  276. o := orm.NewOrmUsingDB("data")
  277. _, err = o.Raw(sql, pars...).QueryRows(&items)
  278. return
  279. }
  280. // GetHisugarIndexViewList 根据分类id获取泛糖科技指标列表
  281. func GetHisugarIndexViewList(condition string, pars []interface{}) (items []*BaseFromHisugarIndexView, err error) {
  282. o := orm.NewOrmUsingDB("data")
  283. sql := ` SELECT b.*, e.edb_info_id,
  284. CASE WHEN e.edb_info_id IS NULL THEN 0 ELSE 1 END AS edb_exist
  285. FROM base_from_hisugar_index AS b
  286. LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=93
  287. WHERE 1=1 `
  288. if condition != "" {
  289. sql += condition
  290. }
  291. sql += ` ORDER BY b.modify_time ASC `
  292. _, err = o.Raw(sql, pars).QueryRows(&items)
  293. return
  294. }
  295. // GetHisugarIndexViewListCount 根据分类id获取泛糖科技指标列表
  296. func GetHisugarIndexViewListCount(condition string, pars []interface{}) (count int, err error) {
  297. o := orm.NewOrmUsingDB("data")
  298. sql := ` SELECT COUNT(1) AS count
  299. FROM base_from_hisugar_index AS b
  300. LEFT JOIN edb_info AS e ON b.index_code=e.edb_code AND e.source=93
  301. WHERE 1=1 `
  302. if condition != "" {
  303. sql += condition
  304. }
  305. sql += ` ORDER BY b.modify_time ASC `
  306. err = o.Raw(sql, pars).QueryRow(&count)
  307. return
  308. }
  309. // GetHisugarDataViewList 根据指标id获取泛糖科技指标列表
  310. func GetHisugarDataViewList(indexIds []int) (items []*BaseFromHisugarDataItem, err error) {
  311. num := len(indexIds)
  312. if num <= 0 {
  313. return
  314. }
  315. var ormList []*BaseFromHisugarData
  316. items = make([]*BaseFromHisugarDataItem, 0)
  317. o := orm.NewOrmUsingDB("data")
  318. sql := ` SELECT * FROM base_from_hisugar_data WHERE base_from_hisugar_index_id IN (` + utils.GetOrmInReplace(num) + `) ORDER BY data_time desc `
  319. _, err = o.Raw(sql, indexIds).QueryRows(&ormList)
  320. if err != nil {
  321. return
  322. }
  323. for _, ormItem := range ormList {
  324. items = append(items, ormItem.ToItem())
  325. }
  326. return
  327. }
  328. // GetHisugarDataDataTimeByIndexId 根据指标id获取指标数据的日期列表
  329. func GetHisugarDataDataTimeByIndexId(indexIdList []int) (items []time.Time, err error) {
  330. if len(indexIdList) == 0 {
  331. return
  332. }
  333. o := orm.NewOrmUsingDB("data")
  334. sql := ` SELECT DISTINCT data_time FROM base_from_hisugar_data WHERE base_from_hisugar_index_id IN (` + utils.GetOrmInReplace(len(indexIdList)) + `) ORDER BY data_time DESC`
  335. _, err = o.Raw(sql, indexIdList).QueryRows(&items)
  336. return
  337. }
  338. type BaseFromHisugarClassifyItem struct {
  339. BaseFromHisugarClassifyId int `orm:"column(base_from_hisugar_classify_id);pk"`
  340. ClassifyName string `description:"分类名称"`
  341. ParentId int `description:"父级id"`
  342. Level int `description:"层级"`
  343. Sort int `description:"排序字段"`
  344. UniqueCode string `description:"唯一code"`
  345. ModifyTime time.Time `description:"修改时间"`
  346. CreateTime time.Time `description:"创建时间"`
  347. ClassifyNameEn string `description:"英文分类名称"`
  348. Children []*BaseFromHisugarClassifyItem `description:"子分类"`
  349. }
  350. // 获取所有分类
  351. func GetHisugarClassifyAll() (items []*BaseFromHisugarClassifyItem, err error) {
  352. o := orm.NewOrmUsingDB("data")
  353. sql := ` SELECT * FROM base_from_hisugar_classify ORDER BY sort ASC, base_from_hisugar_classify_id ASC`
  354. _, err = o.Raw(sql).QueryRows(&items)
  355. return
  356. }
  357. func GetHisugarIndex(condition string, pars interface{}) (items []*BaseFromHisugarIndexList, err error) {
  358. var ormList []*BaseFromHisugarIndex
  359. items = make([]*BaseFromHisugarIndexList, 0)
  360. o := orm.NewOrmUsingDB("data")
  361. sql := ` SELECT * FROM base_from_hisugar_index WHERE 1=1 `
  362. if condition != "" {
  363. sql += condition
  364. }
  365. sql += ` ORDER BY sort ASC, base_from_hisugar_index_id asc`
  366. _, err = o.Raw(sql, pars).QueryRows(&ormList)
  367. if err != nil {
  368. return
  369. }
  370. for _, ormItem := range ormList {
  371. items = append(items, ormItem.ToIndex())
  372. }
  373. return
  374. }
  375. type HisugarIndexDataCountGroup struct {
  376. IndexCode string
  377. Count int
  378. }
  379. func GetHisugarIndexDataCountGroup(indexCodes []string) (items []*HisugarIndexDataCountGroup, err error) {
  380. if len(indexCodes) <= 0 {
  381. return
  382. }
  383. o := orm.NewOrmUsingDB("data")
  384. sql := ` SELECT COUNT(1) AS count, index_code FROM base_from_hisugar_data WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `) GROUP BY index_code`
  385. _, err = o.Raw(sql, indexCodes).QueryRows(&items)
  386. return
  387. }
  388. func GetHisugarIndexDataV2(indexCode string, startSize, pageSize int) (items []*BaseFromHisugarDataItem, err error) {
  389. var ormList []*BaseFromHisugarData
  390. items = make([]*BaseFromHisugarDataItem, 0)
  391. o := orm.NewOrmUsingDB("data")
  392. sql := ` SELECT * FROM base_from_hisugar_data WHERE index_code=? ORDER BY data_time DESC LIMIT ?,? `
  393. _, err = o.Raw(sql, indexCode, startSize, pageSize).QueryRows(&ormList)
  394. if err != nil {
  395. return
  396. }
  397. for _, ormItem := range ormList {
  398. items = append(items, ormItem.ToItem())
  399. }
  400. return
  401. }
  402. // GetHisugarIndexInfoCount 查询指标信息总数
  403. func GetHisugarIndexInfoCount(condition string, pars []interface{}) (count int, err error) {
  404. o := orm.NewOrmUsingDB("data")
  405. sql := ` SELECT COUNT(1) AS count FROM base_from_hisugar_index WHERE 1=1 `
  406. if condition != "" {
  407. sql += condition
  408. }
  409. err = o.Raw(sql, pars).QueryRow(&count)
  410. return
  411. }
  412. type BaseFromHisugarIndexPage struct {
  413. List []*BaseFromHisugarIndex `description:"指标列表"`
  414. Paging *paging.PagingItem `description:"分页数据"`
  415. }
  416. // GetHisugarIndexInfoPage 分页查询指标信息
  417. func GetHisugarIndexInfoPage(condition string, pars []interface{}, size int, pageSize int) (items []*BaseFromHisugarIndex, err error) {
  418. o := orm.NewOrmUsingDB("data")
  419. sql := ` SELECT * FROM base_from_hisugar_index WHERE 1=1 `
  420. if condition != "" {
  421. sql += condition
  422. }
  423. sql += ` ORDER BY base_from_hisugar_index_id asc LIMIT ?,?`
  424. _, err = o.Raw(sql, pars, size, pageSize).QueryRows(&items)
  425. return
  426. }
  427. // 获取所有分类
  428. func GetHisugarClassifyById(classifyId int) (ClassifyIds string, err error) {
  429. o := orm.NewOrmUsingDB("data")
  430. sql := ` SELECT GROUP_CONCAT(base_from_hisugar_classify_id) AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?`
  431. err = o.Raw(sql, classifyId, classifyId).QueryRow(&ClassifyIds)
  432. return
  433. }