|
|
@@ -4,6 +4,7 @@ import (
|
|
|
"fmt"
|
|
|
"mtp2_if/db"
|
|
|
"mtp2_if/utils"
|
|
|
+ "strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
@@ -47,7 +48,7 @@ func (Hsbysupplierinfo) TableName() string {
|
|
|
return "HSBY_SUPPLIERINFO"
|
|
|
}
|
|
|
|
|
|
-// HsbyTopGoods 热门商品列表
|
|
|
+// HsbyTopGoods 热卖商品(二级市场挂牌点选)
|
|
|
type HsbyTopGoods struct {
|
|
|
Goodsid int64 `json:"goodsid" xorm:"'GOODSID'" binding:"required"` // 商品ID(自增ID SEQ_GOODS)
|
|
|
Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 商品代码(内部)
|
|
|
@@ -65,13 +66,13 @@ type HsbyTopGoods struct {
|
|
|
Last float64 `json:"last" xorm:"-"` // 现价
|
|
|
}
|
|
|
|
|
|
-// GetHsbyTopGoods 获取热门商品列表
|
|
|
-// 参数 marketID int 所属市场ID
|
|
|
+// GetHsbyTopGoodses 获取热门商品列表
|
|
|
+// 参数 marketIDs string 所属市场ID列表, 格式 1,2,3
|
|
|
// 参数 descProvinceID int 目标省ID
|
|
|
// 参数 descCityID int 目标城市ID
|
|
|
// 返回 []TopGoods 热门商品列表
|
|
|
// 返回 error error
|
|
|
-func GetHsbyTopGoods(marketID int, descProvinceID int, descCityID int) ([]HsbyTopGoods, error) {
|
|
|
+func GetHsbyTopGoodses(marketIDs string, descProvinceID, descCityID int) ([]HsbyTopGoods, error) {
|
|
|
// 热门商品为二级市场(挂牌点选)下的商品信息
|
|
|
|
|
|
engine := db.GetEngine()
|
|
|
@@ -84,7 +85,7 @@ func GetHsbyTopGoods(marketID int, descProvinceID int, descCityID int) ([]HsbyTo
|
|
|
ENUMDICITEM.ENUMDICNAME CURRENCY, ENUMDICITEM.PARAM2 CURRENCYSIGN`).
|
|
|
Join("LEFT", "HSBY_GOODSEX", "HSBY_GOODSEX.GOODSID = GOODS.GOODSID").
|
|
|
Join("LEFT", "ENUMDICITEM", "ENUMDICITEM.ENUMITEMNAME = GOODS.CURRENCYID and ENUMDICITEM.ENUMDICCODE = 'currency'").
|
|
|
- Where("GOODS.MARKETID = ?", marketID)
|
|
|
+ Where(fmt.Sprintf("GOODS.GOODSSTATUS = 3 and GOODS.MARKETID in (%s)", marketIDs)) // 二级市场只获取 3:上市 状态的商品
|
|
|
if descProvinceID > 0 {
|
|
|
session = session.And("HSBY_GOODSEX.DESCPROVINCEID = ?", descProvinceID)
|
|
|
}
|
|
|
@@ -413,13 +414,16 @@ type HsbyMyGoods struct {
|
|
|
Buycurpositionqty int64 `json:"buycurpositionqty" xorm:"'BUYCURPOSITIONQTY'"` // 买当前持仓总数量
|
|
|
Buycurholderamount float64 `json:"buycurholderamount" xorm:"'BUYCURHOLDERAMOUNT'"` // 买当前持仓总金额[商品币种]
|
|
|
|
|
|
- Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 商品代码(内部)
|
|
|
- Goodsname string `json:"goodsname" xorm:"'GOODSNAME'" binding:"required"` // 商品名称
|
|
|
- Decimalplace int64 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
|
|
|
+ Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 商品代码(内部)
|
|
|
+ Goodsname string `json:"goodsname" xorm:"'GOODSNAME'" binding:"required"` // 商品名称
|
|
|
+ Decimalplace int64 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
|
|
|
+ Agreeunit float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约单位
|
|
|
|
|
|
Picurls string `json:"picurls" xorm:"'PICURLS'"` // 介绍图片[多张用逗号分隔]
|
|
|
|
|
|
Currencysign string `json:"currencysign" xorm:"'CURRENCYSIGN'"` // 货币符号
|
|
|
+
|
|
|
+ Buyaverageprice float64 `json:"buyaverageprice" xorm:"-"` // 持仓均价
|
|
|
}
|
|
|
|
|
|
// GetHsbyMyGoods 获取“我的商品”信息
|
|
|
@@ -432,7 +436,7 @@ func GetHsbyMyGoods(accountIDs string) ([]HsbyMyGoods, error) {
|
|
|
hsbyMyGoodses := make([]HsbyMyGoods, 0)
|
|
|
if err := engine.Table("TRADEPOSITION").
|
|
|
Select(`TRADEPOSITION.*,
|
|
|
- GOODS.GOODSCODE, GOODS.GOODSNAME, GOODS.DECIMALPLACE,
|
|
|
+ GOODS.GOODSCODE, GOODS.GOODSNAME, GOODS.DECIMALPLACE, GOODS.AGREEUNIT,
|
|
|
HSBY_GOODSEX.PICURLS,
|
|
|
ENUMDICITEM.PARAM2 CURRENCYSIGN`).
|
|
|
Join("LEFT", "GOODS", "GOODS.GOODSID = TRADEPOSITION.GOODSID").
|
|
|
@@ -442,5 +446,69 @@ func GetHsbyMyGoods(accountIDs string) ([]HsbyMyGoods, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
+ // 计算持仓均价
|
|
|
+ for i := range hsbyMyGoodses {
|
|
|
+ myGoods := &hsbyMyGoodses[i]
|
|
|
+
|
|
|
+ averagePrice := myGoods.Buycurholderamount / float64(myGoods.Buycurpositionqty) / myGoods.Agreeunit
|
|
|
+ myGoods.Buyaverageprice, _ = strconv.ParseFloat(utils.FormatFloat(averagePrice, int(myGoods.Decimalplace)), 64)
|
|
|
+ }
|
|
|
+
|
|
|
return hsbyMyGoodses, nil
|
|
|
}
|
|
|
+
|
|
|
+// HsbyPreGoods 新品上市商品(一级市场产能预售)
|
|
|
+type HsbyPreGoods struct {
|
|
|
+ Goodsid int64 `json:"goodsid" xorm:"'GOODSID'" binding:"required"` // 商品ID(自增ID SEQ_GOODS)
|
|
|
+ Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 商品代码(内部)
|
|
|
+ Goodsname string `json:"goodsname" xorm:"'GOODSNAME'" binding:"required"` // 商品名称
|
|
|
+ Decimalplace int64 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
|
|
|
+ Marketid int64 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 所属市场ID
|
|
|
+ Goodsstatus int64 `json:"goodsstatus" xorm:"'GOODSSTATUS'"` // 商品状态- 1:待审核 2:未上市 3:上市 4:已注销 5:审核拒绝 6:退市 7:待退市
|
|
|
+
|
|
|
+ Relatedgoodsid int64 `json:"relatedgoodsid" xorm:"'RELATEDGOODSID'"` // 关联交易合约ID
|
|
|
+ Presaleqty int64 `json:"presaleqty" xorm:"'PRESALEQTY'"` // 预售数量
|
|
|
+ Starttime time.Time `json:"starttime" xorm:"'STARTTIME'"` // 预售开始时间
|
|
|
+ Endtime time.Time `json:"endtime" xorm:"'ENDTIME'"` // 预售结束时间
|
|
|
+ Refprice float64 `json:"refprice" xorm:"'REFPRICE'"` // 参考价格[一口价]
|
|
|
+
|
|
|
+ Currency string `json:"currency" xorm:"'CURRENCY'"` // 货币
|
|
|
+ Currencysign string `json:"currencysign" xorm:"'CURRENCYSIGN'"` // 货币符号
|
|
|
+
|
|
|
+ Videourls string `json:"videourls" xorm:"'VIDEOURLS'"` // 介绍视频[多张用逗号分隔]
|
|
|
+ Picurls string `json:"picurls" xorm:"'PICURLS'"` // 介绍图片[多张用逗号分隔]
|
|
|
+}
|
|
|
+
|
|
|
+// GetHsbyPreGoodses 获取“新品上市”商品列表(一级市场产能预售)
|
|
|
+// 输入 marketIDs string 市场ID列表,格式 1,2,3
|
|
|
+// 输入 descProvinceID int 省ID
|
|
|
+// 输入 descCityID int 市ID
|
|
|
+// 输出 []HsbyPreGoods “新品上市”商品列表
|
|
|
+// 输出 error error
|
|
|
+func GetHsbyPreGoodses(marketIDs string, descProvinceID, descCityID int) ([]HsbyPreGoods, error) {
|
|
|
+ engine := db.GetEngine()
|
|
|
+
|
|
|
+ // 注意:一级产能预售市场使用的商品实际上是和二级市场有关系的,所以要使用 CPTRADE_PRESALEGOODSEX.RELATEDGOODSID 进行关联
|
|
|
+ preGoodses := make([]HsbyPreGoods, 0)
|
|
|
+ session := engine.Table("GOODS").
|
|
|
+ Select(`GOODS.*,
|
|
|
+ CPTRADE_PRESALEGOODSEX.RELATEDGOODSID, CPTRADE_PRESALEGOODSEX.PRESALEQTY,
|
|
|
+ CPTRADE_PRESALEGOODSEX.STARTTIME, CPTRADE_PRESALEGOODSEX.ENDTIME, CPTRADE_PRESALEGOODSEX.REFPRICE,
|
|
|
+ ENUMDICITEM.ENUMDICNAME CURRENCY, ENUMDICITEM.PARAM2 CURRENCYSIGN,
|
|
|
+ HSBY_GOODSEX.VIDEOURLS, HSBY_GOODSEX.PICURLS`).
|
|
|
+ Join("LEFT", "CPTRADE_PRESALEGOODSEX", "CPTRADE_PRESALEGOODSEX.GOODSID = GOODS.GOODSID").
|
|
|
+ Join("LEFT", "ENUMDICITEM", "ENUMDICITEM.ENUMITEMNAME = GOODS.CURRENCYID and ENUMDICITEM.ENUMDICCODE = 'currency'").
|
|
|
+ Join("LEFT", "HSBY_GOODSEX", "HSBY_GOODSEX.GOODSID = CPTRADE_PRESALEGOODSEX.RELATEDGOODSID").
|
|
|
+ Where(fmt.Sprintf("GOODS.GOODSSTATUS in (2,3) and GOODS.MARKETID in (%s)", marketIDs)) // 一级市场获取 2:未上市 3:上市 状态的商品
|
|
|
+ if descProvinceID > 0 {
|
|
|
+ session = session.And("HSBY_GOODSEX.DESCPROVINCEID = ?", descProvinceID)
|
|
|
+ }
|
|
|
+ if descCityID > 0 {
|
|
|
+ session = session.And("HSBY_GOODSEX.DESCCITYID = ?", descCityID)
|
|
|
+ }
|
|
|
+ if err := session.Find(&preGoodses); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return preGoodses, nil
|
|
|
+}
|