ermcpMiddleGoods.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/1/26 13:42
  4. * @Modify : 2021/1/26 13:42
  5. */
  6. package models
  7. import (
  8. "fmt"
  9. "mtp2_if/db"
  10. "mtp2_if/logger"
  11. "mtp2_if/mtpcache"
  12. )
  13. // 套保品种
  14. type ErmcpMiddleGoodsModel struct {
  15. MIDDLEGOODSID uint32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种ID(SEQ_ERMS_MIDDLEGOODS)
  16. MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
  17. MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
  18. GOODSUNITID int32 `json:"-" xorm:"'GOODSUNITID'"` // 单位ID
  19. RELATEDGOODSID int32 `json:"relatedgoodsid" xorm:"'RELATEDGOODSID'"` // 关联交易商品ID
  20. EVALUATERATIO float64 `json:"evaluateratio" xorm:"'EVALUATERATIO'"` // 估价系数
  21. QTYDECIMALPLACE int32 `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 数量小数位
  22. RELATEDGOODSTYPE int32 `json:"relatedgoodstype" xorm:"'RELATEDGOODSTYPE'"` // 关联商品类型 - 1:期货合约 2:现货品种
  23. NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 套保比率
  24. AREAUSERID uint32 `json:"areauserid" xorm:"'AREAUSERID'"` // 机构用户ID
  25. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 关联期货品种ID
  26. ISVALID int32 `json:"isvalid" xorm:"'ISVALID'"` // 状态 0-无效(停用) 1-有效(正常)
  27. MODIFYTIME string `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  28. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  29. }
  30. func (r *ErmcpMiddleGoodsModel) Calc() {
  31. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
  32. }
  33. // 获取套保品种数据
  34. func (r *ErmcpMiddleGoodsModel) GetData() ([]interface{}, error) {
  35. sData := make([]ErmcpMiddleGoodsModel, 0)
  36. if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
  37. logger.GetLogger().Error(err)
  38. return nil, err
  39. }
  40. iData := make([]interface{}, 0)
  41. for i := range sData {
  42. iData = append(iData, &sData[i])
  43. }
  44. return iData, nil
  45. }
  46. // 获取套保品种数据2
  47. func (r *ErmcpMiddleGoodsModel) GetData2() ([]ErmcpMiddleGoodsModel, error) {
  48. sData := make([]ErmcpMiddleGoodsModel, 0)
  49. if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
  50. logger.GetLogger().Error(err)
  51. return nil, err
  52. }
  53. for i := range sData {
  54. sData[i].Calc()
  55. }
  56. return sData, nil
  57. }
  58. func (r *ErmcpMiddleGoodsModel) buildSql() string {
  59. sqlId := "select MIDDLEGOODSID," +
  60. " MIDDLEGOODSNAME," +
  61. " MIDDLEGOODSCODE," +
  62. " GOODSUNITID," +
  63. " RELATEDGOODSID," +
  64. " EVALUATERATIO," +
  65. " QTYDECIMALPLACE," +
  66. " RELATEDGOODSTYPE," +
  67. " NEEDHEDGERATIO," +
  68. " AREAUSERID," +
  69. " GOODSGROUPID," +
  70. " to_char(MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  71. " ISVALID" +
  72. " from erms_middlegoods t" +
  73. " where 1=1 "
  74. if r.AREAUSERID > 0 {
  75. sqlId = sqlId + fmt.Sprintf(" and AREAUSERID = %v", r.AREAUSERID)
  76. }
  77. if r.ISVALID >= 0{
  78. sqlId = sqlId + fmt.Sprintf(" and ISVALID=%v", r.ISVALID)
  79. }
  80. return sqlId
  81. }
  82. ///////////////////////////////
  83. // 期货品种折算配置表
  84. type GoodsGroupConvert struct {
  85. Middlegoodsid uint32 `json:"middlegoodsid" xorm:"'Middlegoodsid'"` // 套保品种ID
  86. Convertratio float64 `json:"convertratio" xorm:"'Convertratio'"` // 折算系数
  87. Goodsgroupid int32 `json:"goodsgroupid" xorm:"'Goodsgroupid'"` // 期货品种ID
  88. Goodsgroupname string `json:"goodsgroupname" xorm:"'Goodsgroupname'"` // 期货品种名称
  89. Outergroupcode string `json:"outergroupcode" xorm:"'Outergroupcode'"` // 期货品种代码
  90. }
  91. func (r *GoodsGroupConvert) buildSql() string {
  92. sqlId := "select t.middlegoodsid," +
  93. " t.convertratio," +
  94. " t.goodsgroupid," +
  95. " g.goodsgroupname," +
  96. " g.outergroupcode" +
  97. " from erms_goodsgroupconvert t" +
  98. " left join goodsgroup g" +
  99. " on t.goodsgroupid = g.goodsgroupid" +
  100. " where 1=1"
  101. if r.Middlegoodsid > 0 {
  102. sqlId = sqlId + fmt.Sprintf(" and Middlegoodsid=%v", r.Middlegoodsid)
  103. }
  104. return sqlId
  105. }
  106. // 获取期货品种配置详情
  107. func (r *GoodsGroupConvert) GetData() ([]GoodsGroupConvert, error) {
  108. sData := make([]GoodsGroupConvert, 0)
  109. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  110. return sData, err
  111. }
  112. // 套保品种详情
  113. type ErmcpMiddleGoodsDetail struct {
  114. Mg ErmcpMiddleGoodsModel // 套保品种基本信息
  115. CvList []GoodsGroupConvert // 期货品种折算列表
  116. }
  117. // 获取套保品种详情
  118. func (r *ErmcpMiddleGoodsDetail) GetData() (ErmcpMiddleGoodsDetail, error) {
  119. // 查基本信息
  120. m := ErmcpMiddleGoodsModel{AREAUSERID: r.Mg.AREAUSERID, MIDDLEGOODSID: r.Mg.MIDDLEGOODSID, ISVALID: -1}
  121. d, err := m.GetData2()
  122. if err != nil || len(d) == 0 {
  123. return ErmcpMiddleGoodsDetail{}, fmt.Errorf("no record")
  124. }
  125. rsp := ErmcpMiddleGoodsDetail{Mg: d[0]}
  126. // 查折算表
  127. md := GoodsGroupConvert{Middlegoodsid: r.Mg.MIDDLEGOODSID}
  128. if val, err := md.GetData(); err == nil {
  129. rsp.CvList = val
  130. }
  131. return rsp, nil
  132. }