szdz.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. package szdz
  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. // QueryRecieptOrderReq 点选挂牌委托单据查询参数
  13. type QueryRecieptOrderReq struct {
  14. app.PageInfo
  15. GoodsID int `form:"goodsID" binding:"required"` // 商品ID,必填
  16. AccountName string `form:"accountName"` // 所属账户名称
  17. MarketID int `form:"marketID"` // 市场ID
  18. }
  19. // QueryRecieptOrderRsp 点选挂牌委托单据查询返回模型
  20. type QueryRecieptOrderRsp struct {
  21. Goodsid int64 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
  22. Goodscode string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  23. Goodsname string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  24. Buyorsell uint32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 方向 - 0:买 1:卖
  25. Orderid uint64 `json:"orderid" xorm:"'ORDERID'"` // 委托单号
  26. Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
  27. Orderprice float64 `json:"orderprice" xorm:"'ORDERPRICE'"` // 委托价格
  28. EnableQty int64 `json:"enableqty" xorm:"ENABLEQTY"` // 可摘数量
  29. AccountName string `json:"accountName" xorm:"ACCOUNTNAME"` // 所属账号名称(已脱敏)
  30. }
  31. // QueryRecieptOrder 点选挂牌委托单据查询(摘牌大厅)
  32. // @Summary 点选挂牌委托单据查询(摘牌大厅)
  33. // @Produce json
  34. // @Security ApiKeyAuth
  35. // @Param page query int false "页码"
  36. // @Param size query int false "每页条数"
  37. // @Param goodsID query int true "商品ID"
  38. // @Param accountName query string false "所属账户名称"
  39. // @Param marketID query int false "市场ID"
  40. // @Success 200 {object} QueryRecieptOrderRsp
  41. // @Failure 500 {object} app.Response
  42. // @Router /SZDZ/QueryRecieptOrder [get]
  43. // @Tags 定制【尚志大宗】
  44. func QueryRecieptOrder(c *gin.Context) {
  45. appG := app.Gin{C: c}
  46. // 获取请求参数
  47. var req QueryRecieptOrderReq
  48. if err := appG.C.ShouldBindQuery(&req); err != nil {
  49. logger.GetLogger().Errorf("QueryRecieptOrder failed: %s", err.Error())
  50. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  51. return
  52. }
  53. datas := make([]QueryRecieptOrderRsp, 0)
  54. engine := db.GetEngine()
  55. // 投资者挂牌委托单
  56. s := engine.Table("TRADE_ORDERDETAIL").
  57. Join("INNER", "GOODS", "TRADE_ORDERDETAIL.GOODSID = GOODS.GOODSID").
  58. Join("LEFT", "TAACCOUNT", "TAACCOUNT.ACCOUNTID = TRADE_ORDERDETAIL.ACCOUNTID").
  59. Join("LEFT", "USERACCOUNT", "USERACCOUNT.USERID = TAACCOUNT.RELATEDUSERID").
  60. Select(`GOODS.GOODSID, GOODS.GOODSCODE, GOODS.GOODSNAME,
  61. TRADE_ORDERDETAIL.BUYORSELL, TRADE_ORDERDETAIL.ORDERID, TRADE_ORDERDETAIL.TRADEDATE, TRADE_ORDERDETAIL.ORDERPRICE,
  62. TRADE_ORDERDETAIL.ORDERQTY - TRADE_ORDERDETAIL.TRADEQTY - TRADE_ORDERDETAIL.CANCELQTY as ENABLEQTY,
  63. substr(USERACCOUNT.ACCOUNTNAME,0,1)||'****' as ACCOUNTNAME`).
  64. Where("TRADE_ORDERDETAIL.ORDERSTATUS in (3,7,12) and GOODS.GOODSID = ?", req.GoodsID)
  65. if len(req.AccountName) > 0 {
  66. s = s.And("USERACCOUNT.ACCOUNTNAME = ?", req.AccountName)
  67. }
  68. if req.MarketID > 0 {
  69. s = s.And("TRADE_ORDERDETAIL.MARKETID = ?", req.MarketID)
  70. }
  71. // 判断是否要分页
  72. if req.Size > 0 {
  73. s = s.Limit(req.Size, req.Page*req.Size)
  74. }
  75. d1 := make([]QueryRecieptOrderRsp, 0)
  76. if err := s.Find(&d1); err != nil {
  77. // 查询失败
  78. logger.GetLogger().Errorf("QueryRecieptOrder failed: %s", err.Error())
  79. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  80. return
  81. }
  82. datas = append(datas, d1...)
  83. // 报价商挂牌委托
  84. s = engine.Table("TRADE_QUOTEDETAILNEW").
  85. Join("INNER", "GOODS", "TRADE_QUOTEDETAILNEW.GOODSID = GOODS.GOODSID").
  86. Join("INNER", "QUOTER", "QUOTER.QUOTERID = TRADE_QUOTEDETAILNEW.QUOTERID").
  87. Join("INNER", "AREAROLE", "AREAROLE.USERID = QUOTER.DEFAULTMAKERID and AREAROLE.ROLETYPE = 8").
  88. Select(`GOODS.GOODSID, GOODS.GOODSCODE, GOODS.GOODSNAME,
  89. TRADE_QUOTEDETAILNEW.BUYORSELL, TRADE_QUOTEDETAILNEW.ORDERID, TRADE_QUOTEDETAILNEW.TRADEDATE, TRADE_QUOTEDETAILNEW.PRICE as ORDERPRICE,
  90. TRADE_QUOTEDETAILNEW.CURQTY as ENABLEQTY,
  91. substr(QUOTER.QUOTERNAME,0,1)||'****' as ACCOUNTNAME`).
  92. Where("(TRADE_QUOTEDETAILNEW.CURQTY > 0 or TRADE_QUOTEDETAILNEW.PRICE > 0) and TRADE_QUOTEDETAILNEW.ISVALID != 1 and TRADE_QUOTEDETAILNEW.FREEZESTATUS != 3")
  93. d2 := make([]QueryRecieptOrderRsp, 0)
  94. if err := s.Find(&d2); err != nil {
  95. // 查询失败
  96. logger.GetLogger().Errorf("QueryRecieptOrder failed: %s", err.Error())
  97. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  98. return
  99. }
  100. datas = append(datas, d2...)
  101. // FIXME: - 排序 & 分页
  102. // 查询成功返回
  103. logger.GetLogger().Infof("QueryRecieptOrder successed: %v", datas)
  104. appG.Response(http.StatusOK, e.SUCCESS, datas)
  105. }
  106. // QueryGoodsPickupReq 商品提货单查询请求参数
  107. type QueryGoodsPickupReq struct {
  108. AccountID string `form:"accountID" binding:"required"`
  109. TakeOrderStatus int `form:"takeOrderStatus"`
  110. }
  111. // QueryGoodsPickupRsp 商品提货单查询返回模型
  112. type QueryGoodsPickupRsp struct {
  113. models.Szdz3goodspickup `xorm:"extends"`
  114. Goodscode string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  115. Goodsname string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  116. }
  117. // QueryGoodsPickup 商品提货单查询
  118. // @Summary 商品提货单查询
  119. // @Produce json
  120. // @Security ApiKeyAuth
  121. // @Param accountID query string true "资金账户 - 格式:1,2,3"
  122. // @Param takeOrderStatus query int false "提货状态 - 1:待发货 2:已发货 3:已收货"
  123. // @Success 200 {object} QueryGoodsPickupRsp
  124. // @Failure 500 {object} app.Response
  125. // @Router /SZDZ/QueryGoodsPickup [get]
  126. // @Tags 定制【尚志大宗】
  127. func QueryGoodsPickup(c *gin.Context) {
  128. appG := app.Gin{C: c}
  129. // 获取请求参数
  130. var req QueryGoodsPickupReq
  131. if err := appG.C.ShouldBindQuery(&req); err != nil {
  132. logger.GetLogger().Errorf("QueryGoodsPickup failed: %s", err.Error())
  133. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  134. return
  135. }
  136. datas := make([]QueryGoodsPickupRsp, 0)
  137. engine := db.GetEngine()
  138. s := engine.Join("INNER", "GOODS", "GOODS.GOODSID = SZDZ3_GOODSPICKUP.GOODSID").
  139. Select("SZDZ3_GOODSPICKUP.*, GOODS.GOODSCODE, GOODS.GOODSNAME").
  140. Where(fmt.Sprintf(`SZDZ3_GOODSPICKUP.ACCOUNTID in (%s)`, req.AccountID)).
  141. Desc("SZDZ3_GOODSPICKUP.TAKEORDERID")
  142. if req.TakeOrderStatus > 0 {
  143. s = s.And("SZDZ3_GOODSPICKUP.TAKEORDERSTATUS = ?", req.TakeOrderStatus)
  144. }
  145. if err := s.Find(&datas); err != nil {
  146. // 查询失败
  147. logger.GetLogger().Errorf("QueryGoodsPickup failed: %s", err.Error())
  148. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  149. return
  150. }
  151. // 查询成功返回
  152. logger.GetLogger().Infof("QueryGoodsPickup successed: %v", datas)
  153. appG.Response(http.StatusOK, e.SUCCESS, datas)
  154. }
  155. // QueryConvertLogReq 交易系统转换流水查询请求参数
  156. type QueryConvertLogReq struct {
  157. AccountID string `form:"accountID" binding:"required"`
  158. StartDate string `form:"startDate"`
  159. EndDate string `form:"endDate"`
  160. }
  161. // QueryConvertLogRsp 交易系统转换流水查询返回模型
  162. type QueryConvertLogRsp struct {
  163. models.Szdz3convertlog `xorm:"extends"`
  164. Goodscode string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  165. Goodsname string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  166. QTY string `json:"qty"` // 数量
  167. }
  168. // QueryConvertLog 交易系统转换流水查询
  169. // @Summary 交易系统转换流水查询
  170. // @Produce json
  171. // @Security ApiKeyAuth
  172. // @Param accountID query string true "资金账户 - 格式:1,2,3"
  173. // @Param startDate query string false "开始时间 - 闭区间,格式:yyyy-MM-dd HH:mm:ss"
  174. // @Param endDate query string false "结束时间 - 闭区间,格式:yyyy-MM-dd HH:mm:ss"
  175. // @Success 200 {object} QueryConvertLogRsp
  176. // @Failure 500 {object} app.Response
  177. // @Router /SZDZ/QueryConvertLog [get]
  178. // @Tags 定制【尚志大宗】
  179. func QueryConvertLog(c *gin.Context) {
  180. appG := app.Gin{C: c}
  181. // 获取请求参数
  182. var req QueryConvertLogReq
  183. if err := appG.C.ShouldBindQuery(&req); err != nil {
  184. logger.GetLogger().Errorf("QueryConvertLog failed: %s", err.Error())
  185. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  186. return
  187. }
  188. datas := make([]QueryConvertLogRsp, 0)
  189. engine := db.GetEngine()
  190. s := engine.Join("INNER", "GOODS", "GOODS.GOODSID = SZDZ3_CONVERTLOG.INNERGOODSID").
  191. Select("SZDZ3_CONVERTLOG.*, GOODS.GOODSCODE, GOODS.GOODSNAME").
  192. Where(fmt.Sprintf(`SZDZ3_CONVERTLOG.HandleStatus = 1 and SZDZ3_CONVERTLOG.ACCOUNTID in (%s)`, req.AccountID)).
  193. Desc("SZDZ3_CONVERTLOG.LOGID")
  194. if len(req.StartDate) > 0 {
  195. s = s.And(fmt.Sprintf(`SZDZ3_CONVERTLOG.CREATETIME >= to_date('%s','yyyy-MM-dd hh24:mi:ss')`, req.StartDate))
  196. }
  197. if len(req.EndDate) > 0 {
  198. s = s.And(fmt.Sprintf(`SZDZ3_CONVERTLOG.CREATETIME <= to_date('%s','yyyy-MM-dd hh24:mi:ss')`, req.EndDate))
  199. }
  200. if err := s.Find(&datas); err != nil {
  201. // 查询失败
  202. logger.GetLogger().Errorf("QueryConvertLog failed: %s", err.Error())
  203. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  204. return
  205. }
  206. // 计算数量
  207. for i, v := range datas {
  208. queryConvertLog := &datas[i]
  209. // 方向
  210. direction := "-"
  211. // 数量
  212. qty := v.Outvalue
  213. if v.Converttype == 1 || v.Converttype == 2 {
  214. direction = "+"
  215. qty = v.Invalue
  216. }
  217. queryConvertLog.QTY = fmt.Sprintf("%s%v", direction, qty)
  218. }
  219. // 查询成功返回
  220. logger.GetLogger().Infof("QueryConvertLog successed: %v", datas)
  221. appG.Response(http.StatusOK, e.SUCCESS, datas)
  222. }
  223. // SearchWhiteReq 搜索白名单请求参数
  224. type SearchWhiteReq struct {
  225. UserID int `form:"userID" binding:"required"`
  226. }
  227. // SearchWhite 搜索白名单
  228. // @Summary 搜索白名单
  229. // @Produce json
  230. // @Security ApiKeyAuth
  231. // @Param userID query int true "用户ID"
  232. // @Success 200 {object} models.Szdz3searchwhitelist
  233. // @Failure 500 {object} app.Response
  234. // @Router /SZDZ/SearchWhite [get]
  235. // @Tags 定制【尚志大宗】
  236. func SearchWhite(c *gin.Context) {
  237. appG := app.Gin{C: c}
  238. // 获取请求参数
  239. var req SearchWhiteReq
  240. if err := appG.C.ShouldBindQuery(&req); err != nil {
  241. logger.GetLogger().Errorf("SearchWhite failed: %s", err.Error())
  242. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  243. return
  244. }
  245. datas := make([]models.Szdz3searchwhitelist, 0)
  246. engine := db.GetEngine()
  247. if err := engine.Where("USERID = ?", req.UserID).Find(&datas); err != nil {
  248. // 查询失败
  249. logger.GetLogger().Errorf("SearchWhite failed: %s", err.Error())
  250. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  251. return
  252. }
  253. // 查询成功返回
  254. logger.GetLogger().Infof("SearchWhite successed: %v", datas)
  255. appG.Response(http.StatusOK, e.SUCCESS, datas)
  256. }