ermcpMiddleGoods.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/1/26 13:42
  4. * @Modify : 2021/1/26 13:42
  5. */
  6. package models
  7. import (
  8. "fmt"
  9. "mtp2_if/db"
  10. "mtp2_if/logger"
  11. "mtp2_if/mtpcache"
  12. )
  13. // ErmcpMiddleGoodsModel 套保品种
  14. type ErmcpMiddleGoodsModel struct {
  15. MIDDLEGOODSID uint32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种ID(SEQ_ERMS_MIDDLEGOODS)
  16. MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
  17. MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
  18. GOODSUNITID int32 `json:"goodsunitid" xorm:"'GOODSUNITID'"` // 单位ID
  19. RELATEDGOODSID int32 `json:"relatedgoodsid" xorm:"'RELATEDGOODSID'"` // 关联交易商品ID
  20. EVALUATERATIO float64 `json:"evaluateratio" xorm:"'EVALUATERATIO'"` // 估价系数
  21. QTYDECIMALPLACE int32 `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 数量小数位
  22. RELATEDGOODSTYPE int32 `json:"relatedgoodstype" xorm:"'RELATEDGOODSTYPE'"` // 关联商品类型 - 1:期货合约 2:现货品种
  23. NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 套保比率
  24. NEEDARBITRAGERATIO float64 `json:"needarbitrageratio" xorm:"'NEEDARBITRAGERATIO'"` // 套利比例
  25. AREAUSERID int64 `json:"areauserid" xorm:"'AREAUSERID'"` // 机构用户ID
  26. GOODSGROUPID int32 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 关联期货品种ID
  27. ISVALID int32 `json:"isvalid" xorm:"'ISVALID'"` // 状态 0-无效(停用) 1-有效(正常)
  28. MODIFYTIME string `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  29. CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 修改时间
  30. REMARK string `json:"remark" xorm:"'REMARK'"` // 备注
  31. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  32. }
  33. func (r *ErmcpMiddleGoodsModel) Calc() {
  34. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
  35. }
  36. // GetData 获取套保品种数据
  37. func (r *ErmcpMiddleGoodsModel) GetData() ([]interface{}, error) {
  38. sData := make([]ErmcpMiddleGoodsModel, 0)
  39. if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
  40. logger.GetLogger().Error(err)
  41. return nil, err
  42. }
  43. iData := make([]interface{}, 0)
  44. for i := range sData {
  45. iData = append(iData, &sData[i])
  46. }
  47. return iData, nil
  48. }
  49. // GetData2 获取套保品种数据2
  50. func (r *ErmcpMiddleGoodsModel) GetData2() ([]ErmcpMiddleGoodsModel, error) {
  51. sData := make([]ErmcpMiddleGoodsModel, 0)
  52. if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
  53. logger.GetLogger().Error(err)
  54. return nil, err
  55. }
  56. for i := range sData {
  57. sData[i].Calc()
  58. }
  59. return sData, nil
  60. }
  61. func (r *ErmcpMiddleGoodsModel) buildSql() string {
  62. sqlId := "select MIDDLEGOODSID," +
  63. " MIDDLEGOODSNAME," +
  64. " MIDDLEGOODSCODE," +
  65. " GOODSUNITID," +
  66. " RELATEDGOODSID," +
  67. " EVALUATERATIO," +
  68. " QTYDECIMALPLACE," +
  69. " RELATEDGOODSTYPE," +
  70. " NEEDHEDGERATIO," +
  71. " NEEDARBITRAGERATIO," +
  72. " AREAUSERID," +
  73. " GOODSGROUPID," +
  74. " to_char(MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  75. " to_char(CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  76. " ISVALID," +
  77. " REMARK" +
  78. " from erms_middlegoods t" +
  79. " where 1=1 "
  80. if r.AREAUSERID > 0 {
  81. sqlId = sqlId + fmt.Sprintf(" and AREAUSERID = %v", r.AREAUSERID)
  82. }
  83. if r.ISVALID >= 0 {
  84. sqlId = sqlId + fmt.Sprintf(" and ISVALID=%v", r.ISVALID)
  85. }
  86. if r.MIDDLEGOODSID > 0 {
  87. sqlId = sqlId + fmt.Sprintf(" and MIDDLEGOODSID=%v", r.MIDDLEGOODSID)
  88. }
  89. sqlId += " order by t.createtime desc"
  90. return sqlId
  91. }
  92. // ErmcpMiddleGoodsDetail 套保品种详情
  93. type ErmcpMiddleGoodsDetail struct {
  94. Mg ErmcpMiddleGoodsModel // 套保品种基本信息
  95. CvList []ErmcpGGConvertCfg // 期货品种折算列表
  96. WrcList []WRSConverTDetail // 现货品种列表(现货商品折算配置)
  97. }
  98. // GetData 获取套保品种详情
  99. func (r *ErmcpMiddleGoodsDetail) GetData() ([]ErmcpMiddleGoodsDetail, error) {
  100. rsp := make([]ErmcpMiddleGoodsDetail, 0)
  101. // 查基本信息
  102. m := ErmcpMiddleGoodsModel{AREAUSERID: r.Mg.AREAUSERID, MIDDLEGOODSID: r.Mg.MIDDLEGOODSID, ISVALID: -1}
  103. d, err := m.GetData2()
  104. if err != nil || len(d) == 0 {
  105. return rsp, fmt.Errorf("no record")
  106. }
  107. for i := range d {
  108. val := ErmcpMiddleGoodsDetail{Mg: d[i],
  109. CvList: make([]ErmcpGGConvertCfg, 0),
  110. WrcList: make([]WRSConverTDetail, 0),
  111. }
  112. rsp = append(rsp, val)
  113. }
  114. // 查折算表
  115. md := ErmcpGGConvertCfg{}
  116. if ggc, err := md.GetData2(); err == nil {
  117. for i := range rsp {
  118. for k := range ggc {
  119. if rsp[i].Mg.GOODSGROUPID == ggc[k].Destgoodsgroupid {
  120. rsp[i].CvList = append(rsp[i].CvList, ggc[k])
  121. }
  122. }
  123. }
  124. }
  125. // 查现货商品折算配置明细表
  126. mWc := WRSConverTDetail{}
  127. if wc, err := mWc.GetData(); err == nil {
  128. for i := range rsp {
  129. for k := range wc {
  130. if int64(rsp[i].Mg.MIDDLEGOODSID) == wc[k].MIDDLEGOODSID {
  131. rsp[i].WrcList = append(rsp[i].WrcList, wc[k])
  132. }
  133. }
  134. }
  135. }
  136. return rsp, nil
  137. }
  138. // ErmcpMiddleGoodsChangeLog 套保品种变更记录
  139. type ErmcpMiddleGoodsChangeLog struct {
  140. LOGID int64 `json:"logid" xorm:"'LOGID'"` // 流水ID
  141. MIDDLEGOODSID int `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种ID
  142. CHANGELOGTYPE int32 `json:"changelogtype" xorm:"'CHANGELOGTYPE'"` // 变更流水类型 - 1:套保比率变更
  143. BEFOREVALUE float64 `json:"beforevalue" xorm:"'BEFOREVALUE'"` // 变更前
  144. AFTERVALUE float64 `json:"aftervalue" xorm:"'AFTERVALUE'"` // 变更后
  145. LOGDATETIME string `json:"logdatetime" xorm:"'LOGDATETIME'"` // 流水日期
  146. LOGREMARK string `json:"logremark" xorm:"'LOGREMARK'"` // 流水备注
  147. HANDLESTATUS int32 `json:"handlestatus" xorm:"'HANDLESTATUS'"` // 处理状态
  148. TRADEDATE string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
  149. UPDATETIME string `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
  150. APPLYSRC int32 `json:"applysrc" xorm:"'APPLYSRC'"` // 操作来源 - 1:管理端 2:终端
  151. APPLYID int64 `json:"applyid" xorm:"'APPLYID'"` // 操作人
  152. APPLYNAME string `json:"applyname"` // 操作人名称
  153. }
  154. func (r *ErmcpMiddleGoodsChangeLog) buildSql() string {
  155. sqlId := "SELECT LOGID," +
  156. " MIDDLEGOODSID," +
  157. " CHANGELOGTYPE," +
  158. " BEFOREVALUE," +
  159. " AFTERVALUE," +
  160. " to_char(LOGDATETIME, 'yyyy-mm-dd hh24:mi:ss') LOGDATETIME," +
  161. " LOGREMARK," +
  162. " HANDLESTATUS," +
  163. " TRADEDATE," +
  164. " to_char(UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  165. " APPLYSRC," +
  166. " APPLYID" +
  167. " FROM ermcp_mgchangelog" +
  168. " WHERE 1 = 1"
  169. if r.MIDDLEGOODSID > 0 {
  170. sqlId = sqlId + fmt.Sprintf(" and MIDDLEGOODSID=%v", r.MIDDLEGOODSID)
  171. }
  172. return sqlId
  173. }
  174. // Calc 处理要转换的数据
  175. func (r *ErmcpMiddleGoodsChangeLog) Calc() {
  176. r.APPLYNAME = mtpcache.GetUserNameByUserId(r.APPLYID)
  177. if r.APPLYNAME == "" {
  178. // APPLYID 原来数据库存的是userid, 后来又改为loginid
  179. // 当为loginid时,获取logincode
  180. r.APPLYNAME = mtpcache.GetLoginCodeByLoginId(r.APPLYID)
  181. }
  182. }
  183. // GetDataEx 获取套保变更操作数据
  184. func (r *ErmcpMiddleGoodsChangeLog) GetDataEx() (interface{}, error) {
  185. sData := make([]ErmcpMiddleGoodsChangeLog, 0)
  186. if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
  187. return nil, err
  188. }
  189. for i := range sData {
  190. sData[i].Calc()
  191. }
  192. return sData, nil
  193. }