base_from_hisugar.go 18 KB

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