base_from_gpr_risk.go 12 KB

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