base_from_gpr_risk.go 12 KB

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