taaccount.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. package taaccount
  2. import (
  3. "fmt"
  4. "mtp2_if/db"
  5. "mtp2_if/global/app"
  6. "mtp2_if/global/e"
  7. "mtp2_if/logger"
  8. "mtp2_if/models"
  9. "net/http"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // GetTaAccountsReq 获取资金账户请求参数
  13. type GetTaAccountsReq struct {
  14. LoginID int `form:"loginID" binding:"required"`
  15. TaAccountType int `form:"taAccountType"`
  16. }
  17. // GetTaAccounts 获取资金账户信息
  18. // @Summary 获取资金账户信息
  19. // @Produce json
  20. // @Security ApiKeyAuth
  21. // @Param loginID query int true "登录账户"
  22. // @Param taAccountType query int false "账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号"
  23. // @Success 200 {object} models.Taaccount
  24. // @Failure 500 {object} app.Response
  25. // @Router /TaAccount/GetTaAccounts [get]
  26. // @Tags 资金账户
  27. func GetTaAccounts(c *gin.Context) {
  28. appG := app.Gin{C: c}
  29. // 获取请求参数
  30. var req GetTaAccountsReq
  31. if err := appG.C.ShouldBindQuery(&req); err != nil {
  32. logger.GetLogger().Errorf("GetTaAccounts failed: %s", err.Error())
  33. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  34. return
  35. }
  36. // 查询数据
  37. taAccounts, err := models.GetTaAccountsByLoginID(req.LoginID, req.TaAccountType)
  38. if err != nil {
  39. // 查询失败
  40. logger.GetLogger().Errorf("GetTaAccounts failed: %s", err.Error())
  41. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  42. return
  43. }
  44. // 如果是母账户,要从对冲外部资金账户表获取资金信息
  45. for i, _ := range taAccounts {
  46. item := &taAccounts[i]
  47. if item.Ismain == 1 {
  48. hedgeOutTaAccount, _ := models.GetHedgeOutTaAccount(int(item.Accountid))
  49. if hedgeOutTaAccount != nil {
  50. item.Balance = hedgeOutTaAccount.Prebalance
  51. item.Currentbalance = hedgeOutTaAccount.Balance
  52. item.Usedmargin = hedgeOutTaAccount.Usedmargin
  53. item.Freezemargin = hedgeOutTaAccount.Freezemargin
  54. item.Freezecharge = hedgeOutTaAccount.Freezecharge
  55. item.Otherfreezemargin = hedgeOutTaAccount.Otherfreezemargin
  56. item.Inamount = hedgeOutTaAccount.Inamount
  57. item.Outamount = hedgeOutTaAccount.Outamount
  58. item.Paycharge = hedgeOutTaAccount.Paycharge
  59. item.Closepl = hedgeOutTaAccount.Closepl
  60. }
  61. }
  62. }
  63. // 查询成功
  64. logger.GetLogger().Debugln("GetTaAccounts successed: %v", taAccounts)
  65. appG.Response(http.StatusOK, e.SUCCESS, taAccounts)
  66. }
  67. // QueryAmountLogReq 资金流水查询(当前)请求参数
  68. type QueryAmountLogReq struct {
  69. app.PageInfo
  70. AccountID string `form:"accountID"` // 资金账户
  71. OperateType string `form:"operateType"` // 资金操作类型
  72. }
  73. // QueryAmountLogRsp 资金流水查询(当前)返回模型
  74. type QueryAmountLogRsp struct {
  75. models.Taaccountlog `xorm:"extends"`
  76. MarketName string `json:"marketname" xorm:"'MARKETNAME'"` // 市场名称
  77. TradeMode uint32 `json:"trademode" xorm:"'TRADEMODE'"` // 交易模式
  78. GoodsCode string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  79. GoodsName string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  80. AGoodsCode string `json:"agoodscode" xorm:"'AGOODSCODE'"` // 竞拍商品代码
  81. AGoodsName string `json:"agoodsname" xorm:"'GOODSNAME'"` // 竞拍商品名称
  82. DGoodsCode string `json:"dgoodscode" xorm:"'DGOODSCODE'"` // 交割商品代码
  83. DGoodsName string `json:"dgoodsname" xorm:"'DGOODSNAME'"` // 交割商品名称
  84. OperateTypeName string `json:"OPERATETYPENAME" xorm:"OPERATETYPENAME"` // 资金操作类型名称
  85. }
  86. // QueryAmountLog 资金流水查询(当前)
  87. // @Summary 资金流水查询(当前)
  88. // @Produce json
  89. // @Security ApiKeyAuth
  90. // @Param page query int false "页码"
  91. // @Param pagesize query int false "每页条数"
  92. // @Param accountID query string true "资金账户 - 格式:1,2,3"
  93. // @Param OperateType query string false "资金操作类型 - 格式:1,2,3"
  94. // @Success 200 {object} QueryAmountLogRsp
  95. // @Failure 500 {object} app.Response
  96. // @Router /TaAccount/QueryAmountLog [get]
  97. // @Tags 资金账户
  98. // 参考通用查询:QueryClientAmountLog
  99. func QueryAmountLog(c *gin.Context) {
  100. appG := app.Gin{C: c}
  101. // 获取请求参数
  102. var req QueryAmountLogReq
  103. if err := appG.C.ShouldBindQuery(&req); err != nil {
  104. logger.GetLogger().Errorf("QueryAmountLog failed: %s", err.Error())
  105. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  106. return
  107. }
  108. // 查询数据
  109. datas := make([]QueryAmountLogRsp, 0)
  110. engine := db.GetEngine()
  111. s := engine.Table("TAACCOUNTLOG").
  112. Join("INNER", "ENUMDICITEM", "ENUMDICITEM.ENUMITEMSTATUS = 1 and ENUMDICITEM.ENUMDICID = 39 and ENUMDICITEM.ENUMITEMNAME = TAACCOUNTLOG.OPERATETYPE").
  113. Join("LEFT", "MARKET", "MARKET.MARKETID = TAACCOUNTLOG.MARKETID").
  114. Join("LEFT", "GOODS", "GOODS.GOODSID = TAACCOUNTLOG.GOODSID").
  115. Join("LEFT", "AUCTION_ORDERINFO", "AUCTION_ORDERINFO.GOODSID = TAACCOUNTLOG.GOODSID").
  116. Join("LEFT", "DELIVERYGOODS", "DELIVERYGOODS.DELIVERYGOODSID = TAACCOUNTLOG.GOODSID").
  117. Select(`to_char(TAACCOUNTLOG.RELATIONORDERID) as RELATIONORDERID, TAACCOUNTLOG.*,
  118. MARKET.MARKETNAME, MARKET.TRADEMODE,
  119. GOODS.GOODSCODE, GOODS.GOODSNAME,
  120. AUCTION_ORDERINFO.GOODSCODE AS AGOODSCODE, AUCTION_ORDERINFO.GOODSNAME AS AGOODSNAME,
  121. DELIVERYGOODS.DELIVERYGOODSCODE AS DGOODSCODE, DELIVERYGOODS.DELIVERYGOODSNAME AS DGOODSNAME,
  122. ENUMDICITEM.ENUMDICNAME AS OPERATETYPENAME`).
  123. Where(fmt.Sprintf("TAACCOUNTLOG.ACCOUNTID in (%s)", req.AccountID)).Desc("TAACCOUNTLOG.AUTOID")
  124. if len(req.OperateType) > 0 {
  125. s = s.And(fmt.Sprintf("TAACCOUNTLOG.OPERATETYPE in (%s)", req.OperateType))
  126. }
  127. if err := s.Find(&datas); err != nil {
  128. // 查询失败
  129. logger.GetLogger().Errorf("QueryAmountLog failed: %s", err.Error())
  130. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  131. return
  132. }
  133. // 查询成功返回
  134. if req.PageSize > 0 {
  135. // 分页
  136. rst := make([]QueryAmountLogRsp, 0)
  137. // 开始上标
  138. start := req.Page * req.PageSize
  139. // 结束下标
  140. end := start + req.PageSize
  141. if start <= len(datas) {
  142. // 判断结束下标是否越界
  143. if end > len(datas) {
  144. end = len(datas)
  145. }
  146. rst = datas[start:end]
  147. } else {
  148. rst = datas[0:0]
  149. }
  150. logger.GetLogger().Debugln("QueryAmountLog successed: %v", rst)
  151. appG.ResponseByPage(http.StatusOK, e.SUCCESS, rst, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: len(datas)})
  152. } else {
  153. // 不分页
  154. logger.GetLogger().Debugln("QueryAmountLog successed: %v", datas)
  155. appG.Response(http.StatusOK, e.SUCCESS, datas)
  156. }
  157. }
  158. // QueryHisAmountLogReq 资金流水查询(历史)请求参数
  159. type QueryHisAmountLogReq struct {
  160. app.PageInfo
  161. AccountID string `form:"accountID"` // 资金账户
  162. OperateType string `form:"operateType"` // 资金操作类型
  163. StartDate string `form:"startDate"` // 开始时间
  164. EndDate string `form:"endDate"` // 结束时间
  165. }
  166. // QueryHisAmountLogRsp 资金流水查询(历史)返回模型
  167. type QueryHisAmountLogRsp struct {
  168. models.Histaaccountlog `xorm:"extends"`
  169. MarketName string `json:"marketname" xorm:"'MARKETNAME'"` // 市场名称
  170. TradeMode uint32 `json:"trademode" xorm:"'TRADEMODE'"` // 交易模式
  171. GoodsCode string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  172. GoodsName string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  173. AGoodsCode string `json:"agoodscode" xorm:"'AGOODSCODE'"` // 竞拍商品代码
  174. AGoodsName string `json:"agoodsname" xorm:"'GOODSNAME'"` // 竞拍商品名称
  175. DGoodsCode string `json:"dgoodscode" xorm:"'DGOODSCODE'"` // 交割商品代码
  176. DGoodsName string `json:"dgoodsname" xorm:"'DGOODSNAME'"` // 交割商品名称
  177. OperateTypeName string `json:"OPERATETYPENAME" xorm:"OPERATETYPENAME"` // 资金操作类型名称
  178. }
  179. // QueryHisAmountLog 资金流水查询(历史)
  180. // @Summary 资金流水查询(历史)
  181. // @Produce json
  182. // @Security ApiKeyAuth
  183. // @Param page query int false "页码"
  184. // @Param pagesize query int false "每页条数"
  185. // @Param accountID query string true "资金账户 - 格式:1,2,3"
  186. // @Param OperateType query string false "资金操作类型 - 格式:1,2,3"
  187. // @Param startDate query string false "开始时间 - 闭区间,格式:yyyy-MM-dd"
  188. // @Param endDate query string false "结束时间 - 闭区间,格式:yyyy-MM-dd"
  189. // @Success 200 {object} QueryHisAmountLogRsp
  190. // @Failure 500 {object} app.Response
  191. // @Router /TaAccount/QueryHisAmountLog [get]
  192. // @Tags 资金账户
  193. // 参考通用查询:Client_QueryHis_taaccountlog
  194. func QueryHisAmountLog(c *gin.Context) {
  195. appG := app.Gin{C: c}
  196. // 获取请求参数
  197. var req QueryHisAmountLogReq
  198. if err := appG.C.ShouldBindQuery(&req); err != nil {
  199. logger.GetLogger().Errorf("QueryHisAmountLog failed: %s", err.Error())
  200. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  201. return
  202. }
  203. // 查询数据
  204. datas := make([]QueryHisAmountLogRsp, 0)
  205. engine := db.GetEngine()
  206. s := engine.Table("HIS_TAACCOUNTLOG").
  207. Join("INNER", "ENUMDICITEM", "ENUMDICITEM.ENUMITEMSTATUS = 1 and ENUMDICITEM.ENUMDICID = 39 and ENUMDICITEM.ENUMITEMNAME = HIS_TAACCOUNTLOG.OPERATETYPE").
  208. Join("LEFT", "MARKET", "MARKET.MARKETID = HIS_TAACCOUNTLOG.MARKETID").
  209. Join("LEFT", "GOODS", "GOODS.GOODSID = HIS_TAACCOUNTLOG.GOODSID").
  210. Join("LEFT", "HIS_AUCTION_ORDERINFO", "HIS_AUCTION_ORDERINFO.GOODSID = HIS_TAACCOUNTLOG.GOODSID and HIS_AUCTION_ORDERINFO.ISVALIDDATA = 1").
  211. Join("LEFT", "DELIVERYGOODS", "DELIVERYGOODS.DELIVERYGOODSID = HIS_TAACCOUNTLOG.GOODSID").
  212. Select(`to_char(HIS_TAACCOUNTLOG.RELATIONORDERID) as RELATIONORDERID, HIS_TAACCOUNTLOG.*,
  213. MARKET.MARKETNAME, MARKET.TRADEMODE,
  214. GOODS.GOODSCODE, GOODS.GOODSNAME,
  215. HIS_AUCTION_ORDERINFO.GOODSCODE AS AGOODSCODE, HIS_AUCTION_ORDERINFO.GOODSNAME AS AGOODSNAME,
  216. DELIVERYGOODS.DELIVERYGOODSCODE AS DGOODSCODE, DELIVERYGOODS.DELIVERYGOODSNAME AS DGOODSNAME,
  217. ENUMDICITEM.ENUMDICNAME AS OPERATETYPENAME`).
  218. Where(fmt.Sprintf(`HIS_TAACCOUNTLOG.ISVALIDDATA = 1 and HIS_TAACCOUNTLOG.ACCOUNTID in (%s)`, req.AccountID)).Desc("HIS_TAACCOUNTLOG.AUTOID")
  219. if len(req.OperateType) > 0 {
  220. s = s.And(fmt.Sprintf("HIS_TAACCOUNTLOG.OPERATETYPE in (%s)", req.OperateType))
  221. }
  222. if len(req.StartDate) > 0 {
  223. s = s.And(fmt.Sprintf("to_date(HIS_TAACCOUNTLOG.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", req.StartDate))
  224. }
  225. if len(req.EndDate) > 0 {
  226. s = s.And(fmt.Sprintf("to_date(HIS_TAACCOUNTLOG.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", req.EndDate))
  227. }
  228. if err := s.Find(&datas); err != nil {
  229. // 查询失败
  230. logger.GetLogger().Errorf("QueryHisAmountLog failed: %s", err.Error())
  231. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  232. return
  233. }
  234. // 查询成功返回
  235. if req.PageSize > 0 {
  236. // 分页
  237. rst := make([]QueryHisAmountLogRsp, 0)
  238. // 开始上标
  239. start := req.Page * req.PageSize
  240. // 结束下标
  241. end := start + req.PageSize
  242. if start <= len(datas) {
  243. // 判断结束下标是否越界
  244. if end > len(datas) {
  245. end = len(datas)
  246. }
  247. rst = datas[start:end]
  248. } else {
  249. rst = datas[0:0]
  250. }
  251. logger.GetLogger().Debugln("QueryHisAmountLog successed: %v", rst)
  252. appG.ResponseByPage(http.StatusOK, e.SUCCESS, rst, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: len(datas)})
  253. } else {
  254. // 不分页
  255. logger.GetLogger().Debugln("QueryHisAmountLog successed: %v", datas)
  256. appG.Response(http.StatusOK, e.SUCCESS, datas)
  257. }
  258. }