base_from_gpr_risk.go 12 KB

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