goods.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/10/27 14:20
  4. * @Modify : 2021/10/27 14:20
  5. * @note : 商品信息缓存
  6. */
  7. package mtpcache
  8. import (
  9. "github.com/muesli/cache2go"
  10. "mtp2_if/db"
  11. "mtp2_if/utils"
  12. "time"
  13. )
  14. var goodsCache *cache2go.CacheTable
  15. func init() {
  16. goodsCache = cache2go.Cache("goods")
  17. goodsCache.SetDataLoader(func(key interface{}, param ...interface{}) *cache2go.CacheItem {
  18. if v, ok := key.(int64); ok {
  19. m := Goods{GOODSID: v}
  20. if d, err := m.GetData(); err == nil {
  21. if len(d) > 0 {
  22. val := d[0]
  23. item := cache2go.NewCacheItem(val.GOODSID, 0, val)
  24. return item
  25. }
  26. }
  27. }
  28. return nil
  29. })
  30. // go loadData()
  31. }
  32. func loadData() {
  33. time.Sleep(time.Second * 5)
  34. m := Goods{}
  35. if d, err := m.GetData(); err == nil {
  36. for _, v := range d {
  37. goodsCache.Add(v.GOODSID, 0, &v)
  38. }
  39. }
  40. }
  41. // Goods 商品信息
  42. type Goods struct {
  43. GOODSID int64 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID(自增ID SEQ_GOODS)
  44. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码(内部)
  45. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  46. MARKETID string `json:"marketid" xorm:"'MARKETID'"` // 所属市场ID
  47. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 所属商品组ID
  48. GOODSSTATUS int32 `json:"goodsstatus" xorm:"'GOODSSTATUS'"` // 商品状态- 1:待审核 2:未上市 3:上市 4:已注销 5:审核拒绝 6:退市 7:待退市
  49. CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 报价货币ID
  50. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 报价单位ID
  51. AGREEUNIT float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约乘数
  52. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
  53. QTYDECIMALPLACE int32 `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  54. GOODSCURRENCYID int32 `json:"goodscurrencyid" xorm:"'GOODSCURRENCYID'"` // 合约货币ID
  55. REFGOODSID int64 `json:"refgoodsid" xorm:"'REFGOODSID'"` // 参考商品ID
  56. REFGOODSCODE string `json:"refgoodscode" xorm:"'REFGOODSCODE'"` // 参考商品代码
  57. }
  58. func (r *Goods) calc() {
  59. }
  60. func (r *Goods) buildSql() string {
  61. var sqlId utils.SQLVal = `
  62. select t.goodsid,
  63. t.goodscode,
  64. t.goodsname,
  65. t.marketid,
  66. t.goodsgroupid,
  67. t.goodsstatus,
  68. t.currencyid,
  69. t.goodunitid,
  70. t.agreeunit,
  71. t.decimalplace,
  72. t.qtydecimalplace,
  73. t.goodscurrencyid,
  74. t.goodsquotetype,
  75. t.refgoodsid,
  76. t.refgoodscode
  77. from goods t
  78. where 1=1
  79. `
  80. sqlId.AndEx("t.goodsid", r.GOODSID, r.GOODSID > 0)
  81. sqlId.AndEx("t.goodscode", r.GOODSCODE, r.GOODSCODE != "")
  82. return sqlId.String()
  83. }
  84. // GetDataEx 获取商品信息
  85. func (r *Goods) GetData() ([]Goods, error) {
  86. sData := make([]Goods, 0)
  87. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  88. for i := range sData {
  89. sData[i].calc()
  90. }
  91. return sData, err
  92. }