base_from_kpler.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. package models
  2. import (
  3. sql2 "database/sql"
  4. "eta/eta_index_lib/global"
  5. "eta/eta_index_lib/utils"
  6. "fmt"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "gorm.io/gorm"
  11. )
  12. // BaseFromKpler Kpler数据
  13. type BaseFromKpler struct{}
  14. type BaseFromKplerData struct {
  15. BaseFromKplerDataId int `gorm:"column:base_from_kpler_data_id;primaryKey"`
  16. //BaseFromKplerDataId int `orm:"column(base_from_kpler_data_id);pk"`
  17. BaseFromKplerIndexId int
  18. IndexCode string
  19. DataTime string
  20. Value string
  21. CreateTime time.Time
  22. ModifyTime time.Time
  23. DataTimestamp int64
  24. }
  25. func (e *BaseFromKplerData) AfterFind(db *gorm.DB) (err error) {
  26. e.DataTime = utils.GormDateStrToDateStr(e.DataTime)
  27. return
  28. }
  29. func GetBaseFromKplerDataByCondition(condition string, pars []interface{}) (list []*BaseFromKplerData, err error) {
  30. //o := orm.NewOrm()
  31. sql := `SELECT * FROM base_from_kpler_data WHERE 1=1 `
  32. if condition != "" {
  33. sql += condition
  34. }
  35. //_, err = o.Raw(sql, pars).QueryRows(&list)
  36. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&list).Error
  37. return
  38. }
  39. // Add 添加
  40. func (obj BaseFromKpler) Add(edbCode string) (err error) {
  41. //o := orm.NewOrm()
  42. var condition string
  43. var pars []interface{}
  44. if edbCode != "" {
  45. condition += " AND index_code=? "
  46. pars = append(pars, edbCode)
  47. }
  48. KplerBaseDataAll, err := GetBaseFromKplerDataByCondition(condition, pars)
  49. if err != nil && !utils.IsErrNoRow(err) {
  50. return
  51. }
  52. var isAdd bool
  53. addSql := ` INSERT INTO edb_data_kpler(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  54. existMap := make(map[string]string)
  55. for _, sv := range KplerBaseDataAll {
  56. eDate := sv.DataTime
  57. dataTime, err := time.Parse(utils.FormatDate, eDate)
  58. if err != nil {
  59. return err
  60. }
  61. timestamp := dataTime.UnixNano() / 1e6
  62. timeStr := fmt.Sprintf("%d", timestamp)
  63. if _, ok := existMap[eDate]; !ok {
  64. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Value)
  65. isAdd = true
  66. }
  67. existMap[eDate] = sv.Value
  68. }
  69. if isAdd {
  70. addSql = strings.TrimRight(addSql, ",")
  71. utils.FileLog.Info("addSql:" + addSql)
  72. //_,err=o.Raw(addSql).Exec()
  73. err = global.DEFAULT_DB.Exec(addSql).Error
  74. if err != nil {
  75. return err
  76. }
  77. }
  78. return
  79. }
  80. // Refresh 刷新Kpler指标数据
  81. func (obj BaseFromKpler) Refresh(edbInfoId int, edbCode, startDate string) (err error) {
  82. source := obj.GetSource()
  83. //o := orm.NewOrm()
  84. if err != nil {
  85. return
  86. }
  87. edbInfoIdStr := strconv.Itoa(edbInfoId)
  88. //计算数据
  89. var condition string
  90. var pars []interface{}
  91. if edbCode != "" {
  92. condition += " AND index_code=? "
  93. pars = append(pars, edbCode)
  94. }
  95. if startDate != "" {
  96. condition += " AND data_time>=? "
  97. pars = append(pars, startDate)
  98. }
  99. KplerDataList, err := GetBaseFromKplerDataByCondition(condition, pars)
  100. if err != nil {
  101. return
  102. }
  103. // 真实数据的最大日期 , 插入规则配置的日期
  104. var realDataMaxDate, edbDataInsertConfigDate time.Time
  105. var edbDataInsertConfig *EdbDataInsertConfig
  106. var isFindConfigDateRealData bool //是否找到配置日期的实际数据的值
  107. {
  108. edbDataInsertConfig, err = GetEdbDataInsertConfigByEdbId(edbInfoId)
  109. if err != nil && !utils.IsErrNoRow(err) {
  110. return
  111. }
  112. if edbDataInsertConfig != nil {
  113. edbDataInsertConfigDate = edbDataInsertConfig.Date
  114. }
  115. }
  116. var existCondition string
  117. var existPars []interface{}
  118. existCondition += " AND edb_info_id=? "
  119. existPars = append(existPars, edbInfoId)
  120. if startDate != "" {
  121. existCondition += " AND data_time>=? "
  122. existPars = append(existPars, startDate)
  123. }
  124. existList, err := GetEdbDataByCondition(source, 0, existCondition, existPars)
  125. if err != nil {
  126. return err
  127. }
  128. existMap := make(map[string]*EdbInfoSearchData)
  129. for _, v := range existList {
  130. existMap[v.DataTime] = v
  131. }
  132. addSql := ` INSERT INTO edb_data_kpler(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  133. var isAdd bool
  134. for _, v := range KplerDataList {
  135. item := v
  136. eDate := item.DataTime
  137. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  138. if err != nil {
  139. return err
  140. }
  141. if findItem, ok := existMap[v.DataTime]; !ok {
  142. sValue := item.Value
  143. timestamp := dataTime.UnixNano() / 1e6
  144. timeStr := fmt.Sprintf("%d", timestamp)
  145. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValue)
  146. isAdd = true
  147. } else {
  148. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != item.Value {
  149. err = ModifyEdbDataById(source, 0, findItem.EdbDataId, item.Value)
  150. if err != nil {
  151. return err
  152. }
  153. }
  154. }
  155. // 下面代码主要目的是处理掉手动插入的数据判断
  156. {
  157. if realDataMaxDate.IsZero() || dataTime.After(realDataMaxDate) {
  158. realDataMaxDate = dataTime
  159. }
  160. if edbDataInsertConfigDate.IsZero() || dataTime.Equal(edbDataInsertConfigDate) {
  161. isFindConfigDateRealData = true
  162. }
  163. }
  164. }
  165. // 处理手工数据补充的配置
  166. HandleConfigInsertEdbData(realDataMaxDate, edbDataInsertConfig, edbInfoId, source, 0, existMap, isFindConfigDateRealData)
  167. if isAdd {
  168. addSql = strings.TrimRight(addSql, ",")
  169. //_,err = o.Raw(assSql).Exec()
  170. err = global.DEFAULT_DB.Exec(addSql).Error
  171. if err != nil {
  172. fmt.Println("RefreshEdbDataFromKpler add Err", err.Error())
  173. return
  174. }
  175. }
  176. return
  177. }
  178. // GetSource 获取来源编码id
  179. func (obj BaseFromKpler) GetSource() int {
  180. return utils.DATA_SOURCE_KPLER
  181. }
  182. // GetSourceName 获取来源名称
  183. func (obj BaseFromKpler) GetSourceName() string {
  184. return utils.DATA_SOURCE_NAME_KPLER
  185. }
  186. type BaseFromKplerIndex struct {
  187. BaseFromKplerIndexId int `gorm:"column:base_from_kpler_index_id;primaryKey"`
  188. //BaseFromKplerIndexId int `orm:"column(base_from_kpler_index_id);pk"`
  189. ClassifyId int
  190. IndexCode string
  191. IndexName string
  192. Frequency string
  193. Unit string
  194. Sort int
  195. StartDate string `description:"开始日期"`
  196. EndDate string `description:"结束日期"`
  197. EndValue float64
  198. CreateTime time.Time
  199. ModifyTime time.Time
  200. BaseFileName string `description:"文件目录"`
  201. TerminalCode string `description:"所属终端编码"`
  202. ApiQueryUrl string `description:"API查询URL"`
  203. ExcelQueryUrl string `description:"Excel查询URL"`
  204. ProductNames string `description:"产品名称"`
  205. FromZoneId int `description:"区域ID"`
  206. FromZoneName string `description:"区域名称"`
  207. ToZoneId int `description:"区域ID"`
  208. ToZoneName string `description:"区域名称"`
  209. FlowDirection string `description:"流向"`
  210. Granularity string `description:"粒度"`
  211. Split string `description:"拆分类型"`
  212. }
  213. func (e *BaseFromKplerIndex) AfterFind(db *gorm.DB) (err error) {
  214. e.StartDate = utils.GormDateStrToDateStr(e.StartDate)
  215. e.EndDate = utils.GormDateStrToDateStr(e.EndDate)
  216. return
  217. }
  218. type BaseFromKplerIndexList struct {
  219. BaseFromKplerIndexId int `gorm:"column:base_from_kpler_index_id;primaryKey"`
  220. //BaseFromKplerIndexId int `orm:"column(base_from_kpler_index_id);pk"`
  221. IndexCode string
  222. IndexName string
  223. Frequency string
  224. Unit string
  225. Sort int
  226. ClassifyId int
  227. StartDate string
  228. EndDate string
  229. TerminalCode string
  230. CreateTime string
  231. ModifyTime string
  232. ProductNames string `description:"产品名称"`
  233. FromZoneId int `description:"区域ID"`
  234. FromZoneName string `description:"区域名称"`
  235. ToZoneId int `description:"区域ID"`
  236. ToZoneName string `description:"区域名称"`
  237. FlowDirection string `description:"流向"`
  238. Granularity string `description:"粒度"`
  239. Split string `description:"拆分类型"`
  240. }
  241. // AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
  242. func (m *BaseFromKplerIndexList) AfterFind(db *gorm.DB) (err error) {
  243. m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
  244. m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
  245. return
  246. }
  247. func (y *BaseFromKplerIndex) GetByIndexCodes(indexCodes []string) (list []*BaseFromKplerIndex, err error) {
  248. sql := ` SELECT * FROM base_from_kpler_index WHERE index_code in (?) `
  249. err = global.DEFAULT_DB.Raw(sql, indexCodes).Find(&list).Error
  250. return
  251. }
  252. func (y *BaseFromKplerData) GetByIndexCode(indexCode string) (list []*BaseFromKplerData, err error) {
  253. //o := orm.NewOrm()
  254. sql := ` SELECT * FROM base_from_kpler_data WHERE index_code=? `
  255. //_, err = o.Raw(sql, indexCode).QueryRows(&list)
  256. err = global.DEFAULT_DB.Raw(sql, indexCode).Find(&list).Error
  257. return
  258. }
  259. func (y *BaseFromKplerData) AddMulti(item []*BaseFromKplerData) (err error) {
  260. //o := orm.NewOrm()
  261. //_, err = o.InsertMulti(1, item)
  262. err = global.DEFAULT_DB.CreateInBatches(&item, 1).Error
  263. return
  264. }
  265. // Update 修改
  266. func (y *BaseFromKplerData) Update(updateCols []string) (err error) {
  267. //o := orm.NewOrm()
  268. //_, err = o.Update(y, updateCols...)
  269. err = global.DEFAULT_DB.Model(&y).Select(updateCols).Updates(&y).Error
  270. return
  271. }
  272. // HandleKplerExcelData Kpler的excel数据
  273. type HandleKplerExcelData struct {
  274. ClassifyName string `description:"指标目录"`
  275. ParentClassifyName string `description:"父级指标目录"`
  276. ClassifySort int `description:"指标目录排序号"`
  277. IndexName string `description:"指标名称"`
  278. IndexCode string `description:"指标编码"`
  279. Unit string `description:"单位"`
  280. Sort int `description:"排序号"`
  281. Frequency string `description:"频度"`
  282. ProductNames string `description:"产品名称"`
  283. FromZoneId int `description:"区域ID"`
  284. FromZoneName string `description:"区域名称"`
  285. ToZoneId int `description:"区域ID"`
  286. ToZoneName string `description:"区域名称"`
  287. FlowDirection string `description:"流向"`
  288. Granularity string `description:"粒度"`
  289. Split string `description:"拆分类型"`
  290. SplitName string `description:"拆分类型名称"`
  291. ExcelQueryUrl string `description:"Excel查询URL"`
  292. ExcelDataMap map[string]string
  293. }
  294. type HandleKplerExcelDataReq struct {
  295. List []*HandleKplerExcelData
  296. TerminalCode string `description:"编码"`
  297. }
  298. func (y *BaseFromKplerData) GetMaxAndMinDateByIndexCode(indexCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  299. //o := orm.NewOrm()
  300. sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(value) AS min_value,MAX(value) AS max_value FROM base_from_kpler_data WHERE index_code=? `
  301. //err = o.Raw(sql, indexCode).QueryRow(&item)
  302. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  303. sql = ` SELECT value AS latest_value FROM %s WHERE index_code=? ORDER BY data_time DESC LIMIT 1 `
  304. sql = fmt.Sprintf(sql, "base_from_kpler_data")
  305. //err = o.Raw(sql, indexCode).QueryRow(&latest_value)
  306. var latestValueNull sql2.NullFloat64
  307. err = global.DEFAULT_DB.Raw(sql, indexCode).Scan(&latestValueNull).Error
  308. if err == nil && latestValueNull.Valid {
  309. item.LatestValue = latestValueNull.Float64
  310. }
  311. return
  312. }
  313. func (y *BaseFromKplerIndex) ModifyIndexMaxAndMinDate(indexCode string, item *EdbInfoMaxAndMinInfo) (err error) {
  314. //o := orm.NewOrm()
  315. sql := ` UPDATE base_from_kpler_index SET start_date=?,end_date=?, end_value=?, modify_time=NOW() WHERE index_code=? `
  316. //_, err = o.Raw(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Exec()
  317. err = global.DEFAULT_DB.Exec(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Error
  318. return
  319. }
  320. func (y *BaseFromKplerIndex) GetByIndexCode(indexCode string) (item *BaseFromKplerIndex, err error) {
  321. //o := orm.NewOrm()
  322. sql := ` SELECT * FROM base_from_kpler_index WHERE index_code=? `
  323. //err = o.Raw(sql, indexCode).QueryRow(&item)
  324. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  325. return
  326. }
  327. func (y *BaseFromKplerIndex) Add() (err error) {
  328. //o := orm.NewOrm()
  329. //lastId, err = o.Insert(y)
  330. err = global.DEFAULT_DB.Create(&y).Error
  331. if err != nil {
  332. return
  333. }
  334. return
  335. }
  336. // Update 修改
  337. func (y *BaseFromKplerIndex) Update(updateCols []string) (err error) {
  338. //o := orm.NewOrm()
  339. //_, err = o.Update(y, updateCols...)
  340. err = global.DEFAULT_DB.Model(&y).Select(updateCols).Updates(&y).Error
  341. return
  342. }
  343. func (y *BaseFromKplerClassify) Add() (lastId int64, err error) {
  344. //o := orm.NewOrm()
  345. //lastId, err = o.Insert(y)
  346. err = global.DEFAULT_DB.Create(&y).Error
  347. if err != nil {
  348. return
  349. }
  350. lastId = int64(y.ClassifyId)
  351. return
  352. }
  353. // Update 修改
  354. func (y *BaseFromKplerClassify) Update(updateCols []string) (err error) {
  355. //o := orm.NewOrm()
  356. //_, err = o.Update(y, updateCols...)
  357. err = global.DEFAULT_DB.Model(&y).Select(updateCols).Updates(&y).Error
  358. return
  359. }
  360. func (y *BaseFromKplerClassify) GetByClassifyName(classifyName string) (item *BaseFromKplerClassify, err error) {
  361. //o := orm.NewOrm()
  362. sql := ` SELECT * FROM base_from_kpler_classify WHERE classify_name=? `
  363. //err = o.Raw(sql, classifyName).QueryRow(&item)
  364. err = global.DEFAULT_DB.Raw(sql, classifyName).First(&item).Error
  365. return
  366. }
  367. func (y *BaseFromKplerClassify) GetParentClassify() (items []*BaseFromKplerClassify, err error) {
  368. //o := orm.NewOrm()
  369. sql := ` SELECT * FROM base_from_kpler_classify WHERE parent_id=0 `
  370. //_, err = o.Raw(sql).QueryRows(&items)
  371. err = global.DEFAULT_DB.Raw(sql).Find(&items).Error
  372. return
  373. }
  374. type KplerSearchEdbReq struct {
  375. ProductNames string `description:"产品名称"`
  376. FromZoneIds []int `description:"来源区域ID,对应Location" `
  377. FromZoneNames string `description:"来源区域名称"`
  378. ToZoneIds []int `description:"流向区域ID"`
  379. ToZoneNames string `description:"流向区域名称"`
  380. Split string `description:"拆分类型"`
  381. FlowDirection string `description:"流向,对应periodicity:export/import"`
  382. Granularity string `description:"粒度: daily/weekly/monthly/yearly"`
  383. Unit string `description:"单位"`
  384. }
  385. // withIntraCountry := false
  386. // withIntraRegion := true
  387. // withForecast := true
  388. // withFreightView := false
  389. // withProductEstimation := false
  390. type KplerFlowDataLibReq struct {
  391. Products string `description:"产品名称"`
  392. FromZones string `description:"来源区域ID,对应Location" `
  393. ToZones string `description:"流向区域ID"`
  394. Split string `description:"拆分类型"`
  395. FlowDirection string `description:"流向,对应periodicity:export/import"`
  396. Granularity string `description:"粒度: daily/weekly/monthly/yearly"`
  397. Unit string `description:"单位"`
  398. FromCountries string `description:"来源国家"`
  399. ToCountries string `description:"流向国家"`
  400. FromInstallations string `description:"来源安装"`
  401. ToInstallations string `description:"流向安装"`
  402. OnlyRealized string `description:"是否只查询已实现数据"`
  403. VesselTypes string `description:"船型"`
  404. VesselTypesAlt string `description:"船型"`
  405. WithIntraCountry string `description:"是否查询同国数据"`
  406. WithIntraRegion string `description:"是否查询同区域数据"`
  407. WithForecast string `description:"是否查询预测数据"`
  408. WithFreightView string `description:"是否查询运费数据"`
  409. WithProductEstimation string `description:"是否查询产品估算数据"`
  410. StartDate string `description:"开始日期"`
  411. EndDate string `description:"结束日期"`
  412. }
  413. type KplerFlowDataLibResp struct {
  414. Ret int
  415. Msg string
  416. ErrMsg string
  417. ErrCode string
  418. Data KplerFlowDataResp
  419. }
  420. type KplerFlowDataResp struct {
  421. ApiQueryUrl string
  422. List []KplerFlowData
  423. }
  424. type KplerFlowData struct {
  425. SplitItem string
  426. IndexData []KplerIndexDataItem
  427. }
  428. type KplerIndexItem struct {
  429. IndexCode string
  430. IndexName string
  431. Unit string
  432. Frequency string
  433. IndexData []KplerIndexDataItem
  434. }
  435. type KplerIndexDataItem struct {
  436. DataTime string
  437. Value string
  438. }
  439. // BaseFromKplerClassify Kpler原始数据分类表
  440. type BaseFromKplerClassify struct {
  441. ClassifyId int `orm:"column(classify_id);pk" gorm:"primaryKey"`
  442. ClassifyName string `description:"分类名称"`
  443. ParentId int `description:"父级id"`
  444. SysUserId int `description:"创建人id"`
  445. SysUserRealName string `description:"创建人姓名"`
  446. Level int `description:"层级"`
  447. Sort int `description:"排序字段,越小越靠前,默认值:10"`
  448. ModifyTime time.Time `description:"修改时间"`
  449. CreateTime time.Time `description:"创建时间"`
  450. ClassifyNameEn string `description:"英文分类名称"`
  451. ProductId int `description:"产品ID"`
  452. ProductName string `description:"产品名称"`
  453. AncestorFamilyId int `description:"父级产品ID"`
  454. AncestorFamilyName string `description:"父级产品名称"`
  455. AncestorGroupId int `description:"父级产品ID"`
  456. AncestorGroupName string `description:"父级产品名称"`
  457. AncestorProductId int `description:"父级产品ID"`
  458. AncestorProductName string `description:"父级产品名称"`
  459. AncestorGradeId int `description:"父级产品ID"`
  460. AncestorGradeName string `description:"父级产品名称"`
  461. ClassifyType string `description:"分类类型"`
  462. }
  463. func GetAllBaseFromKplerClassify() (items []*BaseFromKplerClassify, err error) {
  464. sql := ` SELECT * FROM base_from_kpler_classify `
  465. err = global.DEFAULT_DB.Raw(sql).Find(&items).Error
  466. return
  467. }
  468. // 获取分类
  469. func (y *BaseFromKplerClassify) GetByProductIds(productIds []int) (items []*BaseFromKplerClassify, err error) {
  470. sql := ` SELECT * FROM base_from_kpler_classify WHERE product_id in (?) `
  471. err = global.DEFAULT_DB.Raw(sql, productIds).Find(&items).Error
  472. return
  473. }
  474. // 获取分类
  475. func (y *BaseFromKplerClassify) GetByProductName(productName string) (item *BaseFromKplerClassify, err error) {
  476. sql := ` SELECT * FROM base_from_kpler_classify WHERE product_name=? `
  477. err = global.DEFAULT_DB.Raw(sql, productName).First(&item).Error
  478. return
  479. }
  480. // 获取区域
  481. // BaseFromKplerZone Kpler区域表
  482. type BaseFromKplerZone struct {
  483. BaseFromKplerZoneId int `orm:"column(base_from_kpler_zone_id);pk" gorm:"primaryKey"`
  484. ZoneName string `description:"区域名称"`
  485. ZoneType string `description:"区域类型"`
  486. ParentId int `description:"区域父ID"`
  487. AncestorId int `description:"区域祖先ID"`
  488. AncestorType string `description:"区域祖先类型"`
  489. AncestorName string `description:"区域祖先名称"`
  490. DescendantId int `description:"区域子ID"`
  491. DescendantName string `description:"区域子名称"`
  492. CreateTime time.Time `description:"创建时间"`
  493. ModifyTime time.Time `description:"修改时间"`
  494. }
  495. // 获取区域
  496. func (y *BaseFromKplerZone) GetByZoneIds(zoneIds []int) (items []*BaseFromKplerZone, err error) {
  497. sql := ` SELECT * FROM base_from_kpler_zone WHERE base_from_kpler_zone_id in (?) `
  498. err = global.DEFAULT_DB.Raw(sql, zoneIds).Find(&items).Error
  499. return
  500. }
  501. func (y *BaseFromKplerZone) Add() (lastId int64, err error) {
  502. err = global.DEFAULT_DB.Create(&y).Error
  503. if err != nil {
  504. return
  505. }
  506. lastId = int64(y.BaseFromKplerZoneId)
  507. return
  508. }
  509. type KplerProductLibResp struct {
  510. Ret int
  511. Msg string
  512. ErrMsg string
  513. ErrCode string
  514. Data []KplerProduct
  515. }
  516. //bodystr := "Id (Product);Name;Type (Product);Family;Family Id;Group;Group Id;Product;Product Id;Grade;Grade Id;Density (Product);Density Unit;Energy Density;Energy Density Unit;Expansion Ratio
  517. type KplerProduct struct {
  518. Id string
  519. Name string
  520. Type string
  521. Family string
  522. FamilyId string
  523. Group string
  524. GroupId string
  525. Product string
  526. ProductId string
  527. Grade string
  528. GradeId string
  529. Density string
  530. DensityUnit string
  531. EnergyDensity string
  532. EnergyDensityUnit string
  533. ExpansionRatio string
  534. }
  535. type KplerZoneLibResp struct {
  536. Ret int
  537. Msg string
  538. ErrMsg string
  539. ErrCode string
  540. Data []KplerZone
  541. }
  542. // Ancestor Id;Ancestor Name;Ancestor Type;Descendant Id;Descendant Name;Descendant Type
  543. type KplerZone struct {
  544. AncestorId string
  545. AncestorName string
  546. AncestorType string
  547. DescendantId string
  548. DescendantName string
  549. }
  550. type KplerZoneDataLibReq struct {
  551. AncestorName string `description:"祖先名称"`
  552. DescendantName string `description:"子名称"`
  553. }
  554. type KplerRefreshByApiReq struct {
  555. Frequency string `description:"频度"`
  556. }
  557. func GetApiKplerIndexesByFrequencyEndDateTime(frequency string, endDateTime string) (items []*BaseFromKplerIndex, err error) {
  558. sql := ` SELECT * FROM base_from_kpler_index WHERE frequency=? AND end_date < ? and api_query_url != '' order by base_from_kpler_index_id asc, api_query_url asc `
  559. err = global.DEFAULT_DB.Raw(sql, frequency, endDateTime).Find(&items).Error
  560. return
  561. }