ferroalloy.go 90 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423
  1. package models
  2. import (
  3. "errors"
  4. "fmt"
  5. "mtp2_if/db"
  6. "mtp2_if/logger"
  7. "mtp2_if/utils"
  8. "strconv"
  9. "strings"
  10. "sync"
  11. "time"
  12. )
  13. // 上海铁合金项目
  14. // GErmcpspotgoodsprice 现货市价表
  15. type GErmcpspotgoodsprice struct {
  16. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  17. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(通用则为0)
  18. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID(通用则为0, 不为0则须先有商品ID)
  19. CURRENCYID int64 `json:"currencyid" xorm:"CURRENCYID"` // 报价货币ID
  20. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"SPOTGOODSPRICE"` // 【最新价】当前价格
  21. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 【日期】交易日
  22. OPERATESRC int32 `json:"-" xorm:"OPERATESRC"` // 最后操作来源 - 1:管理端 2:终端
  23. OPERATEID int64 `json:"-" xorm:"OPERATEID"` // 最后操作人
  24. OPERATETIME time.Time `json:"-" xorm:"OPERATETIME"` // 最后操作时间
  25. ISVALID int32 `json:"-" xorm:"ISVALID"` // 是否有效 - 0:无效 1:有效
  26. YSTSPOTGOODSPRICE float64 `json:"ystspotgoodsprice" xorm:"YSTSPOTGOODSPRICE"` // 昨价
  27. TODAYSPOTGOODSPRICE float64 `json:"todayspotgoodsprice" xorm:"TODAYSPOTGOODSPRICE"` // 今日指定价
  28. TODAYPRICEDTOTALQTY float64 `json:"todaypricedtotalqty" xorm:"TODAYPRICEDTOTALQTY"` // 今日定价总量
  29. TODAYPRICEDTOTALAMOUNT float64 `json:"todaypricedtotalamount" xorm:"TODAYPRICEDTOTALAMOUNT"` // 今日定价金额
  30. SRCMARKETNAME string `json:"srcmarketname" xorm:"SRCMARKETNAME"` // 来源市场名称
  31. PRESPOTGOODSPRICE float64 `json:"prespotgoodsprice" xorm:"PRESPOTGOODSPRICE"` // 上日价格
  32. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  33. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 【名称】现货商品名称
  34. CHG float64 `json:"chg" xorm:"CHG"` // 涨跌幅
  35. PageEx `xorm:"extends"` // 页码信息
  36. }
  37. func (r *GErmcpspotgoodsprice) calc() {
  38. if len(r.TRADEDATE) == 8 {
  39. r.TRADEDATE = fmt.Sprintf("%v-%v-%v", r.TRADEDATE[0:4], r.TRADEDATE[4:6], r.TRADEDATE[6:8])
  40. }
  41. }
  42. func (r *GErmcpspotgoodsprice) buildSql() string {
  43. var sqlId utils.SQLVal = `
  44. SELECT
  45. t.DELIVERYGOODSID ,
  46. t.WRSTANDARDID ,
  47. t.SPOTGOODSBRANDID ,
  48. t.CURRENCYID ,
  49. t.SPOTGOODSPRICE ,
  50. t.TRADEDATE ,
  51. t.YSTSPOTGOODSPRICE ,
  52. t.TODAYSPOTGOODSPRICE ,
  53. t.TODAYPRICEDTOTALQTY ,
  54. t.TODAYPRICEDTOTALAMOUNT,
  55. t.SRCMARKETNAME,
  56. t.PRESPOTGOODSPRICE,
  57. ROUND(((t.SPOTGOODSPRICE - t.PRESPOTGOODSPRICE) / t.PRESPOTGOODSPRICE), 4) CHG,
  58. w.WRSTANDARDCODE,
  59. w.WRSTANDARDNAME
  60. FROM ERMCP_SPOTGOODSPRICE t
  61. LEFT JOIN WRStandard w ON t.WRSTANDARDID = w.WRSTANDARDID
  62. WHERE t.SPOTGOODSBRANDID = 0 AND t.CURRENCYID = 1 AND t.ISVALID = 1
  63. `
  64. sqlId.OrderByDesc("w.WRSTANDARDNAME")
  65. sqlId.Page(r.Page, r.PageSize)
  66. return sqlId.String()
  67. }
  68. func (r *GErmcpspotgoodsprice) GetDataByPage() (interface{}, error, int, int, int) {
  69. sData := make([]GErmcpspotgoodsprice, 0)
  70. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  71. total := 0
  72. for i := range sData {
  73. sData[i].calc()
  74. total = sData[i].Total
  75. }
  76. return sData, err, r.Page, r.PageSize, total
  77. }
  78. type THJSigninReq struct {
  79. USERID int64 `form:"userid" binding:"required"` // 用户ID
  80. }
  81. type THJSigninRsp struct {
  82. SigninStatus int `json:"signinstatus"` // 状态操作标志 1-签到成功 2-当日已签到,不能重复签到
  83. }
  84. // Signin 用户签到
  85. func (r *THJSigninReq) Signin() (rsp *THJSigninRsp, err error) {
  86. // 资源锁
  87. var lock sync.Mutex
  88. lock.Lock()
  89. defer lock.Unlock()
  90. engine := db.GetEngine()
  91. // 获取目标用户信息
  92. if u, err := GetUserInfo(int(r.USERID)); err != nil || u == nil {
  93. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  94. err = errors.New("错误的用户ID")
  95. return nil, err
  96. }
  97. // 判断目标用户当日是否已经签到
  98. p := new(Thjsignin)
  99. if has, err := engine.Where("userid = ?", r.USERID).And("tradedate = to_char(sysdate, 'yyyymmdd')").Get(p); err != nil {
  100. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  101. err = errors.New("数据错误")
  102. return nil, err
  103. } else {
  104. if has {
  105. return &THJSigninRsp{SigninStatus: 2}, nil
  106. }
  107. }
  108. // 获取签到积配置
  109. c := Thjscoreconfig{
  110. SCORECONFIGTYPE: 2,
  111. }
  112. if has, err := engine.Get(&c); err != nil || !has {
  113. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  114. err = errors.New("数据错误")
  115. return nil, err
  116. }
  117. // 事务
  118. session := engine.NewSession()
  119. defer session.Close()
  120. // add Begin() before any action
  121. if err := session.Begin(); err != nil {
  122. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  123. return nil, errors.New("数据错误")
  124. }
  125. now := time.Now()
  126. // 签到积分配置大于0才记积分和流水
  127. if c.PARMA1 > 0 {
  128. // 判断用户积分表是否已经存在此用户
  129. curscore := 0
  130. t := Thjuserscore{USERID: r.USERID}
  131. has, err := session.Get(&t)
  132. if err != nil {
  133. session.Rollback()
  134. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  135. return nil, errors.New("数据错误")
  136. }
  137. if has {
  138. // 更新积分
  139. curscore = int(t.CURSCORE)
  140. t.CURSCORE += int64(c.PARMA1)
  141. t.UPDATETIME = now
  142. // _, err = session.Update(&t)
  143. sql := fmt.Sprintf(`UPDATE THJ_USERSCORE
  144. SET CURSCORE = %v, UPDATETIME = to_date('%v', 'yyyy-mm-dd hh24:mi:ss')
  145. WHERE USERID = %v`,
  146. t.CURSCORE, t.UPDATETIME.Format("2006-01-02 15:04:05"), t.USERID)
  147. _, err = session.Exec(sql)
  148. if err != nil {
  149. session.Rollback()
  150. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  151. return nil, errors.New("数据错误")
  152. }
  153. } else {
  154. // 新增用户积分记录
  155. t.CURSCORE = int64(c.PARMA1)
  156. t.UPDATETIME = now
  157. // _, err = session.Insert(&t)
  158. sql := fmt.Sprintf(`INSERT INTO THJ_USERSCORE VALUES (%v, %v, %v, to_date('%v', 'yyyy-mm-dd hh24:mi:ss'))`,
  159. t.USERID, t.CURSCORE, 0, t.UPDATETIME.Format("2006-01-02 15:04:05"))
  160. _, err = session.Exec(sql)
  161. if err != nil {
  162. session.Rollback()
  163. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  164. return nil, errors.New("数据错误")
  165. }
  166. }
  167. // 记录积分流水
  168. q := Thjuserscorelog{}
  169. seqMap, err := session.QueryString("SELECT SEQ_THJ_USERSCORELOG.nextval SEQID FROM dual")
  170. if err != nil {
  171. session.Rollback()
  172. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  173. return nil, errors.New("数据错误")
  174. }
  175. if len(seqMap) <= 0 {
  176. session.Rollback()
  177. return nil, errors.New("获取自增ID错误")
  178. }
  179. seqID, _ := strconv.Atoi(seqMap[0]["SEQID"])
  180. q.AUTOID = int64(seqID)
  181. q.USERID = r.USERID
  182. q.SCORECONFIGTYPE = 2 // 2:签到送积分
  183. q.SCORE = float64(c.PARMA1)
  184. q.ORISCORE = float64(curscore)
  185. q.CURSCORE = float64(t.CURSCORE)
  186. q.CREATETIME = now
  187. q.RELATEDORDERID = r.USERID
  188. // _, err = session.Insert(&q)
  189. sql := fmt.Sprintf(`INSERT INTO THJ_USERSCORELOG
  190. (AUTOID, USERID, SCORECONFIGTYPE, SCORE, ORISCORE, CURSCORE, CREATETIME)
  191. VALUES
  192. (%v, %v, %v, %v, %v, %v, to_date('%v', 'yyyy-mm-dd hh24:mi:ss'))`,
  193. q.AUTOID, q.USERID, q.SCORECONFIGTYPE, q.SCORE, q.ORISCORE, q.CURSCORE, q.CREATETIME.Format("2006-01-02 15:04:05"))
  194. _, err = session.Exec(sql)
  195. if err != nil {
  196. session.Rollback()
  197. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  198. return nil, errors.New("数据错误")
  199. }
  200. }
  201. // 增加签到记录
  202. sql := fmt.Sprintf(`INSERT INTO THJ_SIGNIN VALUES (%v, %v, to_date('%v', 'yyyy-mm-dd hh24:mi:ss'))`,
  203. r.USERID, now.Format("20060102"), now.Format("2006-01-02 15:04:05"))
  204. _, err = session.Exec(sql)
  205. if err != nil {
  206. session.Rollback()
  207. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  208. return nil, errors.New("数据错误")
  209. }
  210. // add Commit() after all actions
  211. err = session.Commit()
  212. if err != nil {
  213. session.Rollback()
  214. logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
  215. return nil, errors.New("数据错误")
  216. }
  217. return &THJSigninRsp{SigninStatus: 1}, nil
  218. }
  219. // 我的推荐列表
  220. type MyRefer struct {
  221. Accountname string `json:"accountname" xorm:"ACCOUNTNAME"` // 用户名(脱敏)
  222. Score float64 `json:"score" xorm:"SCORE"` // 积分
  223. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 时间(yyyy-mm-dd)
  224. UserID int `json:"-" form:"userid" binding:"required"` // 用户ID
  225. PageEx `xorm:"extends"` // 页码信息
  226. }
  227. func (r *MyRefer) calc() {
  228. r.Accountname = EncryptByStar(r.Accountname)
  229. }
  230. func (r *MyRefer) buildSql() string {
  231. var sqlId utils.SQLVal = `
  232. select
  233. u.ACCOUNTNAME,
  234. t.SCORE,
  235. to_char(t.CREATETIME, 'yyyy-mm-dd') CREATETIME
  236. from THJ_USERSCORELOG t
  237. inner join USERACCOUNT u on u.USERID = t.RELATEDORDERID
  238. where t.USERID = %v
  239. order by t.CREATETIME desc
  240. `
  241. sqlId.FormatParam(r.UserID)
  242. sqlId.Page(r.Page, r.PageSize)
  243. return sqlId.String()
  244. }
  245. func (r *MyRefer) GetDataByPage() (interface{}, error, int, int, int) {
  246. sData := make([]MyRefer, 0)
  247. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  248. total := 0
  249. for i := range sData {
  250. sData[i].calc()
  251. total = sData[i].Total
  252. }
  253. return sData, err, r.Page, r.PageSize, total
  254. }
  255. type GThjuserscorelog struct {
  256. USERID int64 `json:"-" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  257. SCORECONFIGTYPE int32 `json:"scoreconfigtype" xorm:"SCORECONFIGTYPE"` // 配置类型 - 1:注册红包 2:签到积分 3:推广积分 4:下级用户下单积分 5:自己采购下单积分 6:自己供求下单积分 7:抽奖配置
  258. SCORE float64 `json:"score" xorm:"SCORE"` // 变动积分
  259. ORISCORE float64 `json:"-" xorm:"ORISCORE"` // 期初积分(变动前积)
  260. CURSCORE float64 `json:"-" xorm:"CURSCORE"` // 期末积分(变动后积)
  261. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 记账时间
  262. REMARK string `json:"-" xorm:"REMARK"` // 备注
  263. RELATEDORDERID int64 `json:"-" xorm:"RELATEDORDERID"` // 关联单号\推荐人UserID
  264. REDPACKETVALUE float64 `json:"redpacketvalue" xorm:"REDPACKETVALUE"` // 红包值【抽奖】
  265. STYPE string `form:"stype"` // [格式:1,2,3] 配置类型 - 1:注册红包 2:签到积分 3:推广积分 4:下级用户下单积分 5:自己采购下单积分 6:自己供求下单积分 7:抽奖配置
  266. PageEx `xorm:"extends"` // 页码信息
  267. }
  268. func (r *GThjuserscorelog) calc() {
  269. }
  270. func (r *GThjuserscorelog) buildSql() string {
  271. var sqlId utils.SQLVal = `
  272. select
  273. t.SCORECONFIGTYPE,
  274. t.SCORE,
  275. t.REDPACKETVALUE,
  276. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME
  277. from THJ_USERSCORELOG t
  278. where t.USERID = %v and %v
  279. order by t.CREATETIME desc
  280. `
  281. param := "1=1"
  282. if r.STYPE != "" {
  283. param = fmt.Sprintf("t.SCORECONFIGTYPE in (%v)", r.STYPE)
  284. }
  285. sqlId.FormatParam(r.USERID, param)
  286. sqlId.Page(r.Page, r.PageSize)
  287. return sqlId.String()
  288. }
  289. func (r *GThjuserscorelog) GetDataByPage() (interface{}, error, int, int, int) {
  290. sData := make([]GThjuserscorelog, 0)
  291. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  292. total := 0
  293. for i := range sData {
  294. sData[i].calc()
  295. total = sData[i].Total
  296. }
  297. return sData, err, r.Page, r.PageSize, total
  298. }
  299. // THJWrstandard 现货商品表
  300. type THJWrstandard struct {
  301. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  302. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  303. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME" form:"wrstandardname"` // 现货商品名称(模糊查询)
  304. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  305. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  306. MINIVALUE int64 `json:"minivalue" xorm:"MINIVALUE"` // 最小变动值
  307. MINIVALUEDP int64 `json:"minivaluedp" xorm:"MINIVALUEDP"` // 最小变动值小数位
  308. REALMINIVALUE int64 `json:"realminivalue" xorm:"REALMINIVALUE"` // 实际最小变动值
  309. REALMINIVALUEDP int64 `json:"realminivaluedp" xorm:"REALMINIVALUEDP"` // 实际最小变动值小数位
  310. WRSSTATUS int32 `json:"wrsstatus" xorm:"WRSSTATUS"` // 状态 - 作废 - 0:未激活 1:正常
  311. CREATORID int64 `json:"-" xorm:"CREATORID"` // 创建人
  312. CREATETIME time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  313. UPDATORID int64 `json:"-" xorm:"UPDATORID"` // 更新人
  314. UPDATETIME time.Time `json:"-" xorm:"UPDATETIME"` // 更新时间
  315. FACTORYITEMJSON string `json:"-" xorm:"FACTORYITEMJSON"` // 要素项定义Json[{"DGFactoryItemTypeID": ,"ItemTypeMode": ,"FactoryItemIDs": },{.....},]DGFactoryItemTypeID - 要素项类型ID --DGFactoryItem->DGFactoryItemTypeIDItemTypeMode - 要素项类型模式 --DGFactoryItem->ItemTypeModeFactoryItemIDs - 选择项IDs--DGFactoryItem->DGFactoryItemID, 逗号分隔
  316. ISVALID int32 `json:"isvalid" xorm:"ISVALID"` // 是否有效 - 0:无效 1:有效
  317. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
  318. REMARK string `json:"-" xorm:"REMARK"` // 备注
  319. CONVERTFACTOR float64 `json:"convertfactor" xorm:"CONVERTFACTOR"` // 标仓系数
  320. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 现货增值税率
  321. STORAGEFEE float64 `json:"storagefee" xorm:"STORAGEFEE"` // 仓储费(固定: 111)
  322. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  323. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  324. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图(逗号分隔)
  325. PROVIDERUSERID int64 `json:"-" xorm:"PROVIDERUSERID"` // 供应链提供商
  326. PROVIDERACCOUNTID int64 `json:"-" xorm:"PROVIDERACCOUNTID"` // 供应链提供商资金账户 ID
  327. GoodsType int `json:"-" xorm:"-"` // 类型 0-产品介绍 1-供求列表
  328. PageEx `xorm:"extends"` // 页码信息
  329. }
  330. func (r *THJWrstandard) calc() {
  331. }
  332. func (r *THJWrstandard) buildSql() string {
  333. //取委托单中有量的商品
  334. var sqlId utils.SQLVal = `
  335. select
  336. wr.*
  337. from wrstandard wr
  338. where wr.wrstandardid in
  339. (select distinct t.wrstandardid
  340. from WR_PresaleInfo t
  341. inner join wrtrade_orderdetail od on t.sellwrtradeorderid = od.wrtradeorderid
  342. where t.presalestatus = 2 and (od.orderqty - od.tradeqty) > 0
  343. and t.marketid = 64201) and %v
  344. order by wr.wrstandardname
  345. `
  346. param := "1=1"
  347. if r.WRSTANDARDNAME != "" {
  348. param = fmt.Sprintf("wr.wrstandardname like '%%%v%%'", r.WRSTANDARDNAME)
  349. }
  350. sqlId.FormatParam(param)
  351. sqlId.Page(r.Page, r.PageSize)
  352. return sqlId.String()
  353. }
  354. func (r *THJWrstandard) buildSql2() string {
  355. var sqlId utils.SQLVal = `
  356. select
  357. wr.*
  358. from wrstandard wr
  359. where wr.wrstandardid in (select distinct t.wrstandardid from WRTrade_OrderDetail t where t.marketid=65201 and t.wrtradetype = 1 and t.wrtradeorderstatus in (3,7))
  360. and %v
  361. order by wr.wrstandardname
  362. `
  363. param := "1=1"
  364. if r.WRSTANDARDNAME != "" {
  365. param = fmt.Sprintf("wr.wrstandardname like '%%%v%%'", r.WRSTANDARDNAME)
  366. }
  367. sqlId.FormatParam(param)
  368. sqlId.Page(r.Page, r.PageSize)
  369. return sqlId.String()
  370. }
  371. func (r *THJWrstandard) GetDataByPage() (interface{}, error, int, int, int) {
  372. sql := r.buildSql()
  373. if r.GoodsType == 1 {
  374. sql = r.buildSql2()
  375. }
  376. sData := make([]THJWrstandard, 0)
  377. err := db.GetEngine().SQL(sql).Find(&sData)
  378. total := 0
  379. for i := range sData {
  380. sData[i].calc()
  381. total = sData[i].Total
  382. }
  383. return sData, err, r.Page, r.PageSize, total
  384. }
  385. // RegisterMoney 注册红包
  386. type RegisterMoney struct {
  387. Amount float64 `json:"amount" xorm:"AMOUNT"` // 红包
  388. Accountid int64 `json:"-" form:"accountid" binding:"required"` // 资金账户ID
  389. }
  390. func (r *RegisterMoney) calc() {
  391. }
  392. func (r *RegisterMoney) buildSql() string {
  393. var sqlId utils.SQLVal = `
  394. select
  395. t.amount
  396. from taaccountlog t
  397. where t.accountid = %v and t.businesscode = '734'
  398. `
  399. sqlId.FormatParam(r.Accountid)
  400. return sqlId.String()
  401. }
  402. // GetDataEx 从数据库中查询数据
  403. func (r *RegisterMoney) GetDataEx() (interface{}, error) {
  404. e := db.GetEngine()
  405. s := e.SQL(r.buildSql())
  406. sData := make([]RegisterMoney, 0)
  407. if err := s.Find(&sData); err != nil {
  408. return nil, err
  409. }
  410. for i := range sData {
  411. sData[i].calc()
  412. }
  413. return sData, nil
  414. }
  415. // THJWrstandardDetail_GoodsInfo 采购商品信息
  416. type THJWrstandardDetail_GoodsInfo struct {
  417. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  418. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  419. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  420. DELIVERYGOODSID int32 `json:"-" xorm:"DELIVERYGOODSID"` // 现货品种ID
  421. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  422. MINIVALUE int64 `json:"-" xorm:"MINIVALUE"` // 最小变动值
  423. MINIVALUEDP int64 `json:"-" xorm:"MINIVALUEDP"` // 最小变动值小数位
  424. REALMINIVALUE int64 `json:"-" xorm:"REALMINIVALUE"` // 实际最小变动值
  425. REALMINIVALUEDP int64 `json:"-" xorm:"REALMINIVALUEDP"` // 实际最小变动值小数位
  426. WRSSTATUS int32 `json:"-" xorm:"WRSSTATUS"` // 状态 - 作废 - 0:未激活 1:正常
  427. CREATORID int64 `json:"-" xorm:"CREATORID"` // 创建人
  428. CREATETIME time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  429. UPDATORID int64 `json:"-" xorm:"UPDATORID"` // 更新人
  430. UPDATETIME time.Time `json:"-" xorm:"UPDATETIME"` // 更新时间
  431. FACTORYITEMJSON string `json:"-" xorm:"FACTORYITEMJSON"` // 要素项定义Json[{"DGFactoryItemTypeID": ,"ItemTypeMode": ,"FactoryItemIDs": },{.....},]DGFactoryItemTypeID - 要素项类型ID --DGFactoryItem->DGFactoryItemTypeIDItemTypeMode - 要素项类型模式 --DGFactoryItem->ItemTypeModeFactoryItemIDs - 选择项IDs--DGFactoryItem->DGFactoryItemID, 逗号分隔
  432. ISVALID int32 `json:"-" xorm:"ISVALID"` // 是否有效 - 0:无效 1:有效
  433. AREAUSERID int64 `json:"-" xorm:"AREAUSERID"` // 所属机构
  434. REMARK string `json:"-" xorm:"REMARK"` // 备注
  435. CONVERTFACTOR float64 `json:"-" xorm:"CONVERTFACTOR"` // 标仓系数
  436. VATRATE float64 `json:"-" xorm:"VATRATE"` // 现货增值税率
  437. STORAGEFEE float64 `json:"-" xorm:"STORAGEFEE"` // 仓储费(固定: 111)
  438. THUMURLS string `json:"-" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  439. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  440. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图(逗号分隔)
  441. PROVIDERUSERID int64 `json:"-" xorm:"PROVIDERUSERID"` // 供应链提供商
  442. PROVIDERACCOUNTID int64 `json:"-" xorm:"PROVIDERACCOUNTID"` // 供应链提供商资金账户 ID
  443. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"SPOTGOODSPRICE"` // 现货价格
  444. }
  445. // THJDeliveryMode 交割方式
  446. type THJDeliveryMode struct {
  447. ENUMDICNAME string `json:"enumdicname" xorm:"ENUMDICNAME"` // 枚举项名称
  448. ENUMITEMNAME int64 `json:"enumitemname" xorm:"ENUMITEMNAME"` // 枚举项值
  449. }
  450. // THJDeliveryMonth 交割月份
  451. type THJDeliveryMonth struct {
  452. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  453. ENDMONTH string `json:"endmonth" xorm:"ENDMONTH"` // 预售结束月份(yyyy-mm)
  454. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 预售结束日期(yyyy-mm-dd)
  455. ORDERQTY int64 `json:"orderqty" xorm:"ORDERQTY"` // 委托数量
  456. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  457. REMAINQTY int64 `json:"remainqty" xorm:"REMAINQTY"` // 可用数量
  458. UNITPRICE float64 `json:"unitprice" xorm:"UNITPRICE"` // [参考价]商品单价
  459. }
  460. // THJPresaleApplyDeposit 支付方式
  461. type THJPresaleApplyDeposit struct {
  462. DEPOSITID string `json:"depositid" xorm:"DEPOSITID"` // 自增ID autoid
  463. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  464. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  465. DISCOUNTAMOUNT float64 `json:"discountamount" xorm:"DISCOUNTAMOUNT"` // 优惠金额(每吨)
  466. }
  467. // THJSpotGoodsPriceLog 历史价格走势
  468. type THJSpotGoodsPriceLog struct {
  469. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"SPOTGOODSPRICE"` // 现货价格
  470. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  471. }
  472. type THJWrstandardDetailReq struct {
  473. WRSTANDARDID int64 `form:"wrstandardid" binding:"required"` // 现货商品ID
  474. }
  475. // THJWrstandardDetailRsp 采购商品详情
  476. type THJWrstandardDetailRsp struct {
  477. GoodsInfo THJWrstandardDetail_GoodsInfo `json:"goodsinfo"` // 商品信息
  478. DeliveryModes []THJDeliveryMode `json:"deliverymodes"` // 交割方式
  479. DeliveryMonth []THJDeliveryMonth `json:"deliverymonth"` // 交割月份
  480. PresaleApplyDeposits []THJPresaleApplyDeposit `json:"presaleapplydeposits"` // 支付方式
  481. SpotGoodsPriceLogs []THJSpotGoodsPriceLog `json:"spotgoodspricelogs"` // 历史价格走势
  482. }
  483. // GetTHJWrstandardDetail 获取采购商品详情
  484. func (r *THJWrstandardDetailReq) GetTHJWrstandardDetail() (rsp *THJWrstandardDetailRsp, err error) {
  485. engine := db.GetEngine()
  486. rsp = new(THJWrstandardDetailRsp)
  487. // 采购商品信息
  488. var goodsInfo THJWrstandardDetail_GoodsInfo
  489. sql := fmt.Sprintf(`
  490. select
  491. t.WRSTANDARDID,
  492. t.WRSTANDARDCODE,
  493. t.WRSTANDARDNAME,
  494. t.PICTUREURLS,
  495. t.BANNERPICURL,
  496. t.UNITID,
  497. p.SPOTGOODSPRICE
  498. from wrstandard t
  499. left join ERMCP_SpotGoodsPrice p on t.WRSTANDARDID = p.WRSTANDARDID and p.spotgoodsbrandid=0 and p.currencyid = 1
  500. where t.WRSTANDARDID = %v
  501. `, r.WRSTANDARDID)
  502. if _, err = engine.SQL(sql).Get(&goodsInfo); err != nil {
  503. return
  504. }
  505. rsp.GoodsInfo = goodsInfo
  506. // 交割方式
  507. deliveryModes := make([]THJDeliveryMode, 0)
  508. sql = `
  509. select
  510. t.ENUMDICNAME,
  511. t.ENUMITEMNAME
  512. from enumdicitem t
  513. where t.enumdiccode = 'THJDeliveryMode'
  514. `
  515. if err = engine.SQL(sql).Find(&deliveryModes); err != nil {
  516. return
  517. }
  518. rsp.DeliveryModes = deliveryModes
  519. // 交割月份
  520. deliveryMonths := make([]THJDeliveryMonth, 0)
  521. sql = fmt.Sprintf(`
  522. select
  523. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  524. to_char(t.TAKESTARTDATE, 'yyyy-mm') ENDMONTH,
  525. to_char(t.ENDDATE, 'yyyy-mm-dd') ENDDATE,
  526. t.UNITPRICE,
  527. od.ORDERQTY,
  528. od.TRADEQTY,
  529. (od.orderqty - od.tradeqty) REMAINQTY
  530. from WR_PresaleInfo t
  531. inner join wrtrade_orderdetail od on t.sellwrtradeorderid = od.wrtradeorderid
  532. where t.wrstandardid = %v
  533. and t.presalestatus = 2
  534. and od.wrtradeorderstatus in (3, 7)
  535. and (od.orderqty - od.tradeqty) > 0
  536. order by t.enddate
  537. `, r.WRSTANDARDID)
  538. if err = engine.SQL(sql).Find(&deliveryMonths); err != nil {
  539. return
  540. }
  541. rsp.DeliveryMonth = deliveryMonths
  542. // 支付方式
  543. ids := make([]string, 0)
  544. for _, item := range deliveryMonths {
  545. ids = append(ids, item.PRESALEAPPLYID)
  546. }
  547. if len(ids) > 0 {
  548. presaleApplyDeposits := make([]THJPresaleApplyDeposit, 0)
  549. sql = fmt.Sprintf(`
  550. select
  551. to_char(t.AutoID) DEPOSITID,
  552. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  553. t.DEPOSITRATE,
  554. t.DISCOUNTAMOUNT
  555. from THJ_PresaleApplyDeposit t
  556. where t.presaleapplyid in (%v)
  557. order by t.DEPOSITRATE desc
  558. `, strings.Join(ids, ","))
  559. if err = engine.SQL(sql).Find(&presaleApplyDeposits); err != nil {
  560. return
  561. }
  562. rsp.PresaleApplyDeposits = presaleApplyDeposits
  563. }
  564. // 历史价格走势
  565. spotGoodsPriceLogs := make([]THJSpotGoodsPriceLog, 0)
  566. sql = fmt.Sprintf(`
  567. select
  568. t.SPOTGOODSPRICE,
  569. t.TRADEDATE
  570. from ERMCP_SpotGoodsPriceLog t
  571. where t.SPOTGOODSPRICE <> 0 AND t.wrstandardid = %v
  572. order by t.tradedate
  573. `, r.WRSTANDARDID)
  574. if err = engine.SQL(sql).Find(&spotGoodsPriceLogs); err != nil {
  575. return
  576. }
  577. rsp.SpotGoodsPriceLogs = spotGoodsPriceLogs
  578. return
  579. }
  580. // Thjpurchasetradedetail 铁合金采购成交扩展表
  581. type Thjpurchasetradedetail struct {
  582. WRTRADEDETAILID string `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 采购成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  583. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  584. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  585. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  586. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID
  587. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  588. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  589. WAREHOUSEID int64 `json:"warehouseid" xorm:"WAREHOUSEID"` // 仓库ID
  590. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID" form:"userid" binding:"required"` // 买方用户ID
  591. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID
  592. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID"` // 卖方用户ID
  593. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID
  594. TRADETIME time.Time `json:"tradetime" xorm:"TRADETIME"` // 摘牌时间(委托时间)
  595. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 摘牌价格 - 参考价
  596. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // [预售价]摘牌数量
  597. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 摘牌总货款
  598. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  599. DISCOUNTAMOUNT float64 `json:"discountamount" xorm:"DISCOUNTAMOUNT"` // 优惠总金额(优惠金额*TradeQty)
  600. PAYEDDEPOSIT float64 `json:"payeddeposit" xorm:"PAYEDDEPOSIT"` // [定金]买方已付定金(预付款)
  601. THJDELIVERYMODE int32 `json:"thjdeliverymode" xorm:"THJDELIVERYMODE"` // 交割方式 - 1:平台仓储 2:自提 3:代办运输 (枚举:THJDeliveryMode)
  602. CONTACTNAME string `json:"contactname" xorm:"CONTACTNAME"` // 联系人姓名
  603. CONTACTINFO string `json:"contactinfo" xorm:"CONTACTINFO"` // 联系方式
  604. DESADDRESS string `json:"desaddress" xorm:"DESADDRESS"` // 目的地地址
  605. RECEIPTINFO string `json:"receiptinfo" xorm:"RECEIPTINFO"` // 发票信息
  606. ORDERSTATUS int32 `json:"orderstatus" xorm:"ORDERSTATUS"` // 单据状态 - 1:待付尾款 2:支付尾款成功 3:支付尾款失败 4:已违约 5:卖方已确认 6:买方已确认 7:系统自动确认 (枚举:THJOrderStatus)
  607. LASTPRICE float64 `json:"lastprice" xorm:"LASTPRICE"` // [实际价]到期价格
  608. LASTAMOUNT float64 `json:"lastamount" xorm:"LASTAMOUNT"` // 到期总货款 = 到期价格 * 摘牌数量
  609. BUYCHARGEVALUE float64 `json:"buychargevalue" xorm:"BUYCHARGEVALUE"` // 买方到期手续费
  610. SELLCHARGEVALUE float64 `json:"sellchargevalue" xorm:"SELLCHARGEVALUE"` // 卖方到期手续费
  611. REMAINAMOUNT float64 `json:"remainamount" xorm:"REMAINAMOUNT"` // [尾款]剩余货款 = 到期总货款 - 已付定金 - 优惠金额
  612. SELLCONFIRMREMARK string `json:"sellconfirmremark" xorm:"SELLCONFIRMREMARK"` // 卖方确认备注
  613. SELLCONFIRMATTACH string `json:"sellconfirmattach" xorm:"SELLCONFIRMATTACH"` // 卖方确认附件
  614. SELLCONFIRMTIME time.Time `json:"sellconfirmtime" xorm:"SELLCONFIRMTIME"` // 卖方确认时间
  615. SELLCONFIRMTRADEDATE string `json:"sellconfirmtradedate" xorm:"SELLCONFIRMTRADEDATE"` // 卖方确认交易日
  616. BUYCONFIRMREMARK string `json:"buyconfirmremark" xorm:"BUYCONFIRMREMARK"` // 买方确认备注
  617. BUYCONFIRMTIME time.Time `json:"buyconfirmtime" xorm:"BUYCONFIRMTIME"` // 买方确认时间
  618. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  619. CONTRACTADDRBUY string `json:"contractaddrbuy" xorm:"CONTRACTADDRBUY"` // 贸易合同地址(买家)
  620. CONTRACTADDRSELL string `json:"contractaddrsell" xorm:"CONTRACTADDRSELL"` // 贸易合同地址(卖家)
  621. PAYEDTRADEDATE string `json:"payedtradedate" xorm:"PAYEDTRADEDATE"` // 支付尾款成功交易日
  622. BUYFREEZECHARGE float64 `json:"buyfreezecharge" xorm:"BUYFREEZECHARGE"` // 买方摘牌冻结手续费
  623. LASTPRICEDATE time.Time `json:"lastpricedate" xorm:"LASTPRICEDATE"` // 到期价格日期 - 暂不使用
  624. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  625. WAREHOUSENAME string `json:"warehousename" xorm:"WAREHOUSENAME"` // 仓库名称
  626. THJDELIVERYMODEDISPLAY string `json:"thjdeliverymodedisplay" xorm:"THJDELIVERYMODEDISPLAY"` // 提货方式
  627. THJORDERSTATUSDISPLAY string `json:"thjorderstatusdisplay" xorm:"THJORDERSTATUSDISPLAY"` // 状态
  628. ENDDATEMONTH string `json:"enddatemonth" xorm:"ENDDATEMONTH"` // 交收月份(提货日期)
  629. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 到期日期
  630. UNITID int32 `json:"unitid" xorm:"UNITID"` // 商品单位
  631. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格 - 购买价
  632. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 预售挂牌时间
  633. PRESALESTATUS int32 `json:"presalestatus" xorm:"PRESALESTATUS"` // 预留状态 1:未开始 2:进行中 3:已结束 4:已关闭 5:处理中 6::处理失败 7:已完成
  634. FIRSTBUYUSERID int64 `json:"firstbuyuserid" xorm:"FIRSTBUYUSERID"` // 买方用户ID(预售摘牌人)
  635. AVAILABLETIME int32 `json:"availabletime" xorm:"AVAILABLETIME"` // 可用次数
  636. POINTPRICE float64 `json:"pointprice" xorm:"POINTPRICE"` // 已点价格
  637. POINTFLAG bool `json:"pointflag" xorm:"POINTFLAG"` // 是否已点价
  638. POINTINCOME float64 `json:"pointincome" xorm:"POINTINCOME"` // 点价总收益
  639. POINTTIMES int32 `json:"pointtimes" xorm:"POINTTIMES"` // 点价总次
  640. TODAYPOINTINCOME float64 `json:"todaypointincome" xorm:"TODAYPOINTINCOME"` // 点价总收益
  641. TYPE int `json:"-" xorm:"-" form:"type"` // 类型 - 0:未完成 1:已完成 2:可点订单 3:已点订单
  642. PageEx `xorm:"extends"` // 页码信息
  643. }
  644. func (r *Thjpurchasetradedetail) calc() {
  645. }
  646. func (r *Thjpurchasetradedetail) buildSql() string {
  647. var sqlId utils.SQLVal = `
  648. select
  649. wr.WRSTANDARDNAME,
  650. wh.WAREHOUSENAME,
  651. en1.enumdicname THJDELIVERYMODEDISPLAY,
  652. en2.enumdicname THJORDERSTATUSDISPLAY,
  653. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  654. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  655. t.TRADEDATE,
  656. t.MARKETID,
  657. to_char(t.WRFACTORTYPEID) WRFACTORTYPEID,
  658. t.DELIVERYGOODSID,
  659. t.WRSTANDARDID,
  660. t.WAREHOUSEID,
  661. t.BUYUSERID,
  662. t.BUYACCOUNTID,
  663. t.SELLUSERID,
  664. t.SELLACCOUNTID,
  665. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  666. t.TRADEPRICE,
  667. t.TRADEQTY,
  668. t.TRADEAMOUNT,
  669. t.DEPOSITRATE,
  670. t.DISCOUNTAMOUNT,
  671. t.PAYEDDEPOSIT,
  672. t.THJDELIVERYMODE,
  673. t.CONTACTNAME,
  674. t.CONTACTINFO,
  675. t.DESADDRESS,
  676. t.RECEIPTINFO,
  677. t.ORDERSTATUS,
  678. t.LASTPRICE,
  679. t.LASTAMOUNT,
  680. t.BUYCHARGEVALUE,
  681. t.SELLCHARGEVALUE,
  682. t.REMAINAMOUNT,
  683. t.SELLCONFIRMREMARK,
  684. t.SELLCONFIRMATTACH,
  685. t.SELLCONFIRMTIME,
  686. t.SELLCONFIRMTRADEDATE,
  687. t.BUYCONFIRMREMARK,
  688. t.BUYCONFIRMTIME,
  689. t.HANDLESTATUS,
  690. t.CONTRACTADDRBUY,
  691. t.CONTRACTADDRSELL,
  692. t.PAYEDTRADEDATE,
  693. t.BUYFREEZECHARGE,
  694. t.LASTPRICEDATE,
  695. to_char(pi.TAKESTARTDATE, 'yyyy-MM') ENDDATEMONTH,
  696. to_char(pi.ENDDATE, 'yyyy-MM-dd') ENDDATE,
  697. wr.UNITID,
  698. t.TRANSFERPRICE,
  699. pi.PRESALESTATUS,
  700. to_char(pi.CREATETIME, 'yyyy-MM-dd hh24:mi:ss') CREATETIME,
  701. t.FIRSTBUYUSERID,
  702. t.POINTTIMES,
  703. t.AVAILABLETIME,
  704. t.POINTPRICE,
  705. t.POINTFLAG,
  706. t.POINTINCOME,
  707. t.TODAYPOINTINCOME
  708. from THJ_PurchaseTradeDetail t
  709. inner join WR_PresaleInfo pi
  710. on t.presaleapplyid = pi.presaleapplyid
  711. left join wrstandard wr
  712. on t.wrstandardid = wr.wrstandardid
  713. left join warehouseinfo wh
  714. on t.warehouseid = wh.autoid
  715. left join enumdicitem en1
  716. on en1.enumdiccode = 'THJDeliveryMode'
  717. and t.thjdeliverymode = en1.enumitemname
  718. left join enumdicitem en2
  719. on en2.enumdiccode = 'THJOrderStatus'
  720. and t.orderstatus = en2.enumitemname
  721. where t.buyuserid = %v
  722. and t.orderstatus in (4,6,7,8)
  723. order by t.tradetime desc
  724. `
  725. sqlId.FormatParam(r.BUYUSERID)
  726. sqlId.Page(r.Page, r.PageSize)
  727. return sqlId.String()
  728. }
  729. func (r *Thjpurchasetradedetail) buildSql2() string {
  730. var sqlId utils.SQLVal = `select aa.* from (
  731. select
  732. wr.WRSTANDARDNAME,
  733. wh.WAREHOUSENAME,
  734. en1.enumdicname THJDELIVERYMODEDISPLAY,
  735. en2.enumdicname THJORDERSTATUSDISPLAY,
  736. case t.orderstatus
  737. when 3 then 1
  738. when 5 then 2
  739. when 9 then 3
  740. when 1 then 10
  741. when 2 then 11
  742. else 20 end OrderIndex,
  743. t.WRTRADEDETAILID,
  744. t.PRESALEAPPLYID,
  745. t.TRADEDATE,
  746. t.MARKETID,
  747. t.WRFACTORTYPEID,
  748. t.DELIVERYGOODSID,
  749. t.WRSTANDARDID,
  750. t.WAREHOUSEID,
  751. t.BUYUSERID,
  752. t.BUYACCOUNTID,
  753. t.SELLUSERID,
  754. t.SELLACCOUNTID,
  755. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  756. t.TRADEPRICE,
  757. t.TRADEQTY,
  758. t.TRADEAMOUNT,
  759. t.DEPOSITRATE,
  760. t.DISCOUNTAMOUNT,
  761. t.PAYEDDEPOSIT,
  762. t.THJDELIVERYMODE,
  763. t.CONTACTNAME,
  764. t.CONTACTINFO,
  765. t.DESADDRESS,
  766. t.RECEIPTINFO,
  767. t.ORDERSTATUS,
  768. t.LASTPRICE,
  769. t.LASTAMOUNT,
  770. t.BUYCHARGEVALUE,
  771. t.SELLCHARGEVALUE,
  772. t.REMAINAMOUNT,
  773. t.SELLCONFIRMREMARK,
  774. t.SELLCONFIRMATTACH,
  775. t.SELLCONFIRMTIME,
  776. t.SELLCONFIRMTRADEDATE,
  777. t.BUYCONFIRMREMARK,
  778. t.BUYCONFIRMTIME,
  779. t.HANDLESTATUS,
  780. t.CONTRACTADDRBUY,
  781. t.CONTRACTADDRSELL,
  782. t.PAYEDTRADEDATE,
  783. t.BUYFREEZECHARGE,
  784. t.LASTPRICEDATE,
  785. to_char(pi.TAKESTARTDATE, 'yyyy-MM') ENDDATEMONTH,
  786. to_char(pi.ENDDATE, 'yyyy-MM-dd') ENDDATE,
  787. wr.UNITID,
  788. t.TRANSFERPRICE,
  789. pi.PRESALESTATUS,
  790. to_char(pi.CREATETIME, 'yyyy-MM-dd') CREATETIME,
  791. t.FIRSTBUYUSERID,
  792. t.POINTTIMES,
  793. t.AVAILABLETIME,
  794. t.POINTPRICE,
  795. t.POINTFLAG,
  796. t.POINTINCOME,
  797. t.TODAYPOINTINCOME
  798. from THJ_PurchaseTradeDetail t
  799. inner join WR_PresaleInfo pi
  800. on t.presaleapplyid = pi.presaleapplyid
  801. left join wrstandard wr
  802. on t.wrstandardid = wr.wrstandardid
  803. left join warehouseinfo wh
  804. on t.warehouseid = wh.autoid
  805. left join enumdicitem en1
  806. on en1.enumdiccode = 'THJDeliveryMode'
  807. and t.thjdeliverymode = en1.enumitemname
  808. left join enumdicitem en2
  809. on en2.enumdiccode = 'THJOrderStatus'
  810. and t.orderstatus = en2.enumitemname
  811. where t.buyuserid = %v
  812. and t.orderstatus in (1,2,3,5,9)) aa
  813. order by aa.orderindex, aa.tradetime desc
  814. `
  815. sqlId.FormatParam(r.BUYUSERID)
  816. sqlId.Page(r.Page, r.PageSize)
  817. return sqlId.String()
  818. }
  819. func (r *Thjpurchasetradedetail) buildSql3() string {
  820. //可点订单: buyuserid = firstbuyuserid = [参数] && presalestatus = 2 && OrderStatus = 1 && availabletime > 0
  821. var sqlId utils.SQLVal = `
  822. select
  823. wr.WRSTANDARDNAME,
  824. wh.WAREHOUSENAME,
  825. en1.enumdicname THJDELIVERYMODEDISPLAY,
  826. en2.enumdicname THJORDERSTATUSDISPLAY,
  827. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  828. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  829. t.TRADEDATE,
  830. t.MARKETID,
  831. to_char(t.WRFACTORTYPEID) WRFACTORTYPEID,
  832. t.DELIVERYGOODSID,
  833. t.WRSTANDARDID,
  834. t.WAREHOUSEID,
  835. t.BUYUSERID,
  836. t.BUYACCOUNTID,
  837. t.SELLUSERID,
  838. t.SELLACCOUNTID,
  839. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  840. t.TRADEPRICE,
  841. t.TRADEQTY,
  842. t.TRADEAMOUNT,
  843. t.DEPOSITRATE,
  844. t.DISCOUNTAMOUNT,
  845. t.PAYEDDEPOSIT,
  846. t.THJDELIVERYMODE,
  847. t.CONTACTNAME,
  848. t.CONTACTINFO,
  849. t.DESADDRESS,
  850. t.RECEIPTINFO,
  851. t.ORDERSTATUS,
  852. t.LASTPRICE,
  853. t.LASTAMOUNT,
  854. t.BUYCHARGEVALUE,
  855. t.SELLCHARGEVALUE,
  856. t.REMAINAMOUNT,
  857. t.SELLCONFIRMREMARK,
  858. t.SELLCONFIRMATTACH,
  859. t.SELLCONFIRMTIME,
  860. t.SELLCONFIRMTRADEDATE,
  861. t.BUYCONFIRMREMARK,
  862. t.BUYCONFIRMTIME,
  863. t.HANDLESTATUS,
  864. t.CONTRACTADDRBUY,
  865. t.CONTRACTADDRSELL,
  866. t.PAYEDTRADEDATE,
  867. t.BUYFREEZECHARGE,
  868. t.LASTPRICEDATE,
  869. to_char(pi.TAKESTARTDATE, 'yyyy-MM') ENDDATEMONTH,
  870. to_char(pi.ENDDATE, 'yyyy-MM-dd') ENDDATE,
  871. wr.UNITID,
  872. t.TRANSFERPRICE,
  873. pi.PRESALESTATUS,
  874. to_char(pi.CREATETIME, 'yyyy-MM-dd hh24:mi:ss') CREATETIME,
  875. t.FIRSTBUYUSERID,
  876. t.POINTTIMES,
  877. t.AVAILABLETIME,
  878. t.POINTPRICE,
  879. t.POINTFLAG,
  880. t.POINTINCOME,
  881. t.TODAYPOINTINCOME
  882. from THJ_PurchaseTradeDetail t
  883. inner join WR_PresaleInfo pi
  884. on t.presaleapplyid = pi.presaleapplyid
  885. left join wrstandard wr
  886. on t.wrstandardid = wr.wrstandardid
  887. left join warehouseinfo wh
  888. on t.warehouseid = wh.autoid
  889. left join enumdicitem en1
  890. on en1.enumdiccode = 'THJDeliveryMode'
  891. and t.thjdeliverymode = en1.enumitemname
  892. left join enumdicitem en2
  893. on en2.enumdiccode = 'THJOrderStatus'
  894. and t.orderstatus = en2.enumitemname
  895. where t.buyuserid = %v
  896. and t.buyuserid = t.firstbuyuserid
  897. and t.orderstatus = 1
  898. and pi.presalestatus = 2
  899. and t.availabletime > 0
  900. order by t.tradetime desc
  901. `
  902. sqlId.FormatParam(r.BUYUSERID)
  903. sqlId.Page(r.Page, r.PageSize)
  904. return sqlId.String()
  905. }
  906. func (r *Thjpurchasetradedetail) buildSql4() string {
  907. //已点订单: pointflag = 1 && firstbuyuserid = [参数]
  908. var sqlId utils.SQLVal = `
  909. select
  910. wr.WRSTANDARDNAME,
  911. wh.WAREHOUSENAME,
  912. en1.enumdicname THJDELIVERYMODEDISPLAY,
  913. en2.enumdicname THJORDERSTATUSDISPLAY,
  914. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  915. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  916. t.TRADEDATE,
  917. t.MARKETID,
  918. to_char(t.WRFACTORTYPEID) WRFACTORTYPEID,
  919. t.DELIVERYGOODSID,
  920. t.WRSTANDARDID,
  921. t.WAREHOUSEID,
  922. t.BUYUSERID,
  923. t.BUYACCOUNTID,
  924. t.SELLUSERID,
  925. t.SELLACCOUNTID,
  926. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  927. t.TRADEPRICE,
  928. t.TRADEQTY,
  929. t.TRADEAMOUNT,
  930. t.DEPOSITRATE,
  931. t.DISCOUNTAMOUNT,
  932. t.PAYEDDEPOSIT,
  933. t.THJDELIVERYMODE,
  934. t.CONTACTNAME,
  935. t.CONTACTINFO,
  936. t.DESADDRESS,
  937. t.RECEIPTINFO,
  938. t.ORDERSTATUS,
  939. t.LASTPRICE,
  940. t.LASTAMOUNT,
  941. t.BUYCHARGEVALUE,
  942. t.SELLCHARGEVALUE,
  943. t.REMAINAMOUNT,
  944. t.SELLCONFIRMREMARK,
  945. t.SELLCONFIRMATTACH,
  946. t.SELLCONFIRMTIME,
  947. t.SELLCONFIRMTRADEDATE,
  948. t.BUYCONFIRMREMARK,
  949. t.BUYCONFIRMTIME,
  950. t.HANDLESTATUS,
  951. t.CONTRACTADDRBUY,
  952. t.CONTRACTADDRSELL,
  953. t.PAYEDTRADEDATE,
  954. t.BUYFREEZECHARGE,
  955. t.LASTPRICEDATE,
  956. to_char(pi.TAKESTARTDATE, 'yyyy-MM') ENDDATEMONTH,
  957. to_char(pi.ENDDATE, 'yyyy-MM-dd') ENDDATE,
  958. wr.UNITID,
  959. t.TRANSFERPRICE,
  960. pi.PRESALESTATUS,
  961. to_char(pi.CREATETIME, 'yyyy-MM-dd hh24:mi:ss') CREATETIME,
  962. t.FIRSTBUYUSERID,
  963. t.POINTTIMES,
  964. t.AVAILABLETIME,
  965. t.POINTPRICE,
  966. t.POINTFLAG,
  967. t.POINTINCOME,
  968. t.TODAYPOINTINCOME
  969. from THJ_PurchaseTradeDetail t
  970. inner join WR_PresaleInfo pi
  971. on t.presaleapplyid = pi.presaleapplyid
  972. left join wrstandard wr
  973. on t.wrstandardid = wr.wrstandardid
  974. left join warehouseinfo wh
  975. on t.warehouseid = wh.autoid
  976. left join enumdicitem en1
  977. on en1.enumdiccode = 'THJDeliveryMode'
  978. and t.thjdeliverymode = en1.enumitemname
  979. left join enumdicitem en2
  980. on en2.enumdiccode = 'THJOrderStatus'
  981. and t.orderstatus = en2.enumitemname
  982. where t.firstbuyuserid = %v
  983. and t.pointflag = 1
  984. order by t.tradetime desc
  985. `
  986. sqlId.FormatParam(r.BUYUSERID)
  987. sqlId.Page(r.Page, r.PageSize)
  988. return sqlId.String()
  989. }
  990. func (r *Thjpurchasetradedetail) GetDataByPage() (interface{}, error, int, int, int) {
  991. //未完成
  992. sql := r.buildSql2()
  993. //已完成
  994. if r.TYPE == 1 {
  995. sql = r.buildSql()
  996. }
  997. //可点价
  998. if r.TYPE == 2 {
  999. sql = r.buildSql3()
  1000. }
  1001. //已点价
  1002. if r.TYPE == 3 {
  1003. sql = r.buildSql4()
  1004. }
  1005. sData := make([]Thjpurchasetradedetail, 0)
  1006. err := db.GetEngine().SQL(sql).Find(&sData)
  1007. total := 0
  1008. for i := range sData {
  1009. sData[i].calc()
  1010. total = sData[i].Total
  1011. }
  1012. return sData, err, r.Page, r.PageSize, total
  1013. }
  1014. type ThjscoreconfigReq struct {
  1015. STYPE string `form:"stype"` // [格式:1,2,3] 配置类型 - 1:注册红包 2:签到积分 3:推广积分 4:下级用户下单积分 5:自己采购下单积分 6:自己供求下单积分 7:抽奖配置
  1016. }
  1017. func (r *ThjscoreconfigReq) Get() (data []Thjscoreconfig, err error) {
  1018. data = make([]Thjscoreconfig, 0)
  1019. engine := db.GetEngine().NewSession()
  1020. if r.STYPE != "" {
  1021. engine = engine.Where(fmt.Sprintf("SCORECONFIGTYPE in (%v)", r.STYPE))
  1022. }
  1023. err = engine.Find(&data)
  1024. return
  1025. }
  1026. type THJProduct struct {
  1027. WRSTANDARDID string `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  1028. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1029. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1030. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图(逗号分隔)
  1031. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  1032. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  1033. UserID int `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1034. FavoriteFlag bool `json:"-" xorm:"-" form:"favoriteflag"` // 关注标志 true-已关注 false-未关注
  1035. PageEx `xorm:"extends"` // 页码信息
  1036. }
  1037. func (r *THJProduct) calc() {
  1038. }
  1039. func (r *THJProduct) buildSql() string {
  1040. var sqlId utils.SQLVal = `
  1041. select
  1042. to_char(t.WRSTANDARDID) WRSTANDARDID,
  1043. t.WRSTANDARDNAME,
  1044. t.BANNERPICURL,
  1045. t.PICTUREURLS,
  1046. t.THUMURLS
  1047. from wrstandard t
  1048. where t.IsValid = 1
  1049. and t.wrstandardid
  1050. %v
  1051. (select t.goodsid from UserFavoriteGoods t where t.userid = %v)
  1052. `
  1053. param := "not in"
  1054. if r.FavoriteFlag {
  1055. param = "in"
  1056. }
  1057. sqlId.FormatParam(param, r.UserID)
  1058. sqlId.Page(r.Page, r.PageSize)
  1059. return sqlId.String()
  1060. }
  1061. func (r *THJProduct) GetDataByPage() (interface{}, error, int, int, int) {
  1062. sData := make([]THJProduct, 0)
  1063. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1064. total := 0
  1065. for i := range sData {
  1066. sData[i].calc()
  1067. total = sData[i].Total
  1068. }
  1069. return sData, err, r.Page, r.PageSize, total
  1070. }
  1071. type THJTradeData struct {
  1072. RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照日期(yyyyMMdd)日照日期(yyyyMMdd)
  1073. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid" binding:"required"` // 市场ID 采购-64201 供求-65201
  1074. BUYTRADELOT int32 `json:"buytradelot" xorm:"BUYTRADELOT"` // 购买笔数
  1075. BUYTRADEQTY float64 `json:"buytradeqty" xorm:"BUYTRADEQTY"` // 购买数量
  1076. SELLTRADELOT int32 `json:"selltradelot" xorm:"SELLTRADELOT"` // 销售笔数
  1077. SELLTRADEQTY float64 `json:"selltradeqty" xorm:"SELLTRADEQTY"` // 销售数量
  1078. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  1079. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1080. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 被推荐人
  1081. PageEx `xorm:"extends"` // 页码信息
  1082. }
  1083. func (r *THJTradeData) calc() {
  1084. r.ACCOUNTNAME = EncryptByStar(r.ACCOUNTNAME)
  1085. }
  1086. func (r *THJTradeData) buildSql() string {
  1087. var sqlId utils.SQLVal = `
  1088. select
  1089. a.*
  1090. from
  1091. (select
  1092. to_char(to_date(t.reckondate, 'yyyymmdd'), 'yyyy-mm-dd') RECKONDATE,
  1093. wr.WRSTANDARDNAME,
  1094. ua.ACCOUNTNAME,
  1095. t.BUYTRADEQTY,
  1096. t.BUYTRADELOT,
  1097. t.SELLTRADEQTY,
  1098. t.SELLTRADELOT,
  1099. t.MARKETID,
  1100. t.updatetime
  1101. from Reckon_WRTradeSum t
  1102. left join wrstandard wr on t.wrstandardid = wr.wrstandardid
  1103. left join useraccount ua on t.userid = ua.userid
  1104. where
  1105. t.refereeuserid = %v
  1106. and
  1107. t.marketid = %v) a
  1108. order by a.updatetime desc
  1109. `
  1110. sqlId.FormatParam(r.USERID, r.MARKETID)
  1111. sqlId.Page(r.Page, r.PageSize)
  1112. return sqlId.String()
  1113. }
  1114. func (r *THJTradeData) GetDataByPage() (interface{}, error, int, int, int) {
  1115. sData := make([]THJTradeData, 0)
  1116. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1117. total := 0
  1118. for i := range sData {
  1119. sData[i].calc()
  1120. total = sData[i].Total
  1121. }
  1122. return sData, err, r.Page, r.PageSize, total
  1123. }
  1124. // THJGoodsDetailReq 商品详情
  1125. type THJGoodsDetailReq struct {
  1126. WRSTANDARDID int64 `form:"wrstandardid" binding:"required"` // 现货商品ID
  1127. }
  1128. // THJGoodsDetailRsp 商品详情
  1129. type THJGoodsDetailRsp struct {
  1130. GoodsInfo THJWrstandardDetail_GoodsInfo `json:"goodsinfo"` // 商品信息
  1131. SpotGoodsPriceLogs []THJSpotGoodsPriceLog `json:"spotgoodspricelogs"` // 历史价格走势
  1132. }
  1133. func (r *THJGoodsDetailReq) GetTHJGoodsDetail() (rsp *THJGoodsDetailRsp, err error) {
  1134. engine := db.GetEngine()
  1135. rsp = new(THJGoodsDetailRsp)
  1136. // 采购商品信息
  1137. var goodsInfo THJWrstandardDetail_GoodsInfo
  1138. sql := fmt.Sprintf(`
  1139. select
  1140. t.WRSTANDARDID,
  1141. t.WRSTANDARDCODE,
  1142. t.WRSTANDARDNAME,
  1143. t.PICTUREURLS,
  1144. t.BANNERPICURL,
  1145. p.SPOTGOODSPRICE
  1146. from wrstandard t
  1147. left join ERMCP_SpotGoodsPrice p on t.WRSTANDARDID = p.WRSTANDARDID and p.spotgoodsbrandid=0 and p.currencyid = 1
  1148. where t.WRSTANDARDID = %v
  1149. `, r.WRSTANDARDID)
  1150. if _, err = engine.SQL(sql).Get(&goodsInfo); err != nil {
  1151. return
  1152. }
  1153. rsp.GoodsInfo = goodsInfo
  1154. // 历史价格走势
  1155. spotGoodsPriceLogs := make([]THJSpotGoodsPriceLog, 0)
  1156. sql = fmt.Sprintf(`
  1157. select
  1158. t.SPOTGOODSPRICE,
  1159. t.TRADEDATE
  1160. from ERMCP_SpotGoodsPriceLog t
  1161. where t.wrstandardid = %v
  1162. and t.SPOTGOODSBRANDID = 0
  1163. and t.CURRENCYID = 1
  1164. order by t.tradedate
  1165. `, r.WRSTANDARDID)
  1166. if err = engine.SQL(sql).Find(&spotGoodsPriceLogs); err != nil {
  1167. return
  1168. }
  1169. rsp.SpotGoodsPriceLogs = spotGoodsPriceLogs
  1170. return
  1171. }
  1172. type PurchaseTransfer struct {
  1173. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  1174. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1175. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME" form:"wrstandardname"` // 现货商品名称(模糊查询)
  1176. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  1177. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  1178. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  1179. REFGOODSID int64 `json:"refgoodsid" xorm:"REFGOODSID"` // 参考商品ID
  1180. PageEx `xorm:"extends"` // 页码信息
  1181. }
  1182. func (r *PurchaseTransfer) calc() {
  1183. }
  1184. func (r *PurchaseTransfer) buildSql() string {
  1185. var sqlId utils.SQLVal = `
  1186. select
  1187. wr.WRSTANDARDID ,
  1188. wr.WRSTANDARDCODE,
  1189. wr.WRSTANDARDNAME,
  1190. wr.UNITID ,
  1191. wr.THUMURLS ,
  1192. wr.PICTUREURLS ,
  1193. wr.REFGOODSID
  1194. from wrstandard wr
  1195. where wr.wrstandardid in (
  1196. select td.wrstandardid
  1197. from THJ_PurchaseTransfer t
  1198. inner join THJ_PurchaseTradeDetail td on t.wrtradedetailid = td.wrtradedetailid
  1199. where t.TransferStatus = 1)
  1200. and %v
  1201. order by wr.wrstandardname
  1202. `
  1203. param := "1=1"
  1204. if r.WRSTANDARDNAME != "" {
  1205. param = fmt.Sprintf("wr.wrstandardname like '%%%v%%'", r.WRSTANDARDNAME)
  1206. }
  1207. sqlId.FormatParam(param)
  1208. sqlId.Page(r.Page, r.PageSize)
  1209. return sqlId.String()
  1210. }
  1211. func (r *PurchaseTransfer) GetDataByPage() (interface{}, error, int, int, int) {
  1212. sData := make([]PurchaseTransfer, 0)
  1213. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1214. total := 0
  1215. for i := range sData {
  1216. sData[i].calc()
  1217. total = sData[i].Total
  1218. }
  1219. return sData, err, r.Page, r.PageSize, total
  1220. }
  1221. type THJPurchaseTradeDetail_Goodsinfo struct {
  1222. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  1223. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1224. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME" form:"wrstandardname"` // 现货商品名称(模糊查询)
  1225. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  1226. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  1227. REFGOODSID int64 `json:"refgoodsid" xorm:"REFGOODSID"` // 参考商品ID
  1228. REFGOODSCODE string `json:"refgoodscode" xorm:"REFGOODSCODE"` // 参考商品代码
  1229. MINIVALUE int64 `json:"minivalue" xorm:"MINIVALUE"` // 最小变动值
  1230. MINIVALUEDP int64 `json:"minivaluedp" xorm:"MINIVALUEDP"` // 最小变动值小数位
  1231. }
  1232. type THJPurchaseTradeDetail_Date struct {
  1233. ENDMONTH string `json:"endmonth" xorm:"ENDMONTH"` // 交收月份(yyyy-mm)
  1234. TAKESTARTDATE string `json:"takestartdate" xorm:"TAKESTARTDATE"` // 提货开始日期
  1235. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 预售结束日期
  1236. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  1237. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 摘牌价格
  1238. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 摘牌数量
  1239. TRANSFERID string `json:"transferid" xorm:"TRANSFERID"` // 协议转让ID(332+Unix秒时间戳(10位)+xxxxxx)
  1240. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  1241. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让金额
  1242. }
  1243. type HistoryData struct {
  1244. Opened float64 `json:"o"` // 开盘价
  1245. Highest float64 `json:"h"` // 最高价
  1246. Lowest float64 `json:"l"` // 最低价
  1247. Closed float64 `json:"c"` // 收盘价
  1248. TotleVolume int `json:"tv"` // 总量(成交量)
  1249. TotleTurnover float64 `json:"tt"` // 总金额
  1250. HoldVolume int `json:"hv"` // 持仓量
  1251. Settle float64 `json:"s"` // 结算价,日线周期(包括)以上才有
  1252. TimeStamp time.Time `json:"ts"` // 时间
  1253. IsFill bool `json:"f"` // 是否补充数据
  1254. }
  1255. type THJPurchaseTradeDetailReq struct {
  1256. WRSTANDARDID int64 `form:"wrstandardid" binding:"required"` // 现货商品ID
  1257. }
  1258. // THJPurchaseTradeDetailRsp 合同转让详情
  1259. type THJPurchaseTradeDetailRsp struct {
  1260. GoodsInfo THJPurchaseTradeDetail_Goodsinfo `json:"goodsinfo"` // 商品信息
  1261. DeliveryDates []THJPurchaseTradeDetail_Date `json:"deliverydate"` // 交割日期
  1262. SpotGoodsPriceLogs []THJSpotGoodsPriceLog `json:"spotgoodspricelogs"` // 历史价格走势
  1263. // History []HistoryData `json:"history"` // 历史价格走势(历史数据日线)
  1264. }
  1265. // GetTHJWrstandardDetail 获取采购商品详情
  1266. func (r *THJPurchaseTradeDetailReq) GetData() (rsp *THJPurchaseTradeDetailRsp, err error) {
  1267. engine := db.GetEngine()
  1268. rsp = new(THJPurchaseTradeDetailRsp)
  1269. // 采购商品信息
  1270. var goodsInfo THJPurchaseTradeDetail_Goodsinfo
  1271. sql := fmt.Sprintf(`
  1272. select
  1273. t.WRSTANDARDID ,
  1274. t.WRSTANDARDCODE,
  1275. t.WRSTANDARDNAME,
  1276. t.UNITID ,
  1277. t.PICTUREURLS ,
  1278. t.REFGOODSID ,
  1279. t.REFGOODSCODE,
  1280. t.MINIVALUE,
  1281. t.MINIVALUEDP
  1282. from wrstandard t
  1283. where t.wrstandardid = %v
  1284. `, r.WRSTANDARDID)
  1285. if _, err = engine.SQL(sql).Get(&goodsInfo); err != nil {
  1286. return
  1287. }
  1288. rsp.GoodsInfo = goodsInfo
  1289. // 交割日期
  1290. deliveryDates := make([]THJPurchaseTradeDetail_Date, 0)
  1291. sql = fmt.Sprintf(`
  1292. select
  1293. to_char(pi.TAKESTARTDATE, 'yyyy-mm') ENDMONTH,
  1294. to_char(pi.TAKESTARTDATE, 'yyyy-mm-dd') TAKESTARTDATE,
  1295. to_char(pi.ENDDATE, 'yyyy-mm-dd') ENDDATE,
  1296. td.DEPOSITRATE,
  1297. td.TRADEPRICE,
  1298. td.TRADEQTY,
  1299. t.TRANSFERPRICE,
  1300. t.TRANSFERAMOUNT,
  1301. wr.REFGOODSID,
  1302. to_char(t.TRANSFERID) TRANSFERID
  1303. from THJ_PurchaseTransfer t
  1304. inner join THJ_PurchaseTradeDetail td on t.wrtradedetailid = td.wrtradedetailid
  1305. inner join WR_PresaleInfo pi on t.presaleapplyid = pi.presaleapplyid
  1306. inner join wrstandard wr on wr.wrstandardid = td.wrstandardid
  1307. where t.transferstatus = 1 and td.wrstandardid = %v
  1308. order by pi.takestartdate, td.depositrate
  1309. `, r.WRSTANDARDID)
  1310. if err = engine.SQL(sql).Find(&deliveryDates); err != nil {
  1311. return
  1312. }
  1313. rsp.DeliveryDates = deliveryDates
  1314. // 历史价格走势
  1315. // cycleDatas, err := GetHistoryCycleDatas(CycleTypeMinutesDay, goodsInfo.REFGOODSCODE, nil, nil, 50, true)
  1316. // if err != nil {
  1317. // return
  1318. // }
  1319. // // 获取目标商品报价小数位
  1320. // dcplace := mtpcache.GetGoodsDecimalplace(goodsInfo.REFGOODSCODE)
  1321. // // 计算最终价格
  1322. // rst := make([]HistoryData, 0)
  1323. // for _, v := range cycleDatas {
  1324. // historyData := HistoryData{
  1325. // Opened: utils.IntToFloat64(v.Open, dcplace),
  1326. // Highest: utils.IntToFloat64(v.High, dcplace),
  1327. // Lowest: utils.IntToFloat64(v.Low, dcplace),
  1328. // Closed: utils.IntToFloat64(v.Close, dcplace),
  1329. // TotleVolume: v.TV,
  1330. // TotleTurnover: float64(v.TT),
  1331. // HoldVolume: v.HV,
  1332. // Settle: utils.IntToFloat64(v.SP, dcplace),
  1333. // TimeStamp: time.Unix(int64(v.ST), 0),
  1334. // }
  1335. // rst = append(rst, historyData)
  1336. // }
  1337. // rsp.History = rst
  1338. // 历史价格走势
  1339. spotGoodsPriceLogs := make([]THJSpotGoodsPriceLog, 0)
  1340. sql = fmt.Sprintf(`
  1341. select
  1342. t.SPOTGOODSPRICE,
  1343. t.TRADEDATE
  1344. from ERMCP_SpotGoodsPriceLog t
  1345. where t.wrstandardid = %v
  1346. and t.SPOTGOODSBRANDID = 0
  1347. and t.CURRENCYID = 1
  1348. order by t.tradedate
  1349. `, r.WRSTANDARDID)
  1350. if err = engine.SQL(sql).Find(&spotGoodsPriceLogs); err != nil {
  1351. return
  1352. }
  1353. rsp.SpotGoodsPriceLogs = spotGoodsPriceLogs
  1354. return
  1355. }
  1356. // Thjpurchasetransfer 铁合金采购协议表
  1357. type Thjpurchasetransfer struct {
  1358. TRANSFERID string `json:"transferid" xorm:"TRANSFERID"` // 协议转让ID(332+Unix秒时间戳(10位)+xxxxxx)
  1359. WRTRADEDETAILID string `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 采购成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  1360. PRESALEAPPLYID string `json:"presaleapplyid" xorm:"PRESALEAPPLYID"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  1361. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1362. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID
  1363. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1364. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1365. WAREHOUSEID int64 `json:"warehouseid" xorm:"WAREHOUSEID"` // 仓库ID
  1366. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID(固定为(64202)
  1367. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID"` // 卖方用户ID
  1368. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID
  1369. TRANSFERQTY int64 `json:"transferqty" xorm:"TRANSFERQTY"` // 数量
  1370. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  1371. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让金额
  1372. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  1373. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID"` // 买方用户ID
  1374. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID
  1375. CONTRACTADDR string `json:"contractaddr" xorm:"CONTRACTADDR"` // 协议转让合同地址
  1376. SELLCHARGEALGORITHM int32 `json:"sellchargealgorithm" xorm:"SELLCHARGEALGORITHM"` // 卖方手续费收取方式 1:比率 2:固定
  1377. SELLCHARGEALGORITHMVALUE float64 `json:"sellchargealgorithmvalue" xorm:"SELLCHARGEALGORITHMVALUE"` // 手续费设置值(交易所部分)
  1378. SELLCHARGE float64 `json:"sellcharge" xorm:"SELLCHARGE"` // 卖方手续费值
  1379. TRANSFERTRADEDATE string `json:"transfertradedate" xorm:"TRANSFERTRADEDATE"` // 转让交易日
  1380. TRANSFERSTATUS int32 `json:"transferstatus" xorm:"TRANSFERSTATUS"` // 转让状态 - 1:挂牌中 2:已撤销 3:处理中 4:已转让
  1381. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  1382. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 参考价
  1383. PAYEDDEPOSIT float64 `json:"payeddeposit" xorm:"PAYEDDEPOSIT"` // 买方已付定金(预付款)
  1384. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1385. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1386. ORDERTYPE int `json:"ordertype" xorm:"ORDERTYPE" form:"ordertype" binding:"required"` // 类型 - 1:转让委托 - 挂牌中(卖方) 2:转让成交(卖方) 3:转让委托 - 已完成(卖方)
  1387. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  1388. ENDDATEMONTH string `json:"enddatemonth" xorm:"ENDDATEMONTH"` // 交收月份(提货日期)
  1389. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 到期日期
  1390. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 转让挂牌时间
  1391. TRANSFERTRADETIME string `json:"transfertradetime" xorm:"TRANSFERTRADETIME"` // 转让成交时间
  1392. PRESALESTATUS int32 `json:"presalestatus" xorm:"PRESALESTATUS"` // 预售状态 1:未开始 2:进行中 3:已结束 4:已关闭 5:处理中 6::处理失败 7:已完成
  1393. POINTFLAG bool `json:"pointflag" xorm:"POINTFLAG"` // 是否已点价
  1394. POINTPRICE float64 `json:"pointprice" xorm:"POINTPRICE"` // 已点价格
  1395. POINTINCOME float64 `json:"pointincome" xorm:"POINTINCOME"` // 点价总收益
  1396. PageEx `xorm:"extends"` // 页码信息
  1397. }
  1398. func (r *Thjpurchasetransfer) calc() {
  1399. }
  1400. func (r *Thjpurchasetransfer) buildSql() string {
  1401. var sqlId utils.SQLVal = `
  1402. select
  1403. wr.WRSTANDARDNAME,
  1404. p.TRADEPRICE,
  1405. p.PAYEDDEPOSIT,
  1406. to_char(t.TRANSFERID) TRANSFERID,
  1407. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  1408. to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  1409. t.TRADEDATE,
  1410. to_char(t.WRFACTORTYPEID) WRFACTORTYPEID,
  1411. t.DELIVERYGOODSID,
  1412. t.WRSTANDARDID,
  1413. t.WAREHOUSEID,
  1414. t.MARKETID,
  1415. t.SELLUSERID,
  1416. t.SELLACCOUNTID,
  1417. t.TRANSFERQTY,
  1418. t.TRANSFERPRICE,
  1419. t.TRANSFERAMOUNT,
  1420. t.REMARK,
  1421. t.BUYUSERID,
  1422. t.BUYACCOUNTID,
  1423. t.CONTRACTADDR,
  1424. t.SELLCHARGEALGORITHM,
  1425. t.SELLCHARGEALGORITHMVALUE,
  1426. t.SELLCHARGE,
  1427. t.TRANSFERTRADEDATE,
  1428. t.TRANSFERSTATUS,
  1429. t.HANDLESTATUS,
  1430. wr.UNITID,
  1431. to_char(pi.TAKESTARTDATE, 'yyyy-MM') ENDDATEMONTH,
  1432. to_char(pi.ENDDATE, 'yyyy-MM-dd') ENDDATE,
  1433. pi.PRESALESTATUS,
  1434. to_char(t.CREATETIME, 'yyyy-MM-dd hh24:mi:ss') CREATETIME,
  1435. to_char(t.TRANSFERTRADETIME, 'yyyy-MM-dd hh24:mi:ss') TRANSFERTRADETIME,
  1436. %v ORDERTYPE,
  1437. p.POINTFLAG,
  1438. p.POINTPRICE,
  1439. p.POINTINCOME
  1440. from THJ_PurchaseTransfer t
  1441. inner join THJ_PurchaseTradeDetail p on t.wrtradedetailid = p.wrtradedetailid
  1442. inner join wr_presaleinfo pi on pi.presaleapplyid = t.presaleapplyid
  1443. inner join wrstandard wr on t.wrstandardid = wr.wrstandardid
  1444. where %v and 1=1
  1445. order by t.CREATETIME desc
  1446. `
  1447. //转让委托 - 挂牌中 -卖方
  1448. param := fmt.Sprintf("t.selluserid = %v and t.transferstatus = 1", r.USERID)
  1449. if r.ORDERTYPE == 2 {
  1450. //转让成交 - 买方
  1451. param = fmt.Sprintf("t.buyuserid = %v", r.USERID)
  1452. } else if r.ORDERTYPE == 3 {
  1453. //转让委托 - 已完成 - 卖方
  1454. param = fmt.Sprintf("t.selluserid = %v and t.transferstatus in (2,3,4)", r.USERID)
  1455. }
  1456. sqlId.FormatParam(r.ORDERTYPE, param)
  1457. sqlId.Page(r.Page, r.PageSize)
  1458. return sqlId.String()
  1459. }
  1460. func (r *Thjpurchasetransfer) GetDataByPage() (interface{}, error, int, int, int) {
  1461. sData := make([]Thjpurchasetransfer, 0)
  1462. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1463. total := 0
  1464. for i := range sData {
  1465. sData[i].calc()
  1466. total = sData[i].Total
  1467. }
  1468. return sData, err, r.Page, r.PageSize, total
  1469. }
  1470. type ThjpurchasetransferDetail struct {
  1471. WRTRADEDETAILID string `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 采购成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  1472. TRANSFERID string `json:"transferid" xorm:"TRANSFERID" form:"transferid"` // 转让单号
  1473. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1474. TRANSFERPRICE float64 `json:"transferprice" xorm:"TRANSFERPRICE"` // 转让价格
  1475. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"TRANSFERAMOUNT"` // 转让金额
  1476. TRANSFERSTATUS int32 `json:"transferstatus" xorm:"TRANSFERSTATUS"` // 转让状态 - 1:挂牌中 2:已撤销 3:处理中 4:已转让
  1477. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 预售价格
  1478. PAYEDDEPOSIT float64 `json:"payeddeposit" xorm:"PAYEDDEPOSIT"` // 买方已付定金(预付款(含定金))
  1479. CONTRACTADDRBUY string `json:"contractaddrbuy" xorm:"CONTRACTADDRBUY"` // 贸易合同地址(买家)
  1480. CONTRACTADDRSELL string `json:"contractaddrsell" xorm:"CONTRACTADDRSELL"` // 贸易合同地址(卖家)
  1481. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1482. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1483. WAREHOUSENAME string `json:"warehousename" xorm:"WAREHOUSENAME"` // 仓库名称
  1484. BUYUSERNAME string `json:"buyusername" xorm:"BUYUSERNAME"` // 受让人
  1485. SELLUSERNAME string `json:"sellusername" xorm:"SELLUSERNAME"` // 转让人
  1486. TRANSFERQTY int32 `json:"transferqty" xorm:"TRANSFERQTY"` // 转让数量
  1487. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  1488. LASTPRICE float64 `json:"lastprice" xorm:"LASTPRICE"` // [实际价]到期价格
  1489. THJDELIVERYMODE int32 `json:"thjdeliverymode" xorm:"THJDELIVERYMODE"` // 交割方式 - 1:平台仓储 2:自提 3:代办运输 (枚举:THJDeliveryMode)
  1490. CONTACTNAME string `json:"contactname" xorm:"CONTACTNAME"` // 联系人姓名
  1491. CONTACTINFO string `json:"contactinfo" xorm:"CONTACTINFO"` // 联系方式
  1492. DESADDRESS string `json:"desaddress" xorm:"DESADDRESS"` // 目的地地址
  1493. RECEIPTINFO string `json:"receiptinfo" xorm:"RECEIPTINFO"` // 发票信息
  1494. ENDDATEMONTH string `json:"enddatemonth" xorm:"ENDDATEMONTH"` // 交收月份(提货日期)
  1495. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 到期日期
  1496. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 转让委托时间
  1497. TRANSFERTRADETIME string `json:"transfertradetime" xorm:"TRANSFERTRADETIME"` // 转让成交时间
  1498. CONTRACTADDR string `json:"contractaddr" xorm:"CONTRACTADDR"` // 协议转让合同地址
  1499. POINTFLAG bool `json:"pointflag" xorm:"POINTFLAG"` // 是否已点价
  1500. POINTPRICE float64 `json:"pointprice" xorm:"POINTPRICE"` // 已点价格
  1501. POINTINCOME float64 `json:"pointincome" xorm:"POINTINCOME"` // 点价总收益
  1502. SELLUSERID int64 `json:"-" xorm:"SELLUSERID"` // 转让卖方用户ID
  1503. FIRSTBUYUSERID int64 `json:"firstbuyuserid" xorm:"FIRSTBUYUSERID"` // 预售采购用户ID
  1504. }
  1505. func (r *ThjpurchasetransferDetail) calc() {
  1506. }
  1507. func (r *ThjpurchasetransferDetail) buildSql() string {
  1508. var sqlId utils.SQLVal = `
  1509. select
  1510. to_char(t.TRANSFERID) TRANSFERID,
  1511. t.WRSTANDARDID,
  1512. t.TRANSFERPRICE,
  1513. t.TRANSFERAMOUNT,
  1514. t.TRANSFERSTATUS,
  1515. d.TRADEPRICE,
  1516. d.PAYEDDEPOSIT,
  1517. d.CONTRACTADDRBUY,
  1518. d.CONTRACTADDRSELL,
  1519. wr.WRSTANDARDCODE,
  1520. wr.WRSTANDARDNAME,
  1521. wh.WAREHOUSENAME,
  1522. u1.accountname BUYUSERNAME,
  1523. u2.accountname SELLUSERNAME,
  1524. t.TRANSFERQTY,
  1525. d.DEPOSITRATE,
  1526. d.PAYEDDEPOSIT,
  1527. d.LASTPRICE,
  1528. d.THJDELIVERYMODE,
  1529. d.CONTACTNAME,
  1530. d.CONTACTINFO,
  1531. d.DESADDRESS,
  1532. d.RECEIPTINFO,
  1533. to_char(pi.TAKESTARTDATE, 'yyyy-MM') ENDDATEMONTH,
  1534. to_char(pi.ENDDATE, 'yyyy-MM-dd') ENDDATE,
  1535. to_char(t.CREATETIME, 'yyyy-MM-dd hh24:mi:ss') CREATETIME,
  1536. to_char(t.TRANSFERTRADETIME, 'yyyy-MM-dd hh24:mi:ss') TRANSFERTRADETIME,
  1537. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  1538. t.CONTRACTADDR,
  1539. t.SELLUSERID,
  1540. d.FIRSTBUYUSERID,
  1541. d.POINTFLAG,
  1542. d.POINTPRICE,
  1543. d.POINTINCOME
  1544. from THJ_PurchaseTransfer t
  1545. inner join THJ_PurchaseTradeDetail d on d.WRTRADEDETAILID = t.WRTRADEDETAILID
  1546. left join wr_presaleinfo pi on pi.presaleapplyid = t.presaleapplyid
  1547. left join wrstandard wr on wr.wrstandardid = t.wrstandardid
  1548. left join WAREHOUSEINFO wh on wh.autoid = t.warehouseid
  1549. left join useraccount u1 on u1.userid = t.buyuserid
  1550. left join useraccount u2 on u2.userid = t.selluserid
  1551. where t.TRANSFERID = %v
  1552. `
  1553. sqlId.FormatParam(r.TRANSFERID)
  1554. return sqlId.String()
  1555. }
  1556. // GetDataEx 从数据库中查询数据
  1557. func (r *ThjpurchasetransferDetail) GetDataEx() (interface{}, error) {
  1558. e := db.GetEngine()
  1559. s := e.SQL(r.buildSql())
  1560. sData := make([]ThjpurchasetransferDetail, 0)
  1561. if err := s.Find(&sData); err != nil {
  1562. return nil, err
  1563. }
  1564. for i := range sData {
  1565. sData[i].calc()
  1566. }
  1567. return sData, nil
  1568. }
  1569. type PromotionIncome struct {
  1570. PROFITMONTH string `json:"profitmonth" xorm:"PROFITMONTH"` // 时间
  1571. SUMAMOUNT float64 `json:"sumamount" xorm:"SUMAMOUNT"` // 金额
  1572. PROFITSTATUS int32 `json:"profitstatus" xorm:"PROFITSTATUS" form:"profitstatus"` // 状态 - 1:已支付 2:未支付 3:支取中
  1573. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1574. PageEx `xorm:"extends"` // 页码信息
  1575. }
  1576. func (r *PromotionIncome) calc() {
  1577. }
  1578. func (r *PromotionIncome) buildSql() string {
  1579. var sqlId utils.SQLVal = `
  1580. select
  1581. substr(t.reckondate, 0, 6) PROFITMONTH,
  1582. sum(t.profitamount) SUMAMOUNT
  1583. from THJ_Reckon_ProfitSum t
  1584. where t.userid = %v and %v
  1585. group by substr(t.reckondate, 0, 6)
  1586. order by substr(t.reckondate, 0, 6) desc
  1587. `
  1588. param := "1=1"
  1589. if r.PROFITSTATUS > 0 {
  1590. param = fmt.Sprintf("t.profitstatus = %v", r.PROFITSTATUS)
  1591. }
  1592. sqlId.FormatParam(r.USERID, param)
  1593. sqlId.Page(r.Page, r.PageSize)
  1594. return sqlId.String()
  1595. }
  1596. func (r *PromotionIncome) GetDataByPage() (interface{}, error, int, int, int) {
  1597. sData := make([]PromotionIncome, 0)
  1598. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1599. total := 0
  1600. for i := range sData {
  1601. sData[i].calc()
  1602. total = sData[i].Total
  1603. }
  1604. return sData, err, r.Page, r.PageSize, total
  1605. }
  1606. type PromotionIncomeDetail struct {
  1607. TRADETIME string `json:"tradetime" xorm:"TRADETIME"` // 时间
  1608. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID(自增 SEQ_GOODS 确保不重复)
  1609. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1610. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1611. MARKET string `json:"market" xorm:"MARKET"` // 市场
  1612. BUYORSELL string `json:"buyorsell" xorm:"BUYORSELL"` // 方向
  1613. PROFITROLETYPE string `json:"profitroletype" xorm:"PROFITROLETYPE"` // 级别
  1614. PROFITAMOUNT float64 `json:"profitamount" xorm:"PROFITAMOUNT"` // 金额
  1615. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1616. MOUTH string `json:"-" xorm:"-" form:"mouth" binding:"required"` // 月份,格式:yyyymm
  1617. PageEx `xorm:"extends"` // 页码信息
  1618. }
  1619. func (r *PromotionIncomeDetail) calc() {
  1620. }
  1621. func (r *PromotionIncomeDetail) buildSql() string {
  1622. var sqlId utils.SQLVal = `
  1623. select
  1624. to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  1625. wr.WRSTANDARDID,
  1626. wr.WRSTANDARDCODE,
  1627. wr.WRSTANDARDNAME,
  1628. en.enumdicname MARKET,
  1629. en1.enumdicname BUYORSELL,
  1630. case t.profitroletype when 3 then '一级' else '二级' end PROFITROLETYPE,
  1631. t.PROFITAMOUNT
  1632. from THJ_Reckon_ProfitRecode t
  1633. left join wrstandard wr on t.wrstandardid = wr.wrstandardid
  1634. left join enumdicitem en on t.marketid = en.enumitemname and en.enumdiccode='THJMarket'
  1635. left join enumdicitem en1 on t.buyorsell = en1.enumitemname and en1.enumdiccode='buyOrSell'
  1636. where substr(t.tradedate,0,6) = '%v' and t.userid = %v and t.profitroletype in (3,4)
  1637. order by t.tradetime desc
  1638. `
  1639. sqlId.FormatParam(r.MOUTH, r.USERID)
  1640. sqlId.Page(r.Page, r.PageSize)
  1641. return sqlId.String()
  1642. }
  1643. func (r *PromotionIncomeDetail) GetDataByPage() (interface{}, error, int, int, int) {
  1644. sData := make([]PromotionIncomeDetail, 0)
  1645. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1646. total := 0
  1647. for i := range sData {
  1648. sData[i].calc()
  1649. total = sData[i].Total
  1650. }
  1651. return sData, err, r.Page, r.PageSize, total
  1652. }
  1653. type THJUserLevelInfo struct {
  1654. LEVELGROUP string `json:"levelgroup" xorm:"LEVELGROUP"` // 当前等级
  1655. NEXTLEVELGROUPID string `json:"nextlevelgroup" xorm:"NEXTLEVELGROUP"` // 下一等级
  1656. CheckDay string `json:"checkday" xorm:"-"` // 最近一次考核日
  1657. AppUp int `json:"appup"` // 晋升已累计的数量
  1658. NotYet int `json:"notyet"` // 晋升还差多少数量
  1659. Progress float64 `json:"progress"` // 进度
  1660. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1661. }
  1662. func (r *THJUserLevelInfo) Get() (err error) {
  1663. type tmpStruct struct {
  1664. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  1665. LEVELGROUPID int32 `json:"levelgroupid" xorm:"LEVELGROUPID"` // 交易商级别分组(THJ)
  1666. BUYTOTALQTY int64 `json:"buytotalqty" xorm:"BUYTOTALQTY"` // 一级买总量(采购市场)(THJ)
  1667. BUYTOTALQTY2 int64 `json:"buytotalqty2" xorm:"BUYTOTALQTY2"` // 一级买总量(供求市场)(THJ)
  1668. BROKERPROFITRATE float64 `json:"brokerprofitrate" xorm:"BROKERPROFITRATE"` // 会员采购分出比例(THJ)
  1669. BROKERPROFITRATE2 float64 `json:"brokerprofitrate2" xorm:"BROKERPROFITRATE2"` // 会员供求分出比例(THJ)
  1670. BROKERPROFITRATE3 float64 `json:"brokerprofitrate3" xorm:"BROKERPROFITRATE3"` // 会员转让分出比例(THJ)
  1671. BUYTOTALQTY3 int64 `json:"buytotalqty3" xorm:"BUYTOTALQTY3"` // 一级买总量(合同转让)(THJ)
  1672. GROUPNAME string `json:"groupname" xorm:"GROUPNAME"` // 分级名称
  1673. GROUPNAME2 string `json:"groupname2" xorm:"GROUPNAME2"` // 下一级分级名称
  1674. UPBUYQTY int32 `json:"upbuyqty" xorm:"UPBUYQTY"` // 晋级一级采购总量
  1675. }
  1676. t := tmpStruct{}
  1677. sql := fmt.Sprintf(`
  1678. select
  1679. i.GROUPNAME,
  1680. i2.groupname GROUPNAME2,
  1681. nvl(i2.UPBUYQTY, -1) UPBUYQTY,
  1682. t.*
  1683. from thj_useraccount t
  1684. left join thj_investorlevelgroup i on i.levelgroupid = t.levelgroupid
  1685. left join thj_investorlevelgroup i2 on i2.grouplevel = (i.grouplevel + 1)
  1686. where t.userid = %v`, r.USERID)
  1687. _, err = db.GetEngine().SQL(sql).Get(&t)
  1688. if err != nil {
  1689. return
  1690. }
  1691. r.LEVELGROUP = t.GROUPNAME
  1692. r.NEXTLEVELGROUPID = t.GROUPNAME2
  1693. r.AppUp = int(t.BUYTOTALQTY) + int(t.BUYTOTALQTY2) + int(t.BUYTOTALQTY3)
  1694. if t.UPBUYQTY > 0 {
  1695. r.NotYet = int(t.UPBUYQTY) - r.AppUp
  1696. }
  1697. r.Progress = float64(r.AppUp) / float64(t.UPBUYQTY)
  1698. dates := make([]string, 0)
  1699. sql = `
  1700. select aa.d from
  1701. (select to_char(to_date(extract(year from sysdate) || t.checkday, 'yyyymmdd'),'yyyy-mm-dd') d,
  1702. (to_date(extract(year from sysdate) || t.checkday,'yyyymmdd') - sysdate) a
  1703. from thj_investorcheckday t
  1704. union
  1705. select to_char(to_date(extract(year from sysdate) + 1 || t.checkday, 'yyyymmdd'),'yyyy-mm-dd') d,
  1706. (to_date(extract(year from sysdate)+1 || t.checkday,'yyyymmdd') - sysdate) a
  1707. from thj_investorcheckday t) aa where aa.a >= 0 order by aa.a
  1708. `
  1709. err = db.GetEngine().SQL(sql).Find(&dates)
  1710. if err != nil {
  1711. return
  1712. }
  1713. if len(dates) > 0 {
  1714. r.CheckDay = dates[0]
  1715. }
  1716. return
  1717. }
  1718. // Spotgoodsprice 现货市价
  1719. type Spotgoodsprice struct {
  1720. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID(通用则为0)
  1721. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1722. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  1723. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"SPOTGOODSPRICE"` // 当前价格
  1724. PRESPOTGOODSPRICE float64 `json:"prespotgoodsprice" xorm:"PRESPOTGOODSPRICE"` // 上日价格
  1725. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1726. SPOTGOODSQTY float64 `json:"spotgoodsqty" xorm:"SPOTGOODSQTY"` // 招标量
  1727. PRICEFLAG int `json:"priceflag" xorm:"PRICEFLAG"` // 点价标识(1:为可点价-本月招标价已发布,否则为0)
  1728. YSTSPOTGOODSPRICE float64 `json:"ystspotgoodsprice" xorm:"YSTSPOTGOODSPRICE"` // 昨结价格
  1729. TODAYSPOTGOODSPRICE float64 `json:"todayspotgoodsprice" xorm:"TODAYSPOTGOODSPRICE"` // 今开价格
  1730. DIFFPRICE float64 `json:"diffprice" xorm:"DIFFPRICE"` // 差价
  1731. TRADEDATE2 string `json:"tradedate2" xorm:"TRADEDATE2"` // 交易日-期货(yyyyMMdd)
  1732. PageEx `xorm:"extends"` // 页码信息
  1733. }
  1734. func (r *Spotgoodsprice) calc() {
  1735. }
  1736. func (r *Spotgoodsprice) buildSql() string {
  1737. var sqlId utils.SQLVal = `
  1738. select
  1739. wr.WRSTANDARDID,
  1740. wr.WRSTANDARDCODE,
  1741. wr.wrstandardname,
  1742. t.prespotgoodsprice,
  1743. t.spotgoodsprice,
  1744. t.spotgoodsqty,
  1745. to_char(to_date(t.TRADEDATE, 'yyyymmdd'), 'yyyy-mm-dd') TRADEDATE,
  1746. t.ystspotgoodsprice,
  1747. t.todayspotgoodsprice,
  1748. t.diffprice,
  1749. t.tradedate2,
  1750. case
  1751. when t.diffprice > 0 and t.tradedate2 in (select t.tradedate from marketrun t where t.marketid=0) then 1
  1752. else 0 end priceflag
  1753. from ERMCP_SpotGoodsPrice t
  1754. left join wrstandard wr
  1755. on t.wrstandardid = wr.wrstandardid
  1756. where 1=1
  1757. `
  1758. sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID != 0)
  1759. sqlId.OrderBy("wr.wrstandardname")
  1760. sqlId.Page(r.Page, r.PageSize)
  1761. return sqlId.String()
  1762. }
  1763. func (r *Spotgoodsprice) GetDataByPage() (interface{}, error, int, int, int) {
  1764. sData := make([]Spotgoodsprice, 0)
  1765. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1766. total := 0
  1767. for i := range sData {
  1768. sData[i].calc()
  1769. total = sData[i].Total
  1770. }
  1771. return sData, err, r.Page, r.PageSize, total
  1772. }
  1773. // Thjspotquoteconfig THJ现货行情配置表
  1774. type Thjspotquoteconfig struct {
  1775. AUTOID int64 `json:"autoid" xorm:"AUTOID"` // 自增ID(SEQ_THJ_SPOTQUOTECONFIG)
  1776. SPOTSRC string `json:"spotsrc" xorm:"SPOTSRC"` // 现货来源
  1777. SPOTNAME string `json:"spotname" xorm:"SPOTNAME" form:"spotname"` // 现货名称
  1778. SPOTPRICE string `json:"spotprice" xorm:"SPOTPRICE"` // 现货招标价
  1779. SPOTQTY string `json:"spotqty" xorm:"SPOTQTY"` // 现货采购量
  1780. SPOTMONTH string `json:"spotmonth" xorm:"SPOTMONTH"` // 现货月份(yyyy-MM)
  1781. RELATEDID int64 `json:"relatedid" xorm:"RELATEDID"` // 关联新闻ID(Site_ColumnDetail)
  1782. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  1783. }
  1784. func (r *Thjspotquoteconfig) calc() {
  1785. }
  1786. func (r *Thjspotquoteconfig) buildSql() string {
  1787. var sqlId utils.SQLVal = `
  1788. select
  1789. t.AUTOID,
  1790. t.SPOTSRC,
  1791. t.SPOTNAME,
  1792. t.SPOTPRICE,
  1793. t.SPOTQTY,
  1794. t.SPOTMONTH,
  1795. t.RELATEDID,
  1796. to_char(t.updatetime, 'yyyy-MM-dd hh24:mi:ss') UPDATETIME
  1797. from THJ_SPOTQUOTECONFIG t
  1798. where 1 = 1
  1799. `
  1800. sqlId.AndEx("t.SPOTNAME", r.SPOTNAME, r.SPOTNAME != "")
  1801. sqlId.OrderBy("t.SPOTMONTH desc, t.SPOTNAME")
  1802. return sqlId.String()
  1803. }
  1804. // GetDataEx 从数据库中查询数据
  1805. func (r *Thjspotquoteconfig) GetDataEx() (interface{}, error) {
  1806. e := db.GetEngine()
  1807. s := e.SQL(r.buildSql())
  1808. sData := make([]Thjspotquoteconfig, 0)
  1809. if err := s.Find(&sData); err != nil {
  1810. return nil, err
  1811. }
  1812. for i := range sData {
  1813. sData[i].calc()
  1814. }
  1815. return sData, nil
  1816. }
  1817. type ThjSpotQuote struct {
  1818. SPOTNAME string `json:"spotname" xorm:"SPOTNAME"` // 现货名称
  1819. }
  1820. func (r *ThjSpotQuote) calc() {
  1821. }
  1822. func (r *ThjSpotQuote) buildSql() string {
  1823. var sqlId utils.SQLVal = `
  1824. select distinct
  1825. t.SPOTNAME
  1826. from THJ_SPOTQUOTECONFIG t
  1827. `
  1828. return sqlId.String()
  1829. }
  1830. // GetDataEx 从数据库中查询数据
  1831. func (r *ThjSpotQuote) GetDataEx() (interface{}, error) {
  1832. e := db.GetEngine()
  1833. s := e.SQL(r.buildSql())
  1834. sData := make([]ThjSpotQuote, 0)
  1835. if err := s.Find(&sData); err != nil {
  1836. return nil, err
  1837. }
  1838. for i := range sData {
  1839. sData[i].calc()
  1840. }
  1841. return sData, nil
  1842. }
  1843. func (r *Thjinvestorlevelgroup) calc() {
  1844. }
  1845. func (r *Thjinvestorlevelgroup) buildSql() string {
  1846. var sqlId utils.SQLVal = `
  1847. select t.* from thj_investorlevelgroup t order by t.grouplevel
  1848. `
  1849. return sqlId.String()
  1850. }
  1851. // GetDataEx 从数据库中查询数据
  1852. func (r *Thjinvestorlevelgroup) GetDataEx() (interface{}, error) {
  1853. e := db.GetEngine()
  1854. s := e.SQL(r.buildSql())
  1855. sData := make([]Thjinvestorlevelgroup, 0)
  1856. if err := s.Find(&sData); err != nil {
  1857. return nil, err
  1858. }
  1859. for i := range sData {
  1860. sData[i].calc()
  1861. }
  1862. return sData, nil
  1863. }
  1864. type THJFriend struct {
  1865. FRIENDUSERID string `json:"frienduserid" xorm:"FRIENDUSERID" form:"frienduserid"` // 用户UserID
  1866. CUSTOMERNAME string `json:"customername" xorm:"CUSTOMERNAME" form:"customername"` // 客户名称(企业名称),模糊查询
  1867. MOBILE string `json:"mobile" xorm:"MOBILE" form:"mobile"` // 手机号码(加密存储),加密串精确查询
  1868. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1869. GROUPNAME string `json:"groupname" xorm:"GROUPNAME"` // 分级名称
  1870. ACCOUTSTATUS string `json:"accoutstatus" xorm:"ACCOUTSTATUS"` // 状态
  1871. HASAUTH int32 `json:"hasauth" xorm:"HASAUTH"` // 是否已实名认证 - 0:未认证 1:已认证 2:已提交(待审核) 3:已拒绝
  1872. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1873. LEVELGROUPID int64 `json:"-" xorm:"-" form:"levelgroupid"` // 等级ID
  1874. PageEx `xorm:"extends"` // 页码信息
  1875. }
  1876. func (r *THJFriend) calc() {
  1877. }
  1878. func (r *THJFriend) buildSql() string {
  1879. var sqlId utils.SQLVal = `
  1880. select
  1881. t.USERID FRIENDUSERID,
  1882. t.CUSTOMERNAME,
  1883. t.MOBILE,
  1884. g.GROUPNAME,
  1885. ed.enumdicname ACCOUTSTATUS,
  1886. ua.HASAUTH,
  1887. t.CREATETIME
  1888. from userinfo t
  1889. inner join useraccount ua on t.userid = ua.userid
  1890. left join THJ_UserAccount thjua on t.userid = thjua.userid
  1891. left join thj_investorlevelgroup g on thjua.levelgroupid = g.levelgroupid
  1892. left join enumdicitem ed on ed.enumdiccode = 'accountstatus' and ua.accountstatus = ed.enumitemname
  1893. where ua.refereeuserid = %v
  1894. `
  1895. sqlId.FormatParam(r.USERID)
  1896. sqlId.AndLike("t.customername", r.CUSTOMERNAME)
  1897. sqlId.AndEx("t.mobile", r.MOBILE, r.MOBILE != "")
  1898. sqlId.AndEx("g.levelgroupid", r.LEVELGROUPID, r.LEVELGROUPID != 0)
  1899. sqlId.Page(r.Page, r.PageSize)
  1900. return sqlId.String()
  1901. }
  1902. func (r *THJFriend) GetDataByPage() (interface{}, error, int, int, int) {
  1903. sData := make([]THJFriend, 0)
  1904. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1905. total := 0
  1906. for i := range sData {
  1907. sData[i].calc()
  1908. total = sData[i].Total
  1909. }
  1910. return sData, err, r.Page, r.PageSize, total
  1911. }
  1912. type THJProfit struct {
  1913. Marketname string `json:"marketname" xorm:"marketname"` // 市场
  1914. Firend string `json:"firend" xorm:"firend"` // 下单好友
  1915. Buyorselldisplay string `json:"buyorselldisplay" xorm:"buyorselldisplay"` // 方向
  1916. Wrstandardname string `json:"wrstandardname" xorm:"wrstandardname"` // 商品
  1917. Tradeqty int `json:"tradeqty" xorm:"tradeqty"` // 成交数量
  1918. Chargeamount float64 `json:"chargeamount" xorm:"chargeamount"` // 手续费总额
  1919. Profitamount float64 `json:"profitamount" xorm:"profitamount"` // 分润金额
  1920. Profitroletypedisplay string `json:"profitroletypedisplay" xorm:"profitroletypedisplay"` // 分润角色
  1921. Brokerrate string `json:"brokerrate" xorm:"brokerrate"` // 会员比例
  1922. Brokerprofitrate string `json:"brokerprofitrate" xorm:"brokerprofitrate"` // 会员释出比例
  1923. Levelonevalue string `json:"levelonevalue" xorm:"levelonevalue"` // 一级比例
  1924. Leveltwovalue string `json:"leveltwovalue" xorm:"leveltwovalue"` // 二级比例
  1925. Tradeid string `json:"tradeid" xorm:"tradeid"` // 成交单号
  1926. Tradetimedisplay string `json:"tradetimedisplay" xorm:"tradetimedisplay"` // 成交时间
  1927. USERID int64 `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  1928. MarketID int `json:"-" xorm:"-" form:"marketid"` // 市场ID
  1929. Accountname string `json:"-" xorm:"-" form:"accountname"` // 好友名称,模糊查询
  1930. Goods string `json:"-" xorm:"-" form:"goods"` // 商品代码或商品名称,模糊查询
  1931. PROFITROLETYPE int32 `json:"-" xorm:"-" form:"profitroletype"` // 分润机构角色 - 1:平台 2:经纪会员 3:一级交易商 4:二级交易商(枚举:THJProfitRoleType)
  1932. PageEx `xorm:"extends"` // 页码信息
  1933. }
  1934. func (r *THJProfit) calc() {
  1935. }
  1936. func (r *THJProfit) buildSql() string {
  1937. var sqlId utils.SQLVal = `
  1938. select
  1939. m1.enumdicname "marketname",
  1940. ua2.accountname "firend",
  1941. m2.enumdicname "buyorselldisplay",
  1942. wr.wrstandardcode || '/' || wr.wrstandardname "wrstandardname",
  1943. htd.tradeqty "tradeqty",
  1944. t.chargeamount "chargeamount",
  1945. t.profitamount "profitamount",
  1946. m4.enumdicname "profitroletypedisplay",
  1947. to_char(t.brokerrate * 100, 'fm999999990.00') || '%' "brokerrate",
  1948. to_char(t.brokerprofitrate * 100, 'fm999999990.00') || '%' "brokerprofitrate",
  1949. case t.levelonealgorithm
  1950. when 0 then
  1951. '-'
  1952. when 1 then
  1953. '比例/' || to_char(to_char(t.levelonevalue * 100, 'fm999999990.00')) || ' %'
  1954. else
  1955. '固定/' || to_char(t.levelonevalue, 'fm999999990.00')
  1956. end "levelonevalue",
  1957. case t.leveltwoalgorithm
  1958. when 0 then
  1959. '-'
  1960. when 1 then
  1961. '比例/' || to_char(to_char(t.leveltwovalue * 100, 'fm999999990.00')) || ' %'
  1962. else
  1963. '固定/' || to_char(t.leveltwovalue, 'fm999999990.00')
  1964. end "leveltwovalue",
  1965. to_char(t.tradetime, 'yyyy-MM-dd hh24:mi:ss') "tradetimedisplay",
  1966. to_char(t.tradeid) "tradeid"
  1967. from THJ_Reckon_ProfitRecode t
  1968. left join enumdicitem m1
  1969. on m1.enumdiccode = 'THJMarket'
  1970. and t.marketid = m1.enumitemname
  1971. left join enumdicitem m2
  1972. on m2.enumdiccode = 'buyOrSell'
  1973. and t.buyorsell = m2.enumitemname
  1974. left join enumdicitem m4
  1975. on m4.enumdiccode = 'THJProfitRoleType'
  1976. and t.profitroletype = m4.enumitemname
  1977. left join wrstandard wr
  1978. on t.wrstandardid = wr.wrstandardid
  1979. left join useraccount ua
  1980. on ua.userid = t.userid
  1981. left join (select a.transferid tradeid,
  1982. 1 buyorsell,
  1983. a.selluserid userid,
  1984. a.transferqty tradeqty
  1985. from THJ_PurchaseTransfer a
  1986. union
  1987. select a2.wrtradedetailid tradeid,
  1988. a2.buyorsell buyorsell,
  1989. ta2.userid userid,
  1990. a2.tradeqty tradeqty
  1991. from his_wrtrade_tradedetail a2
  1992. left join taaccount ta2
  1993. on a2.accountid = ta2.accountid
  1994. where a2.isvaliddata = 1) htd
  1995. on t.tradeid = htd.tradeid
  1996. and t.buyorsell = htd.buyorsell
  1997. left join useraccount ua2
  1998. on ua2.userid = htd.userid
  1999. where 1=1
  2000. `
  2001. // sqlId.FormatParam(r.USERID) // 发生错误 %!v(MISSING)
  2002. // sqlId = utils.SQLVal(fmt.Sprintf(string(sqlId), r.USERID))
  2003. sqlId.AndEx("t.userid", r.USERID, r.USERID != 0)
  2004. sqlId.AndEx("t.marketid", r.MarketID, r.MarketID != 0)
  2005. sqlId.AndLike("ua2.accountname", r.Accountname)
  2006. sqlId.AndLikes2("wr.wrstandardcode", "wr.wrstandardname", r.Goods)
  2007. sqlId.AndEx(" t.profitroletype", r.PROFITROLETYPE, r.PROFITROLETYPE != 0)
  2008. sqlId.OrderByDesc("t.tradetime")
  2009. sqlId.Page(r.Page, r.PageSize)
  2010. return sqlId.String()
  2011. }
  2012. func (r *THJProfit) GetDataByPage() (interface{}, error, int, int, int) {
  2013. sData := make([]THJProfit, 0)
  2014. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2015. total := 0
  2016. for i := range sData {
  2017. sData[i].calc()
  2018. total = sData[i].Total
  2019. }
  2020. return sData, err, r.Page, r.PageSize, total
  2021. }
  2022. // 定金比例个性化查询
  2023. type GThjinvesotrdeposit struct {
  2024. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  2025. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 定金比例
  2026. DEPOSITQTY int64 `json:"-" xorm:"DEPOSITQTY"` // 可用量
  2027. QTY int64 `json:"qty" xorm:"QTY"` // 可用量
  2028. PRESALEAPPLYID string `json:"-" xorm:"-" form:"presaleapplyid" binding:"required"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  2029. PageEx `xorm:"extends"` // 页码信息
  2030. }
  2031. func (r *GThjinvesotrdeposit) calc() {
  2032. }
  2033. func (r *GThjinvesotrdeposit) buildSql() string {
  2034. var sqlId utils.SQLVal = `
  2035. select
  2036. t.DEPOSITRATE,
  2037. sum(t.depositqty) QTY
  2038. from THJ_InvesotrDeposit t
  2039. where (
  2040. t.userid = %v or
  2041. t.userid in (select t.refereeuserid from useraccount t where t.userid=%v))
  2042. AND t.depositrate not in (select distinct t.depositrate from THJ_PresaleApplyDeposit t where t.presaleapplyid = %v
  2043. ) and t.depositqty >0
  2044. group by t.depositrate
  2045. order by t.depositrate
  2046. `
  2047. sqlId.FormatParam(r.USERID, r.USERID, r.PRESALEAPPLYID)
  2048. sqlId.Page(r.Page, r.PageSize)
  2049. return sqlId.String()
  2050. }
  2051. func (r *GThjinvesotrdeposit) GetDataByPage() (interface{}, error, int, int, int) {
  2052. sData := make([]GThjinvesotrdeposit, 0)
  2053. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2054. total := 0
  2055. for i := range sData {
  2056. sData[i].calc()
  2057. total = sData[i].Total
  2058. }
  2059. return sData, err, r.Page, r.PageSize, total
  2060. }
  2061. type QueryMyDepositReq struct {
  2062. UserId int64 `form:"userid" binding:"required"` // 用户ID
  2063. }
  2064. func (r *Thjinvesotrdeposit) GetAll(req QueryMyDepositReq) (rsp []Thjinvesotrdeposit, err error) {
  2065. rsp = make([]Thjinvesotrdeposit, 0)
  2066. err = db.GetEngine().Where("userid = ?", req.UserId).Find(&rsp)
  2067. return
  2068. }
  2069. // 比例变更流水
  2070. type GThjinvesotrdepositlog struct {
  2071. LOGID string `json:"logid" xorm:"LOGID"` // 流水ID(336+Unix秒时间戳(10位)+xxxxxx)
  2072. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  2073. DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE" form:"depositrate" binding:"required"` // 定金比例(选中比例)
  2074. ORIDEPOSITQTY int64 `json:"oridepositqty" xorm:"ORIDEPOSITQTY"` // 可用量(变更前)
  2075. CHANGEQTY int64 `json:"changeqty" xorm:"CHANGEQTY"` // 变更量
  2076. CURDEPOSITQTY string `json:"curdepositqty" xorm:"CURDEPOSITQTY"` // 可用量(变更后)
  2077. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID"` // 采购用户ID
  2078. WRTRADEDETAILID int64 `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 采购成交单ID
  2079. UPDATORID int64 `json:"updatorid" xorm:"UPDATORID"` // 更新人
  2080. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  2081. Accountname string `json:"accountname" xorm:"ACCOUNTNAME"` // 用户名
  2082. PageEx `xorm:"extends"` // 页码信息
  2083. }
  2084. func (r *GThjinvesotrdepositlog) calc() {
  2085. }
  2086. func (r *GThjinvesotrdepositlog) buildSql() string {
  2087. var sqlId utils.SQLVal = `
  2088. select
  2089. t.UPDATETIME,
  2090. t.ORIDEPOSITQTY,
  2091. t.CHANGEQTY,
  2092. t.CURDEPOSITQTY,
  2093. ua.ACCOUNTNAME,
  2094. t.WRTRADEDETAILID
  2095. from THJ_InvesotrDepositLog t
  2096. left join useraccount ua on t.buyuserid = ua.userid
  2097. where t.userid = %v and t.depositrate = %v
  2098. order by t.logid desc
  2099. `
  2100. sqlId.FormatParam(r.USERID, r.DEPOSITRATE)
  2101. sqlId.Page(r.Page, r.PageSize)
  2102. return sqlId.String()
  2103. }
  2104. func (r *GThjinvesotrdepositlog) GetDataByPage() (interface{}, error, int, int, int) {
  2105. sData := make([]GThjinvesotrdepositlog, 0)
  2106. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2107. total := 0
  2108. for i := range sData {
  2109. sData[i].calc()
  2110. total = sData[i].Total
  2111. }
  2112. return sData, err, r.Page, r.PageSize, total
  2113. }