Переглянути джерело

按产品设计要求修改“获取目标登录账号当前对冲账号在线状态”接口

zhou.xiaoning 4 роки тому
батько
коміт
5bbe910d73
6 змінених файлів з 9527 додано та 7187 видалено
  1. 2 2
      controllers/ermcp/qryUser.go
  2. 3718 3431
      docs/docs.go
  3. 3718 3431
      docs/swagger.json
  4. 1983 316
      docs/swagger.yaml
  5. 83 7
      models/ermcpUser.go
  6. 23 0
      models/market.go

+ 2 - 2
controllers/ermcp/qryUser.go

@@ -101,7 +101,7 @@ type GetErmcpOutAccountStatusReq struct {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param loginID query int true "登录账号"
-// @Success 200 {object} models.Hedgeoutmainconfig
+// @Success 200 {object} models.Hedgemarketopenlog
 // @Failure 500 {object} app.Response
 // @Router /Ermcp/GetErmcpOutAccountStatus [get]
 // @Tags 企业风险管理(app)
@@ -117,7 +117,7 @@ func GetErmcpOutAccountStatus(c *gin.Context) {
 	}
 
 	// 获取数据
-	var f models.Hedgeoutmainconfig
+	var f models.Hedgemarketopenlog
 	rst, err := f.GetOutAccountStatus(req.LoginID)
 	if err != nil {
 		// 查询失败

Різницю між файлами не показано, бо вона завелика
+ 3718 - 3431
docs/docs.go


Різницю між файлами не показано, бо вона завелика
+ 3718 - 3431
docs/swagger.json


Різницю між файлами не показано, бо вона завелика
+ 1983 - 316
docs/swagger.yaml


+ 83 - 7
models/ermcpUser.go

@@ -8,10 +8,13 @@ package models
 
 import (
 	"encoding/hex"
+	"errors"
 	"fmt"
 	"mtp2_if/db"
 	"mtp2_if/logger"
 	"mtp2_if/utils"
+	"strconv"
+	"time"
 )
 
 // Hedgeoutmainconfig 外部母账号对冲配置表
@@ -55,13 +58,8 @@ func (r *Hedgeoutmainconfig) GetOutAccountStatus(loginID int) ([]Hedgeoutmaincon
 	}
 	ids := make([]int, 0)
 	for _, v := range taAccounts {
-		if v.Ismain == 1 {
-			// 母账户
-			ids = append(ids, int(v.Accountid))
-		} else {
-			// 子账户
-			ids = append(ids, int(v.Parentaccountid))
-		}
+		// 母账户的Parentaccountid就是自己
+		ids = append(ids, int(v.Parentaccountid))
 	}
 	if err := db.GetEngine().Table("HEDGE_OUTMAINCONFIG T").
 		Select("T.*, F.FCNAME").
@@ -73,6 +71,84 @@ func (r *Hedgeoutmainconfig) GetOutAccountStatus(loginID int) ([]Hedgeoutmaincon
 	return datas, nil
 }
 
+// Hedgemarketopenlog 通道交易市场待开市日志表  - 市场的所有母账户与下单接口平台同步数据成功,市场才为待开市成功;
+// 清空上一交易日数据
+type Hedgemarketopenlog struct {
+	Tradedate    string    `json:"tradedate"  xorm:"TRADEDATE"`                    // 交易日(yyyyMMdd)
+	Accountid    int64     `json:"accountid"  xorm:"ACCOUNTID" binding:"required"` // 资金账号[外部母账户]
+	Marketid     int64     `json:"marketid"  xorm:"MARKETID"`                      // 市场ID
+	Status       int32     `json:"status"  xorm:"STATUS"`                          // 状态 - 1:待开市 2:开市 4:手工休市 5:闭市 10:日终处理开始 11:日终处理成功 12:日终处理失败
+	Updatetime   time.Time `json:"updatetime"  xorm:"UPDATETIME"`                  // 更新时间
+	Handlestatus int32     `json:"handlestatus"  xorm:"HANDLESTATUS"`              // 处理状态 - 1:登陆Mhp成功 2:登陆Mhp失败 3:登出Mhp
+
+	Fcname string `json:"fcname" xorm:"-"` // 期货公司名称
+}
+
+// TableName is HEDGE_MARKETOPENLOG
+func (Hedgemarketopenlog) TableName() string {
+	return "HEDGE_MARKETOPENLOG"
+}
+
+// GetOutAccountStatus 获取目标登录账号当前对冲账号在线状态
+func (r *Hedgemarketopenlog) GetOutAccountStatus(loginID int) ([]Hedgemarketopenlog, error) {
+	datas := make([]Hedgemarketopenlog, 0)
+
+	// 获取登录账号相关的所有资金账户
+	taAccounts, err := GetTaAccountsByLoginID(loginID, 0)
+	if err != nil {
+		return nil, err
+	}
+	if len(taAccounts) == 0 {
+		return nil, errors.New("无对应资金账户")
+	}
+	ids := make([]int, 0)
+	ids_s := ""
+	for _, v := range taAccounts {
+		// 母账户的Parentaccountid就是自己
+		ids = append(ids, int(v.Parentaccountid))
+		ids_s += "," + strconv.Itoa(int(v.Parentaccountid))
+	}
+	ids_s = ids_s[1:]
+
+	// 获取通道交易市场(目前只获取tradeMode = 15的第一个市场)
+	marketRuns, err := GetMarketRunsByTradeMode(15)
+	if err != nil {
+		return nil, err
+	}
+	if len(marketRuns) == 0 {
+		return nil, errors.New("无对应市场运行状态")
+	}
+	marketID := marketRuns[0].Marketid
+	tradeDate := marketRuns[0].Tradedate
+
+	if err := db.GetEngine().Table("TAACCOUNT T").Select("T.ACCOUNTID, H.TRADEDATE, H.MARKETID, H.STATUS, H.UPDATETIME, H.HANDLESTATUS").
+		Join("LEFT", "HEDGE_MARKETOPENLOG H", fmt.Sprintf(`H.ACCOUNTID = T.ACCOUNTID 
+															and H.ACCOUNTID in (%s) 
+															and H.MARKETID = %d 
+															and H.TRADEDATE = '%s'`, ids_s, marketID, tradeDate)).
+		In("T.ACCOUNTID", ids).
+		Find(&datas); err != nil {
+		return nil, err
+	}
+	for i := range datas {
+		hedgemarketopenlog := &datas[i]
+
+		// 获取期货公司名称
+		fcnames := make([]string, 0)
+		if err := db.GetEngine().Table("ERMCP_FUTURESCOMPANY F").Select("F.FCNAME").
+			Join("INNER", "HEDGE_OUTMAINCONFIG H", "H.FCID = F.FCID").
+			Where("H.ACCOUNTID = ?", hedgemarketopenlog.Accountid).
+			And("H.MARKETID = ?", marketID).Find(&fcnames); err != nil {
+			return nil, err
+		}
+		if len(fcnames) > 0 {
+			hedgemarketopenlog.Fcname = fcnames[0]
+		}
+	}
+
+	return datas, nil
+}
+
 // ErmcpUserModel 客户资料结构
 type ErmcpUserModel struct {
 	USERID            int    `json:"userid"  xorm:"'USERID'"`                       // 用户ID

+ 23 - 0
models/market.go

@@ -232,6 +232,17 @@ func GetMarketByGoodsID(goodsID int) (*Market, error) {
 	return nil, nil
 }
 
+// GetMarketsByTradeMode 通用交易模式获取市场信息
+func GetMarketsByTradeMode(tradeMode int) ([]Market, error) {
+	markets := make([]Market, 0)
+
+	if err := db.GetEngine().Where("TRADEMODE = ?", tradeMode).Find(&markets); err != nil {
+		return nil, err
+	}
+
+	return markets, nil
+}
+
 // GetMarkets 获取所有市场信息
 // 返回值 []Market 市场信息
 // 返回值 error 错误
@@ -281,6 +292,18 @@ func GetMarketRuns(marketID int) ([]Marketrun, error) {
 	return marketRuns, nil
 }
 
+// GetMarketRuns 通用TradeMode获取目标市场运行参数信息
+func GetMarketRunsByTradeMode(tradeMode int) ([]Marketrun, error) {
+	engine := db.GetEngine()
+
+	marketRuns := make([]Marketrun, 0)
+	if err := engine.Table("MARKETRUN R").Join("INNER", "MARKET M", "M.MARKETID = R.MARKETID").Where("M.TRADEMODE = ?", tradeMode).Find(&marketRuns); err != nil {
+		return nil, err
+	}
+
+	return marketRuns, nil
+}
+
 // FindQuoteSourceGroupRunSteps 获取行情源分组开休市计划明细信息
 func FindQuoteSourceGroupRunSteps(goods Goods) ([]Quotesourcegrouprunstep, error) {
 	// if market.Trademode != 15 {

Деякі файли не було показано, через те що забагато файлів було змінено