ermcp8.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. package models
  2. import (
  3. "mtp2_if/db"
  4. "mtp2_if/utils"
  5. "time"
  6. )
  7. // Ermcp2hedgeditem 被套期项目表
  8. type Ermcp2hedgeditem struct {
  9. Hedgeditemid string `json:"hedgeditemid" xorm:"HEDGEDITEMID"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  10. Hedgeditemnum string `json:"hedgeditemnum" xorm:"HEDGEDITEMNUM"` // 项目编号
  11. Hedgeditemname string `json:"hedgeditemname" xorm:"HEDGEDITEMNAME"` // 项目名称
  12. Hedgedtype int32 `json:"hedgedtype" xorm:"HEDGEDTYPE" form:"hedgedtype"` // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  13. Planstartdate time.Time `json:"planstartdate" xorm:"PLANSTARTDATE"` // 计划开始日期
  14. Planenddate time.Time `json:"planenddate" xorm:"PLANENDDATE"` // 计划结束日期
  15. Hedgerate float64 `json:"hedgerate" xorm:"HEDGERATE"` // 套保比率
  16. Tradeuserid int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  17. Areauserid int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  18. Hedgeditemstatus int32 `json:"hedgeditemstatus" xorm:"HEDGEDITEMSTATUS" form:"hedgeditemstatus"` // 项目状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
  19. Applysrc int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  20. Applyid int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  21. Remark string `json:"remark" xorm:"REMARK"` // 备注
  22. Createtime time.Time `json:"createtime" xorm:"CREATETIME"` // 申请时间
  23. Audittradedate string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  24. Auditid int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  25. Auditsrc int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  26. Audittime time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  27. Auditremark string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  28. Deliverygoodsid int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  29. Wrstandardid int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  30. Vatrate float64 `json:"vatrate" xorm:"VATRATE"` // 增值税
  31. Hedgeqty float64 `json:"hedgeqty" xorm:"HEDGEQTY"` // 套期现货量
  32. Hedgeamount float64 `json:"hedgeamount" xorm:"HEDGEAMOUNT"` // 套期市价总额
  33. Hedgerestamount float64 `json:"hedgerestamount" xorm:"HEDGERESTAMOUNT"` // 套期剩余市价总额【现货贸易】
  34. Hedgecontractamount float64 `json:"hedgecontractamount" xorm:"HEDGECONTRACTAMOUNT"` // 套期定价总额 【定价采购合同】【现货贸易】
  35. Oriavgprice float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场均价 = 套期市价总额 / 套期现货量
  36. Exeqty float64 `json:"exeqty" xorm:"EXEQTY"` // 执行现货量
  37. Exeamount float64 `json:"exeamount" xorm:"EXEAMOUNT"` // 执行市价总额
  38. Exerestamount float64 `json:"exerestamount" xorm:"EXERESTAMOUNT"` // 执行剩余市价总额【现货贸易】
  39. Exeavgprice float64 `json:"exeavgprice" xorm:"EXEAVGPRICE"` // 执行市场均价= 执行市价总额 / 执行现货量
  40. Execontractamount float64 `json:"execontractamount" xorm:"EXECONTRACTAMOUNT"` // 执行定价总额
  41. Curprice float64 `json:"curprice" xorm:"CURPRICE"` // 当前市场价
  42. Unexeqty float64 `json:"unexeqty" xorm:"UNEXEQTY"` // 未执行现货量 = 套期现货量 - 执行现货量
  43. Spothedgepl float64 `json:"spothedgepl" xorm:"SPOTHEDGEPL"` // 现货套期损益 =(执行市场均价-期初市场均价)*执行现货量 * 方向(销售计划 为 -1, 其它为1)
  44. Spotpl float64 `json:"spotpl" xorm:"SPOTPL"` // 现货套期损益 = 现货实际损益 + 现货浮动损益
  45. Futurehedgepl float64 `json:"futurehedgepl" xorm:"FUTUREHEDGEPL"` // 期货实际损益
  46. Futurepl float64 `json:"futurepl" xorm:"FUTUREPL"` // 期货套期损益
  47. Hedgesumpl float64 `json:"hedgesumpl" xorm:"HEDGESUMPL"` // 套期汇总损益 = 期货汇总损益 + 现货汇总损益
  48. Spottradepl float64 `json:"spottradepl" xorm:"SPOTTRADEPL"` // 现货贸易损益【现货贸易】= 执行合同定价总额 - 套期合同定价总额
  49. Vatpl float64 `json:"vatpl" xorm:"VATPL"` // 增值税损益【现货贸易】= 现货贸易损益 * (增值税率 /(1+增值税率))
  50. Sumobspl float64 `json:"sumobspl" xorm:"SUMOBSPL"` // 汇总绝对损益【现货贸易】=现货贸易损益+增值税损益+期货套期损益
  51. Spotbookamount float64 `json:"spotbookamount" xorm:"SPOTBOOKAMOUNT"` // 现货账面总额
  52. Curstock float64 `json:"curstock" xorm:"CURSTOCK"` // 期末库存量 = 采购总量 - 销售总量
  53. Enddate time.Time `json:"enddate" xorm:"ENDDATE"` // 完成日期
  54. Endtradedate string `json:"endtradedate" xorm:"ENDTRADEDATE"` // 完成交易日
  55. Updatetime time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  56. Orispothedgepl float64 `json:"orispothedgepl" xorm:"ORISPOTHEDGEPL"` // 期初现货实际损益
  57. Orifuturehedgepl float64 `json:"orifuturehedgepl" xorm:"ORIFUTUREHEDGEPL"` // 期初期货实际损益
  58. Orispotpl float64 `json:"orispotpl" xorm:"ORISPOTPL"` // 期初现货套期损益
  59. Orifuturepl float64 `json:"orifuturepl" xorm:"ORIFUTUREPL"` // 期初期货套期损益
  60. Spotfloatpl float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益 =(当前市场价 - 期初市场价)*未执行现货量 * 方向(销售计划 为 -1, 其它为1)
  61. Futurefloatpl float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
  62. SpotHedgePLChange float64 `json:"spothedgeplchange" xorm:"SPOTHEDGEPLCHANGE"` // 现货实际损益变动
  63. SpotPLChange float64 `json:"spotplchange" xorm:"SPOTPLCHANGE"` // 现货套期损益变动
  64. FutureHedgePLChange float64 `json:"futurehedgeplchange" xorm:"FUTUREHEDGEPLCHANGE"` // 期货实际损益变动
  65. FuturePLChange float64 `json:"futureplchange" xorm:"FUTUREPLCHANGE"` // 期货套期损益变动
  66. Wrstandardname string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 商品名称
  67. EnumdicName string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位
  68. AccountName string `json:"accountName" xorm:"ACCOUNTNAME"` // 套期主体
  69. MiddleGoodsList []Ermcp2himiddlegoods `json:"middlegoodslist"` // 套期商品列表
  70. USERID int64 `json:"-" form:"userid" binding:"required"` // 用户id, 用于过滤
  71. }
  72. // TableName is ERMCP2_HEDGEDITEM
  73. func (r *Ermcp2hedgeditem) TableName() string {
  74. return "ERMCP2_HEDGEDITEM"
  75. }
  76. func (r *Ermcp2hedgeditem) calc() {
  77. }
  78. func (r *Ermcp2hedgeditem) buildSql() string {
  79. var sqlId utils.SQLVal = `
  80. SELECT
  81. to_char(t.HEDGEDITEMID) HEDGEDITEMID,
  82. t.HEDGEDITEMNUM ,
  83. t.HEDGEDITEMNAME ,
  84. t.HEDGEDTYPE ,
  85. t.PLANSTARTDATE ,
  86. t.PLANENDDATE ,
  87. t.HEDGERATE ,
  88. t.TRADEUSERID ,
  89. t.AREAUSERID ,
  90. t.HEDGEDITEMSTATUS ,
  91. t.APPLYSRC ,
  92. t.APPLYID ,
  93. t.REMARK ,
  94. t.CREATETIME ,
  95. t.AUDITTRADEDATE ,
  96. t.AUDITID ,
  97. t.AUDITSRC ,
  98. t.AUDITTIME ,
  99. t.AUDITREMARK ,
  100. t.DELIVERYGOODSID ,
  101. t.WRSTANDARDID ,
  102. t.VATRATE ,
  103. t.HEDGEQTY ,
  104. t.HEDGEAMOUNT ,
  105. t.HEDGERESTAMOUNT ,
  106. t.HEDGECONTRACTAMOUNT,
  107. t.ORIAVGPRICE ,
  108. t.EXEQTY ,
  109. t.EXEAMOUNT ,
  110. t.EXERESTAMOUNT ,
  111. t.EXEAVGPRICE ,
  112. t.EXECONTRACTAMOUNT ,
  113. t.CURPRICE ,
  114. t.UNEXEQTY ,
  115. t.SPOTHEDGEPL ,
  116. t.SPOTPL ,
  117. t.FUTUREHEDGEPL ,
  118. t.FUTUREPL ,
  119. t.HEDGESUMPL ,
  120. t.SPOTTRADEPL ,
  121. t.VATPL ,
  122. t.SUMOBSPL ,
  123. t.SPOTBOOKAMOUNT ,
  124. t.CURSTOCK ,
  125. t.ENDDATE ,
  126. t.ENDTRADEDATE ,
  127. t.UPDATETIME ,
  128. t.ORISPOTHEDGEPL ,
  129. t.ORIFUTUREHEDGEPL ,
  130. t.ORISPOTPL ,
  131. t.ORIFUTUREPL ,
  132. t.SPOTFLOATPL ,
  133. t.FUTUREFLOATPL ,
  134. (t.SpotHedgePL - t.OriSpotHedgePL) SPOTHEDGEPLCHANGE,
  135. (t.SpotPL - t.OriSpotPL) SPOTPLCHANGE,
  136. (t.FutureHedgePL - t.OriFutureHedgePL) FUTUREHEDGEPLCHANGE,
  137. (t.FuturePL - t.OriFuturePL) FUTUREPLCHANGE,
  138. wr.WRSTANDARDNAME,
  139. e.ENUMDICNAME,
  140. u.ACCOUNTNAME
  141. FROM ERMCP2_HedgedItem t
  142. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  143. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  144. LEFT JOIN useraccount u ON u.userid = t.tradeuserid
  145. WHERE 1 = 1
  146. AND %v in (t.AreaUserID, t.TradeUserID)
  147. `
  148. sqlId.FormatParam(r.USERID)
  149. sqlId.AndEx("t.Hedgedtype", r.Hedgedtype, r.Hedgedtype > 0)
  150. sqlId.AndEx("t.hedgeditemstatus", r.Hedgeditemstatus, r.Hedgeditemstatus > 0)
  151. return sqlId.String()
  152. }
  153. // GetDataEx 从数据库中查询数据
  154. func (r *Ermcp2hedgeditem) GetDataEx() (interface{}, error) {
  155. e := db.GetEngine()
  156. s := e.SQL(r.buildSql())
  157. sData := make([]Ermcp2hedgeditem, 0)
  158. if err := s.Find(&sData); err != nil {
  159. return nil, err
  160. }
  161. for i := range sData {
  162. sData[i].calc()
  163. }
  164. if len(sData) > 0 {
  165. // 获取关联期货品种
  166. m1 := Ermcp2himiddlegoods{}
  167. if d1, err := m1.GetDataEx(); err == nil {
  168. gpLst := d1.([]Ermcp2himiddlegoods)
  169. for i := range sData {
  170. sData[i].MiddleGoodsList = append(sData[i].MiddleGoodsList, gpLst...)
  171. }
  172. }
  173. }
  174. return sData, nil
  175. }
  176. // Ermcp2himiddlegoods 项目套保品种明细
  177. type Ermcp2himiddlegoods struct {
  178. HEDGEDITEMID int64 `json:"hedgeditemid" xorm:"HEDGEDITEMID" binding:"required"` // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
  179. MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID" binding:"required"` // 套保品种ID
  180. DELIVERYGOODSID int64 `json:"-" xorm:"DELIVERYGOODSID"` // 现货品种ID
  181. WRSTANDARDID int64 `json:"-" xorm:"WRSTANDARDID"` // 现货商品ID
  182. VATRATE float64 `json:"-" xorm:"VATRATE"` // 增值税
  183. SPOTCONVERTRATIO float64 `json:"-" xorm:"SPOTCONVERTRATIO"` // 折算系数 [现货]
  184. UNEXESPOTQTY float64 `json:"-" xorm:"UNEXESPOTQTY"` // 未执行现货量
  185. UNEXEHEDGEQTY float64 `json:"unexehedgeqty" xorm:"UNEXEHEDGEQTY"` // 未执行套期量 = 未执行现货量*折算系数* (1/(1+增值税)) * 套期比例(项目上)
  186. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货持仓套期量
  187. HIEXPSOURE float64 `json:"hiexpsoure" xorm:"HIEXPSOURE"` // 期现敞口量 = 未执行套期量 + 期货持仓套期量
  188. TRADEUSERID int64 `json:"-" xorm:"TRADEUSERID"` // 交易用户ID
  189. AREAUSERID int64 `json:"-" xorm:"AREAUSERID"` // 企业ID
  190. CREATETIME time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  191. UPDATETIME time.Time `json:"-" xorm:"UPDATETIME"` // 更新时间
  192. Middlegoodsname string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
  193. Middlegoodscode string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
  194. }
  195. // TableName is ERMCP2_HIMIDDLEGOODS
  196. func (r *Ermcp2himiddlegoods) TableName() string {
  197. return "ERMCP2_HIMIDDLEGOODS"
  198. }
  199. func (r *Ermcp2himiddlegoods) calc() {
  200. }
  201. func (r *Ermcp2himiddlegoods) buildSql() string {
  202. var sqlId utils.SQLVal = `
  203. SELECT
  204. t.MIDDLEGOODSID,
  205. t.UNEXEHEDGEQTY,
  206. t.FUTUREHEDGEQTY,
  207. t.HIEXPSOURE,
  208. m.MIDDLEGOODSNAME,
  209. m.MIDDLEGOODSCODE
  210. FROM ERMCP2_HIMIDDLEGOODS t
  211. LEFT JOIN erms_middlegoods m ON m.middlegoodsid = t.middlegoodsid
  212. WHERE t.HEDGEDITEMID = %v
  213. `
  214. sqlId.FormatParam(r.HEDGEDITEMID)
  215. return sqlId.String()
  216. }
  217. // GetDataEx 从数据库中查询数据
  218. func (r *Ermcp2himiddlegoods) GetDataEx() (interface{}, error) {
  219. e := db.GetEngine()
  220. s := e.SQL(r.buildSql())
  221. sData := make([]Ermcp2himiddlegoods, 0)
  222. if err := s.Find(&sData); err != nil {
  223. return nil, err
  224. }
  225. for i := range sData {
  226. sData[i].calc()
  227. }
  228. return sData, nil
  229. }
  230. // Ermcpjrlinkpos 项目期货关联头寸
  231. type Ermcpjrlinkpos struct {
  232. SPOTCONTRACTID string `json:"spotcontractid" xorm:"SPOTCONTRACTID" form:"hedgeditemid" binding:"required"` // 现货ID [套期项目ID - 金瑞:合同\虚拟合同ID
  233. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 期货合约
  234. ORDERTYPE int32 `json:"ordertype" xorm:"ORDERTYPE"` // 单据类型[套期工具] - 1:期货单 2:看涨期权单 3:看跌期权单
  235. EXECUTEPRICE int64 `json:"executeprice" xorm:"EXECUTEPRICE"` // 执行价 - 1:期货单 为 0
  236. OPTIONCODE string `json:"optioncode" xorm:"OPTIONCODE"` // 期权代码
  237. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属企业
  238. TOTALBUYAMOUNT float64 `json:"totalbuyamount" xorm:"TOTALBUYAMOUNT"` // 买金额 [期货]
  239. TOTALBUYQTY float64 `json:"totalbuyqty" xorm:"TOTALBUYQTY"` // 买数量
  240. TOTALSELLAMOUNT float64 `json:"totalsellamount" xorm:"TOTALSELLAMOUNT"` // 卖金额 [期货]
  241. TOTALSELLQTY float64 `json:"totalsellqty" xorm:"TOTALSELLQTY"` // 卖数量
  242. NETQTY float64 `json:"netqty" xorm:"NETQTY"` // 净头寸
  243. TOTALCHARGE float64 `json:"totalcharge" xorm:"TOTALCHARGE"` // 手续费
  244. TOTALPREMIUM float64 `json:"totalpremium" xorm:"TOTALPREMIUM"` // 权利金 [期权]
  245. CLOSEPL float64 `json:"closepl" xorm:"CLOSEPL"` // 总平仓盈亏 [期货损益]
  246. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  247. TOTALBUYHOLDAMOUNT float64 `json:"totalbuyholdamount" xorm:"TOTALBUYHOLDAMOUNT"` // 买持仓总金额[期货]
  248. TOTALSELLHOLDAMOUNT float64 `json:"totalsellholdamount" xorm:"TOTALSELLHOLDAMOUNT"` // 卖持仓总金额[期货]
  249. TODAYFUTURECLOSEPL float64 `json:"todayfutureclosepl" xorm:"TODAYFUTURECLOSEPL"` // 今日平仓盈亏
  250. RECKONPL float64 `json:"reckonpl" xorm:"RECKONPL"` // 总盈亏(平仓盈亏 + 结算盈亏 - 手续费)
  251. Middlegoodsname string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
  252. Middlegoodscode string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
  253. FUTUREHEDGEQTY float64 `json:"futurehedgeqty" xorm:"FUTUREHEDGEQTY"` // 期货套期量
  254. AVERAGEPRICE float64 `json:"averageprice" xorm:"AVERAGEPRICE"` // 持仓均价 (TotalBuyHoldAmount - TotalSellHoldAmount) / NetQty
  255. }
  256. // TableName is ERMCP_JR_LINKPOS
  257. func (r *Ermcpjrlinkpos) TableName() string {
  258. return "ERMCP_JR_LINKPOS"
  259. }
  260. func (r *Ermcpjrlinkpos) calc() {
  261. }
  262. func (r *Ermcpjrlinkpos) buildSql() string {
  263. var sqlId utils.SQLVal = `
  264. SELECT
  265. to_char(t.SPOTCONTRACTID) SPOTCONTRACTID,
  266. t.ORDERTYPE,
  267. t.OPTIONCODE,
  268. t.CLOSEPL,
  269. t.NETQTY,
  270. ((t.TotalBuyHoldAmount - t.TotalSellHoldAmount) / NetQty) AVERAGEPRICE,
  271. mg.middlegoodsname,
  272. mg.middlegoodscode
  273. FROM ERMCP_JR_LinkPos t
  274. LEFT JOIN Goods g ON g.goodsid = t.goodsid
  275. LEFT JOIN ERMCP_GGConvertConfig gc on gc.srcgoodsgroupid = g.goodsgroupid
  276. LEFT JOIN ERMS_MiddleGoods mg ON mg.goodsgroupid = gc.destgoodsgroupid
  277. WHERE mg.areauserid = t.areauserid AND t.SPOTCONTRACTID = %v
  278. ORDER BY t.OPTIONCODE
  279. `
  280. // 只有期货合约ID(GoodsID)的情况下获取套保商品名称,需要以上的关联
  281. sqlId.FormatParam(r.SPOTCONTRACTID)
  282. return sqlId.String()
  283. }
  284. // GetDataEx 从数据库中查询数据
  285. func (r *Ermcpjrlinkpos) GetDataEx() (interface{}, error) {
  286. e := db.GetEngine()
  287. s := e.SQL(r.buildSql())
  288. sData := make([]Ermcpjrlinkpos, 0)
  289. if err := s.Find(&sData); err != nil {
  290. return nil, err
  291. }
  292. for i := range sData {
  293. sData[i].calc()
  294. }
  295. return sData, nil
  296. }
  297. // Ermcp2hedgeditemspot 项目现货明细
  298. type Ermcp2hedgeditemspot struct {
  299. HEDGEDITEMSPOTID string `json:"hedgeditemspotid" xorm:"HEDGEDITEMSPOTID"` // 现货明细ID(625+Unix秒时间戳(10位)+xxxxxx)
  300. HEDGEDITEMID string `json:"hedgeditemid" xorm:"HEDGEDITEMID" form:"hedgeditemid" binding:"required"` // 被套期项目ID
  301. HEDGEDTYPE int32 `json:"hedgedtype" xorm:"HEDGEDTYPE"` // 套期类型[计划类型] - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
  302. SPOTTYPE int32 `json:"spottype" xorm:"SPOTTYPE"` // 现货类型 - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
  303. RELATEDTYPE int32 `json:"relatedtype" xorm:"RELATEDTYPE"` // 关联类型 - 1:套期关联 2:执行关联
  304. RELATEDHEDGEPLANID int64 `json:"relatedhedgeplanid" xorm:"RELATEDHEDGEPLANID"` // 关联计划ID 【1:采购计划 2:销售计划】
  305. RELATEDSPOTCONTRACTID int64 `json:"relatedspotcontractid" xorm:"RELATEDSPOTCONTRACTID"` // 关联合同ID 【3:采购合同 4:销售合同】
  306. CUSTOMERUSERID int64 `json:"customeruserid" xorm:"CUSTOMERUSERID"` // 对手方 【3:采购合同 4:销售合同】
  307. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  308. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  309. SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID" = 2
  310. RELATEDQTY float64 `json:"relatedqty" xorm:"RELATEDQTY"` // 关联数量[数量]
  311. ORIAVGPRICE float64 `json:"oriavgprice" xorm:"ORIAVGPRICE"` // 期初市场价[当初市场价]
  312. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT"` // 市价总额 = 关联数量 * 期初市场价
  313. SPOTPRICEDAMOUNT float64 `json:"spotpricedamount" xorm:"SPOTPRICEDAMOUNT"` // 定价总额
  314. SPOTPRICEDAVGPRICE float64 `json:"spotpricedavgprice" xorm:"SPOTPRICEDAVGPRICE"` // 现货均价 = 定价总额 / 关联数量
  315. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  316. TRADEUSERID int64 `json:"tradeuserid" xorm:"TRADEUSERID"` // 交易用户ID
  317. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 企业ID
  318. Wrstandardname string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 现货商品
  319. EnumdicName string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位
  320. Hedgeplanno string `json:"hedgeplanno" xorm:"'HEDGEPLANNO'"` // 计划编号
  321. }
  322. // TableName is ERMCP2_HEDGEDITEMSPOT
  323. func (r *Ermcp2hedgeditemspot) TableName() string {
  324. return "ERMCP2_HEDGEDITEMSPOT"
  325. }
  326. func (r *Ermcp2hedgeditemspot) calc() {
  327. }
  328. func (r *Ermcp2hedgeditemspot) buildSql() string {
  329. var sqlId utils.SQLVal = `
  330. SELECT
  331. to_char(t.hedgeditemspotid) HEDGEDITEMSPOTID,
  332. to_char(t.hedgeditemid) HEDGEDITEMID,
  333. t.HEDGEDTYPE,
  334. wr.WRSTANDARDNAME,
  335. e.ENUMDICNAME,
  336. t.RELATEDQTY,
  337. t.ORIAVGPRICE
  338. FROM ERMCP2_HEDGEDITEMSPOT t
  339. LEFT JOIN WRStandard wr ON wr.wrstandardid = t.wrstandardid
  340. LEFT JOIN enumdicitem e on wr.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  341. LEFT JOIN ermcp_hedgeplan s ON s.HedgePlanID = t.RELATEDHEDGEPLANID
  342. `
  343. sqlId.FormatParam(r.HEDGEDITEMID)
  344. return sqlId.String()
  345. }
  346. // GetDataEx 从数据库中查询数据
  347. func (r *Ermcp2hedgeditemspot) GetDataEx() (interface{}, error) {
  348. e := db.GetEngine()
  349. s := e.SQL(r.buildSql())
  350. sData := make([]Ermcp2hedgeditemspot, 0)
  351. if err := s.Find(&sData); err != nil {
  352. return nil, err
  353. }
  354. for i := range sData {
  355. sData[i].calc()
  356. }
  357. return sData, nil
  358. }