Przeglądaj źródła

1.增加查现货商品详情接口
2.fix bug:#92885

zou.yingbin 4 lat temu
rodzic
commit
b29cd8dfad
8 zmienionych plików z 2803 dodań i 2021 usunięć
  1. 38 2
      controllers/ermcp/qryWrstandard.go
  2. 563 376
      docs/docs.go
  3. 563 376
      docs/swagger.json
  4. 1409 1231
      docs/swagger.yaml
  5. 1 1
      models/ermcpUser.go
  6. 199 19
      models/ermcpWrstandard.go
  7. 29 16
      mtpcache/middlegoods.go
  8. 1 0
      routers/router.go

+ 38 - 2
controllers/ermcp/qryWrstandard.go

@@ -32,10 +32,10 @@ type QryWrStandardRsp models.ErmcpWrstandard
 // @Failure 500 {object} app.Response
 // @Router /Ermcp/QueryWrStandard [get]
 // @Tags 企业风险管理(app)
-func QueryWrStandard(c *gin.Context)  {
+func QueryWrStandard(c *gin.Context) {
 	appG := app.Gin{C: c}
 	var req QryWrStandardReq
-	if err := c.ShouldBind(&req); err != nil{
+	if err := c.ShouldBind(&req); err != nil {
 		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
 		return
 	}
@@ -49,3 +49,39 @@ func QueryWrStandard(c *gin.Context)  {
 		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
 	}
 }
+
+///////////////////////////////
+
+//查询现货商品请求
+type QryWrStandardDetailReq struct {
+	UserId       int `form:"userid" binding:"required"`       //用户ID
+	Wrstandardid int `form:"wrstandardid" binding:"required"` // 现货商品ID
+}
+
+//查询现货商品响应
+type QryWrStandardDetailRsp models.ErmcpWrstandDetail
+
+// @Summary 查询现货商品详情(菜单:现货品种/现货品种详情)
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true  "所属机构ID"
+// @Param wrstandardid query int true  "现货商品ID"
+// @Success 200 {array} QryWrStandardDetailRsp
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QueryWrStandardDetail [get]
+// @Tags 企业风险管理(app)
+func QueryWrStandardDetail(c *gin.Context) {
+	appG := app.Gin{C: c}
+	var req QryWrStandardDetailReq
+	if err := c.ShouldBind(&req); err != nil {
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+	m := models.ErmcpWrstandDetail{Wrd: models.ErmcpWrstandard{AREAUSERID: req.UserId,
+		WRSTANDARDID: int64(req.Wrstandardid)}}
+	if d, err := m.GetData(); err == nil {
+		appG.Response(http.StatusOK, e.SUCCESS, d)
+	} else {
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+	}
+}

Plik diff jest za duży
+ 563 - 376
docs/docs.go


Plik diff jest za duży
+ 563 - 376
docs/swagger.json


Plik diff jest za duży
+ 1409 - 1231
docs/swagger.yaml


+ 1 - 1
models/ermcpUser.go

@@ -147,7 +147,7 @@ func (r *ErmcpUserModel) GetData(queryType int32) ([]ErmcpUserModel, error) {
 		sqlId = r.buildWskhSql("1")
 		decryptAddr = true
 	case 2: //待审核
-		sqlId = r.buildWskhSql("2,4")
+		sqlId = r.buildWskhSql("2,4,5")
 		decryptAddr = true
 	case 3: //正常
 		sqlId = r.buildSql("4")

+ 199 - 19
models/ermcpWrstandard.go

@@ -14,23 +14,25 @@ import (
 
 // 现货商品表
 type ErmcpWrstandard struct {
-	WRSTANDARDID    int64  `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`       //现货商品ID(SEQ_WRSTANDARD)
-	WRSTANDARDCODE  string `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`   //现货商品代码
-	DELIVERYGOODSID int32  `json:"deliverygoodsid"  xorm:"'DELIVERYGOODSID'"` //品种ID
-	UNITID          int32  `json:"unitid"  xorm:"'UNITID'"`                   //单位ID
-	MINIVALUE       int32  `json:"minivalue"  xorm:"'MINIVALUE'"`             //最小变动值
-	MINIVALUEDP     int32  `json:"minivaluedp"  xorm:"'MINIVALUEDP'"`         //最小变动值小数位
-	REALMINIVALUE   int32  `json:"realminivalue"  xorm:"'REALMINIVALUE'"`     //实际最小变动值
-	REALMINIVALUEDP int32  `json:"realminivaluedp"  xorm:"'REALMINIVALUEDP'"` //实际最小变动值小数位
-	CREATORID       int64  `json:"creatorid"  xorm:"'CREATORID'"`             //创建人
-	CREATETIME      string `json:"createtime"  xorm:"'CREATETIME'"`           //创建时间
-	WRSTANDARDNAME  string `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`   //现货商品名称
-	AREAUSERID      int    `json:"areauserid"  xorm:"'AREAUSERID'"`           //所属机构
-	EnumdicName     string `json:"enumdicname"`                               //单位名称
+	WRSTANDARDID    int64  `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`       // 现货商品ID(SEQ_WRSTANDARD)
+	WRSTANDARDCODE  string `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`   // 现货商品代码
+	DELIVERYGOODSID int32  `json:"deliverygoodsid"  xorm:"'DELIVERYGOODSID'"` // 品种ID
+	UNITID          int32  `json:"unitid"  xorm:"'UNITID'"`                   // 单位ID
+	MINIVALUE       int32  `json:"minivalue"  xorm:"'MINIVALUE'"`             // 最小变动值
+	MINIVALUEDP     int32  `json:"minivaluedp"  xorm:"'MINIVALUEDP'"`         // 最小变动值小数位
+	REALMINIVALUE   int32  `json:"realminivalue"  xorm:"'REALMINIVALUE'"`     // 实际最小变动值
+	REALMINIVALUEDP int32  `json:"realminivaluedp"  xorm:"'REALMINIVALUEDP'"` // 实际最小变动值小数位
+	CREATORID       int64  `json:"creatorid"  xorm:"'CREATORID'"`             // 创建人
+	CREATETIME      string `json:"createtime"  xorm:"'CREATETIME'"`           // 创建时间
+	WRSTANDARDNAME  string `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`   // 现货商品名称
+	AREAUSERID      int    `json:"areauserid"  xorm:"'AREAUSERID'"`           // 所属机构
+	EnumdicName     string `json:"enumdicname"`                               // 单位名称
+	ISVALID         int32  `json:"isvalid"  xorm:"'ISVALID'"`                 // 是否有效 0-无效(停用) 1-有效(正常)
+	UPDATETIME      string `json:"updatetime"  xorm:"'UPDATETIME'"`           // 更新时间
+	REMARK          string `json:"remark"  xorm:"'REMARK'"`                   // 备注
 }
 
-// 查询现货商品
-func (r *ErmcpWrstandard) GetData() ([]ErmcpWrstandard, error) {
+func (r *ErmcpWrstandard) buildSql() string {
 	str := "select WRSTANDARDID," +
 		"       WRSTANDARDCODE," +
 		"       DELIVERYGOODSID," +
@@ -40,18 +42,196 @@ func (r *ErmcpWrstandard) GetData() ([]ErmcpWrstandard, error) {
 		"       REALMINIVALUE," +
 		"       REALMINIVALUEDP," +
 		"       CREATORID," +
-		"       CREATETIME," +
+		"       to_char(CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
 		"       WRSTANDARDNAME," +
+		"       ISVALID," +
+		"       to_char(UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
+		"       REMARK," +
 		"       AREAUSERID" +
 		"  from wrstandard t" +
-		" where t.isvalid = 1 and t.AREAUSERID=%v"
-
+		" where t.AREAUSERID=%v"
 	sqlId := fmt.Sprintf(str, r.AREAUSERID)
+	if r.WRSTANDARDID > 0 {
+		sqlId = sqlId + fmt.Sprintf(" and WRSTANDARDID=%v", r.WRSTANDARDID)
+	}
+	return sqlId
+}
+
+// 查询现货商品
+func (r *ErmcpWrstandard) GetData() ([]ErmcpWrstandard, error) {
 	sData := make([]ErmcpWrstandard, 0)
 	e := db.GetEngine()
-	if err := e.SQL(sqlId).Find(&sData); err != nil {
+	if err := e.SQL(r.buildSql()).Find(&sData); err != nil {
 		logger.GetLogger().Errorf("query wrstardard fail, %v", err)
 		return sData, err
 	}
 	return sData, nil
 }
+
+// 商品型号表
+type GoodsTypeModel struct {
+	MODELID         int    `json:"modelid"  xorm:"'MODELID'"`       // 型号ID
+	MODELNAME       string `json:"modelname"  xorm:"'MODELNAME'"`   // 型号名称
+	WRSTANDARDID    int64  `json:"-"  xorm:"'WRSTANDARDID'"`        // 现货商品ID
+	DELIVERYGOODSID int32  `json:"-"  xorm:"'DELIVERYGOODSID'"`     // 现货品种ID
+	AREAUSERID      int    `json:"-"  xorm:"'AREAUSERID'"`          // 所属机构
+	ISVALID         int32  `json:"-"  xorm:"'ISVALID'"`             // 是否有效 - 0:无效 1:有效
+	CREATORSRC      int32  `json:"-"  xorm:"'CREATORSRC'"`          // 创建人来源 - 1:管理端 2:终端
+	CREATORID       int32  `json:"-"  xorm:"'CREATORID'"`           // 创建人
+	CREATETIME      string `json:"-"  xorm:"'CREATETIME'"`          // SYSDATE		创建时间
+	UPDATORSRC      int32  `json:"-"  xorm:"'UPDATORSRC'"`          // 更新人来源 - 1:管理端 2:终端
+	UPDATORID       int32  `json:"-"  xorm:"'UPDATORID'"`           // 更新人
+	UPDATETIME      string `json:"updatetime"  xorm:"'UPDATETIME'"` // 更新时间
+}
+
+// 获取商品型号表数据
+func (r *GoodsTypeModel) GetData() ([]GoodsTypeModel, error) {
+	sData := make([]GoodsTypeModel, 0)
+	if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
+		logger.GetLogger().Errorf("query goodsTypeModel fail, %v", err)
+		return nil, err
+	}
+	return sData, nil
+}
+
+func (r *GoodsTypeModel) buildSql() string {
+	sqlId := "select MODELID," +
+		"       MODELNAME," +
+		"       WRSTANDARDID," +
+		"       DELIVERYGOODSID," +
+		"       AREAUSERID," +
+		"       ISVALID," +
+		"       CREATORSRC," +
+		"       CREATORID," +
+		"       to_char(CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
+		"       UPDATORSRC," +
+		"       UPDATORID," +
+		"       to_char(UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
+		"  from spotgoodsmodel where ISVALID=1"
+	if r.AREAUSERID > 0 {
+		sqlId = sqlId + fmt.Sprintf(" and AREAUSERID=%v", r.AREAUSERID)
+	}
+	if r.WRSTANDARDID > 0 {
+		sqlId = sqlId + fmt.Sprintf(" and WRSTANDARDID=%v", r.WRSTANDARDID)
+	}
+	return sqlId
+}
+
+// 商品品牌
+type GoodsBrand struct {
+	BRANDID         int    `json:"brandid"  xorm:"'bRANDID'"`     // 品牌ID
+	BRANDNAME       string `json:"brandname"  xorm:"'BRANDNAME'"` // 品牌名称
+	WRSTANDARDID    int64  `json:"-"  xorm:"'WRSTANDARDID'"`      // 现货商品ID
+	DELIVERYGOODSID int32  `json:"-"  xorm:"'DELIVERYGOODSID'"`   // 现货品种ID
+	AREAUSERID      int    `json:"-"  xorm:"'AREAUSERID'"`        // 所属机构
+	ISVALID         int32  `json:"isvalid"  xorm:"'ISVALID'"`     // 是否有效 - 0:无效 1:有效
+}
+
+func (r *GoodsBrand) buildSql() string {
+	sqlId := "select BRANDID," +
+		"       BRANDNAME," +
+		"       WRSTANDARDID," +
+		"       DELIVERYGOODSID," +
+		"       AREAUSERID," +
+		"       ISVALID" +
+		"  from spotgoodsbrand" +
+		" where ISVALID = 1"
+	if r.AREAUSERID > 0 {
+		sqlId = sqlId + fmt.Sprintf(" and AREAUSERID=%v", r.AREAUSERID)
+	}
+	if r.WRSTANDARDID > 0 {
+		sqlId = sqlId + fmt.Sprintf(" and WRSTANDARDID=%v", r.WRSTANDARDID)
+	}
+	return sqlId
+}
+
+// 获取品牌数据
+func (r *GoodsBrand) GetData() ([]GoodsBrand, error) {
+	sData := make([]GoodsBrand, 0)
+	if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
+		logger.GetLogger().Errorf("query GoodsBrand fail, %v", err)
+		return nil, err
+	}
+	return sData, nil
+}
+
+// 现货商品折算配置明细表
+type WRSConverTDetail struct {
+	WRSTANDARDID    int64   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`       // 现货商品ID
+	DELIVERYGOODSID int32   `json:"deliverygoodsid"  xorm:"'DELIVERYGOODSID'"` // 现货品种ID
+	MIDDLEGOODSID   int64   `json:"middlegoodsid"  xorm:"'MIDDLEGOODSID'"`     // 套保品种ID
+	CONVERTRATIO    float64 `json:"convertratio"  xorm:"'CONVERTRATIO'"`       // 套保系数
+	MODIFYTIME      string  `json:"modifytime"  xorm:"'MODIFYTIME'"`           // 修改时间
+	MIDDLEGOODSNAME string  `json:"middlegoodsname"  xorm:"'middlegoodsname'"` // 套保品种名称
+	MIDDLEGOODSCODE string  `json:"middlegoodscode"  xorm:"'middlegoodscode'"` // 套保品种代码
+}
+
+func (r *WRSConverTDetail) buildSql() string {
+	sqlId := "select t.WRSTANDARDID," +
+		"       t.DELIVERYGOODSID," +
+		"       t.MIDDLEGOODSID," +
+		"       t.CONVERTRATIO," +
+		"       to_char(t.MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
+		"       m.middlegoodsname," +
+		"       m.middlegoodscode" +
+		"  from Erms2_Wrsconvertdetail t" +
+		"  left join erms_middlegoods m" +
+		"    on t.middlegoodsid = m.middlegoodsid" +
+		"    where 1=1"
+	if r.WRSTANDARDID > 0 {
+		sqlId = sqlId + fmt.Sprintf(" and t.wrstandardid=%v", r.WRSTANDARDID)
+	}
+	return sqlId
+}
+
+// 获取现货商品折算配置明细表数据
+func (r *WRSConverTDetail) GetData() ([]WRSConverTDetail, error) {
+	sData := make([]WRSConverTDetail, 0)
+	if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil {
+		logger.GetLogger().Errorf("query WRSConverTDetail fail, %v", err)
+		return nil, err
+	}
+	return sData, nil
+}
+
+// 现货商品详细
+type ErmcpWrstandDetail struct {
+	Wrd     ErmcpWrstandard    `json:"wrd"`     // 基本信息
+	GtList  []GoodsTypeModel   `json:"gtList"`  // 型号列表
+	GbList  []GoodsBrand       `json:"gbList"`  // 品牌列表
+	WrsList []WRSConverTDetail `json:"wrsList"` // 套保信息列表
+}
+
+// 查询现货商品详细
+func (r *ErmcpWrstandDetail) GetData() (ErmcpWrstandDetail, error) {
+	// 获取基本信息
+	m := ErmcpWrstandard{AREAUSERID: r.Wrd.AREAUSERID, WRSTANDARDID: r.Wrd.WRSTANDARDID}
+	d, err := m.GetData()
+	if err != nil {
+		return ErmcpWrstandDetail{}, err
+	}
+	if d == nil || len(d) == 0 {
+		return ErmcpWrstandDetail{}, fmt.Errorf("no record")
+	}
+	rsp := ErmcpWrstandDetail{}
+	rsp.Wrd = d[0]
+	// 获取型号信息
+	gt := GoodsTypeModel{AREAUSERID: rsp.Wrd.AREAUSERID, WRSTANDARDID: rsp.Wrd.WRSTANDARDID}
+	if val, err := gt.GetData(); err == nil {
+		rsp.GtList = val
+	}
+
+	// 获取品牌信息
+	gb := GoodsBrand{AREAUSERID: rsp.Wrd.AREAUSERID, WRSTANDARDID: rsp.Wrd.WRSTANDARDID}
+	if val, err := gb.GetData(); err == nil {
+		rsp.GbList = val
+	}
+
+	// 获取套保信息
+	wrs := WRSConverTDetail{WRSTANDARDID: rsp.Wrd.WRSTANDARDID}
+	if val, err := wrs.GetData(); err == nil {
+		rsp.WrsList = val
+	}
+
+	return rsp, nil
+}

+ 29 - 16
mtpcache/middlegoods.go

@@ -25,27 +25,31 @@ type middleGoodsMgr struct {
 
 // 套保品种
 type MiddleGoods struct {
-	MIDDLEGOODSID    uint32  `json:"MIDDLEGOODSID"  xorm:"'MIDDLEGOODSID'"`       // 套保品种ID(SEQ_ERMS_MIDDLEGOODS)
-	MIDDLEGOODSNAME  string  `json:"MIDDLEGOODSNAME"  xorm:"'MIDDLEGOODSNAME'"`   // 套保品种名称
-	MIDDLEGOODSCODE  string  `json:"MIDDLEGOODSCODE"  xorm:"'MIDDLEGOODSCODE'"`   // 套保品种代码
-	GOODSUNITID      int32   `json:"GOODSUNITID"  xorm:"'GOODSUNITID'"`           // 单位ID
-	RELATEDGOODSID   int32   `json:"RELATEDGOODSID"  xorm:"'RELATEDGOODSID'"`     // 关联交易商品ID
-	EVALUATERATIO    float64 `json:"EVALUATERATIO"  xorm:"'EVALUATERATIO'"`       // 估价系数
-	QTYDECIMALPLACE  int32   `json:"QTYDECIMALPLACE"  xorm:"'QTYDECIMALPLACE'"`   // 数量小数位
-	RELATEDGOODSTYPE int32   `json:"RELATEDGOODSTYPE"  xorm:"'RELATEDGOODSTYPE'"` // 关联商品类型 - 1:期货合约 2:现货品种
-	NEEDHEDGERATIO   float64 `json:"NEEDHEDGERATIO"  xorm:"'NEEDHEDGERATIO'"`     // 套保比率
-	AREAUSERID       uint32  `json:"AREAUSERID"  xorm:"'AREAUSERID'"`             // 机构用户ID
-	GOODSGROUPID     int32   `json:"GOODSGROUPID"  xorm:"'GOODSGROUPID'"`         // 关联期货品种ID
+	MIDDLEGOODSID    uint32  `json:"middlegoodsid"  xorm:"'MIDDLEGOODSID'"`       // 套保品种ID(SEQ_ERMS_MIDDLEGOODS)
+	MIDDLEGOODSNAME  string  `json:"middlegoodsname"  xorm:"'MIDDLEGOODSNAME'"`   // 套保品种名称
+	MIDDLEGOODSCODE  string  `json:"middlegoodscode"  xorm:"'MIDDLEGOODSCODE'"`   // 套保品种代码
+	GOODSUNITID      int32   `json:"goodsunitid"  xorm:"'GOODSUNITID'"`           // 单位ID
+	RELATEDGOODSID   int32   `json:"relatedgoodsid"  xorm:"'RELATEDGOODSID'"`     // 关联交易商品ID
+	EVALUATERATIO    float64 `json:"evaluateratio"  xorm:"'EVALUATERATIO'"`       // 估价系数
+	QTYDECIMALPLACE  int32   `json:"qtydecimalplace"  xorm:"'QTYDECIMALPLACE'"`   // 数量小数位
+	RELATEDGOODSTYPE int32   `json:"relatedgoodstype"  xorm:"'RELATEDGOODSTYPE'"` // 关联商品类型 - 1:期货合约 2:现货品种
+	NEEDHEDGERATIO   float64 `json:"needhedgeratio"  xorm:"'NEEDHEDGERATIO'"`     // 套保比率
+	AREAUSERID       uint32  `json:"areauserid"  xorm:"'AREAUSERID'"`             // 机构用户ID
+	GOODSGROUPID     int32   `json:"goodsgroupid"  xorm:"'GOODSGROUPID'"`         // 关联期货品种ID
+	ISVALID          int32   `json:"isvalid"  xorm:"'ISVALID'"`                   // 状态 0-无效(停用) 1-有效(正常)
 }
 
-// 加载数据
-func (r *middleGoodsMgr) load() {
+func (r *middleGoodsMgr) isNeedLoad() bool {
 	now := time.Now()
 	// 间隔3秒以上重新加载
-	if d := now.Sub(r.last); d.Seconds() < 3 {
-		return
+	if d := now.Sub(r.last); d.Seconds() >= 3 {
+		return true
 	}
+	return false
+}
 
+// 加载数据
+func (r *middleGoodsMgr) load() {
 	r.mtx.Lock()
 	defer r.mtx.Unlock()
 	e := db.GetEngine()
@@ -64,6 +68,7 @@ func (r *middleGoodsMgr) load() {
 		"       NEEDHEDGERATIO," +
 		"       AREAUSERID," +
 		"       GOODSGROUPID" +
+		"       ISVALID" +
 		"  from erms_middlegoods t"
 	sData := make([]MiddleGoods, 0)
 	s := e.SQL(sqlId)
@@ -118,6 +123,14 @@ func GetMiddleGoods(middlGoodsId uint32) (MiddleGoods, error) {
 
 // 获取指定用户套保商品
 func GetMiddleGoodsByUserID(userId uint32) ([]MiddleGoods, error) {
-	vGoodMgr.load()
+	if vGoodMgr.isNeedLoad(){
+		vGoodMgr.load()
+	}
 	return vGoodMgr.getByUserID(userId)
 }
+
+// 从数据库中获取套保商品
+func GetMiddleGoodsFromDB(userId uint32)([]MiddleGoods, error)  {
+	vGoodMgr.load()
+	return vGoodMgr.getByUserID(userId)
+}

+ 1 - 0
routers/router.go

@@ -310,6 +310,7 @@ func InitRouter() *gin.Engine {
 		// 查询待点价、履约和全部合同
 		ermcpR.GET("/QueryUserInfo", ermcp.QueryUserInfo)
 		ermcpR.GET("/QueryWrStandard", ermcp.QueryWrStandard)
+		ermcpR.GET("/QueryWrStandardDetail", ermcp.QueryWrStandardDetail)
 		ermcpR.GET("/QuerySpotContract", ermcp.QuerySpotContract)
 		ermcpR.GET("/QueryContract", ermcp.QueryContract)
 		ermcpR.GET("/QueryHedgePlan", ermcp.QueryHedgePlan)

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików