base_from_usda_fas.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. package models
  2. import (
  3. "eta/eta_index_lib/global"
  4. "eta/eta_index_lib/utils"
  5. "fmt"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. // BaseFromUsdaFas 美国农业部
  11. type BaseFromUsdaFas struct{}
  12. type BaseFromUsdaFasData struct {
  13. BaseFromUsdaFasDataId int `gorm:"column:base_from_usda_fas_data_id;primaryKey"`
  14. //BaseFromUsdaFasDataId int `orm:"column(base_from_usda_fas_data_id);pk"`
  15. BaseFromUsdaFasIndexId int
  16. IndexCode string
  17. DataTime string
  18. Value string
  19. CreateTime time.Time
  20. ModifyTime time.Time
  21. DataTimestamp int64
  22. }
  23. func GetBaseFromUsdaFasDataByCondition(condition string, pars []interface{}) (list []*BaseFromUsdaFasData, err error) {
  24. //o := orm.NewOrm()
  25. sql := `SELECT * FROM base_from_usda_fas_data WHERE 1=1 `
  26. if condition != "" {
  27. sql += condition
  28. }
  29. //_, err = o.Raw(sql, pars).QueryRows(&list)
  30. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&list).Error
  31. return
  32. }
  33. // Add 添加
  34. func (obj BaseFromUsdaFas) Add(edbCode string) (err error) {
  35. //o := orm.NewOrm()
  36. var condition string
  37. var pars []interface{}
  38. if edbCode != "" {
  39. condition += " AND index_code=? "
  40. pars = append(pars, edbCode)
  41. }
  42. UsdaFasBaseDataAll, err := GetBaseFromUsdaFasDataByCondition(condition, pars)
  43. if err != nil && !utils.IsErrNoRow(err) {
  44. return
  45. }
  46. var isAdd bool
  47. addSql := ` INSERT INTO edb_data_usda_fas(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  48. existMap := make(map[string]string)
  49. for _, sv := range UsdaFasBaseDataAll {
  50. eDate := sv.DataTime
  51. dataTime, err := time.Parse(utils.FormatDate, eDate)
  52. if err != nil {
  53. return err
  54. }
  55. timestamp := dataTime.UnixNano() / 1e6
  56. timeStr := fmt.Sprintf("%d", timestamp)
  57. if _, ok := existMap[eDate]; !ok {
  58. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Value)
  59. isAdd = true
  60. }
  61. existMap[eDate] = sv.Value
  62. }
  63. if isAdd {
  64. addSql = strings.TrimRight(addSql, ",")
  65. utils.FileLog.Info("addSql:" + addSql)
  66. //_,err=o.Raw(addSql).Exec()
  67. err = global.DEFAULT_DB.Exec(addSql).Error
  68. if err != nil {
  69. return err
  70. }
  71. }
  72. return
  73. }
  74. // Refresh 刷新涌益咨询指标数据
  75. func (obj BaseFromUsdaFas) Refresh(edbInfoId int, edbCode, startDate string) (err error) {
  76. source := obj.GetSource()
  77. //o := orm.NewOrm()
  78. if err != nil {
  79. return
  80. }
  81. edbInfoIdStr := strconv.Itoa(edbInfoId)
  82. //计算数据
  83. var condition string
  84. var pars []interface{}
  85. if edbCode != "" {
  86. condition += " AND index_code=? "
  87. pars = append(pars, edbCode)
  88. }
  89. if startDate != "" {
  90. condition += " AND data_time>=? "
  91. pars = append(pars, startDate)
  92. }
  93. UsdaFasDataList, err := GetBaseFromUsdaFasDataByCondition(condition, pars)
  94. if err != nil {
  95. return
  96. }
  97. // 真实数据的最大日期 , 插入规则配置的日期
  98. var realDataMaxDate, edbDataInsertConfigDate time.Time
  99. var edbDataInsertConfig *EdbDataInsertConfig
  100. var isFindConfigDateRealData bool //是否找到配置日期的实际数据的值
  101. {
  102. edbDataInsertConfig, err = GetEdbDataInsertConfigByEdbId(edbInfoId)
  103. if err != nil && !utils.IsErrNoRow(err) {
  104. return
  105. }
  106. if edbDataInsertConfig != nil {
  107. edbDataInsertConfigDate = edbDataInsertConfig.Date
  108. }
  109. }
  110. var existCondition string
  111. var existPars []interface{}
  112. existCondition += " AND edb_info_id=? "
  113. existPars = append(existPars, edbInfoId)
  114. if startDate != "" {
  115. existCondition += " AND data_time>=? "
  116. existPars = append(existPars, startDate)
  117. }
  118. existList, err := GetEdbDataByCondition(source, 0, existCondition, existPars)
  119. if err != nil {
  120. return err
  121. }
  122. existMap := make(map[string]*EdbInfoSearchData)
  123. for _, v := range existList {
  124. existMap[v.DataTime] = v
  125. }
  126. addSql := ` INSERT INTO edb_data_usda_fas(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  127. var isAdd bool
  128. for _, v := range UsdaFasDataList {
  129. item := v
  130. eDate := item.DataTime
  131. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  132. if err != nil {
  133. return err
  134. }
  135. if findItem, ok := existMap[v.DataTime]; !ok {
  136. sValue := item.Value
  137. timestamp := dataTime.UnixNano() / 1e6
  138. timeStr := fmt.Sprintf("%d", timestamp)
  139. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValue)
  140. isAdd = true
  141. } else {
  142. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != item.Value {
  143. err = ModifyEdbDataById(source, 0, findItem.EdbDataId, item.Value)
  144. if err != nil {
  145. return err
  146. }
  147. }
  148. }
  149. // 下面代码主要目的是处理掉手动插入的数据判断
  150. {
  151. if realDataMaxDate.IsZero() || dataTime.After(realDataMaxDate) {
  152. realDataMaxDate = dataTime
  153. }
  154. if edbDataInsertConfigDate.IsZero() || dataTime.Equal(edbDataInsertConfigDate) {
  155. isFindConfigDateRealData = true
  156. }
  157. }
  158. }
  159. // 处理手工数据补充的配置
  160. HandleConfigInsertEdbData(realDataMaxDate, edbDataInsertConfig, edbInfoId, source, 0, existMap, isFindConfigDateRealData)
  161. if isAdd {
  162. addSql = strings.TrimRight(addSql, ",")
  163. //_,err = o.Raw(assSql).Exec()
  164. err = global.DEFAULT_DB.Exec(addSql).Error
  165. if err != nil {
  166. fmt.Println("RefreshEdbDataFromBaiinfo add Err", err.Error())
  167. return
  168. }
  169. }
  170. return
  171. }
  172. // GetSource 获取来源编码id
  173. func (obj BaseFromUsdaFas) GetSource() int {
  174. return utils.DATA_SOURCE_USDA_FAS
  175. }
  176. // GetSourceName 获取来源名称
  177. func (obj BaseFromUsdaFas) GetSourceName() string {
  178. return utils.DATA_SOURCE_NAME_USDA_FAS
  179. }
  180. type BaseFromUsdaFasIndex struct {
  181. BaseFromUsdaFasIndexId int64 `gorm:"column:base_from_usda_fas_index_id;primaryKey"`
  182. //BaseFromUsdaFasIndexId int64 `orm:"column(base_from_usda_fas_index_id);pk"`
  183. IndexCode string
  184. IndexName string
  185. Frequency string
  186. Unit string
  187. StartDate string
  188. EndDate string
  189. ClassifyId int64
  190. Sort int
  191. BaseFileName string
  192. RenameFileName string
  193. TerminalCode string
  194. Country string `description:"国家"`
  195. Commodity string `description:"属性"`
  196. CreateTime time.Time
  197. ModifyTime time.Time
  198. }
  199. type BaseFromUsdaFasIndexList struct {
  200. BaseFromUsdaFasIndexId int64 `gorm:"column:base_from_usda_fas_index_id;primaryKey"`
  201. //BaseFromUsdaFasIndexId int64 `orm:"column(base_from_usda_fas_index_id);pk"`
  202. IndexCode string
  203. IndexName string
  204. Frequency string
  205. Unit string
  206. Sort int
  207. ClassifyId int64
  208. StartDate string
  209. EndDate string
  210. TerminalCode string
  211. CreateTime string
  212. ModifyTime string
  213. }
  214. func (y *BaseFromUsdaFasData) GetByIndexCode(indexCode string) (list []*BaseFromUsdaFasData, err error) {
  215. //o := orm.NewOrm()
  216. sql := ` SELECT * FROM base_from_usda_fas_data WHERE index_code=? `
  217. //_, err = o.Raw(sql, indexCode).QueryRows(&list)
  218. err = global.DEFAULT_DB.Raw(sql, indexCode).Find(&list).Error
  219. return
  220. }
  221. func (y *BaseFromUsdaFasData) AddMulti(item []*BaseFromUsdaFasData) (err error) {
  222. //o := orm.NewOrm()
  223. //_, err = o.InsertMulti(1, item)
  224. err = global.DEFAULT_DB.CreateInBatches(&item, 1).Error
  225. return
  226. }
  227. // Update 修改
  228. func (y *BaseFromUsdaFasData) Update(updateCols []string) (err error) {
  229. //o := orm.NewOrm()
  230. //_, err = o.Update(y, updateCols...)
  231. err = global.DEFAULT_DB.Model(&y).Select(updateCols).Updates(&y).Error
  232. return
  233. }
  234. // HandleUsdaFasExcelData 涌益咨询的excel数据
  235. type HandleUsdaFasExcelData struct {
  236. ClassifyName string `description:"指标目录"`
  237. ParentClassifyName string `description:"父级指标目录"`
  238. ClassifySort int `description:"指标目录排序号"`
  239. IndexName string `description:"指标名称"`
  240. IndexCode string `description:"指标编码"`
  241. Unit string `description:"单位"`
  242. Sort int `description:"排序号"`
  243. Frequency string `description:"频度"`
  244. Country string `description:"国家"`
  245. Commodity string `description:"属性"`
  246. ExcelDataMap map[string]string
  247. }
  248. type HandleUsdaFasExcelDataReq struct {
  249. List []*HandleUsdaFasExcelData
  250. TerminalCode string `description:"编码"`
  251. }
  252. func (y *BaseFromUsdaFasData) GetMaxAndMinDateByIndexCode(indexCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  253. //o := orm.NewOrm()
  254. 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_usda_fas_data WHERE index_code=? `
  255. //err = o.Raw(sql, indexCode).QueryRow(&item)
  256. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  257. var latest_value float64
  258. sql = ` SELECT value AS latest_value FROM %s WHERE index_code=? ORDER BY data_time DESC LIMIT 1 `
  259. sql = fmt.Sprintf(sql, "base_from_usda_fas_data")
  260. //err = o.Raw(sql, indexCode).QueryRow(&latest_value)
  261. err = global.DEFAULT_DB.Raw(sql, indexCode).Scan(&latest_value).Error
  262. item.LatestValue = latest_value
  263. return
  264. }
  265. func (y *BaseFromUsdaFasIndex) ModifyIndexMaxAndMinDate(indexCode string, item *EdbInfoMaxAndMinInfo) (err error) {
  266. //o := orm.NewOrm()
  267. sql := ` UPDATE base_from_usda_fas_index SET start_date=?,end_date=?, end_value=?, modify_time=NOW() WHERE index_code=? `
  268. //_, err = o.Raw(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Exec()
  269. err = global.DEFAULT_DB.Exec(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Error
  270. return
  271. }
  272. func (y *BaseFromUsdaFasIndex) GetByIndexCode(indexCode string) (item *BaseFromUsdaFasIndex, err error) {
  273. //o := orm.NewOrm()
  274. sql := ` SELECT * FROM base_from_usda_fas_index WHERE index_code=? `
  275. //err = o.Raw(sql, indexCode).QueryRow(&item)
  276. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  277. return
  278. }
  279. func (y *BaseFromUsdaFasIndex) Add() (lastId int64, err error) {
  280. //o := orm.NewOrm()
  281. //lastId, err = o.Insert(y)
  282. err = global.DEFAULT_DB.Create(&y).Error
  283. if err != nil {
  284. return
  285. }
  286. lastId = y.BaseFromUsdaFasIndexId
  287. return
  288. }
  289. // Update 修改
  290. func (y *BaseFromUsdaFasIndex) Update(updateCols []string) (err error) {
  291. //o := orm.NewOrm()
  292. //_, err = o.Update(y, updateCols...)
  293. err = global.DEFAULT_DB.Model(&y).Select(updateCols).Updates(&y).Error
  294. return
  295. }
  296. // BaseFromUsdaFasClassify UsdaFas原始数据分类表
  297. type BaseFromUsdaFasClassify struct {
  298. ClassifyId int64 `gorm:"column:classify_id;primaryKey"`
  299. //ClassifyId int64 `orm:"column(classify_id);pk"`
  300. ClassifyName string `description:"分类名称"`
  301. ClassifyNameEn string `description:"分类名称"`
  302. ParentId int `description:"父级id"`
  303. SysUserId int `description:"创建人id"`
  304. SysUserRealName string `description:"创建人姓名"`
  305. Level int `description:"层级"`
  306. Sort int `description:"排序字段,越小越靠前,默认值:10"`
  307. ModifyTime time.Time `description:"修改时间"`
  308. CreateTime time.Time `description:"创建时间"`
  309. }
  310. func (y *BaseFromUsdaFasClassify) Add() (lastId int64, err error) {
  311. //o := orm.NewOrm()
  312. //lastId, err = o.Insert(y)
  313. err = global.DEFAULT_DB.Create(&y).Error
  314. if err != nil {
  315. return
  316. }
  317. lastId = int64(y.ClassifyId)
  318. return
  319. }
  320. // Update 修改
  321. func (y *BaseFromUsdaFasClassify) Update(updateCols []string) (err error) {
  322. //o := orm.NewOrm()
  323. //_, err = o.Update(y, updateCols...)
  324. err = global.DEFAULT_DB.Model(&y).Select(updateCols).Updates(&y).Error
  325. return
  326. }
  327. func (y *BaseFromUsdaFasClassify) GetByClassifyName(classifyName string) (item *BaseFromUsdaFasClassify, err error) {
  328. //o := orm.NewOrm()
  329. sql := ` SELECT * FROM base_from_usda_fas_classify WHERE classify_name=? `
  330. //err = o.Raw(sql, classifyName).QueryRow(&item)
  331. err = global.DEFAULT_DB.Raw(sql, classifyName).First(&item).Error
  332. return
  333. }
  334. func (y *BaseFromUsdaFasClassify) GetParentClassify() (items []*BaseFromUsdaFasClassify, err error) {
  335. //o := orm.NewOrm()
  336. sql := ` SELECT * FROM base_from_usda_fas_classify WHERE parent_id=0 `
  337. //_, err = o.Raw(sql).QueryRows(&items)
  338. err = global.DEFAULT_DB.Raw(sql).Find(&items).Error
  339. return
  340. }