Selaa lähdekoodia

1、企业网管增加历史单据查询接口;
2、历史数据查询支持游客模式。

zhou.xiaoning 4 vuotta sitten
vanhempi
commit
2fffc2f169
6 muutettua tiedostoa jossa 871 lisäystä ja 2 poistoa
  1. 140 0
      controllers/ermcp/qryOrder.go
  2. 114 0
      docs/docs.go
  3. 114 0
      docs/swagger.json
  4. 72 0
      docs/swagger.yaml
  5. 425 0
      models/ermcpOrder.go
  6. 6 2
      routers/router.go

+ 140 - 0
controllers/ermcp/qryOrder.go

@@ -547,6 +547,74 @@ func QueryErmcpOrderDetails(c *gin.Context) {
 	appG.Response(http.StatusOK, e.SUCCESS, rst)
 }
 
+// QueryErmcpHisOrderDetailsReq 获取企业风管期货历史委托单信息请求参数
+type QueryErmcpHisOrderDetailsReq struct {
+	AccountID int    `form:"accountID" binding:"required"`
+	StartDate string `form:"startDate"` // 开始时间
+	EndDate   string `form:"endDate"`   // 结束时间
+}
+
+// QueryErmcpHisOrderDetails 获取企业风管期货历史委托单信息
+// @Summary 获取企业风管期货历史委托单信息
+// @Produce json
+// @Security ApiKeyAuth
+// @Param accountID query int true "资金账户ID"
+// @Param startDate query string false "开始时间 - 闭区间,格式:yyyy-MM-dd"
+// @Param endDate query string false "结束时间 - 闭区间,格式:yyyy-MM-dd"
+// @Success 200 {object} models.QueryHedgeOrderDetailRsp
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QueryErmcpHisOrderDetails [get]
+// @Tags 企业风险管理(app)
+func QueryErmcpHisOrderDetails(c *gin.Context) {
+	appG := app.Gin{C: c}
+
+	// 获取请求参数
+	var req QueryErmcpHisOrderDetailsReq
+	if err := appG.C.ShouldBindQuery(&req); err != nil {
+		logger.GetLogger().Errorf("QueryErmcpHisOrderDetails failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+
+	// 获取资金账户信息
+	taAccount, err := models.GetTaAccountByID(req.AccountID)
+	if err != nil {
+		logger.GetLogger().Errorf("QueryErmcpHisOrderDetails failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+		return
+	}
+	if taAccount == nil {
+		logger.GetLogger().Errorf("QueryErmcpHisOrderDetails failed")
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+		return
+	}
+
+	rst := make([]models.QueryHedgeOrderDetailRsp, 0)
+	if taAccount.Ismain == 1 {
+		// 母账户 -> 外部历史委托单
+		rst, err = models.GetHisHedgeOutOrderDetails(req.AccountID, req.StartDate, req.EndDate)
+		if err != nil {
+			// 查询失败
+			logger.GetLogger().Errorf("QueryErmcpHisOrderDetails failed: %s", err.Error())
+			appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+			return
+		}
+	} else {
+		// 子账户 -> 内部历史委托单
+		rst, err = models.GetHisHedgeInnerOrderDetails(req.AccountID, req.StartDate, req.EndDate)
+		if err != nil {
+			// 查询失败
+			logger.GetLogger().Errorf("QueryErmcpHisOrderDetails failed: %s", err.Error())
+			appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+			return
+		}
+	}
+
+	// 查询成功返回
+	logger.GetLogger().Debugln("QueryErmcpHisOrderDetails successed: %v", rst)
+	appG.Response(http.StatusOK, e.SUCCESS, rst)
+}
+
 // QueryHedgeTradeDetailReq 获取企业风管期货成交单信息请求参数
 type QueryHedgeTradeDetailReq struct {
 	AccountID int `form:"accountID" binding:"required"`
@@ -614,3 +682,75 @@ func QueryErmcpTradeDetails(c *gin.Context) {
 	logger.GetLogger().Debugln("QueryErmcpTradeDetails successed: %v", rst)
 	appG.Response(http.StatusOK, e.SUCCESS, rst)
 }
+
+// QueryHedgeHisTradeDetaislReq 获取企业风管期货历史成交单信息请求参数
+type QueryHedgeHisTradeDetaislReq struct {
+	AccountID int    `form:"accountID" binding:"required"`
+	GoodsID   int    `form:"goodsID"`
+	BuyOrSell int    `form:"buyOrSell"`
+	StartDate string `form:"startDate"` // 开始时间
+	EndDate   string `form:"endDate"`   // 结束时间
+}
+
+// QueryErmcpHisTradeDetails 获取企业风管期货历史成交单信息
+// @Summary 获取企业风管期货历史成交单信息
+// @Produce json
+// @Security ApiKeyAuth
+// @Param accountID query int true "资金账户ID"
+// @Param goodsID query int false "商品ID"
+// @Param buyOrSell query int false "买卖方向,0:买 1:卖"
+// @Param startDate query string false "开始时间 - 闭区间,格式:yyyy-MM-dd"
+// @Param endDate query string false "结束时间 - 闭区间,格式:yyyy-MM-dd"
+// @Success 200 {object} models.QueryHedgeTradeDetailRsp
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QueryErmcpHisTradeDetails [get]
+// @Tags 企业风险管理(app)
+func QueryErmcpHisTradeDetails(c *gin.Context) {
+	appG := app.Gin{C: c}
+
+	// 获取请求参数
+	var req QueryHedgeHisTradeDetaislReq
+	if err := appG.C.ShouldBindQuery(&req); err != nil {
+		logger.GetLogger().Errorf("QueryErmcpHisTradeDetails failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+
+	// 获取资金账户信息
+	taAccount, err := models.GetTaAccountByID(req.AccountID)
+	if err != nil {
+		logger.GetLogger().Errorf("QueryErmcpHisTradeDetails failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+		return
+	}
+	if taAccount == nil {
+		logger.GetLogger().Errorf("QueryErmcpHisTradeDetails failed")
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+		return
+	}
+
+	rst := make([]models.QueryHedgeTradeDetailRsp, 0)
+	if taAccount.Ismain == 1 {
+		// 母账户 -> 外部历史成交单
+		rst, err = models.GetHisHedgeOutTradeDetails(req.AccountID, req.GoodsID, req.BuyOrSell, req.StartDate, req.EndDate)
+		if err != nil {
+			// 查询失败
+			logger.GetLogger().Errorf("QueryErmcpHisTradeDetails failed: %s", err.Error())
+			appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+			return
+		}
+	} else {
+		// 子账户 -> 内部历史成交单
+		rst, err = models.GetHisHedgeInnerTradeDetails(req.AccountID, req.GoodsID, req.BuyOrSell, req.StartDate, req.EndDate)
+		if err != nil {
+			// 查询失败
+			logger.GetLogger().Errorf("QueryErmcpHisTradeDetails failed: %s", err.Error())
+			appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+			return
+		}
+	}
+
+	// 查询成功返回
+	logger.GetLogger().Debugln("QueryErmcpHisTradeDetails successed: %v", rst)
+	appG.Response(http.StatusOK, e.SUCCESS, rst)
+}

+ 114 - 0
docs/docs.go

@@ -1663,6 +1663,120 @@ var doc = `{
                 }
             }
         },
+        "/Ermcp/QueryErmcpHisOrderDetails": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "企业风险管理(app)"
+                ],
+                "summary": "获取企业风管期货历史委托单信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "资金账户ID",
+                        "name": "accountID",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "开始时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "startDate",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "结束时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "endDate",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/models.QueryHedgeOrderDetailRsp"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/Ermcp/QueryErmcpHisTradeDetails": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "企业风险管理(app)"
+                ],
+                "summary": "获取企业风管期货历史成交单信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "资金账户ID",
+                        "name": "accountID",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "商品ID",
+                        "name": "goodsID",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "买卖方向,0:买 1:卖",
+                        "name": "buyOrSell",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "开始时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "startDate",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "结束时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "endDate",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/models.QueryHedgeTradeDetailRsp"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Ermcp/QueryErmcpOrderDetails": {
             "get": {
                 "security": [

+ 114 - 0
docs/swagger.json

@@ -1647,6 +1647,120 @@
                 }
             }
         },
+        "/Ermcp/QueryErmcpHisOrderDetails": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "企业风险管理(app)"
+                ],
+                "summary": "获取企业风管期货历史委托单信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "资金账户ID",
+                        "name": "accountID",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "开始时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "startDate",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "结束时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "endDate",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/models.QueryHedgeOrderDetailRsp"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/Ermcp/QueryErmcpHisTradeDetails": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "企业风险管理(app)"
+                ],
+                "summary": "获取企业风管期货历史成交单信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "资金账户ID",
+                        "name": "accountID",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "商品ID",
+                        "name": "goodsID",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "买卖方向,0:买 1:卖",
+                        "name": "buyOrSell",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "开始时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "startDate",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "结束时间 - 闭区间,格式:yyyy-MM-dd",
+                        "name": "endDate",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/models.QueryHedgeTradeDetailRsp"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Ermcp/QueryErmcpOrderDetails": {
             "get": {
                 "security": [

+ 72 - 0
docs/swagger.yaml

@@ -10243,6 +10243,78 @@ paths:
       summary: 查询合同(采购和销售)
       tags:
       - 企业风险管理(app)
+  /Ermcp/QueryErmcpHisOrderDetails:
+    get:
+      parameters:
+      - description: 资金账户ID
+        in: query
+        name: accountID
+        required: true
+        type: integer
+      - description: 开始时间 - 闭区间,格式:yyyy-MM-dd
+        in: query
+        name: startDate
+        type: string
+      - description: 结束时间 - 闭区间,格式:yyyy-MM-dd
+        in: query
+        name: endDate
+        type: string
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/models.QueryHedgeOrderDetailRsp'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/app.Response'
+      security:
+      - ApiKeyAuth: []
+      summary: 获取企业风管期货历史委托单信息
+      tags:
+      - 企业风险管理(app)
+  /Ermcp/QueryErmcpHisTradeDetails:
+    get:
+      parameters:
+      - description: 资金账户ID
+        in: query
+        name: accountID
+        required: true
+        type: integer
+      - description: 商品ID
+        in: query
+        name: goodsID
+        type: integer
+      - description: 买卖方向,0:买 1:卖
+        in: query
+        name: buyOrSell
+        type: integer
+      - description: 开始时间 - 闭区间,格式:yyyy-MM-dd
+        in: query
+        name: startDate
+        type: string
+      - description: 结束时间 - 闭区间,格式:yyyy-MM-dd
+        in: query
+        name: endDate
+        type: string
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/models.QueryHedgeTradeDetailRsp'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/app.Response'
+      security:
+      - ApiKeyAuth: []
+      summary: 获取企业风管期货历史成交单信息
+      tags:
+      - 企业风险管理(app)
   /Ermcp/QueryErmcpOrderDetails:
     get:
       parameters:

+ 425 - 0
models/ermcpOrder.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	"fmt"
 	"mtp2_if/db"
 	"time"
 )
@@ -425,6 +426,125 @@ func GetHedgeInnerOrderDetails(accountID int) ([]QueryHedgeOrderDetailRsp, error
 	return rsp, nil
 }
 
+// GetHisHedgeInnerOrderDetails 获取指定资金账号的通道交易历史内部委托单信息
+func GetHisHedgeInnerOrderDetails(accountID int, startDate, endDate string) ([]QueryHedgeOrderDetailRsp, error) {
+	type orderDetail struct {
+		Orderid                 int64     `json:"orderid"  xorm:"'ORDERID'" binding:"required"`              // 委托单号(107+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
+		Tradedate               string    `json:"tradedate"  xorm:"'TRADEDATE'"`                             // 交易日(yyyyMMdd)
+		Channelbuildtype        int32     `json:"channelbuildtype"  xorm:"'CHANNELBUILDTYPE'"`               // 开平标志 - 0:无 1:建仓 2:平仓
+		Closetype               int32     `json:"closetype"  xorm:"'CLOSETYPE'"`                             // 平仓方式 - 0:无 1:平今 2:平昨
+		Hedgeflag               int32     `json:"hedgeflag"  xorm:"'HEDGEFLAG'"`                             // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
+		Marketid                int32     `json:"marketid"  xorm:"'MARKETID'"`                               // 市场ID
+		Goodsid                 int32     `json:"goodsid"  xorm:"'GOODSID'"`                                 // 商品ID
+		Accountid               int64     `json:"accountid"  xorm:"'ACCOUNTID'"`                             // 账户ID
+		Buyorsell               int32     `json:"buyorsell"  xorm:"'BUYORSELL'"`                             // 买卖 - 0:买 1:卖
+		Pricemode               int32     `json:"pricemode"  xorm:"'PRICEMODE'"`                             // 取价方式 - 1:市价 2: 限价
+		Orderprice              float64   `json:"orderprice"  xorm:"'ORDERPRICE'"`                           // 委托价格(账户)
+		Openorderqty            int64     `json:"openorderqty"  xorm:"'OPENORDERQTY'"`                       // 委托数量
+		Opentradeqty            int64     `json:"opentradeqty"  xorm:"'OPENTRADEQTY'"`                       // 成交数量
+		Opencancelqty           int64     `json:"opencancelqty"  xorm:"'OPENCANCELQTY'"`                     // 撤单数量
+		Openfailqty             int64     `json:"openfailqty"  xorm:"'OPENFAILQTY'"`                         // 失败数量
+		Opensuccessqty          int64     `json:"opensuccessqty"  xorm:"'OPENSUCCESSQTY'"`                   // 建仓委托成功数量
+		Closeorderqty           int64     `json:"closeorderqty"  xorm:"'CLOSEORDERQTY'"`                     // 委托数量
+		Closetradeqty           int64     `json:"closetradeqty"  xorm:"'CLOSETRADEQTY'"`                     // 成交数量
+		Closecancelqty          int64     `json:"closecancelqty"  xorm:"'CLOSECANCELQTY'"`                   // 撤单数量
+		Closefailqty            int64     `json:"closefailqty"  xorm:"'CLOSEFAILQTY'"`                       // 失败数量
+		Closesuccessqty         int64     `json:"closesuccessqty"  xorm:"'CLOSESUCCESSQTY'"`                 // 委托成功数量
+		Openfreezemargin        float64   `json:"openfreezemargin"  xorm:"'OPENFREEZEMARGIN'"`               // 冻结保证金(冻结交易金额)
+		Openunfreezemargin      float64   `json:"openunfreezemargin"  xorm:"'OPENUNFREEZEMARGIN'"`           // 解冻保证金
+		Openfreezecharge        float64   `json:"openfreezecharge"  xorm:"'OPENFREEZECHARGE'"`               // 建仓冻结手续费(账户)
+		Openunfreezecharge      float64   `json:"openunfreezecharge"  xorm:"'OPENUNFREEZECHARGE'"`           // 建仓解冻手续费(账户)
+		Validtype               int32     `json:"validtype"  xorm:"'VALIDTYPE'"`                             // 有效类型 - 1当日有效
+		Validtime               time.Time `json:"validtime"  xorm:"'VALIDTIME'"`                             // 有效期限
+		Channeloperatetype      int32     `json:"channeloperatetype"  xorm:"'CHANNELOPERATETYPE'"`           // 操作类型 - 1:正常委托 2:斩仓委托 3:强平委托
+		Ordertime               time.Time `json:"ordertime"  xorm:"'ORDERTIME'"`                             // 委托时间
+		Channelordersrc         int32     `json:"channelordersrc"  xorm:"'CHANNELORDERSRC'"`                 // 委托来源 -  1:客户端 2:风控服务 3:管理端 4:下单接口平台 5:交易服务 6:跟单服务 7:监控终端
+		Channelinnerorderstatus int32     `json:"channelinnerorderstatus"  xorm:"'CHANNELINNERORDERSTATUS'"` // 委托状态 - 1:委托请求 2:冻结成功 3:委托失败 4:委托部成部失败                  5:委托成功 6:全部撤销 7:部成部撤 8:部成部撤部失败 9:全部成交
+		Operatorid              int64     `json:"operatorid"  xorm:"'OPERATORID'"`                           // 登录账号(LoginID)
+		Updatetime              time.Time `json:"updatetime"  xorm:"'UPDATETIME'"`                           // 更新时间
+		Clientordertime         time.Time `json:"clientordertime"  xorm:"'CLIENTORDERTIME'"`                 // 客户端委托时间
+		Clientticket            string    `json:"clientticket"  xorm:"'CLIENTTICKET'"`                       // 客户端流水号
+		UUID                    string    `json:"uuid"  xorm:"'UUID'"`                                       // 发起端唯一id
+		Clienttype              int32     `json:"clienttype"  xorm:"'CLIENTTYPE'"`                           // 客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江) 10;监控终端
+		Retcode                 int32     `json:"retcode"  xorm:"'RETCODE'"`                                 // 错误代码
+		Marginalgorithm         int32     `json:"marginalgorithm"  xorm:"'MARGINALGORITHM'"`                 // 保证金收取方式  1:比率  2:固定
+		Marginvalue             float64   `json:"marginvalue"  xorm:"'MARGINVALUE'"`                         // 即市保证金设置值
+		Openfeealgorithm        int32     `json:"openfeealgorithm"  xorm:"'OPENFEEALGORITHM'"`               // 建仓手续费收取方式  1:比率  2:固定
+		Openchargevalue         float64   `json:"openchargevalue"  xorm:"'OPENCHARGEVALUE'"`                 // 建仓手续费设置值
+		Closefeealgorithm       int32     `json:"closefeealgorithm"  xorm:"'CLOSEFEEALGORITHM'"`             // 平仓手续费收取方式 1:比率  2:固定
+		Closechargevalue        float64   `json:"closechargevalue"  xorm:"'CLOSECHARGEVALUE'"`               // 平仓手续费设置值
+		Accountcurrencyid       int32     `json:"accountcurrencyid"  xorm:"'ACCOUNTCURRENCYID'"`             // 账户币种ID
+		Goodscurrencyid         int32     `json:"goodscurrencyid"  xorm:"'GOODSCURRENCYID'"`                 // 商品币种ID
+		Margincurrencyid        int32     `json:"margincurrencyid"  xorm:"'MARGINCURRENCYID'"`               // 保证金币种ID 比率时等于账户币种
+		Marginrate              float64   `json:"marginrate"  xorm:"'MARGINRATE'"`                           // 保证金汇率-比率时等于1
+		Curexchangerate         float64   `json:"curexchangerate"  xorm:"'CUREXCHANGERATE'"`                 // 当前汇率
+		Goodsorderprice         float64   `json:"goodsorderprice"  xorm:"'GOODSORDERPRICE'"`                 // 委托价格(商品)
+		Openfreezemargin2       float64   `json:"openfreezemargin2"  xorm:"'OPENFREEZEMARGIN2'"`             // 建仓冻结保证金(保证金/商品)
+		Openfreezecharge2       float64   `json:"openfreezecharge2"  xorm:"'OPENFREEZECHARGE2'"`             // 建仓冻结手续费(商品)
+		Openunfreezemargin2     float64   `json:"openunfreezemargin2"  xorm:"'OPENUNFREEZEMARGIN2'"`         // 建仓解冻保证金(保证金/商品)
+		Openunfreezecharge2     float64   `json:"openunfreezecharge2"  xorm:"'OPENUNFREEZECHARGE2'"`         // 建仓解冻手续费(商品)
+		Parentaccountid         int64     `json:"parentaccountid"  xorm:"'PARENTACCOUNTID'"`                 // 所属母账户
+		Sessionid               int64     `json:"sessionid"  xorm:"'SESSIONID'"`                             // 会话ID
+
+		Orderidstr       string `xorm:"ORDERIDSTR"`
+		Goodscode        string `xorm:"GOODSCODE"`
+		Goodsname        string `xorm:"GOODSNAME"`
+		Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
+	}
+
+	hedgeInnerOrderDetails := make([]orderDetail, 0)
+	session := db.GetEngine().Table("HIS_HEDGE_INNERORDERDETAIL T").
+		Select("to_char(T.ORDERID) ORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME").
+		Join("LEFT", "GOODS G", "G.GOODSID = T.GOODSID").
+		Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
+		Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
+		Where("T.ISVALIDDATA = 1 and T.ACCOUNTID = ?", accountID).Desc("T.ORDERTIME")
+	if len(startDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
+	}
+	if len(endDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
+	}
+	if err := session.Find(&hedgeInnerOrderDetails); err != nil {
+		return nil, err
+	}
+	rsp := make([]QueryHedgeOrderDetailRsp, 0)
+	for _, v := range hedgeInnerOrderDetails {
+		// 内部委托单分建平
+		orderQty := v.Openorderqty
+		tradeQty := v.Opentradeqty
+		if v.Channelbuildtype == 2 {
+			orderQty = v.Closeorderqty
+			tradeQty = v.Closetradeqty
+		}
+
+		rsp = append(rsp, QueryHedgeOrderDetailRsp{
+			Orderid:                 v.Orderidstr,
+			Tradedate:               v.Tradedate,
+			Channelbuildtype:        v.Channelbuildtype,
+			Closetype:               v.Closetype,
+			Marketid:                v.Marketid,
+			Goodsid:                 v.Goodsid,
+			Accountid:               v.Accountid,
+			Buyorsell:               v.Buyorsell,
+			Pricemode:               v.Pricemode,
+			Orderprice:              v.Orderprice,
+			Orderqty:                orderQty,
+			Tradeqty:                tradeQty,
+			Openfreezemargin:        v.Openfreezemargin,
+			Channeloperatetype:      v.Channeloperatetype,
+			Ordertime:               v.Ordertime,
+			Channelinnerorderstatus: v.Channelinnerorderstatus,
+			Curexchangerate:         v.Curexchangerate,
+			Goodscode:               v.Goodscode,
+			Goodsname:               v.Goodsname,
+			Exchangefullname:        v.Exchangefullname,
+		})
+	}
+
+	return rsp, nil
+}
+
 // GetHedgeOutOrderDetails 获取指定资金账号的通道交易外部委托单信息
 func GetHedgeOutOrderDetails(accountID int) ([]QueryHedgeOrderDetailRsp, error) {
 	type orderDetail struct {
@@ -529,6 +649,116 @@ func GetHedgeOutOrderDetails(accountID int) ([]QueryHedgeOrderDetailRsp, error)
 	return rsp, nil
 }
 
+// GetHisHedgeOutOrderDetails 获取指定资金账号的通道交易历史外部委托单信息
+func GetHisHedgeOutOrderDetails(accountID int, startDate, endDate string) ([]QueryHedgeOrderDetailRsp, error) {
+	type orderDetail struct {
+		Outorderid            int64     `json:"outorderid"  xorm:"'OUTORDERID'" binding:"required"`             // 外部委托单ID(113+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
+		Hedgeaccountcode      string    `json:"hedgeaccountcode"  xorm:"'HEDGEACCOUNTCODE'" binding:"required"` // 对冲账号
+		Tradedate             string    `json:"tradedate"  xorm:"'TRADEDATE'"`                                  // 交易日(yyyyMMdd)
+		Accountid             int64     `json:"accountid"  xorm:"'ACCOUNTID'"`                                  // 资金账号[外部母账户]
+		Relatedorderid        int64     `json:"relatedorderid"  xorm:"'RELATEDORDERID'"`                        // 关联内部委托单号
+		Marketid              int32     `json:"marketid"  xorm:"'MARKETID'"`                                    // 市场ID
+		Hedgegoodsid          int64     `json:"hedgegoodsid"  xorm:"'HEDGEGOODSID'"`                            // 对冲合约ID
+		Orderpricetype        int32     `json:"orderpricetype"  xorm:"'ORDERPRICETYPE'"`                        // 报单价格条件 - 1:市价 2: 限价
+		Buyorsell             int32     `json:"buyorsell"  xorm:"'BUYORSELL'"`                                  // 买卖方向 - 0:买 1:卖
+		Channelbuildtype      int32     `json:"channelbuildtype"  xorm:"'CHANNELBUILDTYPE'"`                    // 开平标志- 0:无 1:建仓 2:平仓
+		Closetype             int32     `json:"closetype"  xorm:"'CLOSETYPE'"`                                  // 平仓方式 - 0:无 1:平今 2:平昨
+		Orderprice            float64   `json:"orderprice"  xorm:"'ORDERPRICE'"`                                // 委托价格
+		Orderqty              int64     `json:"orderqty"  xorm:"'ORDERQTY'"`                                    // 委托数量
+		Tradeqty              int64     `json:"tradeqty"  xorm:"'TRADEQTY'"`                                    // 成交数量
+		Cancelqty             int64     `json:"cancelqty"  xorm:"'CANCELQTY'"`                                  // 撤销数量
+		Validtype             int32     `json:"validtype"  xorm:"'VALIDTYPE'"`                                  // 有效期类型 - 1::当日有效
+		Hedgeflag             int32     `json:"hedgeflag"  xorm:"'HEDGEFLAG'"`                                  // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
+		Channeloutorderstatus int32     `json:"channeloutorderstatus"  xorm:"'CHANNELOUTORDERSTATUS'"`          // 外部单据状态 - 1 - 接收报文 2 - 发送报文成功 3 - 委托成功 4 - 委托失败 5 - 全部成交 6 - 部成部撤 7 - 全部撤单
+		Ordertime             time.Time `json:"ordertime"  xorm:"'ORDERTIME'"`                                  // 委托时间
+		Updatetime            time.Time `json:"updatetime"  xorm:"'UPDATETIME'"`                                // 更新时间
+		Mhpinnerorderid       int64     `json:"mhpinnerorderid"  xorm:"'MHPINNERORDERID'"`                      // 接口平台委托单ID
+		Mhprspcode            int64     `json:"mhprspcode"  xorm:"'MHPRSPCODE'"`                                // 渠道返回码
+		Mhprsptext            string    `json:"mhprsptext"  xorm:"'MHPRSPTEXT'"`                                // 渠道返回信息
+		Optiontype            int32     `json:"optiontype"  xorm:"'OPTIONTYPE'"`                                // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
+		Premium               float64   `json:"premium"  xorm:"'PREMIUM'"`                                      // 权利金
+		Realoutorderid        int64     `json:"realoutorderid"  xorm:"'REALOUTORDERID'"`                        // 实际外部平台委托单ID
+		Relatedcreateorderid  int64     `json:"relatedcreateorderid"  xorm:"'RELATEDCREATEORDERID'"`            // 关联外部建仓委托单ID[平仓委托]
+		Channeloperatetype    int32     `json:"channeloperatetype"  xorm:"'CHANNELOPERATETYPE'"`                // 操作类型 - 1:正常委托 2:斩仓委托 3:强平委托
+		Channelordersrc       int32     `json:"channelordersrc"  xorm:"'CHANNELORDERSRC'"`                      // 委托来源 -  1:客户端 2:风控服务 3:管理端 4:下单接口平台 5:交易服务 6:跟单服务 7:监控终端
+		Operatorid            int64     `json:"operatorid"  xorm:"'OPERATORID'"`                                // 登录账号(LoginID)
+		Clientordertime       time.Time `json:"clientordertime"  xorm:"'CLIENTORDERTIME'"`                      // 客户端委托时间
+		Clientticket          string    `json:"clientticket"  xorm:"'CLIENTTICKET'"`                            // 客户端流水号
+		UUID                  string    `json:"uuid"  xorm:"'UUID'"`                                            // 发起端唯一id
+		Clienttype            int32     `json:"clienttype"  xorm:"'CLIENTTYPE'"`                                // 客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江) 10;监控终端
+		Sessionid             int64     `json:"sessionid"  xorm:"'SESSIONID'"`                                  // 会话ID
+
+		Orderidstr       string `xorm:"ORDERIDSTR"`
+		Goodscode        string `xorm:"GOODSCODE"`
+		Goodsname        string `xorm:"GOODSNAME"`
+		Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
+	}
+
+	hedgeOutOrderDetails := make([]orderDetail, 0)
+	session := db.GetEngine().Table("HIS_HEDGE_OUTORDERDETAIL T").
+		Select("to_char(T.OUTORDERID) ORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME").
+		Join("LEFT", "GOODS G", "G.GOODSID = T.HEDGEGOODSID").
+		Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
+		Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
+		Where("T.ISVALIDDATA = 1 and T.ACCOUNTID = ?", accountID).Desc("T.OUTORDERID")
+	if len(startDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
+	}
+	if len(endDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
+	}
+	if err := session.Find(&hedgeOutOrderDetails); err != nil {
+		return nil, err
+	}
+	rsp := make([]QueryHedgeOrderDetailRsp, 0)
+	for _, v := range hedgeOutOrderDetails {
+		// 外部单据状态 -> 委托状态
+		// 外部单据状态 - 1 - 接收报文 2 - 发送报文成功 3 - 委托成功 4 - 委托失败 5 - 全部成交 6 - 部成部撤 7 - 全部撤单
+		// 委托状态 - 1:委托请求 2:冻结成功 3:委托失败 4:委托部成部失败 5:委托成功 6:全部撤销 7:部成部撤 8:部成部撤部失败 9:全部成交
+		status := v.Channeloutorderstatus
+		if v.Channeloutorderstatus == 1 {
+			status = 1
+		} else if v.Channeloutorderstatus == 2 {
+			status = 1
+		} else if v.Channeloutorderstatus == 3 {
+			status = 5
+		} else if v.Channeloutorderstatus == 4 {
+			status = 3
+		} else if v.Channeloutorderstatus == 5 {
+			status = 9
+		} else if v.Channeloutorderstatus == 6 {
+			status = 7
+		} else if v.Channeloutorderstatus == 7 {
+			status = 6
+		}
+
+		rsp = append(rsp, QueryHedgeOrderDetailRsp{
+			Orderid:                 v.Orderidstr,
+			Tradedate:               v.Tradedate,
+			Channelbuildtype:        v.Channelbuildtype,
+			Closetype:               v.Closetype,
+			Marketid:                v.Marketid,
+			Goodsid:                 int32(v.Hedgegoodsid),
+			Accountid:               v.Accountid,
+			Buyorsell:               v.Buyorsell,
+			Pricemode:               v.Orderpricetype,
+			Orderprice:              v.Orderprice,
+			Orderqty:                v.Orderqty,
+			Tradeqty:                v.Tradeqty,
+			Openfreezemargin:        0,
+			Channeloperatetype:      v.Channeloperatetype,
+			Ordertime:               v.Ordertime,
+			Channelinnerorderstatus: status,
+			Curexchangerate:         1,
+			Goodscode:               v.Goodscode,
+			Goodsname:               v.Goodsname,
+			Exchangefullname:        v.Exchangefullname,
+		})
+	}
+
+	return rsp, nil
+}
+
 // QueryHedgeTradeDetailRsp 获取企业风管成交单返回模型
 type QueryHedgeTradeDetailRsp struct {
 	Tradeid          string    `json:"tradeid"`          // 成交单号(108+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
@@ -658,6 +888,113 @@ func GetHedgeInnerTradeDetails(accountID, goodsID, buyOrSell int) ([]QueryHedgeT
 	return rsp, nil
 }
 
+// GetHisHedgeInnerTradeDetails 获取通道交易历史内部成交单信息
+func GetHisHedgeInnerTradeDetails(accountID, goodsID, buyOrSell int, startDate, endDate string) ([]QueryHedgeTradeDetailRsp, error) {
+	type tradeDetail struct {
+		Tradeid                  string    `json:"tradeid"  xorm:"'TRADEIDSTR'"`                                // 成交单号(108+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
+		Buyorsell                int32     `json:"buyorsell"  xorm:"'BUYORSELL'"`                               // 方向 - 0:买 1:卖
+		Orderid                  string    `json:"orderid"  xorm:"'ORDERIDSTR'"`                                // 委托单号
+		Tradedate                string    `json:"tradedate"  xorm:"'TRADEDATE'"`                               // 交易日(yyyyMMdd)
+		Accountid                int64     `json:"accountid"  xorm:"'ACCOUNTID'"`                               // 账号ID
+		Goodsid                  int32     `json:"goodsid"  xorm:"'GOODSID'"`                                   // 商品ID
+		Marketid                 int32     `json:"marketid"  xorm:"'MARKETID'"`                                 // 市场ID
+		Tradetime                time.Time `json:"tradetime"  xorm:"'TRADETIME'"`                               // 成交时间
+		Tradeprice               float64   `json:"tradeprice"  xorm:"'TRADEPRICE'"`                             // 成交价格
+		Tradeqty                 int64     `json:"tradeqty"  xorm:"'TRADEQTY'"`                                 // 成交数量
+		Tradeamount              float64   `json:"tradeamount"  xorm:"'TRADEAMOUNT'"`                           // 成交金额(账户)
+		Closepl                  float64   `json:"closepl"  xorm:"'CLOSEPL'"`                                   // 平仓盈亏(账户)
+		Opencharge               float64   `json:"opencharge"  xorm:"'OPENCHARGE'"`                             // 建仓手续费(账户)
+		Closecharge              float64   `json:"closecharge"  xorm:"'CLOSECHARGE'"`                           // 平仓手续费(账户)
+		Tradetype                int32     `json:"tradetype"  xorm:"'TRADETYPE'"`                               // 成交类别 - 1:正常委托成交 2:风控斩仓成交 3:修正持仓成交 4:管理端斩仓成交
+		Channelbuildtype         int32     `json:"channelbuildtype"  xorm:"'CHANNELBUILDTYPE'"`                 // 委托单据类型 0:无 1:建仓 2:平仓
+		Closetype                int32     `json:"closetype"  xorm:"'CLOSETYPE'"`                               // 平仓方式 - 0:无 1:平今 2:平昨
+		Hedgeflag                int32     `json:"hedgeflag"  xorm:"'HEDGEFLAG'"`                               // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
+		Openqty                  int64     `json:"openqty"  xorm:"'OPENQTY'"`                                   // 开仓数量(先建后平操作 需要记录)
+		Closeqty                 int64     `json:"closeqty"  xorm:"'CLOSEQTY'"`                                 // 平仓数量(先建后平操作 需要记录)
+		Status                   int32     `json:"status"  xorm:"'STATUS'"`                                     // 处理状态 - 1:待处理 2:已处理 3:处理失败
+		Isreckoned               int32     `json:"isreckoned"  xorm:"'ISRECKONED'"`                             // 是否结算 - 0:未结算 1:已结算
+		Openfeealgorithm         int32     `json:"openfeealgorithm"  xorm:"'OPENFEEALGORITHM'"`                 // 建仓手续费收取方式  1:比率  2:固定
+		Openchargevalue          float64   `json:"openchargevalue"  xorm:"'OPENCHARGEVALUE'"`                   // 建仓手续费设置值
+		Closefeealgorithm        int32     `json:"closefeealgorithm"  xorm:"'CLOSEFEEALGORITHM'"`               // 平仓手续费收取方式 1:比率  2:固定
+		Closechargevalue         float64   `json:"closechargevalue"  xorm:"'CLOSECHARGEVALUE'"`                 // 平仓手续费设置值
+		Accountcurrencyid        int32     `json:"accountcurrencyid"  xorm:"'ACCOUNTCURRENCYID'"`               // 账户币种ID
+		Goodscurrencyid          int32     `json:"goodscurrencyid"  xorm:"'GOODSCURRENCYID'"`                   // 商品币种ID
+		Curexchangerate          float64   `json:"curexchangerate"  xorm:"'CUREXCHANGERATE'"`                   // 当前汇率
+		Opencharge2              float64   `json:"opencharge2"  xorm:"'OPENCHARGE2'"`                           // 建仓手续费(商品)
+		Closecharge2             float64   `json:"closecharge2"  xorm:"'CLOSECHARGE2'"`                         // 平仓手续费(商品)
+		Closepl2                 float64   `json:"closepl2"  xorm:"'CLOSEPL2'"`                                 // 平仓盈亏(商品)
+		Closepl3                 float64   `json:"closepl3"  xorm:"'CLOSEPL3'"`                                 // 平仓盈亏(账户)(逐笔)
+		Closepl4                 float64   `json:"closepl4"  xorm:"'CLOSEPL4'"`                                 // 平仓盈亏(商品)(逐笔)
+		Extenalopenfeealgorithm  int32     `json:"extenalopenfeealgorithm"  xorm:"'EXTENALOPENFEEALGORITHM'"`   // 建仓手续费收取方式(外部配置) 1:比率  2:固定
+		Extenalopenchargevalue   float64   `json:"extenalopenchargevalue"  xorm:"'EXTENALOPENCHARGEVALUE'"`     // 建仓手续费设置值
+		Extenalclosefeealgorithm int32     `json:"extenalclosefeealgorithm"  xorm:"'EXTENALCLOSEFEEALGORITHM'"` // 平仓手续费收取方式 1:比率  2:固定
+		Extenalclosechargevalue  float64   `json:"extenalclosechargevalue"  xorm:"'EXTENALCLOSECHARGEVALUE'"`   // 平仓手续费设置值
+		Extenalopencharge        float64   `json:"extenalopencharge"  xorm:"'EXTENALOPENCHARGE'"`               // 建仓手续费(商品)(外部)
+		Extenalclosecharge       float64   `json:"extenalclosecharge"  xorm:"'EXTENALCLOSECHARGE'"`             // 平仓手续费(商品)(外部)
+		Parentaccountid          int64     `json:"parentaccountid"  xorm:"'PARENTACCOUNTID'"`                   // 所属母账户
+		Relatedouttradeid        int64     `json:"relatedouttradeid"  xorm:"'RELATEDOUTTRADEID'"`               // 关联外部成交单ID
+
+		Orderidstr       string `xorm:"ORDERIDSTR"`
+		Goodscode        string `xorm:"GOODSCODE"`
+		Goodsname        string `xorm:"GOODSNAME"`
+		Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
+	}
+
+	tradeDetails := make([]tradeDetail, 0)
+	session := db.GetEngine().Table("HIS_HEDGE_INNERTRADEDETAIL T").
+		Select("to_char(T.TRADEID) TRADEIDSTR, to_char(T.ORDERID) ORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME").
+		Join("LEFT", "GOODS G", "G.GOODSID = T.GOODSID").
+		Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
+		Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
+		Where("T.ISVALIDDATA = 1 and T.ACCOUNTID = ?", accountID)
+	if goodsID != 0 {
+		session = session.And("T.GOODSID = ?", goodsID)
+	}
+	if buyOrSell != 0 {
+		session = session.And("T.BUYORSELL = ?", buyOrSell)
+	}
+	if len(startDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
+	}
+	if len(endDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
+	}
+	if err := session.Desc("T.TRADEID").
+		Find(&tradeDetails); err != nil {
+		return nil, err
+	}
+
+	rsp := make([]QueryHedgeTradeDetailRsp, 0)
+	for _, v := range tradeDetails {
+		rsp = append(rsp, QueryHedgeTradeDetailRsp{
+			Tradeid:          v.Tradeid,
+			Buyorsell:        v.Buyorsell,
+			Orderid:          v.Orderid,
+			Tradedate:        v.Tradedate,
+			Accountid:        v.Accountid,
+			Goodsid:          v.Goodsid,
+			Marketid:         v.Marketid,
+			Tradetime:        v.Tradetime,
+			Tradeprice:       v.Tradeprice,
+			Tradeqty:         v.Tradeqty,
+			Tradeamount:      v.Tradeamount,
+			Opencharge:       v.Opencharge,
+			Closecharge:      v.Closecharge,
+			Tradetype:        v.Tradetype,
+			Channelbuildtype: v.Channelbuildtype,
+			Closetype:        v.Closetype,
+			Curexchangerate:  v.Curexchangerate,
+			Opencharge2:      v.Opencharge2,
+			Closecharge2:     v.Closecharge2,
+			Goodscode:        v.Goodscode,
+			Goodsname:        v.Goodsname,
+			Exchangefullname: v.Exchangefullname,
+		})
+	}
+
+	return rsp, nil
+}
+
 // GetHedgeOutTradeDetails 获取通道交易外部成交单信息
 func GetHedgeOutTradeDetails(accountID, goodsID, buyOrSell int) ([]QueryHedgeTradeDetailRsp, error) {
 	type tradeDetail struct {
@@ -739,3 +1076,91 @@ func GetHedgeOutTradeDetails(accountID, goodsID, buyOrSell int) ([]QueryHedgeTra
 
 	return rsp, nil
 }
+
+// GetHisHedgeOutTradeDetails 获取通道交易外部历史成交单信息
+func GetHisHedgeOutTradeDetails(accountID, goodsID, buyOrSell int, startDate, endDate string) ([]QueryHedgeTradeDetailRsp, error) {
+	type tradeDetail struct {
+		Outtradeid             string    `json:"outtradeid"  xorm:"'OUTTRADEIDSTR'" binding:"required"`   // 外部成交单ID(114+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
+		Tradedate              string    `json:"tradedate"  xorm:"'TRADEDATE'"`                           // 交易日(yyyyMMdd)
+		Relatedoutorderid      string    `json:"relatedoutorderid"  xorm:"'RELATEDOUTORDERIDSTR'"`        // 关联外部委托单ID
+		Accountid              int64     `json:"accountid"  xorm:"'ACCOUNTID'"`                           // 资金账号[外部母账户]
+		Hedgeaccountcode       string    `json:"hedgeaccountcode"  xorm:"'HEDGEACCOUNTCODE'"`             // 对冲账号
+		Marketid               int32     `json:"marketid"  xorm:"'MARKETID'"`                             // 市场ID
+		Hedgegoodsid           int64     `json:"hedgegoodsid"  xorm:"'HEDGEGOODSID'"`                     // 对冲合约ID
+		Buyorsell              int32     `json:"buyorsell"  xorm:"'BUYORSELL'"`                           // 买卖方向 - 0:买 1:卖
+		Channelbuildtype       int32     `json:"channelbuildtype"  xorm:"'CHANNELBUILDTYPE'"`             // 开平标志- 0:无 1:建仓 2:平仓
+		Closetype              int32     `json:"closetype"  xorm:"'CLOSETYPE'"`                           // 平仓方式 - 0:无 1:平今 2:平昨
+		Hedgeflag              int32     `json:"hedgeflag"  xorm:"'HEDGEFLAG'"`                           // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
+		Tradeprice             float64   `json:"tradeprice"  xorm:"'TRADEPRICE'"`                         // 成交价格
+		Tradeqty               int64     `json:"tradeqty"  xorm:"'TRADEQTY'"`                             // 成交数量
+		Tradetime              time.Time `json:"tradetime"  xorm:"'TRADETIME'"`                           // 成交时间
+		Relatedmhpinnerorderid int64     `json:"relatedmhpinnerorderid"  xorm:"'RELATEDMHPINNERORDERID'"` // 接口平台委托单ID
+		Mhpinnertradeid        int64     `json:"mhpinnertradeid"  xorm:"'MHPINNERTRADEID'"`               // 接口平台成交单ID
+		Hasinnerorder          int32     `json:"hasinnerorder"  xorm:"'HASINNERORDER'"`                   // 是否有内部单关联 - 0:无 1:有
+		Isvalid                int32     `json:"isvalid"  xorm:"'ISVALID'"`                               // 是否有效 - 0:无效 1:有效
+		Optiontype             int32     `json:"optiontype"  xorm:"'OPTIONTYPE'"`                         // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
+		Premium                float64   `json:"premium"  xorm:"'PREMIUM'"`                               // 权利金
+		Tradetype              int32     `json:"tradetype"  xorm:"'TRADETYPE'"`                           // 成交类别 - 1:正常委托成交3:修正持仓成交
+
+		Orderidstr       string `xorm:"ORDERIDSTR"`
+		Goodscode        string `xorm:"GOODSCODE"`
+		Goodsname        string `xorm:"GOODSNAME"`
+		Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
+
+		Tradeamount float64 `xorm:"TRADEAMOUNT"` // 成交金额
+	}
+
+	tradeDetails := make([]tradeDetail, 0)
+	session := db.GetEngine().Table("HIS_HEDGE_OUTTRADEDETAIL T").
+		Select("to_char(T.OUTTRADEID) OUTTRADEIDSTR, to_char(T.RELATEDOUTORDERID) RELATEDOUTORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME, (T.TRADEPRICE * T.TRADEQTY * G.AGREEUNIT) TRADEAMOUNT").
+		Join("LEFT", "GOODS G", "G.GOODSID = T.HEDGEGOODSID").
+		Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
+		Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
+		Where("T.ACCOUNTID = ?", accountID)
+	if goodsID != 0 {
+		session = session.And("T.HEDGEGOODSID = ?", goodsID)
+	}
+	if buyOrSell != 0 {
+		session = session.And("T.BUYORSELL = ?", buyOrSell)
+	}
+	if len(startDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
+	}
+	if len(endDate) > 0 {
+		session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
+	}
+	if err := session.Desc("T.OUTTRADEID").
+		Find(&tradeDetails); err != nil {
+		return nil, err
+	}
+
+	rsp := make([]QueryHedgeTradeDetailRsp, 0)
+	for _, v := range tradeDetails {
+		rsp = append(rsp, QueryHedgeTradeDetailRsp{
+			Tradeid:          v.Outtradeid,
+			Buyorsell:        v.Buyorsell,
+			Orderid:          v.Relatedoutorderid,
+			Tradedate:        v.Tradedate,
+			Accountid:        v.Accountid,
+			Goodsid:          int32(v.Hedgegoodsid),
+			Marketid:         v.Marketid,
+			Tradetime:        v.Tradetime,
+			Tradeprice:       v.Tradeprice,
+			Tradeqty:         v.Tradeqty,
+			Tradeamount:      v.Tradeamount,
+			Opencharge:       0,
+			Closecharge:      0,
+			Tradetype:        v.Tradetype,
+			Channelbuildtype: v.Channelbuildtype,
+			Closetype:        v.Closetype,
+			Curexchangerate:  1,
+			Opencharge2:      0,
+			Closecharge2:     0,
+			Goodscode:        v.Goodscode,
+			Goodsname:        v.Goodsname,
+			Exchangefullname: v.Exchangefullname,
+		})
+	}
+
+	return rsp, nil
+}

+ 6 - 2
routers/router.go

@@ -153,13 +153,13 @@ func InitRouter() *gin.Engine {
 	}
 	// ************************ 行情服务 ************************
 	quoteR := apiR.Group("Quote")
-	quoteR.Use(token.Auth())
+	quoteR.Use(token.AuthByHsby())
 	{
 		// 查询行情历史数据
 		quoteR.GET("/QueryHistoryDatas", quote.QueryHistoryDatas)
 		// 查询行情Tik数据
 		quoteR.GET("/QueryHistoryTikDatas", quote.QueryHistoryTikDatas)
-		// 查询行情历史数据
+		// 查询分时图历史数据
 		quoteR.GET("/QueryTSData", quote.QueryTSData)
 		// 获取商品盘面信息
 		quoteR.GET("/QueryQuoteDay", quote.QueryQuoteDay)
@@ -371,6 +371,10 @@ func InitRouter() *gin.Engine {
 		ermcpR.GET("/QueryErmcpOrderDetails", ermcp.QueryErmcpOrderDetails)
 		// 获取企业风管期货成交单信息
 		ermcpR.GET("/QueryErmcpTradeDetails", ermcp.QueryErmcpTradeDetails)
+		// 获取企业风管期货历史委托单信息
+		ermcpR.GET("/QueryErmcpHisOrderDetails", ermcp.QueryErmcpHisOrderDetails)
+		// 获取企业风管期货历史成交单信息
+		ermcpR.GET("/QueryErmcpHisTradeDetails", ermcp.QueryErmcpHisTradeDetails)
 	}
 
 	return r