szdz.go 12 KB

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