base_from_yongyi.go 11 KB

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