ermcp8.go 73 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103
  1. package models
  2. import (
  3. "mtp2_if/db"
  4. "mtp2_if/utils"
  5. "time"
  6. )
  7. // Ermcp2himiddlegoodsOrc 项目套保品种明细
  8. type Ermcp2himiddlegoodsOrc struct {
  9. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  10. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种ID
  11. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  12. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  13. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  14. SPOTCONVERTRATIO float64 `json:"spotconvertratio" xorm:"SPOTCONVERTRATIO"` // 折算系数 [现货]
  15. UNEXESPOTQTY float64 `json:"unexespotqty" xorm:"UNEXESPOTQTY"` // 未执行现货量
  16. UNEXEHEDGEQTY float64 `json:"unexehedgeqty" xorm:"UNEXEHEDGEQTY"` // 未执行套期量 = 未执行现货量*折算系数* (1/(1+增值税)) * 套期比例(项目上)
  17. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货持仓套期量
  18. HIEXPSOURE float64 `json:"hiexpsoure" xorm:"HIEXPSOURE"` // 期现敞口量 = 未执行套期量 + 期货持仓套期量
  19. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  20. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  21. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  22. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  23. }
  24. // TableName is ERMCP2_HIMIDDLEGOODS
  25. func (r *Ermcp2himiddlegoodsOrc) TableName() string {
  26. return "ERMCP2_HIMIDDLEGOODS"
  27. }
  28. // Ermcp2hedgeditem 被套期项目表
  29. type Ermcp2hedgeditemOrc struct {
  30. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  31. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  32. HEDGEDITEMNAME string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  33. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  34. PLANSTARTDATE time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  35. PLANENDDATE time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  36. HEDGERATE float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套期比率
  37. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  38. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  39. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  40. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  41. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  42. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  43. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  44. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  45. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  46. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  47. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  48. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  49. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  50. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  51. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  52. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  53. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  54. HEDGERESTAMOUNT float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  55. HEDGECONTRACTAMOUNT float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  56. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  57. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  58. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  59. EXERESTAMOUNT float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  60. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  61. EXECONTRACTAMOUNT float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  62. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  63. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  64. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  65. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  66. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  67. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  68. HEDGESUMPL float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  69. SPOTTRADEPL float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  70. VATPL float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  71. SUMOBSPL float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  72. SPOTBOOKAMOUNT float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  73. CURSTOCK float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  74. ENDDATE time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  75. ENDTRADEDATE string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  76. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  77. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  78. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  79. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  80. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  81. SPOTFLOATPL float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  82. FUTUREFLOATPL float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  83. }
  84. // TableName is ERMCP2_HEDGEDITEM
  85. func (r *Ermcp2hedgeditemOrc) TableName() string {
  86. return "ERMCP2_HEDGEDITEM"
  87. }
  88. // Reckonermcp2hedgeditem 被套期项目日照表
  89. type Reckonermcp2hedgeditem struct {
  90. RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照时期(yyyyMMdd)
  91. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  92. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  93. HEDGEDITEMNAME string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  94. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  95. PLANSTARTDATE time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  96. PLANENDDATE time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  97. HEDGERATE float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套期比率
  98. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  99. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  100. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  101. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  102. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  103. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  104. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  105. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  106. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  107. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  108. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  109. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  110. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  111. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  112. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  113. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  114. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  115. HEDGERESTAMOUNT float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  116. HEDGECONTRACTAMOUNT float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  117. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  118. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  119. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  120. EXERESTAMOUNT float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  121. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  122. EXECONTRACTAMOUNT float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  123. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  124. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  125. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  126. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  127. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  128. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  129. HEDGESUMPL float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  130. SPOTTRADEPL float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  131. VATPL float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  132. SUMOBSPL float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  133. SPOTBOOKAMOUNT float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  134. CURSTOCK float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  135. ENDDATE time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  136. ENDTRADEDATE string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  137. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  138. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  139. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  140. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  141. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  142. SPOTFLOATPL float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  143. FUTUREFLOATPL float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  144. }
  145. // TableName is RECKON_ERMCP2_HEDGEDITEM
  146. func (r *Reckonermcp2hedgeditem) TableName() string {
  147. return "RECKON_ERMCP2_HEDGEDITEM"
  148. }
  149. // Reportermcp2hedgeditem 被套期项目报表表
  150. type Reportermcp2hedgeditem struct {
  151. CYCLETIME string `json:"cycletime" xorm:"CYCLETIME"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
  152. CYCLETYPE int32 `json:"cycletype" xorm:"CYCLETYPE"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
  153. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  154. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  155. HEDGEDITEMNAME string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  156. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  157. PLANSTARTDATE time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  158. PLANENDDATE time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  159. HEDGERATE float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套期比率
  160. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  161. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  162. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  163. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  164. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  165. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  166. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  167. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  168. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  169. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  170. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  171. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  172. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  173. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  174. VATRATE float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  175. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  176. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  177. HEDGERESTAMOUNT float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  178. HEDGECONTRACTAMOUNT float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  179. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  180. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  181. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  182. EXERESTAMOUNT float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  183. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  184. EXECONTRACTAMOUNT float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  185. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  186. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  187. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  188. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  189. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  190. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  191. HEDGESUMPL float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  192. SPOTTRADEPL float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  193. VATPL float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  194. SUMOBSPL float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  195. SPOTBOOKAMOUNT float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  196. CURSTOCK float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  197. ENDDATE time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  198. ENDTRADEDATE string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  199. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  200. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  201. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  202. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  203. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  204. SPOTFLOATPL float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  205. FUTUREFLOATPL float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  206. }
  207. // TableName is REPORT_ERMCP2_HEDGEDITEM
  208. func (r *Reportermcp2hedgeditem) TableName() string {
  209. return "REPORT_ERMCP2_HEDGEDITEM"
  210. }
  211. // Ermcp2hedgeditem 被套期项目表
  212. type Ermcp2hedgeditem struct {
  213. Hedgeditemid string `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  214. Hedgeditemnum string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  215. Hedgeditemname string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  216. Hedgedtype int32 `json:"hedgedtype" xorm:"HEDGEDTYPE" form:"hedgedtype"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  217. Planstartdate time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  218. Planenddate time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  219. Hedgerate float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套保比率
  220. Tradeuserid int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  221. Areauserid int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  222. Hedgeditemstatus int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS" form:"hedgeditemstatus"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  223. Applysrc int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  224. Applyid int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  225. Remark string `json:"remark" xorm:"REMARK"` // 备注
  226. Createtime time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  227. Audittradedate string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  228. Auditid int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  229. Auditsrc int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  230. Audittime time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  231. Auditremark string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  232. Deliverygoodsid int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  233. Wrstandardid int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  234. Vatrate float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  235. Hedgeqty float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  236. Hedgeamount float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  237. Hedgerestamount float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  238. Hedgecontractamount float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  239. Oriavgprice float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  240. Exeqty float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  241. Exeamount float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  242. Exerestamount float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  243. Exeavgprice float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  244. Execontractamount float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  245. Curprice float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  246. Unexeqty float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  247. Spothedgepl float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  248. Spotpl float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  249. Futurehedgepl float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  250. Futurepl float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  251. Hedgesumpl float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  252. Spottradepl float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  253. Vatpl float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  254. Sumobspl float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  255. Spotbookamount float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  256. Curstock float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  257. Enddate time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  258. Endtradedate string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  259. Updatetime time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  260. Orispothedgepl float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  261. Orifuturehedgepl float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  262. Orispotpl float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  263. Orifuturepl float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  264. Spotfloatpl float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  265. Futurefloatpl float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  266. SpotHedgePLChange float64 `json:"spothedgeplchange" xorm:"SPOTHEDGEPLCHANGE"` // 现货实际损益变动
  267. SpotPLChange float64 `json:"spotplchange" xorm:"SPOTPLCHANGE"` // 现货套期损益变动
  268. FutureHedgePLChange float64 `json:"futurehedgeplchange" xorm:"FUTUREHEDGEPLCHANGE"` // 期货实际损益变动
  269. FuturePLChange float64 `json:"futureplchange" xorm:"FUTUREPLCHANGE"` // 期货套期损益变动
  270. Wrstandardname string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 商品名称
  271. EnumdicName string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位
  272. AccountName string `json:"accountName" xorm:"ACCOUNTNAME"` // 套期主体
  273. MiddleGoodsList []Ermcp2himiddlegoods `json:"middlegoodslist"` // 套期商品列表
  274. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户id, 用于过滤
  275. }
  276. // TableName is ERMCP2_HEDGEDITEM
  277. func (r *Ermcp2hedgeditem) TableName() string {
  278. return "ERMCP2_HEDGEDITEM"
  279. }
  280. func (r *Ermcp2hedgeditem) calc() {
  281. }
  282. func (r *Ermcp2hedgeditem) buildSql() string {
  283. var sqlId utils.SQLVal = `
  284. SELECT
  285. to_char(t.HEDGEDITEMID) HEDGEDITEMID,
  286. t.HEDGEDITEMNUM ,
  287. t.HEDGEDITEMNAME ,
  288. t.HEDGEDTYPE ,
  289. t.PLANSTARTDATE ,
  290. t.PLANENDDATE ,
  291. t.HEDGERATE ,
  292. t.TRADEUSERID ,
  293. t.AREAUSERID ,
  294. t.HEDGEDITEMSTATUS ,
  295. t.APPLYSRC ,
  296. t.APPLYID ,
  297. t.REMARK ,
  298. t.CREATETIME ,
  299. t.AUDITTRADEDATE ,
  300. t.AUDITID ,
  301. t.AUDITSRC ,
  302. t.AUDITTIME ,
  303. t.AUDITREMARK ,
  304. t.DELIVERYGOODSID ,
  305. t.WRSTANDARDID ,
  306. t.VATRATE ,
  307. t.HEDGEQTY ,
  308. t.HEDGEAMOUNT ,
  309. t.HEDGERESTAMOUNT ,
  310. t.HEDGECONTRACTAMOUNT,
  311. t.ORIAVGPRICE ,
  312. t.EXEQTY ,
  313. t.EXEAMOUNT ,
  314. t.EXERESTAMOUNT ,
  315. t.EXEAVGPRICE ,
  316. t.EXECONTRACTAMOUNT ,
  317. t.CURPRICE ,
  318. t.UNEXEQTY ,
  319. t.SPOTHEDGEPL ,
  320. t.SPOTPL ,
  321. t.FUTUREHEDGEPL ,
  322. t.FUTUREPL ,
  323. t.HEDGESUMPL ,
  324. t.SPOTTRADEPL ,
  325. t.VATPL ,
  326. t.SUMOBSPL ,
  327. t.SPOTBOOKAMOUNT ,
  328. t.CURSTOCK ,
  329. t.ENDDATE ,
  330. t.ENDTRADEDATE ,
  331. t.UPDATETIME ,
  332. t.ORISPOTHEDGEPL ,
  333. t.ORIFUTUREHEDGEPL ,
  334. t.ORISPOTPL ,
  335. t.ORIFUTUREPL ,
  336. t.SPOTFLOATPL ,
  337. t.FUTUREFLOATPL ,
  338. (t.SpotHedgePL - t.OriSpotHedgePL) SPOTHEDGEPLCHANGE,
  339. (t.SpotPL - t.OriSpotPL) SPOTPLCHANGE,
  340. (t.FutureHedgePL - t.OriFutureHedgePL) FUTUREHEDGEPLCHANGE,
  341. (t.FuturePL - t.OriFuturePL) FUTUREPLCHANGE,
  342. wr.WRSTANDARDNAME,
  343. e.ENUMDICNAME,
  344. u.ACCOUNTNAME
  345. FROM ERMCP2_HedgedItem t
  346. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  347. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  348. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  349. WHERE 1 = 1
  350. AND %v in (t.AreaUserID, t.TradeUserID)
  351. `
  352. sqlId.FormatParam(r.USERID)
  353. sqlId.AndEx("t.Hedgedtype", r.Hedgedtype, r.Hedgedtype > 0)
  354. sqlId.AndEx("t.hedgeditemstatus", r.Hedgeditemstatus, r.Hedgeditemstatus > 0)
  355. return sqlId.String()
  356. }
  357. // GetDataEx 从数据库中查询数据
  358. func (r *Ermcp2hedgeditem) GetDataEx() (interface{}, error) {
  359. e := db.GetEngine()
  360. s := e.SQL(r.buildSql())
  361. sData := make([]Ermcp2hedgeditem, 0)
  362. if err := s.Find(&sData); err != nil {
  363. return nil, err
  364. }
  365. for i := range sData {
  366. sData[i].calc()
  367. }
  368. if len(sData) > 0 {
  369. // 获取关联期货品种
  370. m1 := Ermcp2himiddlegoods{}
  371. if d1, err := m1.GetDataEx(); err == nil {
  372. gpLst := d1.([]Ermcp2himiddlegoods)
  373. for i := range sData {
  374. sData[i].MiddleGoodsList = append(sData[i].MiddleGoodsList, gpLst...)
  375. }
  376. }
  377. }
  378. return sData, nil
  379. }
  380. // Ermcp2himiddlegoods 项目套保品种明细
  381. type Ermcp2himiddlegoods struct {
  382. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID" binding:"required"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  383. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID" binding:"required"` // 套保品种ID
  384. DELIVERYGOODSID int64 `json:"-" xorm:"DELIVERYGOODSID"` // 现货品种ID
  385. WRSTANDARDID int64 `json:"-" xorm:"WRSTANDARDID"` // 现货商品ID
  386. VATRATE float64 `json:"-" xorm:"VATRATE"` // 增值税
  387. SPOTCONVERTRATIO float64 `json:"-" xorm:"SPOTCONVERTRATIO"` // 折算系数 [现货]
  388. UNEXESPOTQTY float64 `json:"-" xorm:"UNEXESPOTQTY"` // 未执行现货量
  389. UNEXEHEDGEQTY float64 `json:"unexehedgeqty" xorm:"UNEXEHEDGEQTY"` // 未执行套期量 = 未执行现货量*折算系数* (1/(1+增值税)) * 套期比例(项目上)
  390. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货持仓套期量
  391. HIEXPSOURE float64 `json:"hiexpsoure" xorm:"HIEXPSOURE"` // 期现敞口量 = 未执行套期量 + 期货持仓套期量
  392. TRADEUSERID int64 `json:"-" xorm:"TRADEUSERID"` // 交易用户ID
  393. AREAUSERID int64 `json:"-" xorm:"AREAUSERID"` // 企业ID
  394. CREATETIME time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  395. UPDATETIME time.Time `json:"-" xorm:"UPDATETIME"` // 更新时间
  396. Middlegoodsname string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
  397. Middlegoodscode string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
  398. }
  399. // TableName is ERMCP2_HIMIDDLEGOODS
  400. func (r *Ermcp2himiddlegoods) TableName() string {
  401. return "ERMCP2_HIMIDDLEGOODS"
  402. }
  403. func (r *Ermcp2himiddlegoods) calc() {
  404. }
  405. func (r *Ermcp2himiddlegoods) buildSql() string {
  406. var sqlId utils.SQLVal = `
  407. SELECT
  408. t.MIDDLEGOODSID,
  409. t.UNEXEHEDGEQTY,
  410. t.FUTUREHEDGEQTY,
  411. t.HIEXPSOURE,
  412. m.MIDDLEGOODSNAME,
  413. m.MIDDLEGOODSCODE
  414. FROM ERMCP2_HIMIDDLEGOODS t
  415. LEFT JOIN erms_middlegoods m ON m.middlegoodsid = t.middlegoodsid
  416. WHERE t.HEDGEDITEMID = %v
  417. `
  418. sqlId.FormatParam(r.HEDGEDITEMID)
  419. return sqlId.String()
  420. }
  421. // GetDataEx 从数据库中查询数据
  422. func (r *Ermcp2himiddlegoods) GetDataEx() (interface{}, error) {
  423. e := db.GetEngine()
  424. s := e.SQL(r.buildSql())
  425. sData := make([]Ermcp2himiddlegoods, 0)
  426. if err := s.Find(&sData); err != nil {
  427. return nil, err
  428. }
  429. for i := range sData {
  430. sData[i].calc()
  431. }
  432. return sData, nil
  433. }
  434. // Ermcpjrlinkpos 项目期货关联头寸
  435. type Ermcpjrlinkpos struct {
  436. SPOTCONTRACTID string `json:"spotcontractid" xorm:"SPOTCONTRACTID" form:"hedgeditemid" binding:"required"` // 现货ID [套期项目ID - 金瑞:合同\虚拟合同ID
  437. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 期货合约
  438. ORDERTYPE int32 `json:"ordertype" xorm:"ORDERTYPE"` // 单据类型[套期工具] - 1:期货单 2:看涨期权单 3:看跌期权单
  439. EXECUTEPRICE int64 `json:"executeprice" xorm:"EXECUTEPRICE"` // 执行价 - 1:期货单 为 0
  440. OPTIONCODE string `json:"optioncode" xorm:"OPTIONCODE"` // 期权代码
  441. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属企业
  442. TOTALBUYAMOUNT float64 `json:"totalbuyamount" xorm:"TOTALBUYAMOUNT"` // 买金额 [期货]
  443. TOTALBUYQTY float64 `json:"totalbuyqty" xorm:"TOTALBUYQTY"` // 买数量
  444. TOTALSELLAMOUNT float64 `json:"totalsellamount" xorm:"TOTALSELLAMOUNT"` // 卖金额 [期货]
  445. TOTALSELLQTY float64 `json:"totalsellqty" xorm:"TOTALSELLQTY"` // 卖数量
  446. NETQTY float64 `json:"netqty" xorm:"NETQTY"` // 净头寸
  447. TOTALCHARGE float64 `json:"totalcharge" xorm:"TOTALCHARGE"` // 手续费
  448. TOTALPREMIUM float64 `json:"totalpremium" xorm:"TOTALPREMIUM"` // 权利金 [期权]
  449. CLOSEPL float64 `json:"closepl" xorm:"CLOSEPL"` // 总平仓盈亏 [期货损益]
  450. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  451. TOTALBUYHOLDAMOUNT float64 `json:"totalbuyholdamount" xorm:"TOTALBUYHOLDAMOUNT"` // 买持仓总金额[期货]
  452. TOTALSELLHOLDAMOUNT float64 `json:"totalsellholdamount" xorm:"TOTALSELLHOLDAMOUNT"` // 卖持仓总金额[期货]
  453. TODAYFUTURECLOSEPL float64 `json:"todayfutureclosepl" xorm:"TODAYFUTURECLOSEPL"` // 今日平仓盈亏
  454. RECKONPL float64 `json:"reckonpl" xorm:"RECKONPL"` // 总盈亏(平仓盈亏 + 结算盈亏 - 手续费)
  455. Middlegoodsname string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
  456. Middlegoodscode string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
  457. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货套期量
  458. AVERAGEPRICE float64 `json:"averageprice" xorm:"AVERAGEPRICE"` // 持仓均价 (TotalBuyHoldAmount - TotalSellHoldAmount) / NetQty
  459. }
  460. // TableName is ERMCP_JR_LINKPOS
  461. func (r *Ermcpjrlinkpos) TableName() string {
  462. return "ERMCP_JR_LINKPOS"
  463. }
  464. func (r *Ermcpjrlinkpos) calc() {
  465. }
  466. func (r *Ermcpjrlinkpos) buildSql() string {
  467. var sqlId utils.SQLVal = `
  468. SELECT
  469. to_char(t.SPOTCONTRACTID) SPOTCONTRACTID,
  470. t.ORDERTYPE,
  471. t.OPTIONCODE,
  472. t.CLOSEPL,
  473. t.NETQTY,
  474. ((t.TotalBuyHoldAmount - t.TotalSellHoldAmount) / NetQty) AVERAGEPRICE,
  475. mg.middlegoodsname,
  476. mg.middlegoodscode
  477. FROM ERMCP_JR_LinkPos t
  478. LEFT JOIN Goods g ON g.goodsid = t.goodsid
  479. LEFT JOIN ERMCP_GGConvertConfig gc on gc.srcgoodsgroupid = g.goodsgroupid
  480. LEFT JOIN ERMS_MiddleGoods mg ON mg.goodsgroupid = gc.destgoodsgroupid
  481. WHERE mg.areauserid = t.areauserid AND t.SPOTCONTRACTID = %v
  482. ORDER BY t.OPTIONCODE
  483. `
  484. // 只有期货合约ID(GoodsID)的情况下获取套保商品名称,需要以上的关联
  485. sqlId.FormatParam(r.SPOTCONTRACTID)
  486. return sqlId.String()
  487. }
  488. // GetDataEx 从数据库中查询数据
  489. func (r *Ermcpjrlinkpos) GetDataEx() (interface{}, error) {
  490. e := db.GetEngine()
  491. s := e.SQL(r.buildSql())
  492. sData := make([]Ermcpjrlinkpos, 0)
  493. if err := s.Find(&sData); err != nil {
  494. return nil, err
  495. }
  496. for i := range sData {
  497. sData[i].calc()
  498. }
  499. return sData, nil
  500. }
  501. // Ermcp2hedgeditemspot 项目现货明细
  502. type Ermcp2hedgeditemspot struct {
  503. HEDGEDITEMSPOTID string `json:"hedgeditemspotid" xorm:"HEDGEDITEMSPOTID"` // 现货明细ID(625+Unix秒时间戳(10位)+xxxxxx)
  504. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID" form:"hedgeditemid" binding:"required"` // 被套期项目ID
  505. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型[计划类型] - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  506. SPOTTYPE int32 `json:"spottype" xorm:"SPOTTYPE"` // 现货类型 - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  507. RELATEDTYPE int32 `json:"relatedtype" xorm:"RELATEDTYPE"` // 关联类型 - 1:套期关联 2:执行关联
  508. RELATEDHEDGEPLANID int64 `json:"relatedhedgeplanid" xorm:"RELATEDHEDGEPLANID"` // 关联计划ID 【1:采购计划 2:销售计划】
  509. RELATEDSPOTCONTRACTID int64 `json:"relatedspotcontractid" xorm:"RELATEDSPOTCONTRACTID"` // 关联合同ID 【3:采购合同 4:销售合同】
  510. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 对手方 【3:采购合同 4:销售合同】
  511. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  512. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  513. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID" = 2
  514. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量[数量]
  515. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场价[当初市场价]
  516. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT"` // 市价总额 = 关联数量 * 期初市场价
  517. SPOTPRICEDAMOUNT float64 `json:"spotpricedamount" xorm:"SPOTPRICEDAMOUNT"` // 定价总额
  518. SPOTPRICEDAVGPRICE float64 `json:"spotpricedavgprice" xorm:"SPOTPRICEDAVGPRICE"` // 现货均价 = 定价总额 / 关联数量
  519. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  520. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  521. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  522. Wrstandardname string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 现货商品
  523. EnumdicName string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位
  524. Hedgeplanno string `json:"hedgeplanno" xorm:"'HEDGEPLANNO'"` // 计划编号
  525. }
  526. // TableName is ERMCP2_HEDGEDITEMSPOT
  527. func (r *Ermcp2hedgeditemspot) TableName() string {
  528. return "ERMCP2_HEDGEDITEMSPOT"
  529. }
  530. func (r *Ermcp2hedgeditemspot) calc() {
  531. }
  532. func (r *Ermcp2hedgeditemspot) buildSql() string {
  533. var sqlId utils.SQLVal = `
  534. SELECT
  535. to_char(t.hedgeditemspotid) HEDGEDITEMSPOTID,
  536. to_char(t.hedgeditemid) HEDGEDITEMID,
  537. t.HEDGEDTYPE,
  538. wr.WRSTANDARDNAME,
  539. e.ENUMDICNAME,
  540. t.RELATEDQTY,
  541. t.ORIAVGPRICE,
  542. s.HEDGEPLANNO
  543. FROM ERMCP2_HEDGEDITEMSPOT t
  544. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  545. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  546. LEFT JOIN ermcp_hedgeplan s ON s.HedgePlanID = t.RELATEDHEDGEPLANID
  547. WHERE t.HedgedType IN (1,2) AND t.hedgeditemid = %v
  548. ORDER BY t.createtime
  549. `
  550. sqlId.FormatParam(r.HEDGEDITEMID)
  551. return sqlId.String()
  552. }
  553. // GetDataEx 从数据库中查询数据
  554. func (r *Ermcp2hedgeditemspot) GetDataEx() (interface{}, error) {
  555. e := db.GetEngine()
  556. s := e.SQL(r.buildSql())
  557. sData := make([]Ermcp2hedgeditemspot, 0)
  558. if err := s.Find(&sData); err != nil {
  559. return nil, err
  560. }
  561. for i := range sData {
  562. sData[i].calc()
  563. }
  564. return sData, nil
  565. }
  566. // Ermcp2hedgeditemspotDetail 现货成交明细
  567. type Ermcp2hedgeditemspotDetail struct {
  568. HEDGEDITEMSPOTID string `json:"hedgeditemspotid" xorm:"HEDGEDITEMSPOTID"` // 现货明细ID(625+Unix秒时间戳(10位)+xxxxxx)
  569. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID" form:"hedgeditemid" binding:"required"` // 被套期项目ID
  570. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型[计划类型] - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  571. SPOTTYPE int32 `json:"spottype" xorm:"SPOTTYPE"` // 现货类型[合同类型] - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  572. RELATEDTYPE int32 `json:"relatedtype" xorm:"RELATEDTYPE"` // 关联类型 - 1:套期关联 2:执行关联
  573. RELATEDHEDGEPLANID int64 `json:"relatedhedgeplanid" xorm:"RELATEDHEDGEPLANID"` // 关联计划ID 【1:采购计划 2:销售计划】
  574. RELATEDSPOTCONTRACTID int64 `json:"relatedspotcontractid" xorm:"RELATEDSPOTCONTRACTID"` // 关联合同ID 【3:采购合同 4:销售合同】
  575. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 对手方 【3:采购合同 4:销售合同】
  576. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  577. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  578. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID" = 2
  579. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量[数量]
  580. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场价[当初市场价]
  581. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT"` // 市价总额 = 关联数量 * 期初市场价
  582. SPOTPRICEDAMOUNT float64 `json:"spotpricedamount" xorm:"SPOTPRICEDAMOUNT"` // 定价总额[金额]
  583. SPOTPRICEDAVGPRICE float64 `json:"spotpricedavgprice" xorm:"SPOTPRICEDAVGPRICE"` // 现货均价 = 定价总额 / 关联数量
  584. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  585. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  586. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  587. Wrstandardname string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 现货商品
  588. EnumdicName string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位
  589. AccountName string `json:"accountName" xorm:"ACCOUNTNAME"` // 对手方
  590. BRANDNAME string `json:"brandname" xorm:"'BRANDNAME'"` // 品牌
  591. CONTRACTNO string `json:"contractno" xorm:"'CONTRACTNO'"` // 合同编号
  592. }
  593. func (r *Ermcp2hedgeditemspotDetail) calc() {
  594. }
  595. func (r *Ermcp2hedgeditemspotDetail) buildSql() string {
  596. var sqlId utils.SQLVal = `
  597. SELECT
  598. to_char(t.hedgeditemspotid) HEDGEDITEMSPOTID,
  599. to_char(t.hedgeditemid) HEDGEDITEMID,
  600. t.CREATETIME,
  601. t.SPOTTYPE,
  602. u.ACCOUNTNAME,
  603. wr.WRSTANDARDNAME,
  604. e.ENUMDICNAME,
  605. gb.dgfactoryitemvalue BRANDNAME,
  606. t.RELATEDQTY,
  607. t.SPOTPRICEDAVGPRICE,
  608. t.SPOTPRICEDAMOUNT,
  609. t.ORIAVGPRICE,
  610. s.CONTRACTNO
  611. FROM ERMCP2_HEDGEDITEMSPOT t
  612. LEFT JOIN useraccount u ON u.userid = t.CUSTOMERUSERID
  613. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  614. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  615. LEFT JOIN dgfactoryitem gb ON gb.dgfactoryitemid = t.SPOTGOODSBRANDID
  616. LEFT JOIN ermcp_spotcontract s on s.spotcontractid = t.RELATEDSPOTCONTRACTID
  617. WHERE t.HedgedType IN (3,4,5) AND t.hedgeditemid = %v
  618. ORDER BY t.createtime
  619. `
  620. sqlId.FormatParam(r.HEDGEDITEMID)
  621. return sqlId.String()
  622. }
  623. // GetDataEx 从数据库中查询数据
  624. func (r *Ermcp2hedgeditemspotDetail) GetDataEx() (interface{}, error) {
  625. e := db.GetEngine()
  626. s := e.SQL(r.buildSql())
  627. sData := make([]Ermcp2hedgeditemspotDetail, 0)
  628. if err := s.Find(&sData); err != nil {
  629. return nil, err
  630. }
  631. for i := range sData {
  632. sData[i].calc()
  633. }
  634. return sData, nil
  635. }
  636. // Ermcppatradelinkdetail 期货成交单关联明细表
  637. type Ermcppatradelinkdetail struct {
  638. LINKDETAILID string `json:"linkdetailid" xorm:"LINKDETAILID"` // 期货明细ID(614+Unix秒时间戳(10位)+xxxxxx)
  639. TRADEID string `json:"tradeid" xorm:"TRADEID"` // [成交单号]内部成交单ID
  640. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
  641. HEDGEFLAG int32 `json:"hedgeflag" xorm:"HEDGEFLAG"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利 4:套期保值(平安\合同) 5:单边(平安) 6:移仓(平安) 7:错单处理(平安) 8:跨期套利(平安) 9:套期保值(计划) 10:套利(合同) 11:换月(合同) 12:交割(金瑞) 13:被套期项目
  642. SPOTCONTRACTID int64 `json:"hedgeditemid" xorm:"SPOTCONTRACTID" form:"hedgeditemid" binding:"required"` // 现货ID[套期项目ID] [13 - 被套期项目ID] [4,10,11 - 现货合同ID] [9 - 套保计划ID]
  643. RELATEDLOT float64 `json:"relatedlot" xorm:"RELATEDLOT"` // [数量]关联手数
  644. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  645. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"GOODSGROUPID"` // 对冲品种ID[期货合约商品组ID]
  646. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种ID
  647. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量 = RelatedLot * AgreeUnit * ConvertRatio
  648. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 关联交易日(yyyyMMdd)
  649. RELATEDMODE int32 `json:"relatedmode" xorm:"RELATEDMODE"` // 关联方式 - 1:自动关联 2:手动关联 3:解绑关联
  650. TRADETRADEDATE string `json:"tradetradedate" xorm:"TRADETRADEDATE"` // 成交交易日(yyyyMMdd)
  651. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // [价格]成交价格
  652. TRADELOT int64 `json:"tradelot" xorm:"TRADELOT"` // 成交手数
  653. SALEUSERID int64 `json:"saleuserid" xorm:"SALEUSERID"` // 业务员ID
  654. BIZSUBJECTID int64 `json:"bizsubjectid" xorm:"BIZSUBJECTID"` // 归属业务部门ID - SubjectID
  655. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 合约乘数
  656. CONVERTRATIO float64 `json:"convertratio" xorm:"CONVERTRATIO"` // 品种系数
  657. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
  658. CREATORSRC int32 `json:"creatorsrc" xorm:"CREATORSRC"` // 创建人来源 - 1:管理端 2:终端 3:交易
  659. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人ID
  660. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  661. LINKSTATUS int32 `json:"linkstatus" xorm:"LINKSTATUS"` // 关联状态 - 1:成功 2:失败 3:解绑
  662. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 返回码
  663. TRADETIME time.Time `json:"tradetime" xorm:"TRADETIME"` // 日期时间
  664. ORDERTYPE int32 `json:"ordertype" xorm:"ORDERTYPE"` // 单据类型[套期工具] - 1:期货单 2:看涨期权单 3:看跌期权单
  665. OPTIONCODE string `json:"optioncode" xorm:"OPTIONCODE"` // [期货合约]期权代码 [期权]
  666. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 金额 = RelatedLot * TradePrice * AgreeUnit
  667. NAME string `json:"name" xorm:"NAME"` // 账户名/子账户
  668. }
  669. func (r *Ermcppatradelinkdetail) calc() {
  670. }
  671. func (r *Ermcppatradelinkdetail) buildSql() string {
  672. var sqlId utils.SQLVal = `
  673. SELECT
  674. p.TRADETIME,
  675. p.ORDERTYPE,
  676. p.OPTIONCODE,
  677. t.BUYORSELL,
  678. t.TRADEPRICE,
  679. t.RELATEDLOT,
  680. (t.RelatedLot * t.TradePrice * t.AgreeUnit) AMOUNT,
  681. to_char(t.TRADEID) TRADEID,
  682. (u.ACCOUNTNAME || '/' || to_char(t.ACCOUNTID)) NAME
  683. FROM ERMCP_PA_TradeLinkDetail t
  684. LEFT JOIN ERMCP_PA_TradeLink p ON p.TradeID = t.TradeID AND p.BuyorSell = t.BuyorSell
  685. LEFT JOIN TAACCOUNT ta ON ta.ACCOUNTID = t.ACCOUNTID
  686. LEFT JOIN USERACCOUNT u on u.userid = ta.relateduserid
  687. WHERE t.HedgeFlag = 13 AND t.SpotContractID = %v
  688. ORDER BY p.TradeTime
  689. `
  690. sqlId.FormatParam(r.SPOTCONTRACTID)
  691. return sqlId.String()
  692. }
  693. // GetDataEx 从数据库中查询数据
  694. func (r *Ermcppatradelinkdetail) GetDataEx() (interface{}, error) {
  695. e := db.GetEngine()
  696. s := e.SQL(r.buildSql())
  697. sData := make([]Ermcppatradelinkdetail, 0)
  698. if err := s.Find(&sData); err != nil {
  699. return nil, err
  700. }
  701. for i := range sData {
  702. sData[i].calc()
  703. }
  704. return sData, nil
  705. }
  706. // InternalUncorrelatedTradeDetail 内部未关联成交单
  707. type InternalUncorrelatedTradeDetail struct {
  708. LINKDETAILID string `json:"linkdetailid" xorm:"LINKDETAILID"` // 期货明细ID(614+Unix秒时间戳(10位)+xxxxxx)
  709. TRADEID string `json:"tradeid" xorm:"TRADEID" form:"tradeid"` // 成交单号
  710. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 方向 - 0:买 1:卖
  711. HEDGEFLAG int32 `json:"hedgeflag" xorm:"HEDGEFLAG"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利 4:套期保值(平安\合同) 5:单边(平安) 6:移仓(平安) 7:错单处理(平安) 8:跨期套利(平安) 9:套期保值(计划) 10:套利(合同) 11:换月(合同) 12:交割(金瑞) 13:被套期项目
  712. SPOTCONTRACTID int64 `json:"hedgeditemid" xorm:"SPOTCONTRACTID"` // 现货ID[套期项目ID] [13 - 被套期项目ID] [4,10,11 - 现货合同ID] [9 - 套保计划ID]
  713. RELATEDLOT float64 `json:"relatedlot" xorm:"RELATEDLOT"` // [数量]关联手数
  714. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  715. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"GOODSGROUPID"` // 对冲品种ID[期货合约商品组ID]
  716. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种ID
  717. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // [套期商品数量]关联数量 = RelatedLot * AgreeUnit * ConvertRatio
  718. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 关联交易日(yyyyMMdd)
  719. RELATEDMODE int32 `json:"relatedmode" xorm:"RELATEDMODE"` // 关联方式 - 1:自动关联 2:手动关联 3:解绑关联
  720. TRADETRADEDATE string `json:"tradetradedate" xorm:"TRADETRADEDATE"` // 成交交易日(yyyyMMdd)
  721. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价
  722. TRADELOT int64 `json:"tradelot" xorm:"TRADELOT"` // 成交手数
  723. SALEUSERID int64 `json:"saleuserid" xorm:"SALEUSERID"` // 业务员ID
  724. BIZSUBJECTID int64 `json:"bizsubjectid" xorm:"BIZSUBJECTID"` // 归属业务部门ID - SubjectID
  725. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 合约乘数
  726. CONVERTRATIO float64 `json:"convertratio" xorm:"CONVERTRATIO"` // 品种系数
  727. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
  728. CREATORSRC int32 `json:"creatorsrc" xorm:"CREATORSRC"` // 创建人来源 - 1:管理端 2:终端 3:交易
  729. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人ID
  730. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  731. LINKSTATUS int32 `json:"linkstatus" xorm:"LINKSTATUS"` // 关联状态 - 1:成功 2:失败 3:解绑
  732. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 返回码
  733. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账号ID
  734. CHANNELBUILDTYPE int32 `json:"channelbuildtype" xorm:"CHANNELBUILDTYPE"` // 委托单据类型 0:无 1:建仓 2:平仓
  735. TRADETIME string `json:"tradetime" xorm:"TRADETIME"` // 成交时间
  736. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME" form:"accountname"` // 套期主体
  737. ENABLEQTY float64 `json:"enableqty" xorm:"ENABLEQTY"` // 项目可关联手数 = 成交手数 - 关联数量
  738. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户编号
  739. BEGINDATE string `json:"-" form:"begindate"` // 起始日期, 格式:yyyymmdd
  740. ENDDATE string `json:"-" form:"enddate"` // 终止日期, 格式:yyyymmdd
  741. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE" form:"goodscode"` // 合约代码
  742. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME" form:"goodsname"` // 合约名称
  743. }
  744. func (r *InternalUncorrelatedTradeDetail) calc() {
  745. }
  746. func (r *InternalUncorrelatedTradeDetail) buildSql() string {
  747. var sqlId utils.SQLVal = `
  748. SELECT
  749. to_char(ept.TRADETIME, 'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  750. ept.GOODSID,
  751. g.GOODSCODE,
  752. g.GOODSNAME,
  753. ept.BUYORSELL,
  754. ept.TRADEPRICE,
  755. ept.TRADELOT,
  756. ept.RELATEDQTY,
  757. ept.RELATEDLOT,
  758. ept.MIDDLEGOODSQTY,
  759. e.ENUMDICNAME,
  760. to_char(ept.TRADEID) TRADEID,
  761. ua.ACCOUNTNAME,
  762. ta.accountname TAACCOUNTNAME,
  763. ept.ACCOUNTID,
  764. ept.CHANNELBUILDTYPE,
  765. (ept.TRADELOT - ept.RELATEDQTY) ENABLEQTY
  766. FROM ERMCP_PA_TRADELINK ept
  767. LEFT JOIN goods g ON ept.goodsid = g.goodsid
  768. LEFT JOIN taaccount ta ON ta.accountid = ept.accountid
  769. LEFT JOIN useraccount ua ON ta.RELATEDUSERID = ua.userid
  770. LEFT JOIN enumdicitem e ON e.enumitemname = g.goodunitid AND e.enumdiccode = 'goodsunit'
  771. WHERE ept.tradelot > ept.relatedlot
  772. and ept.areauserid in
  773. (select u1.userid
  774. FROM useraccount u1
  775. start with u1.userid = %v
  776. connect by prior u1.userid = u1.parentuserid)
  777. `
  778. sqlId.FormatParam(r.USERID)
  779. if r.BEGINDATE != "" {
  780. sqlId.JoinFormat(" and to_char(ept.tradetime, 'yyyymmdd') >= '%v'", r.BEGINDATE)
  781. }
  782. if r.ENDDATE != "" {
  783. sqlId.JoinFormat(" and to_char(ept.tradetime, 'yyyymmdd') <= '%v'", r.ENDDATE)
  784. }
  785. sqlId.AndLike("g.goodscode", r.GOODSCODE)
  786. sqlId.AndLike("g.goodsname", r.GOODSNAME)
  787. sqlId.AndEx("ept.TRADEID", r.TRADEID, r.TRADEID != "")
  788. sqlId.AndEx("ept.BUYORSELL", r.BUYORSELL, r.BUYORSELL != -1)
  789. sqlId.AndLikes2("ta.accountname", "ta.accountid", r.ACCOUNTNAME)
  790. sqlId.OrderByDesc("ept.tradetime")
  791. return sqlId.String()
  792. }
  793. // GetDataEx 从数据库中查询数据
  794. func (r *InternalUncorrelatedTradeDetail) GetDataEx() (interface{}, error) {
  795. e := db.GetEngine()
  796. s := e.SQL(r.buildSql())
  797. sData := make([]InternalUncorrelatedTradeDetail, 0)
  798. if err := s.Find(&sData); err != nil {
  799. return nil, err
  800. }
  801. for i := range sData {
  802. sData[i].calc()
  803. }
  804. return sData, nil
  805. }
  806. // InternalEnableTradeDetail 内部成交单可关联项目
  807. type InternalEnableTradeDetail struct {
  808. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  809. Deliverygoodsid int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货品种ID(SEQ_DELIVERYGOODS)
  810. Deliverygoodscode string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
  811. Deliverygoodsname string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
  812. Wrstandardid int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 现货品类ID(SEQ_WRSTANDARD)
  813. Wrstandardcode string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 现货品类代码
  814. Wrstandardname string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 现货品类名称
  815. UNEXESPOTQTY float64 `json:"unexespotqty" xorm:"UNEXESPOTQTY"` // 未执行现货量
  816. UNEXEHEDGEQTY float64 `json:"unexehedgeqty" xorm:"UNEXEHEDGEQTY"` // 未执行套期量 = 未执行现货量*折算系数* (1/(1+增值税)) * 套期比例(项目上)
  817. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // [已关联数量]期货持仓套期量
  818. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID" form:"areauserid" binding:"required"` // 企业ID
  819. GOODSID int64 `form:"goodsid" binding:"required"` // 期货合约ID
  820. }
  821. func (r *InternalEnableTradeDetail) calc() {
  822. }
  823. func (r *InternalEnableTradeDetail) buildSql() string {
  824. var sqlId utils.SQLVal = `
  825. SELECT
  826. hi.HEDGEDITEMNUM,
  827. dg.DELIVERYGOODSID,
  828. dg.DELIVERYGOODSCODE,
  829. dg.DELIVERYGOODSNAME,
  830. wr.WRSTANDARDID,
  831. wr.WRSTANDARDCODE,
  832. wr.WRSTANDARDNAME,
  833. t.UNEXESPOTQTY,
  834. t.UNEXEHEDGEQTY,
  835. t.FUTUREHEDGEQTY
  836. FROM ERMCP2_HIMiddleGoods t
  837. LEFT JOIN ERMCP2_HedgedItem hi ON hi.HEDGEDITEMID = t.HEDGEDITEMID
  838. LEFT JOIN DeliveryGoods dg ON dg.DELIVERYGOODSID = t.DELIVERYGOODSID
  839. LEFT JOIN WRStandard wr ON wr.WRStandardID = t.WRStandardID
  840. LEFT JOIN ERMS_MiddleGoods mg ON mg.MIDDLEGOODSID = t.MIDDLEGOODSID
  841. LEFT JOIN ERMCP_GGConvertConfig gc ON gc.destgoodsgroupid = mg.goodsgroupid
  842. LEFT JOIN Goods g ON g.GOODSGROUPID = gc.SRCGOODSGROUPID
  843. WHERE 1 = 1
  844. `
  845. sqlId.And("t.AREAUSERID", r.AREAUSERID)
  846. sqlId.And("g.GOODSID", r.GOODSID)
  847. return sqlId.String()
  848. }
  849. // GetDataEx 从数据库中查询数据
  850. func (r *InternalEnableTradeDetail) GetDataEx() (interface{}, error) {
  851. e := db.GetEngine()
  852. s := e.SQL(r.buildSql())
  853. sData := make([]InternalEnableTradeDetail, 0)
  854. if err := s.Find(&sData); err != nil {
  855. return nil, err
  856. }
  857. for i := range sData {
  858. sData[i].calc()
  859. }
  860. return sData, nil
  861. }
  862. // Ermcp8HedgeditemReport 套期项目报表
  863. type Ermcp8HedgeditemReport struct {
  864. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE" form:"hedgedtype"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  865. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  866. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  867. HEDGEDITEMSTATUS int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS" form:"hedgeditemstatus"` // 项目状态 - 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  868. HEDGEDITEMNUM string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM" form:"hedgeditemnum"` // 项目编号,模糊查询
  869. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  870. Wrstandardcode string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 现货品类代码
  871. Wrstandardname string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // [现货商品]现货品类名称
  872. HEDGEQTY float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // [套期数量]套期现货量
  873. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // [期初价]期初市场均价 = 套期市价总额 / 套期现货量
  874. HEDGEAMOUNT float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // [套期现货金额]套期市价总额
  875. EXEQTY float64 `json:"exeqty" xorm:"EXEQTY"` // [执行数量]执行现货量
  876. EXEAVGPRICE float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // [执行价]执行市场均价= 执行市价总额 / 执行现货量
  877. EXEAMOUNT float64 `json:"exeamount" xorm:"EXEAMOUNT"` // [执行现货金额]执行市价总额
  878. FUTUREHEDGEPL float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  879. FUTUREHEDGEPLCHANGE float64 `json:"futurehedgeplchange" xorm:"FUTUREHEDGEPLCHANGE"` // 期货实际变动 = 期货实际损益 - 期初期货实际损益
  880. FUTUREPL float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  881. FUTUREPLCHANGE float64 `json:"futureplchange" xorm:"FUTUREPLCHANGE"` // 期货套期变动 = 期货套期损益 - 期初期货套期损益
  882. SPOTHEDGEPL float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货实际损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  883. SPOTHEDGEPLCHANGE float64 `json:"spothedgeplchange" xorm:"SPOTHEDGEPLCHANGE"` // 现货实际变动 = 现货实际损益 - 期初现货实际损益
  884. SPOTPL float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  885. SPOTPLCHANGE float64 `json:"spotplchange" xorm:"SPOTPLCHANGE"` // 现货套期变动 = 现货套期损益 - 期初现货套期损益
  886. UNEXEQTY float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  887. CURPRICE float64 `json:"curprice" xorm:"CURPRICE"` // [当日现货市场价]当前市场价
  888. PLANSTARTDATE time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  889. PLANENDDATE time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  890. ORISPOTHEDGEPL float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  891. ORIFUTUREHEDGEPL float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  892. ORISPOTPL float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  893. ORIFUTUREPL float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  894. EnumdicName string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位
  895. AccountName string `json:"accountName" xorm:"ACCOUNTNAME"` // 套期主体
  896. USERID int64 `form:"userid" binding:"required"` // 用户ID
  897. CYCLETYPE int32 `form:"cycletype" binding:"required"` // 周期类型 - 0:日 1:月 2:季 3:年 4:周 5:全报表【原值】
  898. CYCLETIME string `form:"cycletime" binding:"required"` // 周期时间 日(YYYYMMDD) 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
  899. }
  900. func (r *Ermcp8HedgeditemReport) calc() {
  901. }
  902. func (r *Ermcp8HedgeditemReport) buildSql() string {
  903. if r.CYCLETYPE == 0 {
  904. // 日
  905. return r.buildReckonSql()
  906. } else {
  907. // 周、月
  908. return r.buildReportSql()
  909. }
  910. }
  911. func (r *Ermcp8HedgeditemReport) buildReckonSql() string {
  912. var sqlId utils.SQLVal = `
  913. SELECT
  914. t.HEDGEDTYPE,
  915. t.TRADEUSERID,
  916. t.AREAUSERID,
  917. t.HEDGEDITEMSTATUS,
  918. t.HEDGEDITEMNUM,
  919. wr.WRSTANDARDID,
  920. wr.WRSTANDARDCODE,
  921. wr.WRSTANDARDNAME,
  922. t.HEDGEQTY,
  923. t.ORIAVGPRICE,
  924. t.HEDGEAMOUNT,
  925. t.EXEQTY,
  926. t.EXEAVGPRICE,
  927. t.EXEAMOUNT,
  928. t.FUTUREHEDGEPL,
  929. (t.FUTUREHEDGEPL - t.ORIFUTUREHEDGEPL) FUTUREHEDGEPLCHANGE,
  930. t.FUTUREPL,
  931. (t.FUTUREPL - t.ORIFUTUREPL) FUTUREPLCHANGE,
  932. t.SPOTHEDGEPL,
  933. (t.SPOTHEDGEPL - t.ORISPOTHEDGEPL) SPOTHEDGEPLCHANGE,
  934. t.SPOTPL,
  935. (t.SPOTPL - t.ORISPOTPL) SPOTPLCHANGE,
  936. t.UNEXEQTY,
  937. t.CURPRICE,
  938. t.PLANSTARTDATE,
  939. t.PLANENDDATE,
  940. e.ENUMDICNAME,
  941. u.ACCOUNTNAME
  942. FROM Reckon_ERMCP2_HedgedItem t
  943. LEFT JOIN WRStandard wr ON wr.WRStandardID = t.WRStandardID
  944. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  945. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  946. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  947. WHERE (t.TRADEUSERID = %v OR t.AREAUSERID = %v)
  948. `
  949. sqlId.FormatParam(r.USERID, r.USERID)
  950. sqlId.And("t.RECKONDATE", r.CYCLETIME)
  951. sqlId.AndEx("t.HEDGEDTYPE", r.HEDGEDTYPE, r.HEDGEDTYPE > 0)
  952. sqlId.AndEx("t.HEDGEDITEMSTATUS", r.HEDGEDITEMSTATUS, r.HEDGEDITEMSTATUS > 0)
  953. sqlId.AndLike("t.HEDGEDITEMNUM", r.HEDGEDITEMNUM)
  954. sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  955. return sqlId.String()
  956. }
  957. func (r *Ermcp8HedgeditemReport) buildReportSql() string {
  958. var sqlId utils.SQLVal = `
  959. SELECT
  960. t.HEDGEDTYPE,
  961. t.TRADEUSERID,
  962. t.AREAUSERID,
  963. t.HEDGEDITEMSTATUS,
  964. t.HEDGEDITEMNUM,
  965. wr.WRSTANDARDID,
  966. wr.WRSTANDARDCODE,
  967. wr.WRSTANDARDNAME,
  968. t.HEDGEQTY,
  969. t.ORIAVGPRICE,
  970. t.HEDGEAMOUNT,
  971. t.EXEQTY,
  972. t.EXEAVGPRICE,
  973. t.EXEAMOUNT,
  974. t.FUTUREHEDGEPL,
  975. (t.FUTUREHEDGEPL - t.ORIFUTUREHEDGEPL) FUTUREHEDGEPLCHANGE,
  976. t.FUTUREPL,
  977. (t.FUTUREPL - t.ORIFUTUREPL) FUTUREPLCHANGE,
  978. t.SPOTHEDGEPL,
  979. (t.SPOTHEDGEPL - t.ORISPOTHEDGEPL) SPOTHEDGEPLCHANGE,
  980. t.SPOTPL,
  981. (t.SPOTPL - t.ORISPOTPL) SPOTPLCHANGE,
  982. t.UNEXEQTY,
  983. t.CURPRICE,
  984. t.PLANSTARTDATE,
  985. t.PLANENDDATE,
  986. e.ENUMDICNAME,
  987. u.ACCOUNTNAME
  988. FROM REPORT_ERMCP2_HEDGEDITEM t
  989. LEFT JOIN WRStandard wr ON wr.WRStandardID = t.WRStandardID
  990. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  991. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  992. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  993. WHERE (t.TRADEUSERID = %v OR t.AREAUSERID = %v)
  994. `
  995. sqlId.FormatParam(r.USERID, r.USERID)
  996. sqlId.And("t.CYCLETIME", r.CYCLETIME)
  997. sqlId.AndEx("t.HEDGEDTYPE", r.HEDGEDTYPE, r.HEDGEDTYPE > 0)
  998. sqlId.AndEx("t.HEDGEDITEMSTATUS", r.HEDGEDITEMSTATUS, r.HEDGEDITEMSTATUS > 0)
  999. sqlId.AndLike("t.HEDGEDITEMNUM", r.HEDGEDITEMNUM)
  1000. sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  1001. return sqlId.String()
  1002. }
  1003. // GetDataEx 从数据库中查询数据
  1004. func (r *Ermcp8HedgeditemReport) GetDataEx() (interface{}, error) {
  1005. e := db.GetEngine()
  1006. s := e.SQL(r.buildSql())
  1007. sData := make([]InternalEnableTradeDetail, 0)
  1008. if err := s.Find(&sData); err != nil {
  1009. return nil, err
  1010. }
  1011. for i := range sData {
  1012. sData[i].calc()
  1013. }
  1014. return sData, nil
  1015. }