ermcp8.go 131 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159
  1. package models
  2. import (
  3. "fmt"
  4. "mtp2_if/db"
  5. "mtp2_if/logger"
  6. "mtp2_if/mtpcache"
  7. "mtp2_if/pb"
  8. "mtp2_if/rediscli"
  9. "mtp2_if/utils"
  10. "sort"
  11. "strconv"
  12. "strings"
  13. "time"
  14. "google.golang.org/protobuf/proto"
  15. )
  16. // Ermcp2himiddlegoodsOrc 项目套保品种明细
  17. type Ermcp2himiddlegoodsOrc struct {
  18. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  19. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种ID
  20. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  21. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  22. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  23. SPOTCONVERTRATIO float64 `json:"spotconvertratio" xorm:"SPOTCONVERTRATIO"` // 折算系数 [现货]
  24. UNEXESPOTQTY float64 `json:"unexespotqty" xorm:"UNEXESPOTQTY"` // 未执行现货量
  25. UNEXEHEDGEQTY float64 `json:"unexehedgeqty" xorm:"UNEXEHEDGEQTY"` // 未执行套期量 = 未执行现货量*折算系数* (1/(1+增值税)) * 套期比例(项目上)
  26. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货持仓套期量
  27. HIEXPSOURE float64 `json:"hiexpsoure" xorm:"HIEXPSOURE"` // 期现敞口量 = 未执行套期量 + 期货持仓套期量
  28. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  29. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  30. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  31. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  32. }
  33. // TableName is ERMCP2_HIMIDDLEGOODS
  34. func (r *Ermcp2himiddlegoodsOrc) TableName() string {
  35. return "ERMCP2_HIMIDDLEGOODS"
  36. }
  37. // Ermcp2hedgeditem 被套期项目表
  38. type Ermcp2hedgeditemOrc struct {
  39. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  40. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  41. HEDGEDITEMNAME string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  42. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  43. PLANSTARTDATE time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  44. PLANENDDATE time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  45. HEDGERATE float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套期比率
  46. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  47. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  48. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  49. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  50. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  51. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  52. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  53. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  54. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  55. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  56. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  57. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  58. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  59. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  60. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  61. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  62. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  63. HEDGERESTAMOUNT float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  64. HEDGECONTRACTAMOUNT float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  65. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  66. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  67. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  68. EXERESTAMOUNT float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  69. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  70. EXECONTRACTAMOUNT float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  71. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  72. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  73. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  74. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  75. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  76. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  77. HEDGESUMPL float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  78. SPOTTRADEPL float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  79. VATPL float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  80. SUMOBSPL float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  81. SPOTBOOKAMOUNT float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  82. CURSTOCK float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  83. ENDDATE time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  84. ENDTRADEDATE string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  85. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  86. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  87. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  88. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  89. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  90. SPOTFLOATPL float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  91. FUTUREFLOATPL float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  92. }
  93. // TableName is ERMCP2_HEDGEDITEM
  94. func (r *Ermcp2hedgeditemOrc) TableName() string {
  95. return "ERMCP2_HEDGEDITEM"
  96. }
  97. // Reckonermcp2hedgeditem 被套期项目日照表
  98. type Reckonermcp2hedgeditem struct {
  99. RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照时期(yyyyMMdd)
  100. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  101. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  102. HEDGEDITEMNAME string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  103. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  104. PLANSTARTDATE time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  105. PLANENDDATE time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  106. HEDGERATE float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套期比率
  107. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  108. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  109. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  110. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  111. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  112. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  113. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  114. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  115. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  116. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  117. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  118. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  119. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  120. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  121. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  122. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  123. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  124. HEDGERESTAMOUNT float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  125. HEDGECONTRACTAMOUNT float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  126. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  127. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  128. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  129. EXERESTAMOUNT float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  130. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  131. EXECONTRACTAMOUNT float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  132. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  133. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  134. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  135. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  136. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  137. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  138. HEDGESUMPL float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  139. SPOTTRADEPL float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  140. VATPL float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  141. SUMOBSPL float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  142. SPOTBOOKAMOUNT float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  143. CURSTOCK float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  144. ENDDATE time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  145. ENDTRADEDATE string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  146. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  147. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  148. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  149. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  150. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  151. SPOTFLOATPL float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  152. FUTUREFLOATPL float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  153. }
  154. // TableName is RECKON_ERMCP2_HEDGEDITEM
  155. func (r *Reckonermcp2hedgeditem) TableName() string {
  156. return "RECKON_ERMCP2_HEDGEDITEM"
  157. }
  158. // Reportermcp2hedgeditem 被套期项目报表表
  159. type Reportermcp2hedgeditem struct {
  160. CYCLETIME string `json:"cycletime" xorm:"CYCLETIME"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
  161. CYCLETYPE int32 `json:"cycletype" xorm:"CYCLETYPE"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
  162. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  163. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  164. HEDGEDITEMNAME string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  165. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  166. PLANSTARTDATE time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  167. PLANENDDATE time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  168. HEDGERATE float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套期比率
  169. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  170. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  171. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  172. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  173. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  174. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  175. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  176. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  177. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  178. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  179. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  180. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  181. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  182. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  183. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  184. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  185. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  186. HEDGERESTAMOUNT float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  187. HEDGECONTRACTAMOUNT float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  188. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  189. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  190. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  191. EXERESTAMOUNT float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  192. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  193. EXECONTRACTAMOUNT float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  194. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  195. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  196. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  197. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  198. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  199. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  200. HEDGESUMPL float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  201. SPOTTRADEPL float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  202. VATPL float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  203. SUMOBSPL float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  204. SPOTBOOKAMOUNT float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  205. CURSTOCK float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  206. ENDDATE time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  207. ENDTRADEDATE string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  208. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  209. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  210. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  211. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  212. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  213. SPOTFLOATPL float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  214. FUTUREFLOATPL float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  215. }
  216. // TableName is REPORT_ERMCP2_HEDGEDITEM
  217. func (r *Reportermcp2hedgeditem) TableName() string {
  218. return "REPORT_ERMCP2_HEDGEDITEM"
  219. }
  220. // Ermcp2hedgeditem 被套期项目表
  221. type Ermcp2hedgeditem struct {
  222. Hedgeditemid string `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  223. Hedgeditemnum string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  224. Hedgeditemname string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  225. Hedgedtype int32 `json:"hedgedtype" xorm:"HEDGEDTYPE" form:"hedgedtype"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  226. Planstartdate string `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  227. Planenddate string `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  228. Hedgerate float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套保比率
  229. Tradeuserid int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  230. Areauserid int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  231. Hedgeditemstatus int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS" form:"hedgeditemstatus"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  232. Applysrc int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  233. Applyid int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  234. Remark string `json:"remark" xorm:"REMARK"` // 备注
  235. Createtime string `json:"createtime" xorm:"CREATETIME"` // 申请时间
  236. Audittradedate string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  237. Auditid int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  238. Auditsrc int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  239. Audittime string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  240. Auditremark string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  241. Deliverygoodsid int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  242. Wrstandardid int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  243. Vatrate float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  244. Hedgeqty float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  245. Hedgeamount float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  246. Hedgerestamount float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  247. Hedgecontractamount float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  248. Oriavgprice float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  249. Exeqty float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  250. Exeamount float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  251. Exerestamount float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  252. Exeavgprice float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  253. Execontractamount float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  254. Curprice float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  255. Unexeqty float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  256. Spothedgepl float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  257. Spotpl float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  258. Futurehedgepl float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  259. Futurepl float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  260. Hedgesumpl float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  261. Spottradepl float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  262. Vatpl float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  263. Sumobspl float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  264. Spotbookamount float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  265. Curstock float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  266. Enddate string `json:"enddate" xorm:"ENDDATE"` // 完成日期
  267. Endtradedate string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  268. Updatetime string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  269. Orispothedgepl float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  270. Orifuturehedgepl float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  271. Orispotpl float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  272. Orifuturepl float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  273. Spotfloatpl float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  274. Futurefloatpl float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  275. SpotHedgePLChange float64 `json:"spothedgeplchange" xorm:"SPOTHEDGEPLCHANGE"` // 现货实际损益变动
  276. SpotPLChange float64 `json:"spotplchange" xorm:"SPOTPLCHANGE"` // 现货套期损益变动
  277. FutureHedgePLChange float64 `json:"futurehedgeplchange" xorm:"FUTUREHEDGEPLCHANGE"` // 期货实际损益变动
  278. FuturePLChange float64 `json:"futureplchange" xorm:"FUTUREPLCHANGE"` // 期货套期损益变动
  279. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 商品名称
  280. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  281. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  282. MiddleGoodsList []Ermcp2himiddlegoods `json:"middlegoodslist"` // 套期商品列表
  283. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户id, 用于过滤
  284. }
  285. // TableName is ERMCP2_HEDGEDITEM
  286. func (r *Ermcp2hedgeditem) TableName() string {
  287. return "ERMCP2_HEDGEDITEM"
  288. }
  289. func (r *Ermcp2hedgeditem) calc() {
  290. }
  291. func (r *Ermcp2hedgeditem) buildSql() string {
  292. var sqlId utils.SQLVal = `
  293. SELECT
  294. to_char(t.HEDGEDITEMID) HEDGEDITEMID,
  295. t.HEDGEDITEMNUM ,
  296. t.HEDGEDITEMNAME ,
  297. t.HEDGEDTYPE ,
  298. to_char(t.PLANSTARTDATE, 'yyyy-mm-dd') PLANSTARTDATE,
  299. to_char(t.PLANENDDATE, 'yyyy-mm-dd') PLANENDDATE,
  300. t.HEDGERATE ,
  301. t.TRADEUSERID ,
  302. t.AREAUSERID ,
  303. t.HEDGEDITEMSTATUS ,
  304. t.APPLYSRC ,
  305. t.APPLYID ,
  306. t.REMARK ,
  307. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  308. t.AUDITTRADEDATE ,
  309. t.AUDITID ,
  310. t.AUDITSRC ,
  311. to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME,
  312. t.AUDITREMARK ,
  313. t.DELIVERYGOODSID ,
  314. t.WRSTANDARDID ,
  315. t.VATRATE ,
  316. t.HEDGEQTY ,
  317. t.HEDGEAMOUNT ,
  318. t.HEDGERESTAMOUNT ,
  319. t.HEDGECONTRACTAMOUNT,
  320. t.ORIAVGPRICE ,
  321. t.EXEQTY ,
  322. t.EXEAMOUNT ,
  323. t.EXERESTAMOUNT ,
  324. t.EXEAVGPRICE ,
  325. t.EXECONTRACTAMOUNT ,
  326. t.CURPRICE ,
  327. t.UNEXEQTY ,
  328. t.SPOTHEDGEPL ,
  329. t.SPOTPL ,
  330. t.FUTUREHEDGEPL ,
  331. t.FUTUREPL ,
  332. t.HEDGESUMPL ,
  333. t.SPOTTRADEPL ,
  334. t.VATPL ,
  335. t.SUMOBSPL ,
  336. t.SPOTBOOKAMOUNT ,
  337. t.CURSTOCK ,
  338. to_char(t.ENDDATE, 'yyyy-mm-dd') ENDDATE,
  339. t.ENDTRADEDATE ,
  340. to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME,
  341. t.ORISPOTHEDGEPL ,
  342. t.ORIFUTUREHEDGEPL ,
  343. t.ORISPOTPL ,
  344. t.ORIFUTUREPL ,
  345. t.SPOTFLOATPL ,
  346. t.FUTUREFLOATPL ,
  347. (t.SpotHedgePL - t.OriSpotHedgePL) SPOTHEDGEPLCHANGE,
  348. (t.SpotPL - t.OriSpotPL) SPOTPLCHANGE,
  349. (t.FutureHedgePL - t.OriFutureHedgePL) FUTUREHEDGEPLCHANGE,
  350. (t.FuturePL - t.OriFuturePL) FUTUREPLCHANGE,
  351. wr.WRSTANDARDNAME,
  352. e.ENUMDICNAME,
  353. u.ACCOUNTNAME
  354. FROM ERMCP2_HedgedItem t
  355. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  356. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  357. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  358. WHERE 1 = 1
  359. AND %v in (t.AreaUserID, t.TradeUserID)
  360. `
  361. sqlId.FormatParam(r.USERID)
  362. sqlId.AndEx("t.Hedgedtype", r.Hedgedtype, r.Hedgedtype > 0)
  363. sqlId.AndEx("t.hedgeditemstatus", r.Hedgeditemstatus, r.Hedgeditemstatus > 0)
  364. return sqlId.String()
  365. }
  366. // GetDataEx 从数据库中查询数据
  367. func (r *Ermcp2hedgeditem) GetDataEx() (interface{}, error) {
  368. e := db.GetEngine()
  369. s := e.SQL(r.buildSql())
  370. sData := make([]Ermcp2hedgeditem, 0)
  371. if err := s.Find(&sData); err != nil {
  372. return nil, err
  373. }
  374. hedgeditemid := 0
  375. for i := range sData {
  376. hedgeditemid, _ = strconv.Atoi(sData[i].Hedgeditemid)
  377. sData[i].calc()
  378. }
  379. if len(sData) > 0 {
  380. // 获取关联期货品种
  381. m1 := Ermcp2himiddlegoods{HEDGEDITEMID: int64(hedgeditemid)}
  382. if d1, err := m1.GetDataEx(); err == nil {
  383. gpLst := d1.([]Ermcp2himiddlegoods)
  384. for i := range sData {
  385. sData[i].MiddleGoodsList = append(sData[i].MiddleGoodsList, gpLst...)
  386. }
  387. }
  388. }
  389. return sData, nil
  390. }
  391. // Ermcp2himiddlegoods 项目套保品种明细
  392. type Ermcp2himiddlegoods struct {
  393. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID" binding:"required"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  394. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID" binding:"required"` // 套保品种ID
  395. DELIVERYGOODSID int64 `json:"-" xorm:"DELIVERYGOODSID"` // 现货品种ID
  396. WRSTANDARDID int64 `json:"-" xorm:"WRSTANDARDID"` // 现货商品ID
  397. VATRATE float64 `json:"-" xorm:"VATRATE"` // 增值税
  398. SPOTCONVERTRATIO float64 `json:"-" xorm:"SPOTCONVERTRATIO"` // 折算系数 [现货]
  399. UNEXESPOTQTY float64 `json:"-" xorm:"UNEXESPOTQTY"` // 未执行现货量
  400. UNEXEHEDGEQTY float64 `json:"unexehedgeqty" xorm:"UNEXEHEDGEQTY"` // 未执行套期量 = 未执行现货量*折算系数* (1/(1+增值税)) * 套期比例(项目上)
  401. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货持仓套期量
  402. HIEXPSOURE float64 `json:"hiexpsoure" xorm:"HIEXPSOURE"` // 期现敞口量 = 未执行套期量 + 期货持仓套期量
  403. TRADEUSERID int64 `json:"-" xorm:"TRADEUSERID"` // 交易用户ID
  404. AREAUSERID int64 `json:"-" xorm:"AREAUSERID"` // 企业ID
  405. CREATETIME string `json:"-" xorm:"CREATETIME"` // 创建时间
  406. UPDATETIME string `json:"-" xorm:"UPDATETIME"` // 更新时间
  407. MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"MIDDLEGOODSNAME"` // 套保商品名称
  408. Middlegoodscode string `json:"middlegoodscode" xorm:"MIDDLEGOODSCODE"` // 套保商品代码
  409. }
  410. // TableName is ERMCP2_HIMIDDLEGOODS
  411. func (r *Ermcp2himiddlegoods) TableName() string {
  412. return "ERMCP2_HIMIDDLEGOODS"
  413. }
  414. func (r *Ermcp2himiddlegoods) calc() {
  415. }
  416. func (r *Ermcp2himiddlegoods) buildSql() string {
  417. var sqlId utils.SQLVal = `
  418. SELECT
  419. t.MIDDLEGOODSID,
  420. t.UNEXEHEDGEQTY,
  421. t.FUTUREHEDGEQTY,
  422. t.HIEXPSOURE,
  423. m.MIDDLEGOODSNAME,
  424. m.MIDDLEGOODSCODE
  425. FROM ERMCP2_HIMIDDLEGOODS t
  426. LEFT JOIN erms_middlegoods m ON m.middlegoodsid = t.middlegoodsid
  427. WHERE t.HEDGEDITEMID = %v
  428. `
  429. sqlId.FormatParam(r.HEDGEDITEMID)
  430. return sqlId.String()
  431. }
  432. // GetDataEx 从数据库中查询数据
  433. func (r *Ermcp2himiddlegoods) GetDataEx() (interface{}, error) {
  434. e := db.GetEngine()
  435. s := e.SQL(r.buildSql())
  436. sData := make([]Ermcp2himiddlegoods, 0)
  437. if err := s.Find(&sData); err != nil {
  438. return nil, err
  439. }
  440. for i := range sData {
  441. sData[i].calc()
  442. }
  443. return sData, nil
  444. }
  445. // Ermcpjrlinkpos 项目期货关联头寸
  446. type Ermcpjrlinkpos struct {
  447. SPOTCONTRACTID string `json:"spotcontractid" xorm:"SPOTCONTRACTID" form:"hedgeditemid" binding:"required"` // 现货ID [套期项目ID - 金瑞:合同\虚拟合同ID
  448. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 期货合约
  449. ORDERTYPE int32 `json:"ordertype" xorm:"ORDERTYPE"` // 单据类型[套期工具] - 1:期货单 2:看涨期权单 3:看跌期权单
  450. EXECUTEPRICE int64 `json:"executeprice" xorm:"EXECUTEPRICE"` // 执行价 - 1:期货单 为 0
  451. OPTIONCODE string `json:"optioncode" xorm:"OPTIONCODE"` // 期权代码
  452. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属企业
  453. TOTALBUYAMOUNT float64 `json:"totalbuyamount" xorm:"TOTALBUYAMOUNT"` // 买金额 [期货]
  454. TOTALBUYQTY float64 `json:"totalbuyqty" xorm:"TOTALBUYQTY"` // 买数量
  455. TOTALSELLAMOUNT float64 `json:"totalsellamount" xorm:"TOTALSELLAMOUNT"` // 卖金额 [期货]
  456. TOTALSELLQTY float64 `json:"totalsellqty" xorm:"TOTALSELLQTY"` // 卖数量
  457. NETQTY float64 `json:"netqty" xorm:"NETQTY"` // 净头寸
  458. TOTALCHARGE float64 `json:"totalcharge" xorm:"TOTALCHARGE"` // 手续费
  459. TOTALPREMIUM float64 `json:"totalpremium" xorm:"TOTALPREMIUM"` // 权利金 [期权]
  460. CLOSEPL float64 `json:"closepl" xorm:"CLOSEPL"` // 总平仓盈亏 [期货损益]
  461. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  462. TOTALBUYHOLDAMOUNT float64 `json:"totalbuyholdamount" xorm:"TOTALBUYHOLDAMOUNT"` // 买持仓总金额[期货]
  463. TOTALSELLHOLDAMOUNT float64 `json:"totalsellholdamount" xorm:"TOTALSELLHOLDAMOUNT"` // 卖持仓总金额[期货]
  464. TODAYFUTURECLOSEPL float64 `json:"todayfutureclosepl" xorm:"TODAYFUTURECLOSEPL"` // 今日平仓盈亏
  465. RECKONPL float64 `json:"reckonpl" xorm:"RECKONPL"` // 总盈亏(平仓盈亏 + 结算盈亏 - 手续费)
  466. Middlegoodsname string `json:"middlegoodsname" xorm:"MIDDLEGOODSNAME"` // 套保商品名称
  467. Middlegoodscode string `json:"middlegoodscode" xorm:"MIDDLEGOODSCODE"` // 套保商品代码
  468. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货套期量
  469. AVERAGEPRICE float64 `json:"averageprice" xorm:"AVERAGEPRICE"` // 持仓均价 (TotalBuyHoldAmount - TotalSellHoldAmount) / NetQty
  470. }
  471. // TableName is ERMCP_JR_LINKPOS
  472. func (r *Ermcpjrlinkpos) TableName() string {
  473. return "ERMCP_JR_LINKPOS"
  474. }
  475. func (r *Ermcpjrlinkpos) calc() {
  476. }
  477. func (r *Ermcpjrlinkpos) buildSql() string {
  478. var sqlId utils.SQLVal = `
  479. SELECT DISTINCT
  480. to_char(t.SPOTCONTRACTID) SPOTCONTRACTID,
  481. t.ORDERTYPE,
  482. t.OPTIONCODE,
  483. t.CLOSEPL,
  484. t.NETQTY,
  485. decode(t.NetQty, 0, 0, ((t.TotalBuyHoldAmount - t.TotalSellHoldAmount) / (t.NetQty * g.agreeunit))) AVERAGEPRICE,
  486. mg.middlegoodsname,
  487. mg.middlegoodscode,
  488. (t.NETQTY * gc.convertratio * g.agreeunit) FUTUREHEDGEQTY
  489. FROM ERMCP_JR_LinkPos t
  490. LEFT JOIN Goods g ON g.goodsid = t.goodsid
  491. LEFT JOIN ERMCP_GGConvertConfig gc on gc.srcgoodsgroupid = g.goodsgroupid
  492. LEFT JOIN ERMS_MiddleGoods mg ON mg.goodsgroupid = gc.destgoodsgroupid
  493. WHERE mg.areauserid = t.areauserid AND t.SPOTCONTRACTID = %v
  494. ORDER BY t.OPTIONCODE
  495. `
  496. // 只有期货合约ID(GoodsID)的情况下获取套保商品名称,需要以上的关联
  497. sqlId.FormatParam(r.SPOTCONTRACTID)
  498. return sqlId.String()
  499. }
  500. // GetDataEx 从数据库中查询数据
  501. func (r *Ermcpjrlinkpos) GetDataEx() (interface{}, error) {
  502. e := db.GetEngine()
  503. s := e.SQL(r.buildSql())
  504. sData := make([]Ermcpjrlinkpos, 0)
  505. if err := s.Find(&sData); err != nil {
  506. return nil, err
  507. }
  508. for i := range sData {
  509. sData[i].calc()
  510. }
  511. return sData, nil
  512. }
  513. // Ermcp2hedgeditemspot 项目计划明细
  514. type Ermcp2hedgeditemspot struct {
  515. HEDGEDITEMSPOTID string `json:"hedgeditemspotid" xorm:"HEDGEDITEMSPOTID"` // 现货明细ID(625+Unix秒时间戳(10位)+xxxxxx)
  516. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID" form:"hedgeditemid" binding:"required"` // 被套期项目ID
  517. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型[计划类型] - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  518. SPOTTYPE int32 `json:"spottype" xorm:"SPOTTYPE"` // 现货类型 - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  519. RELATEDTYPE int32 `json:"relatedtype" xorm:"RELATEDTYPE"` // 关联类型 - 1:套期关联 2:执行关联
  520. RELATEDHEDGEPLANID int64 `json:"relatedhedgeplanid" xorm:"RELATEDHEDGEPLANID"` // 关联计划ID 【1:采购计划 2:销售计划】
  521. RELATEDSPOTCONTRACTID int64 `json:"relatedspotcontractid" xorm:"RELATEDSPOTCONTRACTID"` // 关联合同ID 【3:采购合同 4:销售合同】
  522. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 对手方 【3:采购合同 4:销售合同】
  523. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  524. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  525. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID" = 2
  526. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量[数量]
  527. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场价[当初市场价]
  528. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT"` // 市价总额 = 关联数量 * 期初市场价
  529. SPOTPRICEDAMOUNT float64 `json:"spotpricedamount" xorm:"SPOTPRICEDAMOUNT"` // 定价总额
  530. SPOTPRICEDAVGPRICE float64 `json:"spotpricedavgprice" xorm:"SPOTPRICEDAVGPRICE"` // 现货均价 = 定价总额 / 关联数量
  531. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  532. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  533. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  534. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品
  535. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  536. Hedgeplanno string `json:"hedgeplanno" xorm:"HEDGEPLANNO"` // 计划编号
  537. }
  538. // TableName is ERMCP2_HEDGEDITEMSPOT
  539. func (r *Ermcp2hedgeditemspot) TableName() string {
  540. return "ERMCP2_HEDGEDITEMSPOT"
  541. }
  542. func (r *Ermcp2hedgeditemspot) calc() {
  543. }
  544. func (r *Ermcp2hedgeditemspot) buildSql() string {
  545. var sqlId utils.SQLVal = `
  546. SELECT
  547. to_char(t.hedgeditemspotid) HEDGEDITEMSPOTID,
  548. to_char(t.hedgeditemid) HEDGEDITEMID,
  549. t.HEDGEDTYPE,
  550. wr.WRSTANDARDNAME,
  551. e.ENUMDICNAME,
  552. t.RELATEDQTY,
  553. t.ORIAVGPRICE,
  554. s.HEDGEPLANNO,
  555. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME
  556. FROM ERMCP2_HEDGEDITEMSPOT t
  557. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  558. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  559. LEFT JOIN ermcp_hedgeplan s ON s.HedgePlanID = t.RELATEDHEDGEPLANID
  560. WHERE t.SPOTTYPE IN (1,2) AND t.hedgeditemid = %v
  561. ORDER BY t.createtime
  562. `
  563. sqlId.FormatParam(r.HEDGEDITEMID)
  564. return sqlId.String()
  565. }
  566. // GetDataEx 从数据库中查询数据
  567. func (r *Ermcp2hedgeditemspot) GetDataEx() (interface{}, error) {
  568. e := db.GetEngine()
  569. s := e.SQL(r.buildSql())
  570. sData := make([]Ermcp2hedgeditemspot, 0)
  571. if err := s.Find(&sData); err != nil {
  572. return nil, err
  573. }
  574. for i := range sData {
  575. sData[i].calc()
  576. }
  577. return sData, nil
  578. }
  579. // Ermcp2hedgeditemspotDetail 现货成交明细
  580. type Ermcp2hedgeditemspotDetail struct {
  581. HEDGEDITEMSPOTID string `json:"hedgeditemspotid" xorm:"HEDGEDITEMSPOTID"` // 现货明细ID(625+Unix秒时间戳(10位)+xxxxxx)
  582. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID" form:"hedgeditemid" binding:"required"` // 被套期项目ID
  583. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型[计划类型] - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  584. SPOTTYPE int32 `json:"spottype" xorm:"SPOTTYPE"` // 现货类型[合同类型] - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  585. RELATEDTYPE int32 `json:"relatedtype" xorm:"RELATEDTYPE"` // 关联类型 - 1:套期关联 2:执行关联
  586. RELATEDHEDGEPLANID int64 `json:"relatedhedgeplanid" xorm:"RELATEDHEDGEPLANID"` // 关联计划ID 【1:采购计划 2:销售计划】
  587. RELATEDSPOTCONTRACTID int64 `json:"relatedspotcontractid" xorm:"RELATEDSPOTCONTRACTID"` // 关联合同ID 【3:采购合同 4:销售合同】
  588. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 对手方 【3:采购合同 4:销售合同】
  589. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  590. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  591. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID" = 2
  592. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量[数量]
  593. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场价[当初市场价]
  594. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT"` // 市价总额 = 关联数量 * 期初市场价
  595. SPOTPRICEDAMOUNT float64 `json:"spotpricedamount" xorm:"SPOTPRICEDAMOUNT"` // 定价总额[金额]
  596. SPOTPRICEDAVGPRICE float64 `json:"spotpricedavgprice" xorm:"SPOTPRICEDAVGPRICE"` // 现货均价 = 定价总额 / 关联数量
  597. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  598. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  599. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  600. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品
  601. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  602. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 对手方
  603. BRANDNAME string `json:"brandname" xorm:"BRANDNAME"` // 品牌
  604. CONTRACTNO string `json:"contractno" xorm:"CONTRACTNO"` // 合同编号
  605. }
  606. func (r *Ermcp2hedgeditemspotDetail) calc() {
  607. }
  608. func (r *Ermcp2hedgeditemspotDetail) buildSql() string {
  609. var sqlId utils.SQLVal = `
  610. SELECT
  611. to_char(t.hedgeditemspotid) HEDGEDITEMSPOTID,
  612. to_char(t.hedgeditemid) HEDGEDITEMID,
  613. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  614. t.SPOTTYPE,
  615. u.ACCOUNTNAME,
  616. wr.WRSTANDARDNAME,
  617. e.ENUMDICNAME,
  618. gb.dgfactoryitemvalue BRANDNAME,
  619. t.RELATEDQTY,
  620. t.SPOTPRICEDAVGPRICE,
  621. t.SPOTPRICEDAMOUNT,
  622. t.ORIAVGPRICE,
  623. s.CONTRACTNO
  624. FROM ERMCP2_HEDGEDITEMSPOT t
  625. LEFT JOIN useraccount u ON u.userid = t.CUSTOMERUSERID
  626. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  627. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  628. LEFT JOIN dgfactoryitem gb ON gb.dgfactoryitemid = t.SPOTGOODSBRANDID
  629. LEFT JOIN ermcp_spotcontract s on s.spotcontractid = t.RELATEDSPOTCONTRACTID
  630. WHERE t.SPOTTYPE IN (3,4,5) AND t.hedgeditemid = %v
  631. ORDER BY t.createtime
  632. `
  633. sqlId.FormatParam(r.HEDGEDITEMID)
  634. return sqlId.String()
  635. }
  636. // GetDataEx 从数据库中查询数据
  637. func (r *Ermcp2hedgeditemspotDetail) GetDataEx() (interface{}, error) {
  638. e := db.GetEngine()
  639. s := e.SQL(r.buildSql())
  640. sData := make([]Ermcp2hedgeditemspotDetail, 0)
  641. if err := s.Find(&sData); err != nil {
  642. return nil, err
  643. }
  644. for i := range sData {
  645. sData[i].calc()
  646. }
  647. return sData, nil
  648. }
  649. // Ermcppatradelinkdetail 期货成交单关联明细表
  650. type Ermcppatradelinkdetail struct {
  651. LINKDETAILID string `json:"linkdetailid" xorm:"LINKDETAILID"` // 期货明细ID(614+Unix秒时间戳(10位)+xxxxxx)
  652. TRADEID string `json:"tradeid" xorm:"TRADEID"` // [成交单号]内部成交单ID
  653. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
  654. HEDGEFLAG int32 `json:"hedgeflag" xorm:"HEDGEFLAG"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利 4:套期保值(平安\合同) 5:单边(平安) 6:移仓(平安) 7:错单处理(平安) 8:跨期套利(平安) 9:套期保值(计划) 10:套利(合同) 11:换月(合同) 12:交割(金瑞) 13:被套期项目
  655. SPOTCONTRACTID int64 `json:"hedgeditemid" xorm:"SPOTCONTRACTID" form:"hedgeditemid" binding:"required"` // 现货ID[套期项目ID] [13 - 被套期项目ID] [4,10,11 - 现货合同ID] [9 - 套保计划ID]
  656. RELATEDLOT float64 `json:"relatedlot" xorm:"RELATEDLOT"` // [数量]关联手数
  657. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  658. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"GOODSGROUPID"` // 对冲品种ID[期货合约商品组ID]
  659. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种ID
  660. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量 = RelatedLot * AgreeUnit * ConvertRatio
  661. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 关联交易日(yyyyMMdd)
  662. RELATEDMODE int32 `json:"relatedmode" xorm:"RELATEDMODE"` // 关联方式 - 1:自动关联 2:手动关联 3:解绑关联
  663. TRADETRADEDATE string `json:"tradetradedate" xorm:"TRADETRADEDATE"` // 成交交易日(yyyyMMdd)
  664. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // [价格]成交价格
  665. TRADELOT int64 `json:"tradelot" xorm:"TRADELOT"` // 成交手数
  666. SALEUSERID int64 `json:"saleuserid" xorm:"SALEUSERID"` // 业务员ID
  667. BIZSUBJECTID int64 `json:"bizsubjectid" xorm:"BIZSUBJECTID"` // 归属业务部门ID - SubjectID
  668. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 合约乘数
  669. CONVERTRATIO float64 `json:"convertratio" xorm:"CONVERTRATIO"` // 品种系数
  670. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
  671. CREATORSRC int32 `json:"creatorsrc" xorm:"CREATORSRC"` // 创建人来源 - 1:管理端 2:终端 3:交易
  672. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人ID
  673. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  674. LINKSTATUS int32 `json:"linkstatus" xorm:"LINKSTATUS"` // 关联状态 - 1:成功 2:失败 3:解绑
  675. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 返回码
  676. TRADETIME string `json:"tradetime" xorm:"TRADETIME"` // 日期时间
  677. ORDERTYPE int32 `json:"ordertype" xorm:"ORDERTYPE"` // 单据类型[套期工具] - 1:期货单 2:看涨期权单 3:看跌期权单
  678. OPTIONCODE string `json:"optioncode" xorm:"OPTIONCODE"` // [期货合约]期权代码 [期权]
  679. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 金额 = RelatedLot * TradePrice * AgreeUnit
  680. NAME string `json:"name" xorm:"NAME"` // 账户名/子账户
  681. }
  682. func (r *Ermcppatradelinkdetail) calc() {
  683. }
  684. func (r *Ermcppatradelinkdetail) buildSql() string {
  685. var sqlId utils.SQLVal = `
  686. SELECT
  687. to_char(p.TRADETIME, 'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  688. p.ORDERTYPE,
  689. p.OPTIONCODE,
  690. t.BUYORSELL,
  691. t.TRADEPRICE,
  692. t.RELATEDLOT,
  693. (t.RelatedLot * t.TradePrice * t.AgreeUnit) AMOUNT,
  694. to_char(t.TRADEID) TRADEID,
  695. (u.ACCOUNTNAME || '/' || to_char(p.ACCOUNTID)) NAME
  696. FROM ERMCP_PA_TradeLinkDetail t
  697. LEFT JOIN ERMCP_PA_TradeLink p ON p.TradeID = t.TradeID AND p.BuyorSell = t.BuyorSell
  698. LEFT JOIN TAACCOUNT ta ON ta.ACCOUNTID = p.ACCOUNTID
  699. LEFT JOIN USERACCOUNT u on u.userid = ta.relateduserid
  700. WHERE
  701. t.HedgeFlag = 13
  702. AND t.SpotContractID = %v
  703. AND t.relatedmode in (1,2) AND t.linkstatus = 1
  704. ORDER BY p.TradeTime
  705. `
  706. sqlId.FormatParam(r.SPOTCONTRACTID)
  707. return sqlId.String()
  708. }
  709. // GetDataEx 从数据库中查询数据
  710. func (r *Ermcppatradelinkdetail) GetDataEx() (interface{}, error) {
  711. e := db.GetEngine()
  712. s := e.SQL(r.buildSql())
  713. sData := make([]Ermcppatradelinkdetail, 0)
  714. if err := s.Find(&sData); err != nil {
  715. return nil, err
  716. }
  717. for i := range sData {
  718. sData[i].calc()
  719. }
  720. return sData, nil
  721. }
  722. // InternalUncorrelatedTradeDetail 内部未关联成交单
  723. type InternalUncorrelatedTradeDetail struct {
  724. LINKDETAILID string `json:"linkdetailid" xorm:"LINKDETAILID"` // 期货明细ID(614+Unix秒时间戳(10位)+xxxxxx)
  725. TRADEID string `json:"tradeid" xorm:"TRADEID" form:"tradeid"` // 成交单号
  726. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 方向 - 0:买 1:卖
  727. HEDGEFLAG int32 `json:"hedgeflag" xorm:"HEDGEFLAG"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利 4:套期保值(平安\合同) 5:单边(平安) 6:移仓(平安) 7:错单处理(平安) 8:跨期套利(平安) 9:套期保值(计划) 10:套利(合同) 11:换月(合同) 12:交割(金瑞) 13:被套期项目
  728. SPOTCONTRACTID int64 `json:"hedgeditemid" xorm:"SPOTCONTRACTID"` // 现货ID[套期项目ID] [13 - 被套期项目ID] [4,10,11 - 现货合同ID] [9 - 套保计划ID]
  729. RELATEDLOT float64 `json:"relatedlot" xorm:"RELATEDLOT"` // [数量]关联手数
  730. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  731. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"GOODSGROUPID"` // 对冲品种ID[期货合约商品组ID]
  732. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种ID
  733. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量 = RelatedLot * AgreeUnit * ConvertRatio
  734. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 关联交易日(yyyyMMdd)
  735. RELATEDMODE int32 `json:"relatedmode" xorm:"RELATEDMODE"` // 关联方式 - 1:自动关联 2:手动关联 3:解绑关联
  736. TRADETRADEDATE string `json:"tradetradedate" xorm:"TRADETRADEDATE"` // 成交交易日(yyyyMMdd)
  737. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价
  738. TRADELOT int64 `json:"tradelot" xorm:"TRADELOT"` // 成交手数
  739. SALEUSERID int64 `json:"saleuserid" xorm:"SALEUSERID"` // 业务员ID
  740. BIZSUBJECTID int64 `json:"bizsubjectid" xorm:"BIZSUBJECTID"` // 归属业务部门ID - SubjectID
  741. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 合约乘数
  742. CONVERTRATIO float64 `json:"convertratio" xorm:"CONVERTRATIO"` // 品种系数
  743. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
  744. CREATORSRC int32 `json:"creatorsrc" xorm:"CREATORSRC"` // 创建人来源 - 1:管理端 2:终端 3:交易
  745. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人ID
  746. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  747. LINKSTATUS int32 `json:"linkstatus" xorm:"LINKSTATUS"` // 关联状态 - 1:成功 2:失败 3:解绑
  748. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 返回码
  749. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账号ID
  750. CHANNELBUILDTYPE int32 `json:"channelbuildtype" xorm:"CHANNELBUILDTYPE"` // 委托单据类型 0:无 1:建仓 2:平仓
  751. MIDDLEGOODSQTY float64 `json:"middlegoodsqty" xorm:"MIDDLEGOODSQTY"` // [套期商品数量]套保品种数量 = TradeQty * AgreeUnit * ConvertRatio
  752. TRADETIME string `json:"tradetime" xorm:"TRADETIME"` // 成交时间
  753. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME" form:"accountname"` // 套期主体
  754. ENABLEQTY float64 `json:"enableqty" xorm:"ENABLEQTY"` // 项目可关联数量 = 套保品种数量 - 关联数量
  755. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  756. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  757. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户编号
  758. BEGINDATE string `json:"-" form:"begindate"` // 起始日期, 格式:yyyymmdd
  759. ENDDATE string `json:"-" form:"enddate"` // 终止日期, 格式:yyyymmdd
  760. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE" form:"goodscode"` // 合约代码
  761. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME" form:"goodsname"` // 合约名称
  762. }
  763. func (r *InternalUncorrelatedTradeDetail) calc() {
  764. }
  765. func (r *InternalUncorrelatedTradeDetail) buildSql() string {
  766. var sqlId utils.SQLVal = `
  767. SELECT
  768. to_char(ept.TRADETIME, 'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  769. ept.GOODSID,
  770. g.GOODSCODE,
  771. g.GOODSNAME,
  772. ept.BUYORSELL,
  773. ept.TRADEPRICE,
  774. ept.TRADELOT,
  775. ept.RELATEDQTY,
  776. ept.RELATEDLOT,
  777. ept.MIDDLEGOODSQTY,
  778. e.ENUMDICNAME,
  779. to_char(ept.TRADEID) TRADEID,
  780. ua.ACCOUNTNAME,
  781. ta.accountname TAACCOUNTNAME,
  782. ept.ACCOUNTID,
  783. ept.CHANNELBUILDTYPE,
  784. (ept.MIDDLEGOODSQTY - ept.RELATEDQTY) ENABLEQTY,
  785. ta.RELATEDUSERID TRADEUSERID
  786. FROM ERMCP_PA_TRADELINK ept
  787. LEFT JOIN goods g ON ept.goodsid = g.goodsid
  788. LEFT JOIN taaccount ta ON ta.accountid = ept.accountid
  789. LEFT JOIN useraccount ua ON ta.RELATEDUSERID = ua.userid
  790. LEFT JOIN enumdicitem e ON e.enumitemname = g.goodunitid AND e.enumdiccode = 'goodsunit'
  791. WHERE ept.tradelot > ept.relatedlot
  792. and ept.areauserid in
  793. (select u1.userid
  794. FROM useraccount u1
  795. start with u1.userid = %v
  796. connect by prior u1.userid = u1.parentuserid)
  797. `
  798. sqlId.FormatParam(r.USERID)
  799. if r.BEGINDATE != "" {
  800. sqlId.JoinFormat(" and to_char(ept.tradetime, 'yyyymmdd') >= '%v", r.BEGINDATE)
  801. }
  802. if r.ENDDATE != "" {
  803. sqlId.JoinFormat(" and to_char(ept.tradetime, 'yyyymmdd') <= '%v", r.ENDDATE)
  804. }
  805. sqlId.AndLike("g.goodscode", r.GOODSCODE)
  806. sqlId.AndLike("g.goodsname", r.GOODSNAME)
  807. sqlId.AndEx("ept.TRADEID", r.TRADEID, r.TRADEID != "")
  808. sqlId.AndEx("ept.BUYORSELL", r.BUYORSELL, r.BUYORSELL != -1)
  809. sqlId.AndLikes2("ta.accountname", "ta.accountid", r.ACCOUNTNAME)
  810. sqlId.OrderByDesc("ept.tradetime")
  811. return sqlId.String()
  812. }
  813. // GetDataEx 从数据库中查询数据
  814. func (r *InternalUncorrelatedTradeDetail) GetDataEx() (interface{}, error) {
  815. e := db.GetEngine()
  816. s := e.SQL(r.buildSql())
  817. sData := make([]InternalUncorrelatedTradeDetail, 0)
  818. if err := s.Find(&sData); err != nil {
  819. return nil, err
  820. }
  821. for i := range sData {
  822. sData[i].calc()
  823. }
  824. return sData, nil
  825. }
  826. // InternalEnableTradeDetail 内部成交单可关联项目
  827. type InternalEnableTradeDetail struct {
  828. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  829. Deliverygoodsid int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID(SEQ_DELIVERYGOODS)
  830. Deliverygoodscode string `json:"deliverygoodscode" xorm:"DELIVERYGOODSCODE"` // 现货品种代码
  831. Deliverygoodsname string `json:"deliverygoodsname" xorm:"DELIVERYGOODSNAME"` // 现货品种名称
  832. Wrstandardid int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货品类ID(SEQ_WRSTANDARD)
  833. Wrstandardcode string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货品类代码
  834. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货品类名称
  835. UNEXESPOTQTY float64 `json:"unexespotqty" xorm:"UNEXESPOTQTY"` // 未执行现货量
  836. UNEXEHEDGEQTY float64 `json:"unexehedgeqty" xorm:"UNEXEHEDGEQTY"` // 未执行套期量 = 未执行现货量*折算系数* (1/(1+增值税)) * 套期比例(项目上)
  837. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // [已关联数量]期货持仓套期量
  838. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID
  839. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 合约乘数
  840. CONVERTRATIO float64 `json:"convertratio" xorm:"CONVERTRATIO"` // 品种系数
  841. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID" form:"areauserid" binding:"required"` // 企业ID
  842. GOODSID int64 `form:"goodsid" binding:"required"` // 期货合约ID
  843. TRADEUSERID int64 `form:"tradeuserid" binding:"required"` // 交易用户ID
  844. }
  845. func (r *InternalEnableTradeDetail) calc() {
  846. }
  847. func (r *InternalEnableTradeDetail) buildSql() string {
  848. var sqlId utils.SQLVal = `
  849. SELECT DISTINCT
  850. hi.HEDGEDITEMNUM,
  851. dg.DELIVERYGOODSID,
  852. dg.DELIVERYGOODSCODE,
  853. dg.DELIVERYGOODSNAME,
  854. wr.WRSTANDARDID,
  855. wr.WRSTANDARDCODE,
  856. wr.WRSTANDARDNAME,
  857. t.UNEXESPOTQTY,
  858. t.UNEXEHEDGEQTY,
  859. t.FUTUREHEDGEQTY,
  860. to_char(T.HEDGEDITEMID) HEDGEDITEMID,
  861. G.AGREEUNIT,
  862. GC.CONVERTRATIO
  863. FROM ERMCP2_HIMiddleGoods t
  864. LEFT JOIN ERMCP2_HedgedItem hi ON hi.HEDGEDITEMID = t.HEDGEDITEMID
  865. LEFT JOIN DeliveryGoods dg ON dg.DELIVERYGOODSID = t.DELIVERYGOODSID
  866. LEFT JOIN WRStandard wr ON wr.WRStandardID = t.WRStandardID
  867. LEFT JOIN ERMS_MiddleGoods mg ON mg.MIDDLEGOODSID = t.MIDDLEGOODSID
  868. LEFT JOIN ERMCP_GGConvertConfig gc ON gc.destgoodsgroupid = mg.goodsgroupid
  869. LEFT JOIN Goods g ON g.GOODSGROUPID = gc.SRCGOODSGROUPID
  870. WHERE 1 = 1 AND HI.HEDGEDITEMSTATUS IN (2)
  871. `
  872. sqlId.And("t.AREAUSERID", r.AREAUSERID)
  873. sqlId.And("g.GOODSID", r.GOODSID)
  874. sqlId.And("hi.TRADEUSERID", r.TRADEUSERID)
  875. return sqlId.String()
  876. }
  877. // GetDataEx 从数据库中查询数据
  878. func (r *InternalEnableTradeDetail) GetDataEx() (interface{}, error) {
  879. e := db.GetEngine()
  880. s := e.SQL(r.buildSql())
  881. sData := make([]InternalEnableTradeDetail, 0)
  882. if err := s.Find(&sData); err != nil {
  883. return nil, err
  884. }
  885. for i := range sData {
  886. sData[i].calc()
  887. }
  888. return sData, nil
  889. }
  890. // Ermcp8HedgeditemReport 套期项目报表
  891. type Ermcp8HedgeditemReport struct {
  892. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE" form:"hedgedtype"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  893. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  894. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  895. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS" form:"hedgeditemstatus"` // 项目状态 - 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  896. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM" form:"hedgeditemnum"` // 项目编号,模糊查询
  897. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  898. Wrstandardcode string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货品类代码
  899. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // [现货商品]现货品类名称
  900. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // [套期数量]套期现货量
  901. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // [期初价]期初市场均价 = 套期市价总额 / 套期现货量
  902. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // [套期现货金额]套期市价总额
  903. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // [执行数量]执行现货量
  904. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // [执行价]执行市场均价= 执行市价总额 / 执行现货量
  905. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // [执行现货金额]执行市价总额
  906. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  907. FUTUREHEDGEPLCHANGE float64 `json:"futurehedgeplchange" xorm:"FUTUREHEDGEPLCHANGE"` // 期货实际变动 = 期货实际损益 - 期初期货实际损益
  908. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  909. FUTUREPLCHANGE float64 `json:"futureplchange" xorm:"FUTUREPLCHANGE"` // 期货套期变动 = 期货套期损益 - 期初期货套期损益
  910. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货实际损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  911. SPOTHEDGEPLCHANGE float64 `json:"spothedgeplchange" xorm:"SPOTHEDGEPLCHANGE"` // 现货实际变动 = 现货实际损益 - 期初现货实际损益
  912. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  913. SPOTPLCHANGE float64 `json:"spotplchange" xorm:"SPOTPLCHANGE"` // 现货套期变动 = 现货套期损益 - 期初现货套期损益
  914. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  915. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // [当日现货市场价]当前市场价
  916. PLANSTARTDATE string `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  917. PLANENDDATE string `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  918. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  919. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  920. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  921. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  922. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  923. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  924. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户ID
  925. CYCLETYPE int32 `json:"-" form:"cycletype"` // 周期类型 - 0:日 1:月 2:季 3:年 4:周 5:全报表【原值】
  926. CYCLETIME string `json:"-" form:"cycletime" binding:"required"` // 周期时间 日(YYYYMMDD) 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
  927. }
  928. func (r *Ermcp8HedgeditemReport) calc() {
  929. }
  930. func (r *Ermcp8HedgeditemReport) buildSql() string {
  931. if r.CYCLETYPE == 0 {
  932. // 日
  933. return r.buildReckonSql()
  934. } else {
  935. // 周、月
  936. return r.buildReportSql()
  937. }
  938. }
  939. func (r *Ermcp8HedgeditemReport) buildReckonSql() string {
  940. var sqlId utils.SQLVal = `
  941. SELECT
  942. t.HEDGEDTYPE,
  943. t.TRADEUSERID,
  944. t.AREAUSERID,
  945. t.HEDGEDITEMSTATUS,
  946. t.HEDGEDITEMNUM,
  947. wr.WRSTANDARDID,
  948. wr.WRSTANDARDCODE,
  949. wr.WRSTANDARDNAME,
  950. t.HEDGEQTY,
  951. t.ORIAVGPRICE,
  952. t.HEDGEAMOUNT,
  953. t.EXEQTY,
  954. t.EXEAVGPRICE,
  955. t.EXEAMOUNT,
  956. t.FUTUREHEDGEPL,
  957. (t.FUTUREHEDGEPL - t.ORIFUTUREHEDGEPL) FUTUREHEDGEPLCHANGE,
  958. t.FUTUREPL,
  959. (t.FUTUREPL - t.ORIFUTUREPL) FUTUREPLCHANGE,
  960. t.SPOTHEDGEPL,
  961. (t.SPOTHEDGEPL - t.ORISPOTHEDGEPL) SPOTHEDGEPLCHANGE,
  962. t.SPOTPL,
  963. (t.SPOTPL - t.ORISPOTPL) SPOTPLCHANGE,
  964. t.UNEXEQTY,
  965. t.CURPRICE,
  966. to_char(t.PLANSTARTDATE, 'yyyy-mm-dd') PLANSTARTDATE,
  967. to_char(t.PLANENDDATE, 'yyyy-mm-dd') PLANENDDATE,
  968. e.ENUMDICNAME,
  969. u.ACCOUNTNAME
  970. FROM Reckon_ERMCP2_HedgedItem t
  971. LEFT JOIN WRStandard wr ON wr.WRStandardID = t.WRStandardID
  972. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  973. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  974. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  975. WHERE (t.TRADEUSERID = %v OR t.AREAUSERID = %v)
  976. `
  977. sqlId.FormatParam(r.USERID, r.USERID)
  978. sqlId.And("t.RECKONDATE", r.CYCLETIME)
  979. sqlId.AndEx("t.HEDGEDTYPE", r.HEDGEDTYPE, r.HEDGEDTYPE > 0)
  980. sqlId.AndEx("t.HEDGEDITEMSTATUS", r.HEDGEDITEMSTATUS, r.HEDGEDITEMSTATUS > 0)
  981. sqlId.AndLike("t.HEDGEDITEMNUM", r.HEDGEDITEMNUM)
  982. sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  983. return sqlId.String()
  984. }
  985. func (r *Ermcp8HedgeditemReport) buildReportSql() string {
  986. var sqlId utils.SQLVal = `
  987. SELECT
  988. t.HEDGEDTYPE,
  989. t.TRADEUSERID,
  990. t.AREAUSERID,
  991. t.HEDGEDITEMSTATUS,
  992. t.HEDGEDITEMNUM,
  993. wr.WRSTANDARDID,
  994. wr.WRSTANDARDCODE,
  995. wr.WRSTANDARDNAME,
  996. t.HEDGEQTY,
  997. t.ORIAVGPRICE,
  998. t.HEDGEAMOUNT,
  999. t.EXEQTY,
  1000. t.EXEAVGPRICE,
  1001. t.EXEAMOUNT,
  1002. t.FUTUREHEDGEPL,
  1003. (t.FUTUREHEDGEPL - t.ORIFUTUREHEDGEPL) FUTUREHEDGEPLCHANGE,
  1004. t.FUTUREPL,
  1005. (t.FUTUREPL - t.ORIFUTUREPL) FUTUREPLCHANGE,
  1006. t.SPOTHEDGEPL,
  1007. (t.SPOTHEDGEPL - t.ORISPOTHEDGEPL) SPOTHEDGEPLCHANGE,
  1008. t.SPOTPL,
  1009. (t.SPOTPL - t.ORISPOTPL) SPOTPLCHANGE,
  1010. t.UNEXEQTY,
  1011. t.CURPRICE,
  1012. to_char(t.PLANSTARTDATE, 'yyyy-mm-dd') PLANSTARTDATE,
  1013. to_char(t.PLANENDDATE, 'yyyy-mm-dd') PLANENDDATE,
  1014. e.ENUMDICNAME,
  1015. u.ACCOUNTNAME
  1016. FROM REPORT_ERMCP2_HEDGEDITEM t
  1017. LEFT JOIN WRStandard wr ON wr.WRStandardID = t.WRStandardID
  1018. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  1019. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  1020. WHERE (t.TRADEUSERID = %v OR t.AREAUSERID = %v)
  1021. `
  1022. sqlId.FormatParam(r.USERID, r.USERID)
  1023. // 过滤周期类型
  1024. if r.CYCLETYPE == 1 {
  1025. // 月
  1026. sqlId.And("t.cycletype", 1)
  1027. sqlId.And("t.CYCLETIME", r.CYCLETIME)
  1028. } else if r.CYCLETYPE == 4 {
  1029. // 周
  1030. // 获取查询日期的当前周
  1031. sqlId.And("t.cycletype", 4)
  1032. sqlId.And("t.CYCLETIME", mtpcache.GetWeekIW(r.CYCLETIME))
  1033. }
  1034. sqlId.AndEx("t.HEDGEDTYPE", r.HEDGEDTYPE, r.HEDGEDTYPE > 0)
  1035. sqlId.AndEx("t.HEDGEDITEMSTATUS", r.HEDGEDITEMSTATUS, r.HEDGEDITEMSTATUS > 0)
  1036. sqlId.AndLike("t.HEDGEDITEMNUM", r.HEDGEDITEMNUM)
  1037. sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  1038. return sqlId.String()
  1039. }
  1040. // GetDataEx 从数据库中查询数据
  1041. func (r *Ermcp8HedgeditemReport) GetDataEx() (interface{}, error) {
  1042. e := db.GetEngine()
  1043. s := e.SQL(r.buildSql())
  1044. sData := make([]Ermcp8HedgeditemReport, 0)
  1045. if err := s.Find(&sData); err != nil {
  1046. return nil, err
  1047. }
  1048. for i := range sData {
  1049. sData[i].calc()
  1050. }
  1051. return sData, nil
  1052. }
  1053. // 查询现货合同
  1054. type QrySpotContractExReq struct {
  1055. USERID int64 `form:"userid" binding:"required"` // 用户ID
  1056. PRICETYPE int32 `form:"pricetype"` // 定价类型 - 1:一口价 2:点价 3:暂定价
  1057. CONTRACTNO string `form:"contractno"` // 合同编号, 模拟查询
  1058. CUSTOMERNAME string `form:"customername"` // 对手方, 模拟查询
  1059. CONTRACTTYPE int32 `form:"contracttype"` // 合同类型 - 1:采购 -1:销售
  1060. }
  1061. // ErmcpSpotContractModelEx 现货合同结构(对应现货合同菜单)
  1062. type ErmcpSpotContractModelEx struct {
  1063. SPOTCONTRACTID string `json:"spotcontractid" xorm:"SPOTCONTRACTID"` // 现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
  1064. CONTRACTNO string `json:"contractno" xorm:"CONTRACTNO"` // [合同编号]现货合同编号
  1065. CONTRACTTYPE int32 `json:"contracttype" xorm:"CONTRACTTYPE"` // [合同类型]现货合同类型 - 1:采购 -1:销售
  1066. USERID int64 `json:"userid" xorm:"USERID"` // 机构ID
  1067. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID"` // 采购方ID
  1068. BUYUSERName string `json:"buyusername" xorm:"BUYUSERName"` // 采购方名称
  1069. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID"` // 销售方ID
  1070. SELLUSERNAME string `json:"sellusername" xorm:"SELLUSERNAME"` // 销售方名称
  1071. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1072. WRSTANDARDID int32 `json:"wrstandardid" xorm:"wrstandardid"` // 现货商品ID
  1073. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // [现货商品]现货商品名称
  1074. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE"` // 现货商品代码
  1075. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"DELIVERYGOODSCODE"` // 现货品种代码
  1076. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"DELIVERYGOODSNAME"` // 现货品种名称
  1077. PRODUCTTYPE int32 `json:"producttype" xorm:"PRODUCTTYPE"` // 产品类型 - 1:标准仓单 2:等标 3:非标
  1078. CONVERTFACTOR float64 `json:"convertfactor" xorm:"CONVERTFACTOR"` // 标仓系数
  1079. SPOTGOODSDESC string `json:"spotgoodsdesc" xorm:"SPOTGOODSDESC"` // 商品型号
  1080. PRICETYPE int32 `json:"pricetype" xorm:"PRICETYPE"` // 定价类型 - 1:一口价 2:点价 3:暂定价
  1081. QTY float64 `json:"qty" xorm:"QTY"` // [合同数量]数量
  1082. PRICE float64 `json:"price" xorm:"PRICE"` // 价格\暂定价 [1:一口价、3:暂定价]
  1083. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 金额 [1:一口价、3:暂定价]
  1084. DELIVERYSTARTDATE string `json:"deliverystartdate" xorm:"DELIVERYSTARTDATE"` // 交收期(开始)
  1085. DELIVERYENDDATE string `json:"deliveryenddate" xorm:"DELIVERYENDDATE"` // 交收期(结束)
  1086. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 点价合约ID - 0:为现货,其它为期货商品合约ID [2:点价 3:暂定价]
  1087. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 点价合约代码
  1088. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 点价商品名称
  1089. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE"` // 升贴水 [2:点价 3:暂定价]
  1090. STARTDATE string `json:"startdate" xorm:"STARTDATE"` // 点价开始日期 [2:点价 3:暂定价]
  1091. ENDDATE string `json:"enddate" xorm:"ENDDATE"` // 点价结束日期 [2:点价 3:暂定价]
  1092. MARGIN float64 `json:"margin" xorm:"MARGIN"` // 当前保证金
  1093. CONTRACTMARGIN float64 `json:"contractmargin" xorm:"CONTRACTMARGIN"` // 合同保证金
  1094. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位名称
  1095. CONTRACCTSTATUS int32 `json:"contracctstatus" xorm:"CONTRACTSTATUS"` // 合同状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  1096. Remark string `json:"remark" xorm:"Remark"` // 备注
  1097. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核意见
  1098. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  1099. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1100. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  1101. SPOTGOODSMODELID int32 `json:"spotgoodsmodelid" xorm:"SPOTGOODSMODELID"` // 现货型号ID
  1102. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID
  1103. BRANDNAME string `json:"brandname" xorm:"brandname"` // 品牌名称
  1104. MODELNAME string `json:"modelname" xorm:"modelname"` // 型号名称
  1105. ATTACHMENT string `json:"attachment" xorm:"ATTACHMENT"` // 附件
  1106. PRICEDQTY float64 `json:"pricedqty" xorm:"PRICEDQTY"` // 已定价量
  1107. PRICEDAMOUNT float64 `json:"pricedamount" xorm:"PRICEDAMOUNT"` // 已定价金额 = (点价价格+升贴水) * 数量
  1108. SPOTAMOUNT float64 `json:"spotamount" xorm:"SPOTAMOUNT"` // 合同现货金额 [不含升贴水]
  1109. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  1110. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 客户ID
  1111. ISRELATED int32 `json:"isrelated" xorm:"ISRELATED"` // 是否已关联计划项目 - 0:否 1:是
  1112. ISRELATED2 int32 `json:"isrelated2" xorm:"ISRELATED2"` // 是否已关联现货项目 - 0:否 1:是
  1113. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  1114. CUSTOMERNAME string `json:"customername" xorm:"CUSTOMERNAME"` // 对手方
  1115. UNPRICEDQTY float64 `json:"unpricedqty" xorm:"UNPRICEDQTY"` // 未定价量 = 合同数量 - 已定价量
  1116. AVGPRICE float64 `json:"avgprice" xorm:"AVGPRICE"` // 定价均价 = 已定价金额 / 已定价量
  1117. SPOTAVGPRICE float64 `json:"spotavgprice" xorm:"SPOTAVGPRICE"` // 现货均价 = 合同现货金额 / 已定价量
  1118. }
  1119. func (r *ErmcpSpotContractModelEx) buildSql(req QrySpotContractExReq) string {
  1120. str := `
  1121. SELECT to_char(t.SPOTCONTRACTID) SPOTCONTRACTID,
  1122. t.CONTRACTNO,
  1123. t.CONTRACTTYPE,
  1124. t.USERID,
  1125. t.BUYUSERID,
  1126. t.SELLUSERID,
  1127. t.DELIVERYGOODSID,
  1128. t.wrstandardid,
  1129. t.PRODUCTTYPE,
  1130. w.CONVERTFACTOR,
  1131. t.SPOTGOODSDESC,
  1132. t.PRICETYPE,
  1133. t.QTY,
  1134. t.PRICE,
  1135. t.AMOUNT,
  1136. to_char(t.DELIVERYSTARTDATE, 'yyyy-mm-dd hh24:mi:ss') DELIVERYSTARTDATE,
  1137. to_char(t.DELIVERYENDDATE, 'yyyy-mm-dd hh24:mi:ss') DELIVERYENDDATE,
  1138. t.GOODSID,
  1139. t.PRICEMOVE,
  1140. to_char(t.STARTDATE, 'yyyy-mm-dd hh24:mi:ss') STARTDATE,
  1141. to_char(t.ENDDATE, 'yyyy-mm-dd hh24:mi:ss') ENDDATE,
  1142. t.MARGIN,
  1143. t.contractmargin,
  1144. t.remark,
  1145. t.pointdesc,
  1146. t.auditremark,
  1147. to_char(t.contractattachment) attachment,
  1148. t.contractstatus,
  1149. t.SPOTGOODSBRANDID,
  1150. to_char(t.audittime, 'yyyy-mm-dd hh24:mi:ss') audittime,
  1151. to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime,
  1152. to_char(t.updatetime, 'yyyy-mm-dd hh24:mi:ss') updatetime,
  1153. g.deliverygoodscode,
  1154. g.deliverygoodsname,
  1155. g2.goodscode,
  1156. g2.goodsname,
  1157. gb.dgfactoryitemvalue brandname,
  1158. w.wrstandardname,
  1159. w.wrstandardcode,
  1160. w.vatrate,
  1161. w.unitid,
  1162. t.tradeuserid,
  1163. t.saleuserid,
  1164. t.meruserid,
  1165. t.currencyid,
  1166. to_char(t.accountid) accountid,
  1167. t.biztype,
  1168. to_char(t.subjectid) subjectid,
  1169. b.subjectname,
  1170. (t.QTY - t.PRICEDQTY) UNPRICEDQTY,
  1171. DECODE(t.PRICEDQTY, 0, 0, t.PRICEDAMOUNT/t.PRICEDQTY) AVGPRICE,
  1172. DECODE(t.PRICEDQTY, 0, 0, t.SPOTAMOUNT/t.PRICEDQTY) SPOTAVGPRICE,
  1173. t.PRICEDQTY,
  1174. ua.ACCOUNTNAME,
  1175. uc.ACCOUNTNAME CUSTOMERNAME
  1176. FROM ERMCP_SPOTCONTRACT t
  1177. left join ermcp_pa_areasubject b on t.subjectid=b.subjectid
  1178. left join deliverygoods g
  1179. on t.deliverygoodsid = g.deliverygoodsid
  1180. left join goods g2
  1181. on t.goodsid = g2.goodsid
  1182. left join DGFACTORYITEM gb
  1183. on t.spotgoodsbrandid = gb.dgfactoryitemid
  1184. left join wrstandard w
  1185. on t.wrstandardid = w.wrstandardid
  1186. left join loginaccount l
  1187. on t.applyid = l.loginid
  1188. left join useraccount ua
  1189. on ua.userid = t.tradeuserid
  1190. left join useraccount uc
  1191. on uc.userid = t.CUSTOMERUSERID
  1192. where t.contractstatus = 2 and t.ISRELATED = 0 and t.ISRELATED2 = 0
  1193. and (t.userid = %v or t.tradeuserid = %v)
  1194. `
  1195. str = fmt.Sprintf(str, req.USERID, req.USERID)
  1196. if req.PRICETYPE > 0 {
  1197. str += " and t.PRICETYPE = %v"
  1198. str = fmt.Sprintf(str, req.PRICETYPE)
  1199. }
  1200. if len(req.CONTRACTNO) > 0 {
  1201. str += " and t.CONTRACTNO like '%%%s%%'"
  1202. str = fmt.Sprintf(str, req.CONTRACTNO)
  1203. }
  1204. if len(req.CUSTOMERNAME) > 0 {
  1205. str += " and uc.ACCOUNTNAME like '%%%s%%'"
  1206. str = fmt.Sprintf(str, req.CUSTOMERNAME)
  1207. }
  1208. if req.CONTRACTTYPE != 0 {
  1209. str += " and t.CONTRACTTYPE = %v"
  1210. str = fmt.Sprintf(str, req.CONTRACTTYPE)
  1211. }
  1212. str += " order by t.audittime desc"
  1213. return str
  1214. }
  1215. // GetData 从数据库中查询现货合同
  1216. func (r *ErmcpSpotContractModelEx) GetData(req QrySpotContractExReq) ([]ErmcpSpotContractModelEx, error) {
  1217. sData := make([]ErmcpSpotContractModelEx, 0)
  1218. e := db.GetEngine()
  1219. s := e.SQL(r.buildSql(req))
  1220. if err := s.Find(&sData); err != nil {
  1221. logger.GetLogger().Errorf("ermcp query fail:%v", err)
  1222. return sData, err
  1223. }
  1224. return sData, nil
  1225. }
  1226. // Ermcp8EnableHedgeditem 可关联项目
  1227. type Ermcp8EnableHedgeditem struct {
  1228. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  1229. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  1230. HEDGEDITEMNAME string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  1231. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  1232. SPOTTYPE int32 `json:"-" form:"spottype" binding:"required"` // 现货类型 - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  1233. PLANSTARTDATE string `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  1234. PLANENDDATE string `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  1235. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  1236. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户ID
  1237. WRSTANDARDID int64 `json:"wrstandardid" form:"wrstandardid"` // 现货商品ID
  1238. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品
  1239. }
  1240. func (r *Ermcp8EnableHedgeditem) calc() {
  1241. }
  1242. func (r *Ermcp8EnableHedgeditem) buildSql() string {
  1243. var sqlId utils.SQLVal = `
  1244. SELECT
  1245. to_char(t.HEDGEDITEMID) HEDGEDITEMID,
  1246. t.HEDGEDITEMNUM,
  1247. t.HEDGEDITEMNAME,
  1248. t.HEDGEDTYPE,
  1249. to_char(t.PLANSTARTDATE, 'yyyy-mm-dd') PLANSTARTDATE,
  1250. to_char(t.PLANENDDATE, 'yyyy-mm-dd') PLANENDDATE,
  1251. u.ACCOUNTNAME,
  1252. wr.WRSTANDARDNAME
  1253. FROM ERMCP2_HedgedItem t
  1254. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  1255. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  1256. WHERE
  1257. t.HEDGEDITEMSTATUS = 2
  1258. AND (t.TRADEUSERID = %v OR t.AREAUSERID = %v)
  1259. AND (t.WRSTANDARDID IS NULL OR t.WRSTANDARDID = %v)
  1260. `
  1261. sqlId.FormatParam(r.USERID, r.USERID, r.WRSTANDARDID)
  1262. switch r.SPOTTYPE {
  1263. case 1, 2:
  1264. sqlId.And("t.HEDGEDTYPE", r.SPOTTYPE)
  1265. case 3:
  1266. sqlId.JoinFormat(" AND t.HEDGEDTYPE in (%v)", "1,3")
  1267. case 4:
  1268. sqlId.JoinFormat(" AND t.HEDGEDTYPE in (%v)", "2,3")
  1269. }
  1270. return sqlId.String()
  1271. }
  1272. // GetDataEx 从数据库中查询数据
  1273. func (r *Ermcp8EnableHedgeditem) GetDataEx() (interface{}, error) {
  1274. e := db.GetEngine()
  1275. s := e.SQL(r.buildSql())
  1276. sData := make([]Ermcp8EnableHedgeditem, 0)
  1277. if err := s.Find(&sData); err != nil {
  1278. return nil, err
  1279. }
  1280. for i := range sData {
  1281. sData[i].calc()
  1282. }
  1283. return sData, nil
  1284. }
  1285. // Ermcp8RunningHedgeditem 执行中项目
  1286. type Ermcp8RunningHedgeditem struct {
  1287. Hedgeditemid string `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  1288. Hedgeditemnum string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  1289. Hedgeditemname string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  1290. Hedgedtype int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  1291. Planstartdate string `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  1292. Planenddate string `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  1293. Hedgerate float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套保比率
  1294. Tradeuserid int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  1295. Areauserid int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  1296. Hedgeditemstatus int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  1297. Applysrc int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  1298. Applyid int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  1299. Remark string `json:"remark" xorm:"REMARK"` // 备注
  1300. Createtime string `json:"createtime" xorm:"CREATETIME"` // 申请时间
  1301. Audittradedate string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  1302. Auditid int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  1303. Auditsrc int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  1304. Audittime string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  1305. Auditremark string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  1306. Deliverygoodsid int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1307. Wrstandardid int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1308. Vatrate float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  1309. Hedgeqty float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  1310. Hedgeamount float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  1311. Hedgerestamount float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  1312. Hedgecontractamount float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  1313. Oriavgprice float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  1314. Exeqty float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  1315. Exeamount float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  1316. Exerestamount float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  1317. Exeavgprice float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  1318. Execontractamount float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  1319. Curprice float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  1320. Unexeqty float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  1321. Spothedgepl float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  1322. Spotpl float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  1323. Futurehedgepl float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  1324. Futurepl float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  1325. Hedgesumpl float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  1326. Spottradepl float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  1327. Vatpl float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  1328. Sumobspl float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  1329. Spotbookamount float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  1330. Curstock float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  1331. Enddate string `json:"enddate" xorm:"ENDDATE"` // 完成日期
  1332. Endtradedate string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  1333. Updatetime string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  1334. Orispothedgepl float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  1335. Orifuturehedgepl float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  1336. Orispotpl float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  1337. Orifuturepl float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  1338. Spotfloatpl float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  1339. Futurefloatpl float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  1340. SpotHedgePLChange float64 `json:"spothedgeplchange" xorm:"SPOTHEDGEPLCHANGE"` // 现货实际损益变动
  1341. SpotPLChange float64 `json:"spotplchange" xorm:"SPOTPLCHANGE"` // 现货套期损益变动
  1342. FutureHedgePLChange float64 `json:"futurehedgeplchange" xorm:"FUTUREHEDGEPLCHANGE"` // 期货实际损益变动
  1343. FuturePLChange float64 `json:"futureplchange" xorm:"FUTUREPLCHANGE"` // 期货套期损益变动
  1344. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 商品名称
  1345. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  1346. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  1347. MiddleGoodsList []Ermcp2himiddlegoods `json:"middlegoodslist"` // 套期商品列表
  1348. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户id, 用于过滤
  1349. }
  1350. type Ermcp8RunningHedgeditems []Ermcp8RunningHedgeditem
  1351. func (s Ermcp8RunningHedgeditems) Len() int { return len(s) }
  1352. func (s Ermcp8RunningHedgeditems) Less(i, j int) bool { return s[i].Createtime < s[j].Createtime }
  1353. func (s Ermcp8RunningHedgeditems) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  1354. func (r *Ermcp8RunningHedgeditem) ParseFromProto(p *pb.Ermcp2HedgedItemInfo) {
  1355. r.Hedgeditemid = strconv.Itoa(int(*p.Hedgeditemext.Item.HedgedItemID))
  1356. r.Hedgeditemnum = p.Hedgeditemext.Item.GetHedgedItemNum()
  1357. r.Hedgeditemname = p.Hedgeditemext.Item.GetHedgedItemName()
  1358. r.Hedgedtype = int32(p.Hedgeditemext.Item.GetHedgedType())
  1359. if f, err := time.Parse("2006-01-02 15:04:05", p.Hedgeditemext.Item.GetPlanStartDate().GetDateStr()); err == nil {
  1360. r.Planstartdate = f.Format("2006-01-02")
  1361. } else {
  1362. r.Planstartdate = p.Hedgeditemext.Item.GetPlanStartDate().GetDateStr()
  1363. }
  1364. if f, err := time.Parse("2006-01-02 15:04:05", p.Hedgeditemext.Item.GetPlanEndDate().GetDateStr()); err == nil {
  1365. r.Planenddate = f.Format("2006-01-02")
  1366. } else {
  1367. r.Planenddate = p.Hedgeditemext.Item.GetPlanEndDate().GetDateStr()
  1368. }
  1369. r.Hedgerate = p.Hedgeditemext.Item.GetHedgeRate()
  1370. r.Tradeuserid = int64(*p.Hedgeditemext.Item.TradeUserID)
  1371. r.Areauserid = int64(*p.Hedgeditemext.Item.AreaUserID)
  1372. r.Hedgeditemstatus = int32(*p.Hedgeditemext.Item.HedgedItemStatus)
  1373. r.Applysrc = int32(*p.Hedgeditemext.Item.ApplySrc)
  1374. r.Applyid = int64(*p.Hedgeditemext.Item.ApplyID)
  1375. r.Remark = p.Hedgeditemext.Item.GetRemark()
  1376. r.Createtime = p.Hedgeditemext.Item.GetCreateTime().GetDateStr()
  1377. r.Audittradedate = p.Hedgeditemext.Item.GetAuditTradeDate()
  1378. r.Auditid = int64(p.Hedgeditemext.Item.GetAuditID())
  1379. r.Auditsrc = int32(p.Hedgeditemext.Item.GetAuditSrc())
  1380. r.Audittime = p.Hedgeditemext.Item.GetAuditTime()
  1381. r.Auditremark = p.Hedgeditemext.Item.GetAuditRemark()
  1382. r.Deliverygoodsid = int64(p.Hedgeditemext.Item.GetDeliveryGoodsID())
  1383. r.Wrstandardid = int64(p.Hedgeditemext.Item.GetWrStandardID())
  1384. r.Vatrate = p.Hedgeditemext.Item.GetVatRate()
  1385. r.Hedgeqty = p.Hedgeditemext.Item.GetHedgeQty()
  1386. r.Hedgeamount = p.Hedgeditemext.Item.GetHedgeAmount()
  1387. r.Hedgerestamount = p.Hedgeditemext.Item.GetHedgeRestAmount()
  1388. r.Hedgecontractamount = p.Hedgeditemext.Item.GetHedgeContractAmount()
  1389. r.Oriavgprice = p.Hedgeditemext.Item.GetOriAvgPrice()
  1390. r.Exeqty = p.Hedgeditemext.Item.GetExeQty()
  1391. r.Exeamount = p.Hedgeditemext.Item.GetExeAmount()
  1392. r.Exerestamount = p.Hedgeditemext.Item.GetExeRestAmount()
  1393. r.Exeavgprice = p.Hedgeditemext.Item.GetExeAvgPrice()
  1394. r.Execontractamount = p.Hedgeditemext.Item.GetExeContractAmount()
  1395. r.Curprice = p.Hedgeditemext.Item.GetCurPrice()
  1396. r.Unexeqty = p.Hedgeditemext.Item.GetUnExeQty()
  1397. r.Spothedgepl = p.Hedgeditemext.Item.GetSpotHedgePL()
  1398. r.Spotpl = p.Hedgeditemext.Item.GetSpotPL()
  1399. r.Futurehedgepl = p.Hedgeditemext.Item.GetFutureHedgePL()
  1400. r.Hedgesumpl = p.Hedgeditemext.Item.GetHedgeSumPL()
  1401. r.Spottradepl = p.Hedgeditemext.Item.GetSpotTradePL()
  1402. r.Vatpl = p.Hedgeditemext.Item.GetVatPL()
  1403. r.Sumobspl = p.Hedgeditemext.Item.GetSumObsPL()
  1404. r.Spotbookamount = p.Hedgeditemext.Item.GetSpotBookAmount()
  1405. r.Curstock = p.Hedgeditemext.Item.GetCurStock()
  1406. r.Enddate = p.Hedgeditemext.Item.GetEndDate().GetDateStr()
  1407. r.Endtradedate = p.Hedgeditemext.Item.GetEndTradeDate()
  1408. r.Updatetime = p.Hedgeditemext.Item.GetUpdateTime().GetDateStr()
  1409. r.Orispothedgepl = p.Hedgeditemext.Item.GetOriSpotHedgePL()
  1410. r.Orifuturehedgepl = p.Hedgeditemext.Item.GetOriFutureHedgePL()
  1411. r.Orispotpl = p.Hedgeditemext.Item.GetOriSpotPL()
  1412. r.Orifuturepl = p.Hedgeditemext.Item.GetOriFuturePL()
  1413. r.Spotfloatpl = p.Hedgeditemext.Item.GetSpotFloatPL()
  1414. r.Futurefloatpl = p.Hedgeditemext.Item.GetFutureFloatPL()
  1415. r.Futurepl = p.Hedgeditemext.Item.GetFuturePL()
  1416. r.SpotHedgePLChange = r.Spothedgepl - r.Orispothedgepl
  1417. r.SpotPLChange = r.Spotpl - r.Orispotpl
  1418. r.FutureHedgePLChange = r.Futurehedgepl - r.Orifuturehedgepl
  1419. r.FuturePLChange = r.Futurepl - r.Orifuturepl
  1420. r.Wrstandardname = p.Hedgeditemext.GetWrstandardname()
  1421. r.AccountName = p.Hedgeditemext.GetAccountname()
  1422. if p.Hedgeditemext.GetUnitid() != 0 {
  1423. r.EnumdicName = mtpcache.GetEnumDicitemName(int32(p.Hedgeditemext.GetUnitid()))
  1424. }
  1425. // 套期商品列表
  1426. r.MiddleGoodsList = make([]Ermcp2himiddlegoods, 0)
  1427. for _, goods := range p.Himiddlegoodsext {
  1428. g := Ermcp2himiddlegoods{
  1429. HEDGEDITEMID: int64(goods.Middlegoods.GetHedgedItemID()),
  1430. MIDDLEGOODSID: int64(goods.Middlegoods.GetMiddleGoodsID()),
  1431. DELIVERYGOODSID: int64(goods.Middlegoods.GetDeliveryGoodsID()),
  1432. WRSTANDARDID: int64(*goods.Middlegoods.WrstandardID),
  1433. VATRATE: goods.Middlegoods.GetVatRate(),
  1434. SPOTCONVERTRATIO: goods.Middlegoods.GetSpotConvertRatio(),
  1435. UNEXESPOTQTY: goods.Middlegoods.GetUnexeSpotQty(),
  1436. UNEXEHEDGEQTY: goods.Middlegoods.GetUnexeHedgeQty(),
  1437. FUTUREHEDGEQTY: goods.Middlegoods.GetFutureHedgeQty(),
  1438. HIEXPSOURE: goods.Middlegoods.GetHIExpsoure(),
  1439. TRADEUSERID: int64(goods.Middlegoods.GetTradeUserID()),
  1440. AREAUSERID: int64(goods.Middlegoods.GetAreaUserID()),
  1441. CREATETIME: goods.Middlegoods.GetCreateTime().GetDateStr(),
  1442. UPDATETIME: goods.Middlegoods.GetUpdateTime().GetDateStr(),
  1443. MIDDLEGOODSNAME: *goods.Middlegoodsname,
  1444. }
  1445. r.MiddleGoodsList = append(r.MiddleGoodsList, g)
  1446. }
  1447. }
  1448. // GetDataEx 从数据库中查询数据
  1449. func (r *Ermcp8RunningHedgeditem) GetDataEx(userID int) (interface{}, error) {
  1450. redisCli := rediscli.GetRedisClient()
  1451. sData := make([]Ermcp8RunningHedgeditem, 0)
  1452. key := "Ermcp2HedgedItemInfo:*"
  1453. if ret, err := redisCli.Do("keys", key).Result(); err == nil {
  1454. datas := ret.([]interface{})
  1455. for _, item := range datas {
  1456. itemKey := item.(string)
  1457. // 判断是否目标数据
  1458. s := strings.Split(itemKey, "_")
  1459. if len(s) == 3 {
  1460. areaUserID, _ := strconv.Atoi(strings.Replace(s[0], "Ermcp2HedgedItemInfo:", "", -1))
  1461. traderUserID, _ := strconv.Atoi(s[1])
  1462. if areaUserID == userID || traderUserID == userID {
  1463. if itemValue, err := redisCli.Get(itemKey).Result(); err == nil {
  1464. var data pb.Ermcp2HedgedItemInfo
  1465. if err = proto.Unmarshal([]byte(itemValue), &data); err == nil {
  1466. // 只加载执行中的项目
  1467. if data.Hedgeditemext.Item.GetHedgedItemStatus() == 2 {
  1468. m := Ermcp8RunningHedgeditem{}
  1469. m.ParseFromProto(&data)
  1470. sData = append(sData, m)
  1471. }
  1472. }
  1473. }
  1474. }
  1475. }
  1476. }
  1477. }
  1478. // 按Updatetime倒序排序
  1479. sort.Sort(sort.Reverse(Ermcp8RunningHedgeditems(sData)))
  1480. return sData, nil
  1481. }
  1482. // Ermcp2AreaExposure 企业敞口表_New
  1483. type Ermcp2AreaExposure struct {
  1484. MiddleGoodsID int `json:"middlegoodsid"` // 套保品种
  1485. AreaUserID int `json:"areauserid"` // 所属机构
  1486. SpotQty float64 `json:"spotqty"` // 现货总量
  1487. HedgeSpotQty float64 `json:"hedgespotqty"` // 被套期现货量
  1488. HedgePlanQty float64 `json:"hedgeplanqty"` // 套期计划量
  1489. FutureQty float64 `json:"futureqty"` // 期货套期量
  1490. SpotExposure float64 `json:"spotexposure"` // 现货敞口量
  1491. TotalExposure float64 `json:"totalexposure"` // 总敞口量 = 现货敞口量 + 期货套期量
  1492. SpRatio float64 `json:"spratio"` // 总期现比例 = 期货套期量/现货敞口量
  1493. HedgedSpotExposure float64 `json:"hedgedspotexposure"` // 被套期现货敞口量
  1494. HedgedTotalExposure float64 `json:"hedgedtotalexposure"` // 套期敞口量 = 被套期现货敞口量+期货套期量
  1495. HedgedSpRatio float64 `json:"hedgedspratio"` // 套期期现比例 = 期货套期量/被套期现货敞口量
  1496. OriSpotQty float64 `json:"orispotqty"` // 期初现货总量
  1497. OriHedgeSpotQty float64 `json:"orihedgespotqty"` // 期初被套期现货量
  1498. OriHedgePlanQty float64 `json:"orihedgeplanqty"` // 期初套期计划量
  1499. OriFutureQty float64 `json:"orifutureqty"` // 期初期货套期量
  1500. OriSpotExposure float64 `json:"orispotexposure"` // 期初现货敞口量
  1501. OriTotalExposure float64 `json:"oritotalexposure"` // 期初总敞口量
  1502. OriHedgedSpotExposure float64 `json:"orihedgedspotexposure"` // 期初被套期现货敞口量
  1503. OriHedgedTotalExposure float64 `json:"orihedgedtotalexposure"` // 期初套期敞口量
  1504. UpdateTime string `json:"updatetime"` // 更新时间 --DATE
  1505. MiddleGoodsName string `json:"middlegoodsname"` // 套保品种名称
  1506. GoodsUnitID int `json:"goodsunitid"` // 单位ID
  1507. TotalExposureChange float64 `json:"totalexposurechange"` // 总敞口变动量 = TotalExposure - OriTotalExposure
  1508. HedgedTotalExposoureChange float64 `json:"hedgedtotalexposourechange"` // 被套期敞口变动量 = HedgedTotalExposure - OriHedgedTotalExposure
  1509. SpotQtyChange float64 `json:"spotqtychange"` // 现货变动量 = SpotQty - OriSpotQty
  1510. HedgePlanQtyChange float64 `json:"hedgeplanqtychange"` // 计划变动量 = HedgePlanQty - OriHedgePlanQty
  1511. FutureQtyChange float64 `json:"futureqtychange"` // 期货变动量 = FutureQty - OriFutureQty
  1512. EnumdicName string `json:"enumdicname"` // 单位
  1513. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户id, 用于过滤
  1514. }
  1515. func (r *Ermcp2AreaExposure) ParseFromProto(p *pb.Ermcp2AreaExposure) {
  1516. r.MiddleGoodsID = int(p.GetMiddleGoodsID())
  1517. r.AreaUserID = int(p.GetAreaUserID())
  1518. r.SpotQty = p.GetSpotQty()
  1519. r.HedgeSpotQty = p.GetHedgeSpotQty()
  1520. r.HedgePlanQty = p.GetHedgePlanQty()
  1521. r.FutureQty = p.GetFutureQty()
  1522. r.SpotExposure = p.GetSpotExposure()
  1523. r.TotalExposure = p.GetTotalExposure()
  1524. r.SpRatio = p.GetSpRatio()
  1525. r.HedgedSpotExposure = p.GetHedgedSpotExposure()
  1526. r.HedgedTotalExposure = p.GetHedgedTotalExposure()
  1527. r.HedgedSpRatio = p.GetHedgedSpRatio()
  1528. r.OriSpotQty = p.GetOriSpotQty()
  1529. r.OriHedgeSpotQty = p.GetOriHedgeSpotQty()
  1530. r.OriHedgePlanQty = p.GetOriHedgePlanQty()
  1531. r.OriFutureQty = p.GetOriFutureQty()
  1532. r.OriSpotExposure = p.GetOriSpotExposure()
  1533. r.OriTotalExposure = p.GetOriTotalExposure()
  1534. r.OriHedgedSpotExposure = p.GetOriHedgedSpotExposure()
  1535. r.OriHedgedTotalExposure = p.GetOriHedgedTotalExposure()
  1536. r.UpdateTime = p.GetUpdateTime().GetDateStr()
  1537. r.MiddleGoodsName = p.GetMiddleGoodsName()
  1538. r.GoodsUnitID = int(p.GetGoodsUnitID())
  1539. if p.GetGoodsUnitID() != 0 {
  1540. r.EnumdicName = mtpcache.GetEnumDicitemName(int32(p.GetGoodsUnitID()))
  1541. }
  1542. r.TotalExposureChange = r.TotalExposure - r.OriTotalExposure
  1543. r.HedgedTotalExposoureChange = r.HedgedTotalExposure - r.OriHedgedTotalExposure
  1544. r.SpotQtyChange = r.SpotQty - r.OriSpotQty
  1545. r.HedgePlanQtyChange = r.HedgePlanQty - r.OriHedgePlanQty
  1546. r.FutureQtyChange = r.FutureQty - r.OriFutureQty
  1547. }
  1548. // GetDataEx 从数据库中查询数据
  1549. func (r *Ermcp2AreaExposure) GetDataEx(userID int) (interface{}, error) {
  1550. redisCli := rediscli.GetRedisClient()
  1551. sData := make([]Ermcp2AreaExposure, 0)
  1552. key := "Ermcp2AreaExposure:*"
  1553. if ret, err := redisCli.Do("keys", key).Result(); err == nil {
  1554. datas := ret.([]interface{})
  1555. for _, item := range datas {
  1556. itemKey := item.(string)
  1557. // 判断是否目标数据
  1558. s := strings.Split(itemKey, "_")
  1559. if len(s) == 2 {
  1560. areaUserID, _ := strconv.Atoi(strings.Replace(s[0], "Ermcp2AreaExposure:", "", -1))
  1561. if areaUserID == userID {
  1562. if itemValue, err := redisCli.Get(itemKey).Result(); err == nil {
  1563. var data pb.Ermcp2AreaExposure
  1564. if err = proto.Unmarshal([]byte(itemValue), &data); err == nil {
  1565. m := Ermcp2AreaExposure{}
  1566. m.ParseFromProto(&data)
  1567. sData = append(sData, m)
  1568. }
  1569. }
  1570. }
  1571. }
  1572. }
  1573. }
  1574. return sData, nil
  1575. }
  1576. // Ermcp2stockspotchangelog 现货操作流水表
  1577. type Ermcp2stockspotchangelog struct {
  1578. LOGID string `json:"logid" xorm:"LOGID"` // 流水ID(604+Unix秒时间戳(10位)+xxxxxx)
  1579. OPERATELOGTYPE int32 `json:"operatelogtype" xorm:"OPERATELOGTYPE"` // 操作流水类型 - 2:点价数量 21:正常完结(合同) 22:异常终止(合同) 24:采购入库 25:销售出库 26:生产入库 27:生产出库
  1580. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1581. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1582. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID
  1583. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
  1584. WAREHOUSEINFOID int64 `json:"warehouseinfoid" xorm:"WAREHOUSEINFOID"` // 仓库ID
  1585. RELATEDID int64 `json:"relatedid" xorm:"RELATEDID"` // 现货合同ID
  1586. CONTRACTTYPE int32 `json:"contracttype" xorm:"CONTRACTTYPE"` // 现货合同类型 - 1:采购 -1:销售
  1587. EXETYPE int32 `json:"exetype" xorm:"EXETYPE"` // 执行类型 - 1:采购合同 2:销售合同 3:生产入库 4:生产出库
  1588. LOGVALUE float64 `json:"logvalue" xorm:"LOGVALUE"` // [期间变化量]现货量变更值
  1589. BEFOREVALUE float64 `json:"beforevalue" xorm:"BEFOREVALUE"` // 变更前现货量
  1590. AFTERVALUE float64 `json:"aftervalue" xorm:"AFTERVALUE"` // 现货量
  1591. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1592. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1593. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 机构ID
  1594. CustomerUserName string `json:"customerusername" xorm:"CUSTOMERUSERNAME"` // 对手方
  1595. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 商品名称
  1596. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  1597. CONTRACTNO string `json:"contractno" xorm:"CONTRACTNO"` // [编号]现货合同编号
  1598. MiddleGoodsChange float64 `json:"middlegoodschange" xorm:"MIDDLEGOODSCHANGE"` // 套期商品变化量 = LogValue * 折算系数 * (1/(1+增值税))
  1599. MIDDLEGOODSID int64 `json:"-" form:"middlegoodsid"` // 套保品种ID
  1600. }
  1601. // TableName is ERMCP2_STOCKSPOTCHANGELOG
  1602. func (r *Ermcp2stockspotchangelog) TableName() string {
  1603. return "ERMCP2_STOCKSPOTCHANGELOG"
  1604. }
  1605. func (r *Ermcp2stockspotchangelog) calc() {
  1606. }
  1607. func (r *Ermcp2stockspotchangelog) buildSql() string {
  1608. var sqlId utils.SQLVal = `
  1609. SELECT DISTINCT
  1610. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  1611. t.EXETYPE,
  1612. u.ACCOUNTNAME CUSTOMERUSERNAME,
  1613. ws.WRSTANDARDNAME,
  1614. t.LOGVALUE,
  1615. s.CONTRACTNO,
  1616. u1.ACCOUNTNAME,
  1617. t.TradeDate,
  1618. (t.LOGVALUE * c.CONVERTRATIO * (1/(1 + ws.VATRATE))) MIDDLEGOODSCHANGE
  1619. FROM ERMCP2_StockSpotChangeLog t
  1620. LEFT JOIN ERMS2_WRSConvertDetail c ON c.WRStandardID = t.WRStandardID
  1621. LEFT JOIN ERMS_MiddleGoods mg ON mg.MiddleGoodsID = c.MiddleGoodsID
  1622. LEFT JOIN WRStandard ws ON ws.WRStandardID = t.WRStandardID
  1623. LEFT JOIN ERMCP_SPOTCONTRACT s ON s.SPOTCONTRACTID = t.RELATEDID
  1624. LEFT JOIN useraccount u ON u.userid = s.CUSTOMERUSERID
  1625. LEFT JOIN useraccount u1 ON u1.userid = s.TRADEUSERID
  1626. WHERE t.userid = %v AND mg.MiddleGoodsID = %v
  1627. `
  1628. // var sqlId utils.SQLVal = `
  1629. // SELECT
  1630. // to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  1631. // t.EXETYPE,
  1632. // u.ACCOUNTNAME CUSTOMERUSERNAME,
  1633. // ws.WRSTANDARDNAME,
  1634. // t.LOGVALUE,
  1635. // s.CONTRACTNO,
  1636. // u1.ACCOUNTNAME
  1637. // FROM ERMCP2_StockSpotChangeLog t
  1638. // LEFT JOIN WRStandard ws ON ws.WRStandardID = t.WRStandardID
  1639. // LEFT JOIN ERMCP_SPOTCONTRACT s ON s.SPOTCONTRACTID = t.RELATEDID
  1640. // LEFT JOIN useraccount u ON u.userid = s.CUSTOMERUSERID
  1641. // LEFT JOIN useraccount u1 ON u.userid = s.RELATEDUSERID
  1642. // WHERE t.userid = %v
  1643. // AND t.wrstandardid
  1644. // IN (SELECT
  1645. // wrc.wrstandardid
  1646. // FROM ERMS2_WRSConvertDetail wrc
  1647. // WHERE wrc.middlegoodsid = %v)
  1648. // `
  1649. sqlId.FormatParam(r.USERID, r.MIDDLEGOODSID)
  1650. sqlId.OrderBy("CREATETIME")
  1651. return sqlId.String()
  1652. }
  1653. // GetDataEx 从数据库中查询数据
  1654. func (r *Ermcp2stockspotchangelog) GetDataEx() (interface{}, error) {
  1655. e := db.GetEngine()
  1656. s := e.SQL(r.buildSql())
  1657. sData := make([]Ermcp2stockspotchangelog, 0)
  1658. if err := s.Find(&sData); err != nil {
  1659. return nil, err
  1660. }
  1661. for i := range sData {
  1662. sData[i].calc()
  1663. }
  1664. return sData, nil
  1665. }
  1666. // Ermcp2hedgeditemspot 计划变动明细
  1667. type Ermcp2hedgeditemsDetail struct {
  1668. HEDGEDITEMSPOTID string `json:"hedgeditemspotid" xorm:"HEDGEDITEMSPOTID"` // 现货明细ID(625+Unix秒时间戳(10位)+xxxxxx)
  1669. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID
  1670. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型[计划类型] - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  1671. SPOTTYPE int32 `json:"spottype" xorm:"SPOTTYPE"` // 现货类型 - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  1672. RELATEDTYPE int32 `json:"relatedtype" xorm:"RELATEDTYPE"` // 关联类型 - 1:套期关联 2:执行关联
  1673. RELATEDHEDGEPLANID int64 `json:"relatedhedgeplanid" xorm:"RELATEDHEDGEPLANID"` // 关联计划ID 【1:采购计划 2:销售计划】
  1674. RELATEDSPOTCONTRACTID int64 `json:"relatedspotcontractid" xorm:"RELATEDSPOTCONTRACTID"` // 关联合同ID 【3:采购合同 4:销售合同】
  1675. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 对手方 【3:采购合同 4:销售合同】
  1676. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1677. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1678. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID" = 2
  1679. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // [期间变化量]关联数量
  1680. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场价[当初市场价]
  1681. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT"` // 市价总额 = 关联数量 * 期初市场价
  1682. SPOTPRICEDAMOUNT float64 `json:"spotpricedamount" xorm:"SPOTPRICEDAMOUNT"` // 定价总额
  1683. SPOTPRICEDAVGPRICE float64 `json:"spotpricedavgprice" xorm:"SPOTPRICEDAVGPRICE"` // 现货均价 = 定价总额 / 关联数量
  1684. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // [日期时间]创建时间
  1685. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  1686. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  1687. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品
  1688. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  1689. Hedgeplanno string `json:"hedgeplanno" xorm:"HEDGEPLANNO"` // 计划编号
  1690. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  1691. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  1692. MiddleGoodsChange float64 `json:"middlegoodschange" xorm:"MIDDLEGOODSCHANGE"` // 套期商品变化量 = RELATEDQTY * 折算系数 * (1/(1+增值税))
  1693. USERID int64 `json:"-" form:"userid"` // 用户ID
  1694. MIDDLEGOODSID int64 `json:"-" form:"middlegoodsid"` // 套保品种ID
  1695. }
  1696. func (r *Ermcp2hedgeditemsDetail) calc() {
  1697. }
  1698. func (r *Ermcp2hedgeditemsDetail) buildSql() string {
  1699. var sqlId utils.SQLVal = `
  1700. SELECT DISTINCT
  1701. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  1702. t.SPOTTYPE,
  1703. t.HEDGEDTYPE,
  1704. wr.WRSTANDARDNAME,
  1705. e.ENUMDICNAME,
  1706. h.UNEXEQTY,
  1707. t.RELATEDQTY,
  1708. s.HEDGEPLANNO,
  1709. u.ACCOUNTNAME,
  1710. (t.RELATEDQTY * c.CONVERTRATIO * (1/(1 + wr.VATRATE))) MIDDLEGOODSCHANGE
  1711. FROM ERMCP2_HEDGEDITEMSPOT t
  1712. LEFT JOIN ERMS2_WRSConvertDetail c ON c.WRStandardID = t.WRStandardID
  1713. LEFT JOIN ERMS_MiddleGoods mg ON mg.MiddleGoodsID = c.MiddleGoodsID
  1714. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  1715. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  1716. LEFT JOIN ermcp_hedgeplan s ON s.HedgePlanID = t.RELATEDHEDGEPLANID
  1717. LEFT JOIN ERMCP2_HedgedItem h on h.HedgedItemID = t.HEDGEDITEMID
  1718. LEFT JOIN useraccount u ON u.userid = t.TRADEUSERID
  1719. WHERE t.SpotType IN (1,2) AND h.HEDGEDITEMSTATUS = 2
  1720. AND t.areauserid = %v
  1721. AND mg.MiddleGoodsID = %v
  1722. `
  1723. sqlId.FormatParam(r.USERID, r.MIDDLEGOODSID)
  1724. return sqlId.String()
  1725. }
  1726. // GetDataEx 从数据库中查询数据
  1727. func (r *Ermcp2hedgeditemsDetail) GetDataEx() (interface{}, error) {
  1728. e := db.GetEngine()
  1729. s := e.SQL(r.buildSql())
  1730. sData := make([]Ermcp2hedgeditemsDetail, 0)
  1731. if err := s.Find(&sData); err != nil {
  1732. return nil, err
  1733. }
  1734. for i := range sData {
  1735. sData[i].calc()
  1736. }
  1737. return sData, nil
  1738. }
  1739. // Patradelinkdetail 敞口 - 期货变动明细
  1740. type Patradelinkdetail struct {
  1741. LINKDETAILID string `json:"linkdetailid" xorm:"LINKDETAILID"` // 期货明细ID(614+Unix秒时间戳(10位)+xxxxxx)
  1742. TRADEID string `json:"tradeid" xorm:"TRADEID"` // [成交单号]内部成交单ID
  1743. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
  1744. HEDGEFLAG int32 `json:"hedgeflag" xorm:"HEDGEFLAG"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利 4:套期保值(平安\合同) 5:单边(平安) 6:移仓(平安) 7:错单处理(平安) 8:跨期套利(平安) 9:套期保值(计划) 10:套利(合同) 11:换月(合同) 12:交割(金瑞) 13:被套期项目
  1745. SPOTCONTRACTID int64 `json:"hedgeditemid" xorm:"SPOTCONTRACTID"` // 现货ID[套期项目ID] [13 - 被套期项目ID] [4,10,11 - 现货合同ID] [9 - 套保计划ID]
  1746. RELATEDLOT float64 `json:"relatedlot" xorm:"RELATEDLOT"` // [数量]关联手数
  1747. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  1748. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"GOODSGROUPID"` // 对冲品种ID[期货合约商品组ID]
  1749. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID" form:"middlegoodsid"` // 套保品种ID
  1750. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量 = RelatedLot * AgreeUnit * ConvertRatio
  1751. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 关联交易日(yyyyMMdd)
  1752. RELATEDMODE int32 `json:"relatedmode" xorm:"RELATEDMODE"` // 关联方式 - 1:自动关联 2:手动关联 3:解绑关联
  1753. TRADETRADEDATE string `json:"tradetradedate" xorm:"TRADETRADEDATE"` // 成交交易日(yyyyMMdd)
  1754. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // [价格]成交价格
  1755. TRADELOT int64 `json:"tradelot" xorm:"TRADELOT"` // 成交手数
  1756. SALEUSERID int64 `json:"saleuserid" xorm:"SALEUSERID"` // 业务员ID
  1757. BIZSUBJECTID int64 `json:"bizsubjectid" xorm:"BIZSUBJECTID"` // 归属业务部门ID - SubjectID
  1758. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 合约乘数
  1759. CONVERTRATIO float64 `json:"convertratio" xorm:"CONVERTRATIO"` // 品种系数
  1760. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
  1761. CREATORSRC int32 `json:"creatorsrc" xorm:"CREATORSRC"` // 创建人来源 - 1:管理端 2:终端 3:交易
  1762. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人ID
  1763. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // [日期时间]创建时间
  1764. LINKSTATUS int32 `json:"linkstatus" xorm:"LINKSTATUS"` // 关联状态 - 1:成功 2:失败 3:解绑
  1765. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 返回码
  1766. ORDERTYPE int32 `json:"ordertype" xorm:"ORDERTYPE"` // 单据类型[套期工具] - 1:期货单 2:看涨期权单 3:看跌期权单
  1767. OPTIONCODE string `json:"optioncode" xorm:"OPTIONCODE"` // [期货合约]期权代码 [期权]
  1768. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 金额 = RelatedLot * TradePrice * AgreeUnit
  1769. NAME string `json:"name" xorm:"NAME"` // 账户名/子账户
  1770. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 商品代码(内部)
  1771. CONVERTRATIOCHANGE float64 `json:"convertratiochange" xorm:"CONVERTRATIOCHANGE"` // 套期商品变化量 = RelatedLot * AgreeUnit * ConvertRatio
  1772. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 套期主体
  1773. USERID int64 `json:"-" form:"userid"` // 用户ID
  1774. }
  1775. func (r *Patradelinkdetail) calc() {
  1776. }
  1777. func (r *Patradelinkdetail) buildSql() string {
  1778. var sqlId utils.SQLVal = `
  1779. SELECT
  1780. to_char(p.tradetime, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  1781. p.ORDERTYPE,
  1782. g.GOODSCODE,
  1783. p.BUYORSELL,
  1784. p.TRADEPRICE,
  1785. p.TRADELOT RELATEDLOT,
  1786. p.TRADEAMOUNT AMOUNT,
  1787. p.MIDDLEGOODSQTY CONVERTRATIOCHANGE,
  1788. to_char(p.TRADEID) TRADEID,
  1789. u.ACCOUNTNAME
  1790. FROM ERMCP_PA_TradeLink p
  1791. LEFT JOIN TAACCOUNT ta on ta.accountid = p.ACCOUNTID
  1792. LEFT JOIN USERACCOUNT u on u.userid = ta.relateduserid
  1793. LEFT JOIN GOODS g ON g.goodsid = p.goodsid
  1794. WHERE p.areauserid = %v AND p.middlegoodsid = %v
  1795. ORDER BY p.TRADEID
  1796. `
  1797. sqlId.FormatParam(r.USERID, r.MIDDLEGOODSID)
  1798. return sqlId.String()
  1799. }
  1800. // GetDataEx 从数据库中查询数据
  1801. func (r *Patradelinkdetail) GetDataEx() (interface{}, error) {
  1802. e := db.GetEngine()
  1803. s := e.SQL(r.buildSql())
  1804. sData := make([]Patradelinkdetail, 0)
  1805. if err := s.Find(&sData); err != nil {
  1806. return nil, err
  1807. }
  1808. for i := range sData {
  1809. sData[i].calc()
  1810. }
  1811. return sData, nil
  1812. }
  1813. // Unlinkermcphedgeplan 未关联购销计划
  1814. type Unlinkermcphedgeplan struct {
  1815. HEDGEPLANID string `json:"hedgeplanid" xorm:"HEDGEPLANID"` // 套保计划ID(601+Unix秒时间戳(10位)+xxxxxx)
  1816. HEDGEPLANNO string `json:"hedgeplanno" xorm:"HEDGEPLANNO" form:"hedgeplanno"` // [计划编号]套保计划编号,模糊查询
  1817. CONTRACTTYPE int32 `json:"contracttype" xorm:"CONTRACTTYPE" form:"contracttype"` // 计划类型 - 1:采购 -1:销售
  1818. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID" form:"areauserid" binding:"required"` // [企业ID]机构ID
  1819. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1820. PRODUCTTYPE int32 `json:"producttype" xorm:"PRODUCTTYPE"` // 产品类型 - 1:标准仓单 2:等标 3:非标
  1821. SPOTGOODSDESC string `json:"spotgoodsdesc" xorm:"SPOTGOODSDESC"` // 商品型号
  1822. PLANQTY float64 `json:"planqty" xorm:"PLANQTY"` // [计划量]计划数量
  1823. CONVERTFACTOR float64 `json:"convertfactor" xorm:"CONVERTFACTOR"` // 标仓系数 - 作废
  1824. PLANTIME time.Time `json:"plantime" xorm:"PLANTIME"` // 计划时间
  1825. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1826. HEDGEPLANSTATUS int32 `json:"hedgeplanstatus" xorm:"HEDGEPLANSTATUS"` // [状态]套保计划状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  1827. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1828. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  1829. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  1830. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  1831. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  1832. APPLYTIME time.Time `json:"applytime" xorm:"APPLYTIME"` // 申请时间
  1833. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  1834. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  1835. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  1836. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  1837. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  1838. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1839. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 期货账户ID - 作废
  1840. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  1841. CURRENCYID int64 `json:"currencyid" xorm:"CURRENCYID"` // 结算币种ID - 作废
  1842. BIZTYPE int32 `json:"biztype" xorm:"BIZTYPE"` // 业务类型 - 1:套保
  1843. ISRELATED int32 `json:"isrelated" xorm:"ISRELATED"` // 是否已关联计划项目 - 0:否 1:是
  1844. AccountName string `json:"accountname" xorm:"ACCOUNTNAME"` // 交易用户
  1845. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 结算币种
  1846. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME" form:"wrstandardname"` // 现货商品,模糊查询
  1847. }
  1848. func (r *Unlinkermcphedgeplan) calc() {
  1849. }
  1850. func (r *Unlinkermcphedgeplan) buildSql() string {
  1851. var sqlId utils.SQLVal = `
  1852. SELECT
  1853. to_char(t.HEDGEPLANID) HEDGEPLANID,
  1854. t.HEDGEPLANNO,
  1855. u.ACCOUNTNAME,
  1856. t.CONTRACTTYPE,
  1857. wr.WRSTANDARDNAME,
  1858. t.PLANQTY,
  1859. e.ENUMDICNAME,
  1860. t.HEDGEPLANSTATUS,
  1861. t.WRSTANDARDID
  1862. FROM ERMCP_HedgePlan t
  1863. LEFT JOIN USERACCOUNT u on u.userid = t.tradeuserid
  1864. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  1865. LEFT JOIN ENUMDICITEM e ON e.ENUMITEMNAME = t.CURRENCYID and e.ENUMDICCODE = 'currency'
  1866. WHERE t.areauserid = %v AND T.ISRELATED = 0 AND T.HEDGEPLANSTATUS = 2
  1867. `
  1868. sqlId.FormatParam(r.AREAUSERID)
  1869. sqlId.AndEx("t.contracttype", r.CONTRACTTYPE, r.CONTRACTTYPE > 0)
  1870. sqlId.AndLike("t.hedgeplanno", r.HEDGEPLANNO)
  1871. sqlId.AndLike("wr.WRSTANDARDNAME", r.HEDGEPLANNO)
  1872. return sqlId.String()
  1873. }
  1874. // GetDataEx 从数据库中查询数据
  1875. func (r *Unlinkermcphedgeplan) GetDataEx() (interface{}, error) {
  1876. e := db.GetEngine()
  1877. s := e.SQL(r.buildSql())
  1878. sData := make([]Unlinkermcphedgeplan, 0)
  1879. if err := s.Find(&sData); err != nil {
  1880. return nil, err
  1881. }
  1882. for i := range sData {
  1883. sData[i].calc()
  1884. }
  1885. return sData, nil
  1886. }
  1887. // Ermcp2hedgeditemlink 项目现货关联表
  1888. type Ermcp2hedgeditemlink struct {
  1889. HEDGEDITEMLINKID int64 `json:"hedgeditemlinkid" xorm:"HEDGEDITEMLINKID"` // 现货关联表ID(626+Unix秒时间戳(10位)+xxxxxx)
  1890. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID
  1891. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  1892. SPOTTYPE int32 `json:"spottype" xorm:"SPOTTYPE"` // 现货类型 - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  1893. RELATEDTYPE int32 `json:"relatedtype" xorm:"RELATEDTYPE"` // 关联类型 - 1:套期关联 2:执行关联
  1894. RELATEDHEDGEPLANID int64 `json:"relatedhedgeplanid" xorm:"RELATEDHEDGEPLANID"` // 关联计划ID 【1:采购计划 2:销售计划】
  1895. RELATEDSPOTCONTRACTID int64 `json:"relatedspotcontractid" xorm:"RELATEDSPOTCONTRACTID" form:"spotcontractid" binding:"required"` // 关联合同ID 【3:采购合同 4:销售合同】
  1896. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 对手方 【3:采购合同 4:销售合同】
  1897. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1898. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1899. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID
  1900. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  1901. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  1902. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量
  1903. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT"` // 市价总额 = 关联数量 * 期初市场价
  1904. SPOTPRICEDAMOUNT float64 `json:"spotpricedamount" xorm:"SPOTPRICEDAMOUNT"` // [关联定价总额]定价总额
  1905. SPOTPRICEDAVGPRICE float64 `json:"spotpricedavgprice" xorm:"SPOTPRICEDAVGPRICE"` // [关联现货均价]现货均价 = 定价总额 / 关联数量
  1906. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量【项目关联时值】
  1907. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // [关联时间]创建时间
  1908. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  1909. Wrstandardname string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品
  1910. EnumdicName string `json:"enumdicname" xorm:"ENUMDICNAME"` // 单位
  1911. }
  1912. // TableName is ERMCP2_HEDGEDITEMLINK
  1913. func (r *Ermcp2hedgeditemlink) TableName() string {
  1914. return "ERMCP2_HEDGEDITEMLINK"
  1915. }
  1916. func (r *Ermcp2hedgeditemlink) calc() {
  1917. }
  1918. func (r *Ermcp2hedgeditemlink) buildSql() string {
  1919. var sqlId utils.SQLVal = `
  1920. SELECT
  1921. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  1922. h.HEDGEDITEMNUM,
  1923. wr.WRSTANDARDNAME,
  1924. e.ENUMDICNAME,
  1925. t.RELATEDQTY,
  1926. t.SPOTPRICEDAMOUNT,
  1927. t.SPOTPRICEDAVGPRICE,
  1928. t.HEDGEDTYPE
  1929. FROM ERMCP2_HEDGEDITEMLINK t
  1930. LEFT JOIN ERMCP2_HedgedItem h ON h.HEDGEDITEMID = t.HEDGEDITEMID
  1931. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  1932. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  1933. WHERE t.RELATEDSPOTCONTRACTID = %v
  1934. `
  1935. sqlId.FormatParam(r.RELATEDSPOTCONTRACTID)
  1936. return sqlId.String()
  1937. }
  1938. // GetDataEx 从数据库中查询数据
  1939. func (r *Ermcp2hedgeditemlink) GetDataEx() (interface{}, error) {
  1940. e := db.GetEngine()
  1941. s := e.SQL(r.buildSql())
  1942. sData := make([]Ermcp2hedgeditemlink, 0)
  1943. if err := s.Find(&sData); err != nil {
  1944. return nil, err
  1945. }
  1946. for i := range sData {
  1947. sData[i].calc()
  1948. }
  1949. return sData, nil
  1950. }
  1951. // Marketcalendar 市场节假日表
  1952. type Marketcalendar struct {
  1953. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  1954. HOLIDAYDATE string `json:"holidaydate" xorm:"HOLIDAYDATE"` // 节假日期(yyyy-MM-dd)
  1955. }
  1956. // TableName is MARKETCALENDAR
  1957. func (r *Marketcalendar) TableName() string {
  1958. return "MARKETCALENDAR"
  1959. }
  1960. func (r *Marketcalendar) calc() {
  1961. }
  1962. func (r *Marketcalendar) buildSql() string {
  1963. var sqlId utils.SQLVal = `
  1964. SELECT
  1965. t.MARKETID,
  1966. to_char(to_date(t.HOLIDAYDATE,'yyyyMMdd'), 'yyyy-MM-dd') HOLIDAYDATE
  1967. FROM MarketCalendar t
  1968. WHERE 1 = 1
  1969. `
  1970. sqlId.AndEx("t.MARKETID", r.MARKETID, r.MARKETID > 0)
  1971. return sqlId.String()
  1972. }
  1973. // GetDataEx 从数据库中查询数据
  1974. func (r *Marketcalendar) GetDataEx() (interface{}, error) {
  1975. e := db.GetEngine()
  1976. s := e.SQL(r.buildSql())
  1977. sData := make([]Marketcalendar, 0)
  1978. if err := s.Find(&sData); err != nil {
  1979. return nil, err
  1980. }
  1981. for i := range sData {
  1982. sData[i].calc()
  1983. }
  1984. return sData, nil
  1985. }