mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	[区域]可以设置区域-价格项目之间的价格
This commit is contained in:
		@@ -19,7 +19,7 @@ func main() {
 | 
				
			|||||||
	lastCommand := ""
 | 
						lastCommand := ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		time.Sleep(400 * time.Millisecond)
 | 
							time.Sleep(200 * time.Millisecond)
 | 
				
			||||||
		fmt.Print("> ")
 | 
							fmt.Print("> ")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		line, _, err := r.ReadLine()
 | 
							line, _, err := r.ReadLine()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										120
									
								
								internal/db/models/node_price_item_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								internal/db/models/node_price_item_dao.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/Tea"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						NodePriceItemStateEnabled  = 1 // 已启用
 | 
				
			||||||
 | 
						NodePriceItemStateDisabled = 0 // 已禁用
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type NodePriceItemDAO dbs.DAO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewNodePriceItemDAO() *NodePriceItemDAO {
 | 
				
			||||||
 | 
						return dbs.NewDAO(&NodePriceItemDAO{
 | 
				
			||||||
 | 
							DAOObject: dbs.DAOObject{
 | 
				
			||||||
 | 
								DB:     Tea.Env,
 | 
				
			||||||
 | 
								Table:  "edgeNodePriceItems",
 | 
				
			||||||
 | 
								Model:  new(NodePriceItem),
 | 
				
			||||||
 | 
								PkName: "id",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}).(*NodePriceItemDAO)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var SharedNodePriceItemDAO *NodePriceItemDAO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						dbs.OnReady(func() {
 | 
				
			||||||
 | 
							SharedNodePriceItemDAO = NewNodePriceItemDAO()
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 启用条目
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) EnableNodePriceItem(id int64) error {
 | 
				
			||||||
 | 
						_, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Set("state", NodePriceItemStateEnabled).
 | 
				
			||||||
 | 
							Update()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 禁用条目
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) DisableNodePriceItem(id int64) error {
 | 
				
			||||||
 | 
						_, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Set("state", NodePriceItemStateDisabled).
 | 
				
			||||||
 | 
							Update()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找启用中的条目
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) FindEnabledNodePriceItem(id int64) (*NodePriceItem, error) {
 | 
				
			||||||
 | 
						result, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Attr("state", NodePriceItemStateEnabled).
 | 
				
			||||||
 | 
							Find()
 | 
				
			||||||
 | 
						if result == nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return result.(*NodePriceItem), err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 根据主键查找名称
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) FindNodePriceItemName(id int64) (string, error) {
 | 
				
			||||||
 | 
						return this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Result("name").
 | 
				
			||||||
 | 
							FindStringCol("")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) CreateItem(name string, itemType string, bitsFrom, bitsTo int64) (int64, error) {
 | 
				
			||||||
 | 
						op := NewNodePriceItemOperator()
 | 
				
			||||||
 | 
						op.Name = name
 | 
				
			||||||
 | 
						op.Type = itemType
 | 
				
			||||||
 | 
						op.BitsFrom = bitsFrom
 | 
				
			||||||
 | 
						op.BitsTo = bitsTo
 | 
				
			||||||
 | 
						op.IsOn = true
 | 
				
			||||||
 | 
						op.State = NodePriceItemStateEnabled
 | 
				
			||||||
 | 
						return this.SaveInt64(op)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) UpdateItem(itemId int64, name string, bitsFrom, bitsTo int64) error {
 | 
				
			||||||
 | 
						if itemId <= 0 {
 | 
				
			||||||
 | 
							return errors.New("invalid itemId")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						op := NewNodePriceItemOperator()
 | 
				
			||||||
 | 
						op.Id = itemId
 | 
				
			||||||
 | 
						op.Name = name
 | 
				
			||||||
 | 
						op.BitsFrom = bitsFrom
 | 
				
			||||||
 | 
						op.BitsTo = bitsTo
 | 
				
			||||||
 | 
						return this.Save(op)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 列出某个区域的所有价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) FindAllEnabledRegionPrices(priceType string) (result []*NodePriceItem, err error) {
 | 
				
			||||||
 | 
						_, err = this.Query().
 | 
				
			||||||
 | 
							Attr("type", priceType).
 | 
				
			||||||
 | 
							State(NodePriceItemStateEnabled).
 | 
				
			||||||
 | 
							Asc("bitsFrom").
 | 
				
			||||||
 | 
							Slice(&result).
 | 
				
			||||||
 | 
							FindAll()
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 列出某个区域的所有启用的价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemDAO) FindAllEnabledAndOnRegionPrices(priceType string) (result []*NodePriceItem, err error) {
 | 
				
			||||||
 | 
						_, err = this.Query().
 | 
				
			||||||
 | 
							Attr("type", priceType).
 | 
				
			||||||
 | 
							State(NodePriceItemStateEnabled).
 | 
				
			||||||
 | 
							Attr("isOn", true).
 | 
				
			||||||
 | 
							Asc("bitsFrom").
 | 
				
			||||||
 | 
							Slice(&result).
 | 
				
			||||||
 | 
							FindAll()
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								internal/db/models/node_price_item_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								internal/db/models/node_price_item_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										28
									
								
								internal/db/models/node_price_item_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								internal/db/models/node_price_item_model.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 区域计费设置
 | 
				
			||||||
 | 
					type NodePriceItem struct {
 | 
				
			||||||
 | 
						Id        uint32 `field:"id"`        // ID
 | 
				
			||||||
 | 
						IsOn      uint8  `field:"isOn"`      // 是否启用
 | 
				
			||||||
 | 
						Type      string `field:"type"`      // 类型:峰值|流量
 | 
				
			||||||
 | 
						Name      string `field:"name"`      // 名称
 | 
				
			||||||
 | 
						BitsFrom  uint64 `field:"bitsFrom"`  // 起始值
 | 
				
			||||||
 | 
						BitsTo    uint64 `field:"bitsTo"`    // 结束值
 | 
				
			||||||
 | 
						CreatedAt uint64 `field:"createdAt"` // 创建时间
 | 
				
			||||||
 | 
						State     uint8  `field:"state"`     // 状态
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type NodePriceItemOperator struct {
 | 
				
			||||||
 | 
						Id        interface{} // ID
 | 
				
			||||||
 | 
						IsOn      interface{} // 是否启用
 | 
				
			||||||
 | 
						Type      interface{} // 类型:峰值|流量
 | 
				
			||||||
 | 
						Name      interface{} // 名称
 | 
				
			||||||
 | 
						BitsFrom  interface{} // 起始值
 | 
				
			||||||
 | 
						BitsTo    interface{} // 结束值
 | 
				
			||||||
 | 
						CreatedAt interface{} // 创建时间
 | 
				
			||||||
 | 
						State     interface{} // 状态
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewNodePriceItemOperator() *NodePriceItemOperator {
 | 
				
			||||||
 | 
						return &NodePriceItemOperator{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								internal/db/models/node_price_item_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/node_price_item_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
package models
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/utils/numberutils"
 | 
				
			||||||
	_ "github.com/go-sql-driver/mysql"
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
	"github.com/iwind/TeaGo/Tea"
 | 
						"github.com/iwind/TeaGo/Tea"
 | 
				
			||||||
	"github.com/iwind/TeaGo/dbs"
 | 
						"github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
@@ -131,3 +133,35 @@ func (this *NodeRegionDAO) UpdateRegionOrders(regionIds []int64) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改价格项价格
 | 
				
			||||||
 | 
					func (this *NodeRegionDAO) UpdateRegionItemPrice(regionId int64, itemId int64, price float32) error {
 | 
				
			||||||
 | 
						one, err := this.Query().
 | 
				
			||||||
 | 
							Pk(regionId).
 | 
				
			||||||
 | 
							Result("prices").
 | 
				
			||||||
 | 
							Find()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if one == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						prices := one.(*NodeRegion).Prices
 | 
				
			||||||
 | 
						pricesMap := map[string]float32{}
 | 
				
			||||||
 | 
						if len(prices) > 0 && prices != "null" {
 | 
				
			||||||
 | 
							err = json.Unmarshal([]byte(prices), &pricesMap)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						pricesMap[numberutils.FormatInt64(itemId)] = price
 | 
				
			||||||
 | 
						pricesJSON, err := json.Marshal(pricesMap)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_, err = this.Query().
 | 
				
			||||||
 | 
							Pk(regionId).
 | 
				
			||||||
 | 
							Set("prices", pricesJSON).
 | 
				
			||||||
 | 
							Update()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ type NodeRegion struct {
 | 
				
			|||||||
	Name      string `field:"name"`      // 名称
 | 
						Name      string `field:"name"`      // 名称
 | 
				
			||||||
	Order     uint32 `field:"order"`     // 排序
 | 
						Order     uint32 `field:"order"`     // 排序
 | 
				
			||||||
	CreatedAt uint64 `field:"createdAt"` // 创建时间
 | 
						CreatedAt uint64 `field:"createdAt"` // 创建时间
 | 
				
			||||||
 | 
						Prices    string `field:"prices"`    // 价格
 | 
				
			||||||
	State     uint8  `field:"state"`     // 状态
 | 
						State     uint8  `field:"state"`     // 状态
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,6 +19,7 @@ type NodeRegionOperator struct {
 | 
				
			|||||||
	Name      interface{} // 名称
 | 
						Name      interface{} // 名称
 | 
				
			||||||
	Order     interface{} // 排序
 | 
						Order     interface{} // 排序
 | 
				
			||||||
	CreatedAt interface{} // 创建时间
 | 
						CreatedAt interface{} // 创建时间
 | 
				
			||||||
 | 
						Prices    interface{} // 价格
 | 
				
			||||||
	State     interface{} // 状态
 | 
						State     interface{} // 状态
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								internal/db/models/server_stat_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								internal/db/models/server_stat_dao.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/Tea"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ServerStatDAO dbs.DAO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewServerStatDAO() *ServerStatDAO {
 | 
				
			||||||
 | 
						return dbs.NewDAO(&ServerStatDAO{
 | 
				
			||||||
 | 
							DAOObject: dbs.DAOObject{
 | 
				
			||||||
 | 
								DB:     Tea.Env,
 | 
				
			||||||
 | 
								Table:  "edgeServerStats",
 | 
				
			||||||
 | 
								Model:  new(ServerStat),
 | 
				
			||||||
 | 
								PkName: "id",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}).(*ServerStatDAO)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var SharedServerStatDAO *ServerStatDAO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						dbs.OnReady(func() {
 | 
				
			||||||
 | 
							SharedServerStatDAO = NewServerStatDAO()
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								internal/db/models/server_stat_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								internal/db/models/server_stat_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										26
									
								
								internal/db/models/server_stat_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								internal/db/models/server_stat_model.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 计费流量统计
 | 
				
			||||||
 | 
					type ServerStat struct {
 | 
				
			||||||
 | 
						Id       uint64 `field:"id"`       // ID
 | 
				
			||||||
 | 
						ServerId uint32 `field:"serverId"` // 服务ID
 | 
				
			||||||
 | 
						RegionId uint32 `field:"regionId"` // 区域ID
 | 
				
			||||||
 | 
						Bytes    uint64 `field:"bytes"`    // 流量
 | 
				
			||||||
 | 
						Day      string `field:"day"`      // 日期YYYYMMDD
 | 
				
			||||||
 | 
						TimeFrom string `field:"timeFrom"` // 开始时间HHMMSS
 | 
				
			||||||
 | 
						TimeTo   string `field:"timeTo"`   // 结束时间
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ServerStatOperator struct {
 | 
				
			||||||
 | 
						Id       interface{} // ID
 | 
				
			||||||
 | 
						ServerId interface{} // 服务ID
 | 
				
			||||||
 | 
						RegionId interface{} // 区域ID
 | 
				
			||||||
 | 
						Bytes    interface{} // 流量
 | 
				
			||||||
 | 
						Day      interface{} // 日期YYYYMMDD
 | 
				
			||||||
 | 
						TimeFrom interface{} // 开始时间HHMMSS
 | 
				
			||||||
 | 
						TimeTo   interface{} // 结束时间
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewServerStatOperator() *ServerStatOperator {
 | 
				
			||||||
 | 
						return &ServerStatOperator{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								internal/db/models/server_stat_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/server_stat_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
@@ -186,6 +186,7 @@ func (this *APINode) listenRPC(listener net.Listener, tlsConfig *tls.Config) err
 | 
				
			|||||||
	pb.RegisterMessageServiceServer(rpcServer, &services.MessageService{})
 | 
						pb.RegisterMessageServiceServer(rpcServer, &services.MessageService{})
 | 
				
			||||||
	pb.RegisterNodeGroupServiceServer(rpcServer, &services.NodeGroupService{})
 | 
						pb.RegisterNodeGroupServiceServer(rpcServer, &services.NodeGroupService{})
 | 
				
			||||||
	pb.RegisterNodeRegionServiceServer(rpcServer, &services.NodeRegionService{})
 | 
						pb.RegisterNodeRegionServiceServer(rpcServer, &services.NodeRegionService{})
 | 
				
			||||||
 | 
						pb.RegisterNodePriceItemServiceServer(rpcServer, &services.NodePriceItemService{})
 | 
				
			||||||
	pb.RegisterServerGroupServiceServer(rpcServer, &services.ServerGroupService{})
 | 
						pb.RegisterServerGroupServiceServer(rpcServer, &services.ServerGroupService{})
 | 
				
			||||||
	pb.RegisterIPLibraryServiceServer(rpcServer, &services.IPLibraryService{})
 | 
						pb.RegisterIPLibraryServiceServer(rpcServer, &services.IPLibraryService{})
 | 
				
			||||||
	pb.RegisterFileChunkServiceServer(rpcServer, &services.FileChunkService{})
 | 
						pb.RegisterFileChunkServiceServer(rpcServer, &services.FileChunkService{})
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										130
									
								
								internal/rpc/services/service_node_price_item.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								internal/rpc/services/service_node_price_item.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
				
			|||||||
 | 
					package services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 节点区域价格相关服务
 | 
				
			||||||
 | 
					type NodePriceItemService struct {
 | 
				
			||||||
 | 
						BaseService
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建区域价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemService) CreateNodePriceItem(ctx context.Context, req *pb.CreateNodePriceItemRequest) (*pb.CreateNodePriceItemResponse, error) {
 | 
				
			||||||
 | 
						_, err := this.ValidateAdmin(ctx, 0)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						itemId, err := models.SharedNodePriceItemDAO.CreateItem(req.Name, req.Type, req.BitsFrom, req.BitsTo)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &pb.CreateNodePriceItemResponse{NodePriceItemId: itemId}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改区域价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemService) UpdateNodePriceItem(ctx context.Context, req *pb.UpdateNodePriceItemRequest) (*pb.RPCSuccess, error) {
 | 
				
			||||||
 | 
						_, err := this.ValidateAdmin(ctx, 0)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = models.SharedNodePriceItemDAO.UpdateItem(req.NodePriceItemId, req.Name, req.BitsFrom, req.BitsTo)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return this.Success()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除区域价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemService) DeleteNodePriceItem(ctx context.Context, req *pb.DeleteNodePriceItemRequest) (*pb.RPCSuccess, error) {
 | 
				
			||||||
 | 
						_, err := this.ValidateAdmin(ctx, 0)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = models.SharedNodePriceItemDAO.DisableNodePriceItem(req.NodePriceItemId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return this.Success()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找所有区域价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemService) FindAllEnabledNodePriceItems(ctx context.Context, req *pb.FindAllEnabledNodePriceItemsRequest) (*pb.FindAllEnabledNodePriceItemsResponse, error) {
 | 
				
			||||||
 | 
						_, err := this.ValidateAdmin(ctx, 0)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						prices, err := models.SharedNodePriceItemDAO.FindAllEnabledRegionPrices(req.Type)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := []*pb.NodePriceItem{}
 | 
				
			||||||
 | 
						for _, price := range prices {
 | 
				
			||||||
 | 
							result = append(result, &pb.NodePriceItem{
 | 
				
			||||||
 | 
								Id:       int64(price.Id),
 | 
				
			||||||
 | 
								IsOn:     price.IsOn == 1,
 | 
				
			||||||
 | 
								Name:     price.Name,
 | 
				
			||||||
 | 
								Type:     price.Type,
 | 
				
			||||||
 | 
								BitsFrom: int64(price.BitsFrom),
 | 
				
			||||||
 | 
								BitsTo:   int64(price.BitsTo),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &pb.FindAllEnabledNodePriceItemsResponse{NodePriceItems: result}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找所有启用的区域价格
 | 
				
			||||||
 | 
					func (this *NodePriceItemService) FindAllEnabledAndOnNodePriceItems(ctx context.Context, req *pb.FindAllEnabledAndOnNodePriceItemsRequest) (*pb.FindAllEnabledAndOnNodePriceItemsResponse, error) {
 | 
				
			||||||
 | 
						_, err := this.ValidateAdmin(ctx, 0)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						prices, err := models.SharedNodePriceItemDAO.FindAllEnabledAndOnRegionPrices(req.Type)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := []*pb.NodePriceItem{}
 | 
				
			||||||
 | 
						for _, price := range prices {
 | 
				
			||||||
 | 
							result = append(result, &pb.NodePriceItem{
 | 
				
			||||||
 | 
								Id:       int64(price.Id),
 | 
				
			||||||
 | 
								IsOn:     price.IsOn == 1,
 | 
				
			||||||
 | 
								Name:     price.Name,
 | 
				
			||||||
 | 
								Type:     price.Type,
 | 
				
			||||||
 | 
								BitsFrom: int64(price.BitsFrom),
 | 
				
			||||||
 | 
								BitsTo:   int64(price.BitsTo),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &pb.FindAllEnabledAndOnNodePriceItemsResponse{NodePriceItems: result}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找单个区域信息
 | 
				
			||||||
 | 
					func (this *NodePriceItemService) FindEnabledNodePriceItem(ctx context.Context, req *pb.FindEnabledNodePriceItemRequest) (*pb.FindEnabledNodePriceItemResponse, error) {
 | 
				
			||||||
 | 
						_, err := this.ValidateAdmin(ctx, 0)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						price, err := models.SharedNodePriceItemDAO.FindEnabledNodePriceItem(req.NodePriceItemId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if price == nil {
 | 
				
			||||||
 | 
							return &pb.FindEnabledNodePriceItemResponse{NodePriceItem: nil}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &pb.FindEnabledNodePriceItemResponse{NodePriceItem: &pb.NodePriceItem{
 | 
				
			||||||
 | 
							Id:       int64(price.Id),
 | 
				
			||||||
 | 
							IsOn:     price.IsOn == 1,
 | 
				
			||||||
 | 
							Name:     price.Name,
 | 
				
			||||||
 | 
							Type:     price.Type,
 | 
				
			||||||
 | 
							BitsFrom: int64(price.BitsFrom),
 | 
				
			||||||
 | 
							BitsTo:   int64(price.BitsTo),
 | 
				
			||||||
 | 
						}}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -66,6 +66,7 @@ func (this *NodeRegionService) FindAllEnabledNodeRegions(ctx context.Context, re
 | 
				
			|||||||
			Id:         int64(region.Id),
 | 
								Id:         int64(region.Id),
 | 
				
			||||||
			IsOn:       region.IsOn == 1,
 | 
								IsOn:       region.IsOn == 1,
 | 
				
			||||||
			Name:       region.Name,
 | 
								Name:       region.Name,
 | 
				
			||||||
 | 
								PricesJSON: []byte(region.Prices),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return &pb.FindAllEnabledNodeRegionsResponse{NodeRegions: result}, nil
 | 
						return &pb.FindAllEnabledNodeRegionsResponse{NodeRegions: result}, nil
 | 
				
			||||||
@@ -87,6 +88,7 @@ func (this *NodeRegionService) FindAllEnabledAndOnNodeRegions(ctx context.Contex
 | 
				
			|||||||
			Id:         int64(region.Id),
 | 
								Id:         int64(region.Id),
 | 
				
			||||||
			IsOn:       region.IsOn == 1,
 | 
								IsOn:       region.IsOn == 1,
 | 
				
			||||||
			Name:       region.Name,
 | 
								Name:       region.Name,
 | 
				
			||||||
 | 
								PricesJSON: []byte(region.Prices),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return &pb.FindAllEnabledAndOnNodeRegionsResponse{NodeRegions: result}, nil
 | 
						return &pb.FindAllEnabledAndOnNodeRegionsResponse{NodeRegions: result}, nil
 | 
				
			||||||
@@ -122,5 +124,19 @@ func (this *NodeRegionService) FindEnabledNodeRegion(ctx context.Context, req *p
 | 
				
			|||||||
		Id:         int64(region.Id),
 | 
							Id:         int64(region.Id),
 | 
				
			||||||
		IsOn:       region.IsOn == 1,
 | 
							IsOn:       region.IsOn == 1,
 | 
				
			||||||
		Name:       region.Name,
 | 
							Name:       region.Name,
 | 
				
			||||||
 | 
							PricesJSON: []byte(region.Prices),
 | 
				
			||||||
	}}, nil
 | 
						}}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改价格项价格
 | 
				
			||||||
 | 
					func (this *NodeRegionService) UpdateNodeRegionPrice(ctx context.Context, req *pb.UpdateNodeRegionPriceRequest) (*pb.RPCSuccess, error) {
 | 
				
			||||||
 | 
						_, err := this.ValidateAdmin(ctx, 0)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						err = models.SharedNodeRegionDAO.UpdateRegionItemPrice(req.NodeRegionId, req.NodeItemId, req.Price)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return this.Success()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user