base_from_gpr_risk.go 12 KB

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