zhongrong.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. package models
  2. import (
  3. "encoding/hex"
  4. "fmt"
  5. "mtp2_if/db"
  6. "mtp2_if/utils"
  7. "time"
  8. )
  9. // Tradepositiontransfer 持仓过户申请表 - 16所有权(中融需求)
  10. type InTradepositiontransfer struct {
  11. APPLYID string `json:"applyid" xorm:"APPLYID"` // 申请ID(185+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  12. OUTUSERID int64 `json:"outuserid" xorm:"OUTUSERID"` // 转出方用户ID(申请方)
  13. OUTLOGINID int64 `json:"outloginid" xorm:"OUTLOGINID"` // 转出方登录账号
  14. OUTACCOUNTID int64 `json:"outaccountid" xorm:"OUTACCOUNTID"` // 转出方资金ID(申请方)
  15. INUSERID int64 `json:"inuserid" xorm:"INUSERID" form:"userid" binding:"required"` // 转入方用户ID(确认方)
  16. INACCOUNTID int64 `json:"inaccountid" xorm:"INACCOUNTID"` // 转入方资金ID(确认方)
  17. INLOGINID int64 `json:"inloginid" xorm:"INLOGINID"` // 转入方登录账号
  18. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  19. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  20. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 买卖 - 0:买 1:卖
  21. QTY int64 `json:"qty" xorm:"QTY"` // 转让数量
  22. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  23. TRANSFERAPPLYSTATUS int32 `json:"transferapplystatus" xorm:"TRANSFERAPPLYSTATUS"` // 过户申请状态 - 1: 待审核 2:待确认 3:确认处理中 4:已确认 5:申请失败 6:系统撤销 7:审核拒绝- 枚举"transferapplystatus"
  24. FREEZEDAYS int64 `json:"freezedays" xorm:"FREEZEDAYS"` // 冻结天数(T+N)
  25. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  26. RETREMARK string `json:"retremark" xorm:"RETREMARK"` // 返回信息
  27. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 错误代码
  28. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日
  29. APPLICANTID int64 `json:"applicantid" xorm:"APPLICANTID"` // 申请人ID
  30. APPLYTIME string `json:"applytime" xorm:"APPLYTIME"` // 申请时间
  31. TRANSFERTYPE int32 `json:"transfertype" xorm:"TRANSFERTYPE"` // 转让类型 - 1.协议转让
  32. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让总金额
  33. GOODSCURPRICE float64 `json:"goodscurprice" xorm:"GOODSCURPRICE"` // 商品实时价格
  34. GOODSCURAMOUNT float64 `json:"goodscuramount" xorm:"GOODSCURAMOUNT"` // 商品实时价金额
  35. OPENFEEALGORITHM int32 `json:"openfeealgorithm" xorm:"OPENFEEALGORITHM"` // 建仓手续费收取方式 1:比率 2:固定
  36. OPENMEMBERCHARGEVALUE float64 `json:"openmemberchargevalue" xorm:"OPENMEMBERCHARGEVALUE"` // 建仓会员手续费设置值
  37. OPENEXCHAGECHARGEVALUE float64 `json:"openexchagechargevalue" xorm:"OPENEXCHAGECHARGEVALUE"` // 建仓交易所手续费设置值
  38. CLOSEFEEALGORITHM int32 `json:"closefeealgorithm" xorm:"CLOSEFEEALGORITHM"` // 平仓手续费收取方式(转出方) 1:比率 2:固定
  39. CLOSEMEMBERCHARGEVALUE float64 `json:"closememberchargevalue" xorm:"CLOSEMEMBERCHARGEVALUE"` // 平仓会员手续费设置值(转出方)
  40. CLOSEEXCHAGECHARGEVALUE float64 `json:"closeexchagechargevalue" xorm:"CLOSEEXCHAGECHARGEVALUE"` // 平仓交易所手续费设置值(转出方)
  41. OUTCHARGE float64 `json:"outcharge" xorm:"OUTCHARGE"` // 转出方手续费
  42. INCHARGE float64 `json:"incharge" xorm:"INCHARGE"` // 转入方手续费
  43. CONFIRMDATE time.Time `json:"confirmdate" xorm:"CONFIRMDATE"` // 确认时间
  44. AUDITORID int64 `json:"auditorid" xorm:"AUDITORID"` // 审核人
  45. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  46. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  47. CLIENTTICKET string `json:"clientticket" xorm:"CLIENTTICKET"` // 客户端流水号
  48. GOODSDISPLAY string `json:"goodsdisplay" xorm:"GOODSDISPLAY"` // 商品名称
  49. OUTUSERNAME string `json:"outusername" xorm:"OUTUSERNAME"` // 转出方
  50. APPLYSTATUS string `json:"applystatus" xorm:"APPLYSTATUS"` // 状态
  51. PageEx `xorm:"extends"` // 页码信息
  52. }
  53. func (r *InTradepositiontransfer) calc() {
  54. }
  55. func (r *InTradepositiontransfer) buildSql() string {
  56. var sqlId utils.SQLVal = `
  57. select
  58. g.goodscode || '/' || g.goodsname as GOODSDISPLAY,
  59. vlogin.LOGINIDS || '/' || ui.customername as OUTUSERNAME,
  60. en.enumdicname as APPLYSTATUS,
  61. to_char(t.applyid) APPLYID,
  62. to_char(t.applytime, 'yyyy-mm-dd hh24:mi:ss') APPLYTIME,
  63. t.OUTUSERID ,
  64. t.OUTLOGINID ,
  65. t.OUTACCOUNTID ,
  66. t.INUSERID ,
  67. t.INACCOUNTID ,
  68. t.INLOGINID ,
  69. t.GOODSID ,
  70. t.MARKETID ,
  71. t.BUYORSELL ,
  72. t.QTY ,
  73. t.TRANSFERPRICE ,
  74. t.TRANSFERAPPLYSTATUS ,
  75. t.FREEZEDAYS ,
  76. t.APPLYREMARK ,
  77. t.RETREMARK ,
  78. t.RETCODE ,
  79. t.TRADEDATE ,
  80. t.APPLICANTID ,
  81. t.TRANSFERTYPE ,
  82. t.TRANSFERAMOUNT ,
  83. t.GOODSCURPRICE ,
  84. t.GOODSCURAMOUNT ,
  85. t.OPENFEEALGORITHM ,
  86. t.OPENMEMBERCHARGEVALUE ,
  87. t.OPENEXCHAGECHARGEVALUE ,
  88. t.CLOSEFEEALGORITHM ,
  89. t.CLOSEMEMBERCHARGEVALUE ,
  90. t.CLOSEEXCHAGECHARGEVALUE,
  91. t.OUTCHARGE ,
  92. t.INCHARGE ,
  93. t.CONFIRMDATE ,
  94. t.AUDITORID ,
  95. t.AUDITTIME ,
  96. t.AUDITREMARK ,
  97. t.CLIENTTICKET
  98. from Trade_PositionTransfer t
  99. left join goods g
  100. on t.goodsid = g.goodsid
  101. left join userinfo ui
  102. on t.outuserid = ui.userid
  103. left join VIEW_USER_LOGINIDS vlogin
  104. on t.outuserid = vlogin.USERID
  105. left join enumdicitem en
  106. on en.enumdiccode = 'transferapplystatus'
  107. and en.enumitemname = t.transferapplystatus
  108. where t.inuserid = %v
  109. and t.transferapplystatus not in (1, 5)
  110. order by t.applytime desc
  111. `
  112. sqlId.FormatParam(r.INUSERID)
  113. sqlId.Page(r.Page, r.PageSize)
  114. return sqlId.String()
  115. }
  116. func (r *InTradepositiontransfer) GetDataByPage() (interface{}, error, int, int, int) {
  117. sData := make([]InTradepositiontransfer, 0)
  118. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  119. total := 0
  120. for i := range sData {
  121. sData[i].calc()
  122. total = sData[i].Total
  123. }
  124. return sData, err, r.Page, r.PageSize, total
  125. }
  126. // OutTradepositiontransfer 持仓过户申请表 - 16所有权(中融需求)
  127. type OutTradepositiontransfer struct {
  128. APPLYID string `json:"applyid" xorm:"APPLYID"` // 申请ID(185+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  129. OUTUSERID int64 `json:"outuserid" xorm:"OUTUSERID" form:"userid" binding:"required"` // 转出方用户ID(申请方)
  130. OUTLOGINID int64 `json:"outloginid" xorm:"OUTLOGINID"` // 转出方登录账号
  131. OUTACCOUNTID int64 `json:"outaccountid" xorm:"OUTACCOUNTID"` // 转出方资金ID(申请方)
  132. INUSERID int64 `json:"inuserid" xorm:"INUSERID"` // 转入方用户ID(确认方)
  133. INACCOUNTID int64 `json:"inaccountid" xorm:"INACCOUNTID"` // 转入方资金ID(确认方)
  134. INLOGINID int64 `json:"inloginid" xorm:"INLOGINID"` // 转入方登录账号
  135. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  136. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  137. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 买卖 - 0:买 1:卖
  138. QTY int64 `json:"qty" xorm:"QTY"` // 转让数量
  139. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  140. TRANSFERAPPLYSTATUS int32 `json:"transferapplystatus" xorm:"TRANSFERAPPLYSTATUS"` // 过户申请状态 - 1: 待审核 2:待确认 3:确认处理中 4:已确认 5:申请失败 6:系统撤销 7:审核拒绝- 枚举"transferapplystatus"
  141. FREEZEDAYS int64 `json:"freezedays" xorm:"FREEZEDAYS"` // 冻结天数(T+N)
  142. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  143. RETREMARK string `json:"retremark" xorm:"RETREMARK"` // 返回信息
  144. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 错误代码
  145. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日
  146. APPLICANTID int64 `json:"applicantid" xorm:"APPLICANTID"` // 申请人ID
  147. APPLYTIME string `json:"applytime" xorm:"APPLYTIME"` // 申请时间
  148. TRANSFERTYPE int32 `json:"transfertype" xorm:"TRANSFERTYPE"` // 转让类型 - 1.协议转让
  149. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让总金额
  150. GOODSCURPRICE float64 `json:"goodscurprice" xorm:"GOODSCURPRICE"` // 商品实时价格
  151. GOODSCURAMOUNT float64 `json:"goodscuramount" xorm:"GOODSCURAMOUNT"` // 商品实时价金额
  152. OPENFEEALGORITHM int32 `json:"openfeealgorithm" xorm:"OPENFEEALGORITHM"` // 建仓手续费收取方式 1:比率 2:固定
  153. OPENMEMBERCHARGEVALUE float64 `json:"openmemberchargevalue" xorm:"OPENMEMBERCHARGEVALUE"` // 建仓会员手续费设置值
  154. OPENEXCHAGECHARGEVALUE float64 `json:"openexchagechargevalue" xorm:"OPENEXCHAGECHARGEVALUE"` // 建仓交易所手续费设置值
  155. CLOSEFEEALGORITHM int32 `json:"closefeealgorithm" xorm:"CLOSEFEEALGORITHM"` // 平仓手续费收取方式(转出方) 1:比率 2:固定
  156. CLOSEMEMBERCHARGEVALUE float64 `json:"closememberchargevalue" xorm:"CLOSEMEMBERCHARGEVALUE"` // 平仓会员手续费设置值(转出方)
  157. CLOSEEXCHAGECHARGEVALUE float64 `json:"closeexchagechargevalue" xorm:"CLOSEEXCHAGECHARGEVALUE"` // 平仓交易所手续费设置值(转出方)
  158. OUTCHARGE float64 `json:"outcharge" xorm:"OUTCHARGE"` // 转出方手续费
  159. INCHARGE float64 `json:"incharge" xorm:"INCHARGE"` // 转入方手续费
  160. CONFIRMDATE time.Time `json:"confirmdate" xorm:"CONFIRMDATE"` // 确认时间
  161. AUDITORID int64 `json:"auditorid" xorm:"AUDITORID"` // 审核人
  162. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  163. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  164. CLIENTTICKET string `json:"clientticket" xorm:"CLIENTTICKET"` // 客户端流水号
  165. GOODSDISPLAY string `json:"goodsdisplay" xorm:"GOODSDISPLAY"` // 商品名称
  166. INUSERNAME string `json:"inusername" xorm:"INUSERNAME"` // 转入方
  167. APPLYSTATUS string `json:"applystatus" xorm:"APPLYSTATUS"` // 状态
  168. PageEx `xorm:"extends"` // 页码信息
  169. }
  170. func (r *OutTradepositiontransfer) calc() {
  171. }
  172. func (r *OutTradepositiontransfer) buildSql() string {
  173. var sqlId utils.SQLVal = `
  174. select
  175. g.goodscode || '/' || g.goodsname as GOODSDISPLAY,
  176. vlogin.LOGINIDS || '/' || ui.customername as INUSERNAME,
  177. en.enumdicname as APPLYSTATUS,
  178. to_char(t.applyid) APPLYID,
  179. t.outuserid,
  180. t.outloginid,
  181. t.outaccountid,
  182. t.inuserid,
  183. t.inaccountid,
  184. t.inloginid,
  185. t.goodsid,
  186. t.marketid,
  187. t.buyorsell,
  188. t.qty,
  189. t.transferprice,
  190. t.transferapplystatus,
  191. t.freezedays,
  192. t.applyremark,
  193. t.retremark,
  194. t.retcode,
  195. t.tradedate,
  196. t.applicantid,
  197. to_char(t.applytime,'yyyy-mm-dd hh24:mi:ss') applytime,
  198. t.transfertype,
  199. t.transferamount,
  200. t.goodscurprice,
  201. t.goodscuramount,
  202. t.openfeealgorithm,
  203. t.openmemberchargevalue,
  204. t.openexchagechargevalue,
  205. t.closefeealgorithm,
  206. t.closememberchargevalue,
  207. t.closeexchagechargevalue,
  208. t.outcharge,
  209. t.incharge,
  210. t.confirmdate,
  211. t.auditorid,
  212. t.audittime,
  213. t.auditremark,
  214. t.clientticket
  215. from Trade_PositionTransfer t
  216. left join goods g
  217. on t.goodsid = g.goodsid
  218. left join userinfo ui
  219. on t.inuserid = ui.userid
  220. left join VIEW_USER_LOGINIDS vlogin
  221. on t.inuserid = vlogin.USERID
  222. left join enumdicitem en
  223. on en.enumdiccode = 'transferapplystatus'
  224. and en.enumitemname = t.transferapplystatus
  225. where t.outuserid = %v
  226. order by t.applytime desc
  227. `
  228. sqlId.FormatParam(r.OUTUSERID)
  229. sqlId.Page(r.Page, r.PageSize)
  230. return sqlId.String()
  231. }
  232. func (r *OutTradepositiontransfer) GetDataByPage() (interface{}, error, int, int, int) {
  233. sData := make([]OutTradepositiontransfer, 0)
  234. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  235. total := 0
  236. for i := range sData {
  237. sData[i].calc()
  238. total = sData[i].Total
  239. }
  240. return sData, err, r.Page, r.PageSize, total
  241. }
  242. func GetUserInfoByUserIDorMobile(param string) (userinfo *Userinfo, err error) {
  243. // 先尝试加密手机号码,手机号码需要AES加密
  244. mobile := ""
  245. key, _ := hex.DecodeString(utils.AESSecretKey)
  246. if mobileEncrypted, err := utils.AESEncrypt([]byte(param), key); err == nil {
  247. mobile = hex.EncodeToString(mobileEncrypted)
  248. }
  249. userinfos := make([]Userinfo, 0)
  250. sql := fmt.Sprintf(`
  251. SELECT
  252. t.*
  253. FROM userinfo t
  254. INNER JOIN loginaccount l
  255. ON l.userid = t.userid
  256. WHERE l.loginid = %v
  257. `, param)
  258. if mobile != "" {
  259. sql = fmt.Sprintf("%v OR t.mobile = '%v'", sql, mobile)
  260. }
  261. err = db.GetEngine().SQL(sql).Find(&userinfos)
  262. if len(userinfos) > 0 {
  263. userinfo = &userinfos[0]
  264. }
  265. return
  266. }