| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /**
- * @Author: zou.yingbin
- * @Create : 2021/1/18 15:25
- * @Modify : 2021/1/18 15:25
- */
- package mtpcache
- import (
- "fmt"
- "mtp2_if/db"
- "mtp2_if/logger"
- "sync"
- "time"
- )
- var vGoodMgr middleGoodsMgr
- // 套保商品缓存
- type middleGoodsMgr struct {
- mtx sync.RWMutex
- data map[uint32]MiddleGoods
- last time.Time
- }
- // 套保品种
- type MiddleGoods struct {
- MIDDLEGOODSID uint32 `json:"MIDDLEGOODSID" xorm:"'MIDDLEGOODSID'"` // 套保品种ID(SEQ_ERMS_MIDDLEGOODS)
- MIDDLEGOODSNAME string `json:"MIDDLEGOODSNAME" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
- MIDDLEGOODSCODE string `json:"MIDDLEGOODSCODE" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
- GOODSUNITID int32 `json:"GOODSUNITID" xorm:"'GOODSUNITID'"` // 单位ID
- RELATEDGOODSID int32 `json:"RELATEDGOODSID" xorm:"'RELATEDGOODSID'"` // 关联交易商品ID
- EVALUATERATIO float64 `json:"EVALUATERATIO" xorm:"'EVALUATERATIO'"` // 估价系数
- QTYDECIMALPLACE int32 `json:"QTYDECIMALPLACE" xorm:"'QTYDECIMALPLACE'"` // 数量小数位
- RELATEDGOODSTYPE int32 `json:"RELATEDGOODSTYPE" xorm:"'RELATEDGOODSTYPE'"` // 关联商品类型 - 1:期货合约 2:现货品种
- NEEDHEDGERATIO float64 `json:"NEEDHEDGERATIO" xorm:"'NEEDHEDGERATIO'"` // 套保比率
- AREAUSERID uint32 `json:"AREAUSERID" xorm:"'AREAUSERID'"` // 机构用户ID
- GOODSGROUPID int32 `json:"GOODSGROUPID" xorm:"'GOODSGROUPID'"` // 关联期货品种ID
- }
- // 加载数据
- func (r *middleGoodsMgr) load() {
- now := time.Now()
- // 间隔3秒以上重新加载
- if d := now.Sub(r.last); d.Seconds() < 3 {
- return
- }
- r.mtx.Lock()
- defer r.mtx.Unlock()
- e := db.GetEngine()
- if e == nil {
- return
- }
- sqlId := "select MIDDLEGOODSID," +
- " MIDDLEGOODSNAME," +
- " MIDDLEGOODSCODE," +
- " GOODSUNITID," +
- " RELATEDGOODSID," +
- " EVALUATERATIO," +
- " QTYDECIMALPLACE," +
- " RELATEDGOODSTYPE," +
- " NEEDHEDGERATIO," +
- " AREAUSERID," +
- " GOODSGROUPID" +
- " from erms_middlegoods t"
- sData := make([]MiddleGoods, 0)
- s := e.SQL(sqlId)
- if err := s.Find(&sData); err == nil {
- r.data = make(map[uint32]MiddleGoods)
- for i := range sData {
- r.data[sData[i].MIDDLEGOODSID] = sData[i]
- }
- r.last = time.Now()
- } else {
- logger.GetLogger().Errorf("load middlegoods fail, %v", err)
- }
- }
- func (r *middleGoodsMgr) get(middleGoodsId uint32) (MiddleGoods, error) {
- r.mtx.RLock()
- defer r.mtx.RUnlock()
- if r.data == nil {
- return MiddleGoods{}, fmt.Errorf("not found")
- }
- if v, ok := r.data[middleGoodsId]; ok {
- return v, nil
- }
- return MiddleGoods{}, fmt.Errorf("not found")
- }
- func (r *middleGoodsMgr) getByUserID(userId uint32) ([]MiddleGoods, error) {
- r.mtx.RLock()
- defer r.mtx.RUnlock()
- ret := make([]MiddleGoods, 0)
- for _, v := range r.data {
- if v.AREAUSERID == userId{
- ret = append(ret, v)
- }
- }
- return ret, nil
- }
- // 获取套保商品
- func GetMiddleGoods(middlGoodsId uint32) (MiddleGoods, error) {
- if v, err := vGoodMgr.get(middlGoodsId); err != nil {
- vGoodMgr.load()
- } else {
- return v, nil
- }
- return vGoodMgr.get(middlGoodsId)
- }
- // 获取指定用户套保商品
- func GetMiddleGoodsByUserID(userId uint32) ([]MiddleGoods, error) {
- vGoodMgr.load()
- return vGoodMgr.getByUserID(userId)
- }
|