trade_analysis.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. package trade_analysis
  2. import (
  3. "eta/eta_api/controllers"
  4. "eta/eta_api/models"
  5. tradeAnalysisModel "eta/eta_api/models/data_manage/trade_analysis"
  6. "eta/eta_api/services/data/trade_analysis"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "strings"
  10. )
  11. // TradeAnalysisController 供应分析
  12. type TradeAnalysisController struct {
  13. controllers.BaseAuthController
  14. }
  15. // GetClassifyName
  16. // @Title 获取交易所合约列表
  17. // @Description 获取交易所合约列表
  18. // @Param request body saModel.SaCompareSaveReq true "type json string"
  19. // @Success 200 {object} trade_analysis.TradeClassifyNameListSort
  20. // @router /classify [get]
  21. func (c *TradeAnalysisController) GetClassifyName() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. if br.ErrMsg == "" {
  25. br.IsSendEmail = false
  26. }
  27. c.Data["json"] = br
  28. c.ServeJSON()
  29. }()
  30. //userinfo := userService.GetInfoByClaims(c)
  31. list, err, errMsg := trade_analysis.GetClassifyName(c.Lang)
  32. if err != nil {
  33. br.Msg = errMsg
  34. br.ErrMsg = "获取失败, ErrMsg: " + err.Error()
  35. return
  36. }
  37. br.Data = list
  38. br.Ret = 200
  39. br.Success = true
  40. br.Msg = "获取成功"
  41. }
  42. // GetPositionTop
  43. // @Title 获取合约榜单详情
  44. // @Description 获取合约榜单详情
  45. // @Param Exchange query string false "交易所"
  46. // @Param ClassifyName query string false "分类名称"
  47. // @Param ClassifyType query string false "具体合约名称"
  48. // @Param DataTime query string false "请求日期,如果为空,则返回最新的榜单日期"
  49. // @Success 200 {object} trade_analysis.GetPositionTopResp
  50. // @Success 200 Ret=200 操作成功
  51. // @router /top [get]
  52. func (c *TradeAnalysisController) GetPositionTop() {
  53. br := new(models.BaseResponse).Init()
  54. defer func() {
  55. if br.ErrMsg == "" {
  56. br.IsSendEmail = false
  57. }
  58. c.Data["json"] = br
  59. c.ServeJSON()
  60. }()
  61. req := tradeAnalysisModel.GetPositionTopReq{
  62. Exchange: c.GetString("Exchange"),
  63. ClassifyName: c.GetString("ClassifyName"),
  64. ClassifyType: c.GetString("ClassifyType"),
  65. DataTime: c.GetString("DataTime"),
  66. }
  67. if req.ClassifyName == "" {
  68. br.Msg = "请输入分类名称"
  69. br.IsSendEmail = false
  70. return
  71. }
  72. if req.ClassifyType == "" {
  73. br.Msg = "请输入合约名称"
  74. br.IsSendEmail = false
  75. return
  76. }
  77. list, err, errMsg := trade_analysis.GetPositionTopDetail(req)
  78. if err != nil {
  79. br.Msg = errMsg
  80. br.ErrMsg = err.Error()
  81. return
  82. }
  83. br.Data = list
  84. br.Ret = 200
  85. br.Success = true
  86. return
  87. }
  88. // GetTradeExchangeList
  89. // @Title 获取交易所列表
  90. // @Description 获取交易所列表
  91. // @Param IsTotal query bool false "是否显示全部"
  92. // @Success 200 {object} data_manage.BaseFromTradeExchangeItem
  93. // @router /exchange_list [get]
  94. func (this *TradeAnalysisController) GetTradeExchangeList() {
  95. br := new(models.BaseResponse).Init()
  96. defer func() {
  97. if br.ErrMsg == "" {
  98. br.IsSendEmail = false
  99. }
  100. this.Data["json"] = br
  101. this.ServeJSON()
  102. }()
  103. sysUser := this.SysUser
  104. if sysUser == nil {
  105. br.Msg = "请登录"
  106. br.ErrMsg = "请登录,SysUser Is Empty"
  107. br.Ret = 408
  108. return
  109. }
  110. isTotal, _ := this.GetBool("IsTotal", false)
  111. var cond string
  112. var pars []interface{}
  113. exchangeOb := new(tradeAnalysisModel.BaseFromTradeExchange)
  114. if !isTotal {
  115. cond += fmt.Sprintf(` AND %s = ?`, exchangeOb.Cols().AnalysisState)
  116. pars = append(pars, 1)
  117. }
  118. list, e := exchangeOb.GetItemsByCondition(cond, pars, []string{}, "")
  119. if e != nil {
  120. br.Msg = "获取失败"
  121. br.ErrMsg = fmt.Sprintf("获取交易所列表失败, %v", e)
  122. return
  123. }
  124. resp := make([]*tradeAnalysisModel.BaseFromTradeExchangeItem, 0)
  125. for _, v := range list {
  126. resp = append(resp, v.Format2Item())
  127. }
  128. br.Data = resp
  129. br.Msg = "获取成功"
  130. br.Ret = 200
  131. br.Success = true
  132. }
  133. // GetTradeClassifyList
  134. // @Title 获取品种列表
  135. // @Description 获取品种列表
  136. // @Param Exchange query string false "交易所标识"
  137. // @Param ClassifyName query string false "品种名称"
  138. // @Success 200 {object} tradeAnalysisModel.BaseFromTradeClassifyItem
  139. // @router /classify_list [get]
  140. func (this *TradeAnalysisController) GetTradeClassifyList() {
  141. br := new(models.BaseResponse).Init()
  142. defer func() {
  143. if br.ErrMsg == "" {
  144. br.IsSendEmail = false
  145. }
  146. this.Data["json"] = br
  147. this.ServeJSON()
  148. }()
  149. sysUser := this.SysUser
  150. if sysUser == nil {
  151. br.Msg = "请登录"
  152. br.ErrMsg = "请登录,SysUser Is Empty"
  153. br.Ret = 408
  154. return
  155. }
  156. exchange := this.GetString("Exchange")
  157. exchange = strings.TrimSpace(exchange)
  158. classifyName := this.GetString("ClassifyName")
  159. classifyName = strings.TrimSpace(classifyName)
  160. // 交易所名称
  161. exchangeName := make(map[string]string)
  162. {
  163. var cond string
  164. var pars []interface{}
  165. exchangeOb := new(tradeAnalysisModel.BaseFromTradeExchange)
  166. if exchange != "" {
  167. cond += fmt.Sprintf(` AND %s = ?`, exchangeOb.Cols().Exchange)
  168. pars = append(pars, exchange)
  169. item, e := exchangeOb.GetItemByCondition(cond, pars, "")
  170. if e != nil {
  171. br.Msg = "获取失败"
  172. br.ErrMsg = fmt.Sprintf("获取交易所信息失败, %v", e)
  173. return
  174. }
  175. exchangeName[item.Exchange] = item.ExchangeName
  176. } else {
  177. list, e := exchangeOb.GetItemsByCondition(cond, pars, []string{}, "")
  178. if e != nil {
  179. br.Msg = "获取失败"
  180. br.ErrMsg = fmt.Sprintf("获取交易所列表失败, %v", e)
  181. return
  182. }
  183. for _, v := range list {
  184. exchangeName[v.Exchange] = v.ExchangeName
  185. }
  186. }
  187. }
  188. // TODO:郑商所的单独处理
  189. // 搜索品种
  190. var cond string
  191. var pars []interface{}
  192. classifyOb := new(tradeAnalysisModel.BaseFromTradeClassify)
  193. if exchange != "" {
  194. cond += fmt.Sprintf(` AND %s = ?`, classifyOb.Cols().Exchange)
  195. pars = append(pars, exchange)
  196. }
  197. if classifyName != "" {
  198. cond += fmt.Sprintf(` AND %s LIKE ?`, classifyOb.Cols().ClassifyName)
  199. pars = append(pars, fmt.Sprint("%", classifyName, "%"))
  200. }
  201. fields := []string{classifyOb.Cols().ClassifyName, classifyOb.Cols().Exchange}
  202. list, e := classifyOb.GetClassifyItemsByCondition(cond, pars, fields, "")
  203. if e != nil {
  204. br.Msg = "获取失败"
  205. br.ErrMsg = fmt.Sprintf("获取品种列表失败, %v", e)
  206. return
  207. }
  208. resp := make([]*tradeAnalysisModel.BaseFromTradeClassifyItem, 0)
  209. for _, v := range list {
  210. resp = append(resp, &tradeAnalysisModel.BaseFromTradeClassifyItem{
  211. ClassifyName: v.ClassifyName,
  212. Exchange: v.Exchange,
  213. ExchangeName: exchangeName[v.Exchange],
  214. })
  215. }
  216. br.Data = resp
  217. br.Msg = "获取成功"
  218. br.Ret = 200
  219. br.Success = true
  220. }
  221. // GetTradeContractList
  222. // @Title 获取合约列表
  223. // @Description 获取合约列表
  224. // @Param Exchange query string false "交易所标识"
  225. // @Param ClassifyName query string false "品种名称"
  226. // @Param ContractName query string false "合约名称"
  227. // @Param ExceptTop query bool false "排除TOP20: true-不包含; false-包含(默认)"
  228. // @Success 200 {object} tradeAnalysisModel.BaseFromTradeContractItem
  229. // @router /contract_list [get]
  230. func (this *TradeAnalysisController) GetTradeContractList() {
  231. br := new(models.BaseResponse).Init()
  232. defer func() {
  233. if br.ErrMsg == "" {
  234. br.IsSendEmail = false
  235. }
  236. this.Data["json"] = br
  237. this.ServeJSON()
  238. }()
  239. sysUser := this.SysUser
  240. if sysUser == nil {
  241. br.Msg = "请登录"
  242. br.ErrMsg = "请登录,SysUser Is Empty"
  243. br.Ret = 408
  244. return
  245. }
  246. exchange := this.GetString("Exchange")
  247. exchange = strings.TrimSpace(exchange)
  248. classifyName := this.GetString("ClassifyName")
  249. classifyName = strings.TrimSpace(classifyName)
  250. contractName := this.GetString("ContractName")
  251. contractName = strings.TrimSpace(contractName)
  252. exceptTop, _ := this.GetBool("ExceptTop")
  253. // 交易所名称
  254. exchangeName := make(map[string]string)
  255. {
  256. var cond string
  257. var pars []interface{}
  258. exchangeOb := new(tradeAnalysisModel.BaseFromTradeExchange)
  259. if exchange != "" {
  260. cond += fmt.Sprintf(` AND %s = ?`, exchangeOb.Cols().Exchange)
  261. pars = append(pars, exchange)
  262. item, e := exchangeOb.GetItemByCondition(cond, pars, "")
  263. if e != nil {
  264. br.Msg = "获取失败"
  265. br.ErrMsg = fmt.Sprintf("获取交易所信息失败, %v", e)
  266. return
  267. }
  268. exchangeName[item.Exchange] = item.ExchangeName
  269. } else {
  270. list, e := exchangeOb.GetItemsByCondition(cond, pars, []string{}, "")
  271. if e != nil {
  272. br.Msg = "获取失败"
  273. br.ErrMsg = fmt.Sprintf("获取交易所列表失败, %v", e)
  274. return
  275. }
  276. for _, v := range list {
  277. exchangeName[v.Exchange] = v.ExchangeName
  278. }
  279. }
  280. }
  281. // TODO:郑商所的单独处理
  282. // 搜索合约
  283. var cond string
  284. var pars []interface{}
  285. classifyOb := new(tradeAnalysisModel.BaseFromTradeClassify)
  286. if exchange != "" {
  287. cond += fmt.Sprintf(` AND %s = ?`, classifyOb.Cols().Exchange)
  288. pars = append(pars, exchange)
  289. }
  290. if classifyName != "" {
  291. cond += fmt.Sprintf(` AND %s = ?`, classifyOb.Cols().ClassifyName)
  292. pars = append(pars, classifyName)
  293. }
  294. if contractName != "" {
  295. cond += fmt.Sprintf(` AND %s LIKE ?`, classifyOb.Cols().ClassifyType)
  296. pars = append(pars, fmt.Sprint("%", contractName, "%"))
  297. }
  298. list, e := classifyOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC, %s DESC", classifyOb.Cols().Exchange, classifyOb.Cols().LatestDate))
  299. if e != nil {
  300. br.Msg = "获取失败"
  301. br.ErrMsg = fmt.Sprintf("获取合约列表失败, %v", e)
  302. return
  303. }
  304. resp := make([]*tradeAnalysisModel.BaseFromTradeContractItem, 0)
  305. if !exceptTop && contractName == "" {
  306. resp = append(resp, &tradeAnalysisModel.BaseFromTradeContractItem{
  307. ClassifyType: tradeAnalysisModel.TradeFuturesCompanyTop20,
  308. })
  309. }
  310. for _, v := range list {
  311. resp = append(resp, &tradeAnalysisModel.BaseFromTradeContractItem{
  312. ClassifyName: v.ClassifyName,
  313. ClassifyType: v.ClassifyType,
  314. Exchange: v.Exchange,
  315. ExchangeName: exchangeName[v.Exchange],
  316. LatestDate: v.LatestDate.Format(utils.FormatDate),
  317. CreateTime: v.CreateTime.Format(utils.FormatDateTime),
  318. })
  319. }
  320. br.Data = resp
  321. br.Msg = "获取成功"
  322. br.Ret = 200
  323. br.Success = true
  324. }
  325. // GetTradeFuturesCompanyList
  326. // @Title 获取期货公司列表
  327. // @Description 获取期货公司列表
  328. // @Param CompanyName query string false "公司名称"
  329. // @Success 200 {object} tradeAnalysisModel.BaseFromTradeContractItem
  330. // @router /company_list [get]
  331. func (this *TradeAnalysisController) GetTradeFuturesCompanyList() {
  332. br := new(models.BaseResponse).Init()
  333. defer func() {
  334. if br.ErrMsg == "" {
  335. br.IsSendEmail = false
  336. }
  337. this.Data["json"] = br
  338. this.ServeJSON()
  339. }()
  340. sysUser := this.SysUser
  341. if sysUser == nil {
  342. br.Msg = "请登录"
  343. br.ErrMsg = "请登录,SysUser Is Empty"
  344. br.Ret = 408
  345. return
  346. }
  347. companyName := this.GetString("CompanyName")
  348. companyName = strings.TrimSpace(companyName)
  349. var cond string
  350. var pars []interface{}
  351. companyOb := new(tradeAnalysisModel.TradeFuturesCompany)
  352. if companyName != "" {
  353. cond += fmt.Sprintf(` AND %s LIKE ?`, companyOb.Cols().CompanyName)
  354. pars = append(pars, fmt.Sprint("%", companyName, "%"))
  355. }
  356. list, e := companyOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC", companyOb.Cols().Sort))
  357. if e != nil {
  358. br.Msg = "获取失败"
  359. br.ErrMsg = fmt.Sprintf("获取期货公司列表失败, %v", e)
  360. return
  361. }
  362. resp := make([]*tradeAnalysisModel.TradeFuturesCompanyItem, 0)
  363. for _, v := range list {
  364. resp = append(resp, &tradeAnalysisModel.TradeFuturesCompanyItem{
  365. CompanyId: v.TradeFuturesCompanyId,
  366. CompanyName: v.CompanyName,
  367. Sort: v.Sort,
  368. })
  369. }
  370. br.Data = resp
  371. br.Msg = "获取成功"
  372. br.Ret = 200
  373. br.Success = true
  374. }