|
|
@@ -220,40 +220,45 @@ type HsbyGoodsOrderDetail struct {
|
|
|
}
|
|
|
|
|
|
// GetHsbyGoodsOrderDetails 获取二级市场(挂牌点选)商品对应的挂牌委托单信息
|
|
|
-// 参数 goodsID int 商品ID
|
|
|
-// 返回 []HsbyGoodsOrderDetail 转让(卖出)挂牌委托单
|
|
|
-// 返回 []HsbyGoodsOrderDetail 求购(买入)挂牌委托单
|
|
|
-// 返回 error error
|
|
|
-func GetHsbyGoodsOrderDetails(goodsID int) ([]HsbyGoodsOrderDetail, []HsbyGoodsOrderDetail, error) {
|
|
|
+// 输入 goodsID int 商品ID
|
|
|
+// 输入 buyOrSell int 委托单方向,0:买 1:卖
|
|
|
+// 输入 price float64 参考价格。买方向委托单则价格大于等于(站在摘牌人的角度);卖方向委托单则价格小于等于
|
|
|
+// 输出 []HsbyGoodsOrderDetail 商品对应的挂牌委托单信息
|
|
|
+// 输出 error error
|
|
|
+func GetHsbyGoodsOrderDetails(goodsID, buyOrSell int, price float64) ([]HsbyGoodsOrderDetail, error) {
|
|
|
engine := db.GetEngine()
|
|
|
|
|
|
// 获取与目标商品相关的挂牌委托单信息(ListingSelectType = 1 or 3; OrderStatus =3 or 7)
|
|
|
hsbyGoodsOrderDetails := make([]HsbyGoodsOrderDetail, 0)
|
|
|
- if err := engine.Table("TRADE_ORDERDETAIL").
|
|
|
+ session := engine.Table("TRADE_ORDERDETAIL").
|
|
|
Select(`TRADE_ORDERDETAIL.ORDERID, TRADE_ORDERDETAIL.BUYORSELL, TRADE_ORDERDETAIL.ORDERTIME, TRADE_ORDERDETAIL.ORDERPRICE, (TRADE_ORDERDETAIL.ORDERQTY - TRADE_ORDERDETAIL.TRADEQTY - TRADE_ORDERDETAIL.CANCELQTY) ENABLEQTY,
|
|
|
- substr(USERINFO.CUSTOMERNAME,0,1)||'****' as CUSTOMERNAME`).
|
|
|
+ substr(USERINFO.CUSTOMERNAME,0,1)||'****' as CUSTOMERNAME`).
|
|
|
Join("LEFT", "TAACCOUNT", "TAACCOUNT.ACCOUNTID = TRADE_ORDERDETAIL.ACCOUNTID").
|
|
|
Join("LEFT", "USERINFO", "USERINFO.USERID = TAACCOUNT.RELATEDUSERID").
|
|
|
Where("(TRADE_ORDERDETAIL.LISTINGSELECTTYPE = 1 or TRADE_ORDERDETAIL.LISTINGSELECTTYPE = 3) and (TRADE_ORDERDETAIL.ORDERSTATUS = 3 or TRADE_ORDERDETAIL.ORDERSTATUS = 7)").
|
|
|
- And("TRADE_ORDERDETAIL.GOODSID = ?", goodsID).Find(&hsbyGoodsOrderDetails); err != nil {
|
|
|
- return nil, nil, err
|
|
|
+ And("TRADE_ORDERDETAIL.GOODSID = ?", goodsID).
|
|
|
+ And("TRADE_ORDERDETAIL.BUYORSELL = ?", buyOrSell)
|
|
|
+ if price > 0 {
|
|
|
+ if buyOrSell == 0 {
|
|
|
+ // 买方向委托单则价格大于等于(站在摘牌人的角度)
|
|
|
+ session = session.And("TRADE_ORDERDETAIL.ORDERPRICE >= ?", price)
|
|
|
+ } else {
|
|
|
+ // 卖方向委托单则价格小于等于
|
|
|
+ session = session.And("TRADE_ORDERDETAIL.ORDERPRICE <= ?", price)
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- sellOrderDetails := make([]HsbyGoodsOrderDetail, 0)
|
|
|
- buyOrderDetails := make([]HsbyGoodsOrderDetail, 0)
|
|
|
- if len(hsbyGoodsOrderDetails) == 0 {
|
|
|
- // 无数据
|
|
|
- return sellOrderDetails, buyOrderDetails, nil
|
|
|
+ if err := session.Find(&hsbyGoodsOrderDetails); err != nil {
|
|
|
+ return nil, err
|
|
|
}
|
|
|
|
|
|
// 获取商品货币符号和报价单位
|
|
|
goods, err := GetGoods(goodsID)
|
|
|
if err != nil {
|
|
|
- return nil, nil, err
|
|
|
+ return nil, err
|
|
|
}
|
|
|
currencyEnums, err := GetEnumDicItem("currency", int(goods.Currencyid))
|
|
|
if err != nil {
|
|
|
- return nil, nil, err
|
|
|
+ return nil, err
|
|
|
}
|
|
|
currencysign := ""
|
|
|
if len(currencyEnums) > 0 {
|
|
|
@@ -261,7 +266,7 @@ func GetHsbyGoodsOrderDetails(goodsID int) ([]HsbyGoodsOrderDetail, []HsbyGoodsO
|
|
|
}
|
|
|
goodsUnitEnums, err := GetEnumDicItem("goodsunit", int(goods.Goodunitid))
|
|
|
if err != nil {
|
|
|
- return nil, nil, err
|
|
|
+ return nil, err
|
|
|
}
|
|
|
goodsUnit := ""
|
|
|
if len(goodsUnitEnums) > 0 {
|
|
|
@@ -274,17 +279,9 @@ func GetHsbyGoodsOrderDetails(goodsID int) ([]HsbyGoodsOrderDetail, []HsbyGoodsO
|
|
|
// 设置货币符号和报价单位
|
|
|
orderDetail.Currencysign = currencysign
|
|
|
orderDetail.Goodunit = goodsUnit
|
|
|
-
|
|
|
- // 分解转让(卖)和求购(买)单
|
|
|
- if orderDetail.Buyorsell == 1 {
|
|
|
- sellOrderDetails = append(sellOrderDetails, *orderDetail)
|
|
|
- }
|
|
|
- if orderDetail.Buyorsell == 0 {
|
|
|
- buyOrderDetails = append(buyOrderDetails, *orderDetail)
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
- return sellOrderDetails, buyOrderDetails, nil
|
|
|
+ return hsbyGoodsOrderDetails, nil
|
|
|
}
|
|
|
|
|
|
// HybsMyBuyOrderDetail 我的订单(一二级市场的买方向委托单)
|
|
|
@@ -440,7 +437,7 @@ func GetHsbyMyGoods(accountIDs string) ([]HsbyMyGoods, error) {
|
|
|
HSBY_GOODSEX.PICURLS,
|
|
|
ENUMDICITEM.PARAM2 CURRENCYSIGN`).
|
|
|
Join("LEFT", "GOODS", "GOODS.GOODSID = TRADEPOSITION.GOODSID").
|
|
|
- Join("LEFT", "HSBY_GOODSEX", "HSBY_GOODSEX.GOODSID = GOODS.GOODSID").
|
|
|
+ Join("INNER", "HSBY_GOODSEX", "HSBY_GOODSEX.GOODSID = GOODS.GOODSID").
|
|
|
Join("LEFT", "ENUMDICITEM", "GOODS.CURRENCYID = ENUMDICITEM.ENUMITEMNAME and ENUMDICITEM.ENUMDICCODE = 'currency'").
|
|
|
Where(fmt.Sprintf("TRADEPOSITION.ACCOUNTID in (%s)", accountIDs)).Find(&hsbyMyGoodses); err != nil {
|
|
|
return nil, err
|
|
|
@@ -464,7 +461,7 @@ type HsbyPreGoods struct {
|
|
|
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:待退市
|
|
|
+ Goodsstatus int64 `json:"goodsstatus" xorm:"'GOODSSTATUS'"` // 商品状态- 2:未上市 3:上市
|
|
|
|
|
|
Relatedgoodsid int64 `json:"relatedgoodsid" xorm:"'RELATEDGOODSID'"` // 关联交易合约ID
|
|
|
Presaleqty int64 `json:"presaleqty" xorm:"'PRESALEQTY'"` // 预售数量
|
|
|
@@ -496,7 +493,7 @@ func GetHsbyPreGoodses(marketIDs string, descProvinceID, descCityID int) ([]Hsby
|
|
|
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("INNER", "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:上市 状态的商品
|
|
|
@@ -512,3 +509,80 @@ func GetHsbyPreGoodses(marketIDs string, descProvinceID, descCityID int) ([]Hsby
|
|
|
|
|
|
return preGoodses, nil
|
|
|
}
|
|
|
+
|
|
|
+// HsbyPreGoodsDetail 一级市场(产能预售)商品信息详情
|
|
|
+type HsbyPreGoodsDetail 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'"` // 商品状态- 2:未上市 3:上市
|
|
|
+
|
|
|
+ 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'"` // 参考价格[一口价]
|
|
|
+
|
|
|
+ Videourls string `json:"videourls" xorm:"'VIDEOURLS'"` // 介绍视频[多张用逗号分隔]
|
|
|
+ Picurls string `json:"picurls" xorm:"'PICURLS'"` // 介绍图片[多张用逗号分隔]
|
|
|
+ Descprovinceid int64 `json:"descprovinceid" xorm:"'DESCPROVINCEID'"` // 目的地(省)ID
|
|
|
+ Desccityid int64 `json:"desccityid" xorm:"'DESCCITYID'"` // 目的地(市)ID
|
|
|
+ Goodsdesc string `json:"goodsdesc" xorm:"'GOODSDESC'"` // 商品详情
|
|
|
+
|
|
|
+ Currency string `json:"currency" xorm:"'CURRENCY'"` // 货币
|
|
|
+ Currencysign string `json:"currencysign" xorm:"'CURRENCYSIGN'"` // 货币符号
|
|
|
+
|
|
|
+ Vendorname string `json:"vendorname" xorm:"'VENDORNAME'"` // 供应商名称
|
|
|
+ Vendorphone string `json:"vendorphone" xorm:"'VENDORPHONE'"` // 供应商客服电话
|
|
|
+ Vendorattr string `json:"vendorattr" xorm:"'VENDORATTR'"` // 供应商附件(多张,逗号分隔)
|
|
|
+}
|
|
|
+
|
|
|
+// GetHsbyPreGoodsDetail 获取一级市场(产能预售)商品信息详情
|
|
|
+// 参数 goodsID int 目标商品ID
|
|
|
+// 返回 *HsbyListingGoodsDetail 二级市场(挂牌点选)商品信息详情,查询无结果返回nil
|
|
|
+// 返回 error error
|
|
|
+func GetHsbyPreGoodsDetail(goodsID int) (*HsbyListingGoodsDetail, error) {
|
|
|
+ engine := db.GetEngine()
|
|
|
+
|
|
|
+ details := make([]HsbyListingGoodsDetail, 0)
|
|
|
+ // 获取挂牌商品信息,以及扩展表信息
|
|
|
+ // FIXME: - 这里使用Get方法,会造成SQL语句的嵌套出错,后期再研究
|
|
|
+ session := engine.Table("GOODS").
|
|
|
+ Select(`GOODS.GOODSID, GOODS.GOODSCODE, GOODS.GOODSNAME, GOODS.DECIMALPLACE, GOODS.MARKETID,
|
|
|
+ HSBY_GOODSEX.HOTINDEX, HSBY_GOODSEX.VIDEOURLS, HSBY_GOODSEX.PICURLS, HSBY_GOODSEX.DESCPROVINCEID, HSBY_GOODSEX.Desccityid, HSBY_GOODSEX.Goodsdesc,
|
|
|
+ ENUMDICITEM.ENUMDICNAME CURRENCY, ENUMDICITEM.PARAM2 CURRENCYSIGN,
|
|
|
+ HSBY_SUPPLIERINFO.VENDORNAME, HSBY_SUPPLIERINFO.VENDORPHONE, HSBY_SUPPLIERINFO.VENDORATTR`).
|
|
|
+ Join("LEFT", "HSBY_GOODSEX", "HSBY_GOODSEX.GOODSID = GOODS.GOODSID").
|
|
|
+ Join("LEFT", "ENUMDICITEM", "ENUMDICITEM.ENUMITEMNAME = GOODS.CURRENCYID and ENUMDICITEM.ENUMDICCODE = 'currency'").
|
|
|
+ Join("LEFT", "HSBY_SUPPLIERINFO", "HSBY_SUPPLIERINFO.VENDORID = HSBY_GOODSEX.VENDORID").
|
|
|
+ Where("GOODS.GOODSID = ?", goodsID)
|
|
|
+ if err := session.Find(&details); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ // 无目标商品
|
|
|
+ if len(details) == 0 {
|
|
|
+ return nil, nil
|
|
|
+ }
|
|
|
+ hsbyListingGoodsDetail := details[0]
|
|
|
+
|
|
|
+ // 获取商品现价和涨跌停价
|
|
|
+ quoteDays, err := GetQuoteDays(hsbyListingGoodsDetail.Goodscode)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if len(quoteDays) > 0 {
|
|
|
+ if quoteDays[0].Last != 0 {
|
|
|
+ hsbyListingGoodsDetail.Last = utils.IntToFloat64(int(quoteDays[0].Last), int(hsbyListingGoodsDetail.Decimalplace))
|
|
|
+ }
|
|
|
+ if quoteDays[0].Limitup != 0 {
|
|
|
+ hsbyListingGoodsDetail.Limitup = utils.IntToFloat64(int(quoteDays[0].Limitup), int(hsbyListingGoodsDetail.Decimalplace))
|
|
|
+ }
|
|
|
+ if quoteDays[0].Limitdown != 0 {
|
|
|
+ hsbyListingGoodsDetail.Limitdown = utils.IntToFloat64(int(quoteDays[0].Limitdown), int(hsbyListingGoodsDetail.Decimalplace))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return &hsbyListingGoodsDetail, nil
|
|
|
+}
|