Commit 08a9b1b4 authored by brent's avatar brent

difff income & charge

parent 7e57e227
No preview for this file type
......@@ -4,6 +4,7 @@ postgrespass = "quest"
postgreshost = "192.168.1.10"
postgresport = 8812
postgresdb = "qdb"
senderport = 9009
; postgresuser = "admin"
; postgrespass = "quest"
......@@ -17,10 +18,12 @@ postgrespass = "quest"
postgreshost = "43.198.252.255"
postgresport = 8812
postgresdb = "qdb"
senderport = 9009
[prod]
postgresuser = "admin"
postgrespass = "quest"
postgreshost = "172.31.12.187"
postgresport = 8812
postgresdb = "qdb"
\ No newline at end of file
postgresdb = "qdb"
senderport = 9009
\ No newline at end of file
......@@ -4,8 +4,10 @@ import (
"ai_developer_admin/libs/kong"
"ai_developer_admin/libs/mysql"
"ai_developer_admin/libs/odysseus"
"ai_developer_admin/libs/postgres"
"ai_developer_admin/models"
"encoding/json"
"fmt"
"github.com/beego/beego/v2/core/logs"
"net/http"
"strconv"
......@@ -40,27 +42,94 @@ func (server *FundsController) Recharge() {
timestamp := time.Now()
amount := int64(chargeRequest.Amount * 1000000)
charge := models.ChargeRecord{
UserId: checkUser.Id,
Status: 1,
PayMethodDesc: chargeRequest.PaymentMethod.String(),
PayMethod: int(chargeRequest.PaymentMethod),
ChargeTime: timestamp,
CreatedTime: timestamp,
UpdatedTime: timestamp,
Amount: amount,
}
//charge := models.ChargeRecord{
// UserId: checkUser.Id,
// Status: 1,
// PayMethodDesc: chargeRequest.PaymentMethod.String(),
// PayMethod: int(chargeRequest.PaymentMethod),
// ChargeTime: timestamp,
// CreatedTime: timestamp,
// UpdatedTime: timestamp,
// Amount: amount,
//}
mysql.GetMysqlInstace().Ormer.Insert(&charge)
//mysql.GetMysqlInstace().Ormer.Insert(&charge)
balance := int64((float64(checkUser.Balance/1000000) + chargeRequest.Amount) * 1000000)
sql := "SELECT Max(id) AS count FROM funds;"
max, err := postgres.QueryTotal(sql)
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
tradeTime := fmt.Sprintf(time.Now().Format(format))
//fundsData := models.Funds{
// Id: max + 1,
// Uid: info.UserID,
// Amount: amount,
// TradeChannel: int(chargeRequest.PaymentMethod),
// ChannelSerial: "",
// Status: 4,
// TradeTime: tradeTime,
// TradeFlow: int(models.Income),
// TradeType: int(models.Charge),
// Balance: balance,
// Remark: "",
// OrderId: "",
//}
//flag, err := postgres.InsertFunds(&fundsData)
sql = fmt.Sprintf("INSERT INTO funds ("+
"channel_serial,"+
"order_id,"+
"remark,"+
"id, "+
"status,"+
"uid,"+
"trade_flow,"+
"trade_type,"+
"trade_channel,"+
"amount,"+
"balance,"+
"trade_time) "+
"VALUES ("+
"'%s','%s','%s',"+
"%d,"+
"%d,"+
"%d,"+
"%d,"+
"%d,"+
"%d,"+
"%d,"+
"%d,"+
"'%s');",
"",
"",
"",
max+1,
4,
info.UserID,
int(models.Income),
int(models.Charge),
int(chargeRequest.PaymentMethod),
amount,
balance,
tradeTime)
flag, err := postgres.InsertWithSql(sql)
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
//tempUser := models.User{
// Id: checkUser.Id,
// Balance: balance,
//}
checkUser.Balance = balance
checkUser.UpdatedTime = timestamp
flag, err := mysql.GetMysqlInstace().Ormer.Update(checkUser)
flag, err = mysql.GetMysqlInstace().Ormer.Update(checkUser)
if err != nil {
server.respond(http.StatusOK, "充值失败")
}
......@@ -142,9 +211,108 @@ func (server *FundsController) RechargeRecords() {
}
func (server *FundsController) IncomeAndExpense() {
//info, err := server.Check()
//if err != nil {
// server.respond(http.StatusUnauthorized, err.Error())
// return
//}
info, err := server.Check()
if err != nil {
server.respond(http.StatusUnauthorized, err.Error())
return
}
body := server.Ctx.Input.RequestBody
appRequest := models.AppRequest{}
err = json.Unmarshal(body, &appRequest) //解析body中数据
logs.Debug("appRequest", appRequest, string(body))
if err != nil {
server.respond(models.NoRequestBody, err.Error())
return
}
if appRequest.Page == 0 {
appRequest.Page = 1
}
if appRequest.Size == 0 {
appRequest.Size = 10
}
offset := (appRequest.Page - 1) * appRequest.Size
size := appRequest.Page * appRequest.Size
if appRequest.StartTime == "" && appRequest.EndTime != "" {
server.respond(models.MissingParameter, "缺少开始时间")
return
}
if appRequest.StartTime != "" && appRequest.EndTime == "" {
server.respond(models.MissingParameter, "缺少结束时间")
return
}
//qs := postgres.GetOrmer().QueryTable("funds")
//infoQs := qs.Filter("id", 1)
timeCondition := ""
if appRequest.StartTime != "" && appRequest.EndTime != "" {
temp, _ := time.Parse(layout, appRequest.StartTime)
startTime := fmt.Sprintf(temp.Format(format))
temp, _ = time.Parse(layout, appRequest.EndTime)
endTime := fmt.Sprintf(temp.Format(format))
timeCondition = fmt.Sprintf("time >= '%s' and time <= '%s'", startTime, endTime)
// //infoQs = qs.Filter("trade_time__gte", startTime).Filter("trade_time__lte", endTime)
}
var types []*models.Funds
sql := fmt.Sprintf("SELECT count(*) FROM funds WHERE uid = %d %s;", info.UserID, timeCondition)
total, err := postgres.QueryTotal(sql)
logs.Debug("total = %d", total)
if total == 0 {
responseData := struct {
Total int64 `json:"total"`
Data interface{} `json:"data,omitempty"`
}{
Total: total,
Data: types,
}
server.respond(http.StatusOK, "", responseData)
return
}
sql = fmt.Sprintf("SELECT * FROM funds WHERE uid = %d %s LIMIT %d,%d;", info.UserID, timeCondition, offset, size)
data, err := postgres.QueryFunds(sql)
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
var responseTypes []models.ResponseFunds
for _, fund := range data {
amountInt, _ := strconv.Atoi(fund.Amount)
amount := amountInt / 1000000
balanceInt, _ := strconv.Atoi(fund.Balance)
balance := balanceInt / 1000000
tradeChannel, _ := strconv.Atoi(fund.TradeChannel)
status, _ := strconv.Atoi(fund.Status)
tradeFlow, _ := strconv.Atoi(fund.TradeFlow)
tradeType, _ := strconv.Atoi(fund.TradeType)
responseType := models.ResponseFunds{
Id: fund.Id, // int64
Uid: fund.Uid, // int
Amount: float64(amount), // int64
TradeChannel: models.PayMethodType(tradeChannel).String(), // int
ChannelSerial: fund.ChannelSerial, // string
StatusDesc: models.PayStatus(status).String(), // int
Status: status,
TradeTime: fund.TradeTime, // string
TradeFlow: models.TradeFlowType(tradeFlow).String(), // int
TradeType: models.TradeKind(tradeType).String(), // int
Balance: float64(balance), // int64
Remark: fund.Remark, // string
OrderId: fund.OrderId,
}
responseTypes = append(responseTypes, responseType)
}
responseData := struct {
Total int64 `json:"total"`
Data interface{} `json:"data,omitempty"`
}{
Total: total,
Data: responseTypes,
}
server.respond(http.StatusOK, "", responseData)
}
package controllers
import (
"ai_developer_admin/libs/registry"
"ai_developer_admin/models"
"net/http"
)
type MonitorController struct {
MainController
}
func (server *MonitorController) NodeManagers() {
data, err := registry.NodeManagers()
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
server.respond(http.StatusOK, "", data)
}
func (server *MonitorController) Gateways() {
data, err := registry.Gateways()
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
server.respond(http.StatusOK, "", data)
}
func (server *MonitorController) Workers() {
data, err := registry.Workers()
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
server.respond(http.StatusOK, "", data)
}
func (server *MonitorController) Schedules() {
data, err := registry.Schedules()
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
server.respond(http.StatusOK, "", data)
}
......@@ -188,7 +188,7 @@ func (server *TaskController) BillDetails() {
taskType, err1 := odysseus.GetTaskType(int64(taskId))
if err1 == nil {
apiPath = taskType.ApiPath
desc = taskType.Desc
//desc = taskType.Desc
}
}
......@@ -227,10 +227,10 @@ func (server *TaskController) Tasks() {
appRequest := models.AppRequest{}
err := json.Unmarshal(body, &appRequest) //解析body中数据
logs.Debug("appRequest", appRequest, string(body))
if err != nil {
server.respond(models.NoRequestBody, err.Error())
return
}
//if err != nil && {
// server.respond(models.NoRequestBody, err.Error())
// return
//}
if appRequest.Page == 0 {
appRequest.Page = 1
......@@ -326,23 +326,32 @@ func (server *TaskController) Tasks() {
for _, task := range data {
apiPath := ""
desc := ""
model := ""
baseModel := ""
kind := 1
typeDe := 1
taskId, err := strconv.Atoi(task.Type)
if err == nil {
taskType, err1 := odysseus.GetTaskType(int64(taskId))
if err1 == nil {
taskType, _ := odysseus.GetTaskType(int64(taskId))
if taskType != nil {
apiPath = taskType.ApiPath
desc = taskType.Desc
model = taskType.Model
baseModel = taskType.BaseModel
kind = taskType.Kind
typeDe = taskType.Type
}
}
reTask := models.Bills{
Id: task.Id,
Type: task.Type,
Type: models.ModelType(typeDe).String(),
Time: task.Time,
Result: task.Result,
ApiPath: apiPath,
Desc: desc,
Model: model,
BaseModel: baseModel,
Kind: kind,
//Desc: desc,
Workload: task.Workload,
ProfitAcc: task.ProfitAcc,
WorkerAcc: task.WorkerAcc,
......@@ -528,7 +537,7 @@ func (server *TaskController) UserTasks() {
taskType, err1 := odysseus.GetTaskType(int64(taskId))
if err1 == nil {
apiPath = taskType.ApiPath
desc = taskType.Desc
//desc = taskType.Desc
}
}
......@@ -1122,7 +1131,7 @@ func (server *TaskController) AddTasktype() {
hardwareRequire, err := json.Marshal(appRequest.TaskTypeIn.HardwareRequire)
cmd, err := json.Marshal(appRequest.TaskTypeIn.Cmd)
//examples, err := json.Marshal(appRequest.Type.Examples)
apiPath := fmt.Sprintf("/%s/%s/%s", appRequest.TaskTypeIn.Type.String(), appRequest.TaskTypeIn.Name, appRequest.TaskTypeIn.BaseModel)
apiPath := fmt.Sprintf("/%s/%s/%s", appRequest.TaskTypeIn.Type.String(), appRequest.TaskTypeIn.BaseModel, appRequest.TaskTypeIn.Model)
//if appRequest.Type.BaseModel != "" {
// apiPath = fmt.Sprintf("/%s/%s", apiPath, appRequest.Type.BaseModel)
//}
......@@ -1133,6 +1142,7 @@ func (server *TaskController) AddTasktype() {
dbType := models.TaskType{
Name: appRequest.TaskTypeIn.Name,
BaseModel: appRequest.TaskTypeIn.BaseModel,
Model: appRequest.TaskTypeIn.Model,
Version: appRequest.TaskTypeIn.Version,
Desc: appRequest.TaskTypeIn.Desc,
Price: price,
......@@ -1275,7 +1285,7 @@ func (server *TaskController) UpdateTaskType() {
hardwareRequire, err := json.Marshal(appRequest.TaskTypeIn.HardwareRequire)
cmd, err := json.Marshal(appRequest.TaskTypeIn.Cmd)
apiPath := fmt.Sprintf("/%s/%s/%s", appRequest.TaskTypeIn.Type.String(), appRequest.TaskTypeIn.Name, appRequest.TaskTypeIn.BaseModel)
apiPath := fmt.Sprintf("/%s/%s/%s", appRequest.TaskTypeIn.Type.String(), appRequest.TaskTypeIn.BaseModel, appRequest.TaskTypeIn.Model)
//apiPath := fmt.Sprintf("/%s/%s", appRequest.Type.Type.String(), appRequest.Type.Name)
//if appRequest.Type.BaseModel != "" {
// apiPath = fmt.Sprintf("/%s/%s", apiPath, appRequest.Type.BaseModel)
......@@ -1288,6 +1298,7 @@ func (server *TaskController) UpdateTaskType() {
Id: appRequest.TaskTypeIn.Id,
Name: appRequest.TaskTypeIn.Name,
BaseModel: appRequest.TaskTypeIn.BaseModel,
Model: appRequest.TaskTypeIn.Model,
Version: appRequest.TaskTypeIn.Version,
Desc: appRequest.TaskTypeIn.Desc,
Price: price,
......@@ -1423,6 +1434,7 @@ func (server *TaskController) GetTaskTypes() {
Id: data.Id,
Name: data.Name,
BaseModel: data.BaseModel,
Model: data.Model,
Version: data.Version,
Desc: data.Desc,
Price: float64(data.Price / 1000000),
......@@ -1488,6 +1500,38 @@ func (server *TaskController) GetTaskTypes() {
//server.respond(http.StatusOK, "", types)
}
func (server *TaskController) DelTaskType() {
_, err := server.Check()
if err != nil {
server.respond(http.StatusUnauthorized, err.Error())
return
}
body := server.Ctx.Input.RequestBody
logs.Debug("AddLevel body", string(body))
request := models.TaskType{}
err = json.Unmarshal(body, &request) //解析body中数据
logs.Debug("request", request)
if err != nil {
server.respond(models.NoRequestBody, err.Error())
return
}
if request.Id == 0 {
server.respond(models.MissingParameter, "id 不能为空")
return
}
checkType := &models.TaskType{Id: request.Id}
err = mysql.GetMysqlInstace().Ormer.Read(checkType)
if err != nil {
server.respond(models.BusinessFailed, err.Error())
return
}
checkType.Deleted = 1
mysql.GetMysqlInstace().Ormer.Update(checkType)
server.respond(http.StatusOK, "删除成功")
}
func (server *TaskController) AddOrUpdateExamples() {
_, err := server.Check()
if err != nil {
......@@ -1571,7 +1615,7 @@ func (server *TaskController) Examples() {
}
var types []*models.Model
sql := fmt.Sprintf("SELECT id, `name` AS tit,type,`desc` AS content, tags ,examples,codes,base_model,api_path,version FROM task_type WHERE deleted = 0 %s LIMIT %d,%d;", where, offset, size)
sql := fmt.Sprintf("SELECT id, `name` AS tit,type,`desc` AS content, tags ,examples,codes,base_model,model,api_path,version FROM task_type WHERE deleted = 0 %s LIMIT %d,%d;", where, offset, size)
mysql.GetMysqlInstace().Ormer.Raw(sql).QueryRows(&types)
var remodels []*models.ResonseModel
for _, data := range types {
......@@ -1598,6 +1642,7 @@ func (server *TaskController) Examples() {
Type: data.Type,
ApiPath: data.ApiPath,
BaseModel: data.BaseModel,
Model: data.Model,
Examples: examples,
ApiDocUrl: data.ApiDocUrl,
ApiDocContent: data.ApiDocContent,
......
......@@ -9,10 +9,14 @@ require (
github.com/go-jose/go-jose/v3 v3.0.1
github.com/go-sql-driver/mysql v1.7.1
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/google/uuid v1.5.0
github.com/lib/pq v1.0.0
github.com/odysseus/payment v0.0.0-00010101000000-000000000000
github.com/odysseus/cache v0.0.0-00010101000000-000000000000
github.com/odysseus/service-registry v0.0.0-00010101000000-000000000000
github.com/questdb/go-questdb-client/v2 v2.0.0
github.com/robfig/cron/v3 v3.0.1
github.com/smartystreets/goconvey v1.6.4
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
golang.org/x/crypto v0.17.0
gopkg.in/redis.v5 v5.2.9
)
......@@ -22,15 +26,11 @@ require (
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/go-redis/redis/v7 v7.4.0 // indirect
github.com/golang/protobuf v1.4.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/gomodule/redigo v2.0.0+incompatible // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/jtolds/gls v4.20.0+incompatible // indirect
github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/mitchellh/mapstructure v1.3.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
......@@ -38,20 +38,19 @@ require (
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.10.0 // indirect
github.com/prometheus/procfs v0.1.3 // indirect
github.com/redis/go-redis/v9 v9.4.0 // indirect
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 // indirect
github.com/robfig/cron/v3 v3.0.1 // indirect
github.com/redis/go-redis/v9 v9.5.1 // indirect
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
github.com/sirupsen/logrus v1.4.2 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d // indirect
golang.org/x/mod v0.3.0 // indirect
golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f // indirect
golang.org/x/text v0.3.3 // indirect
golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/protobuf v1.23.0 // indirect
golang.org/x/mod v0.13.0 // indirect
golang.org/x/net v0.16.0 // indirect
golang.org/x/sys v0.16.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.14.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
)
replace github.com/odysseus/payment => ../payment
replace github.com/odysseus/cache => ../cache
replace github.com/odysseus/service-registry => ../service-registry
This diff is collapsed.
{"/Users/brent/Documents/wubanWork/ai_developer_admin/controllers":1708684702731316975}
\ No newline at end of file
{"/Users/brent/Documents/wubanWork/ai_developer_admin/controllers":1709021476821781079}
\ No newline at end of file
......@@ -3,20 +3,35 @@ package cronjob
import (
"ai_developer_admin/libs/postgres"
"ai_developer_admin/libs/redis"
"ai_developer_admin/libs/registry"
"ai_developer_admin/models"
"context"
"encoding/json"
"fmt"
"github.com/beego/beego/v2/core/logs"
beego "github.com/beego/beego/v2/server/web"
qdb "github.com/questdb/go-questdb-client/v2"
"github.com/robfig/cron/v3"
"strconv"
"time"
)
var loopCronTask = cron.New(cron.WithSeconds())
var debitTask = cron.New(cron.WithSeconds())
var registryTask = cron.New(cron.WithSeconds())
var HeatKey = "task:heat"
var format = "2006-01-02T15:04:05.000000Z"
func Start() {
//defer loopCronTask.Stop()
startHeatKey()
startDebit()
startRegistBackend()
}
func startHeatKey() {
//spec := "0 0 * * * ?" //"@every 1h"
spec := "@every 1h" //"@every 1h"
//spec := "*/1 * * * * ?" //"@every 1h"
......@@ -84,6 +99,99 @@ func Start() {
loopCronTask.Start()
}
func startDebit() {
//spec := "*/50 */23 * * * ?" //"@every 1h"
spec := "00 00 00 * * ?"
//spec := "@every 1m"
dbhost, _ := beego.AppConfig.String("postgreshost")
dbport, _ := beego.AppConfig.Int("senderport")
questAddr := fmt.Sprintf("%s:%d", dbhost, dbport)
debitTask.AddFunc(spec, func() {
logs.Debug("startDebit")
ctx := context.TODO()
addrOpt := qdb.WithAddress(questAddr)
sender, err := qdb.NewLineSender(ctx, addrOpt)
if err != nil {
logs.Debug("startDebit NewLineSender = %s", err.Error())
return
}
// Make sure to close the sender on exit to release resources.
defer sender.Close()
currentTime := time.Now()
temp := fmt.Sprintf("-%dh", 2)
m, _ := time.ParseDuration(temp)
dayTime := currentTime.Add(m)
endTime := time.Date(dayTime.Year(), dayTime.Month(), dayTime.Day(), 23, 59, 59, 0, dayTime.Location())
startTime := time.Date(dayTime.Year(), dayTime.Month(), dayTime.Day(), 0, 0, 0, 0, dayTime.Location())
start := fmt.Sprintf(startTime.Format(format))
end := fmt.Sprintf(endTime.Format(format))
sql := fmt.Sprintf("SELECT time, uid,sum(fee) AS amount FROM bills WHERE time >= '%s' and time <= '%s' SAMPLE BY 1d ALIGN TO CALENDAR GROUP BY uid,time;", start, end)
data, err := postgres.CountFunds(sql)
if err != nil {
return
}
if data == nil {
return
}
sql = "SELECT Max(id) AS count FROM funds;"
max, err := postgres.QueryTotal(sql)
if err != nil {
return
}
id := max + 1
for _, fund := range data {
//tradeTime, _ := time.Parse(fund.Time, format)
uid, _ := strconv.Atoi(fund.Uid)
amount, _ := strconv.Atoi(fund.Amount)
nanoseconds := int64(uint64(dayTime.UnixNano()))
seconds := nanoseconds / 1e9
err = sender.Table("funds").
Symbol("order_id", "").
Symbol("remark", "").
Symbol("channel_serial", "").
Int64Column("uid", int64(uid)).
Int64Column("amount", int64(amount)).
Int64Column("balance", 0).
Int64Column("trade_channel", 0).
Int64Column("status", 5).
Int64Column("id", id).
TimestampColumn("trade_time", time.Unix(seconds, nanoseconds%1e9)).
Int64Column("trade_flow", int64(models.Expenditure)).
Int64Column("trade_type", int64(models.Spending)).
AtNow(ctx)
if err != nil {
logs.Debug("startDebit sender = %s,id = %d", err.Error(), id)
}
id = id + 1
//break
}
err = sender.Flush(ctx)
if err != nil {
logs.Debug("startDebit Flush = %s", err.Error())
}
})
debitTask.Start()
}
func startRegistBackend() {
spec := "@every 1h"
registryTask.AddFunc(spec, func() {
logs.Debug("startRegistBackend")
registry.RegistryBackend()
})
debitTask.Start()
}
//func Start() {
// //defer loopCronTask.Stop()
//
......
......@@ -4,8 +4,8 @@ import (
"ai_developer_admin/models"
"context"
"github.com/beego/beego/v2/core/logs"
"github.com/odysseus/payment/cachedata"
"github.com/odysseus/payment/model"
"github.com/odysseus/cache/cachedata"
"github.com/odysseus/cache/model"
)
import (
......
......@@ -12,6 +12,10 @@ import (
var ormpost orm.Ormer
func GetOrmer() orm.Ormer {
return ormpost
}
func init() {
//return
logs.Debug("postgres lib init")
......@@ -20,7 +24,7 @@ func init() {
logs.Error(err.Error())
}
//orm.RegisterModel(new(models.Bills))
//orm.RegisterModel(new(models.Funds))
//orm.RegisterModel(new(models.Tasks))
//orm.RegisterModel(new(models.ChargeRecord))
//orm.RegisterModel(new(models.UserLevel))
......@@ -100,6 +104,50 @@ func QueryBills(sql string) ([]models.Bills, error) {
return containers, nil
}
func QueryFunds(sql string) ([]models.Funds, error) {
logs.Debug("QueryFunds = ", sql)
qs := ormpost.Raw(sql)
var params []orm.Params
_, err := qs.Values(&params)
if err != nil {
return nil, err
}
arr, err := json.Marshal(params)
if err != nil {
return nil, err
}
var containers []models.Funds
logs.Debug("QueryFunds = ", string(arr))
err = json.Unmarshal(arr, &containers)
if err != nil {
return nil, err
}
return containers, nil
}
func CountFunds(sql string) ([]models.IncomeAndExpenseRsponse, error) {
logs.Debug("CountFunds = ", sql)
qs := ormpost.Raw(sql)
var params []orm.Params
_, err := qs.Values(&params)
if err != nil {
return nil, err
}
arr, err := json.Marshal(params)
if err != nil {
return nil, err
}
var containers []models.IncomeAndExpenseRsponse
logs.Debug("CountFunds = ", string(arr))
err = json.Unmarshal(arr, &containers)
if err != nil {
return nil, err
}
return containers, nil
}
func QueryTotal(sql string) (int64, error) {
logs.Debug("QueryBills = ", sql)
var count int64
......@@ -132,6 +180,19 @@ func QueryTotal(sql string) (int64, error) {
return count, nil
}
func InsertFunds(funds *models.Funds) (int64, error) {
return ormpost.Insert(funds)
}
func InsertWithSql(sql string) (int64, error) {
logs.Debug("InsertWithSql = %s", sql)
_, err := ormpost.Raw(sql).Exec()
if err != nil {
return 0, err
}
return 0, nil
}
func CountTasks(sql string) ([]models.TaskCount, error) {
logs.Debug("CountTasks = ", sql)
qs := ormpost.Raw(sql)
......
package registry
import (
"encoding/json"
beego "github.com/beego/beego/v2/server/web"
"github.com/odysseus/service-registry/common"
"github.com/odysseus/service-registry/query"
registor "github.com/odysseus/service-registry/registry"
"os"
"time"
)
var querier *query.ServiceQuerier
var redisParam registor.RedisConnParam
type backendService struct {
}
func init() {
host, _ := beego.AppConfig.String("balancehost")
db, _ := beego.AppConfig.Int("balancedb")
pass, _ := beego.AppConfig.String("balancepass")
redisParam = registor.RedisConnParam{
Addr: host,
Password: pass,
DbIndex: db,
}
querier = query.NewQuery(redisParam)
}
func NodeManagers() ([]string, error) {
return querier.Select(common.SERVICE_NODE_MANAGER).List()
}
func Gateways() ([]string, error) {
return querier.Select(common.SERVICE_API_GATEWAY).List()
}
func Workers() ([]string, error) {
return querier.Select(common.SERVICE_WORKER).List()
}
func Schedules() ([]string, error) {
return querier.Select(common.SERVICE_SCHEDULER).List()
}
func (d backendService) ServiceType() common.ServiceType {
return common.SERVICE_BACKEND
}
func (d backendService) Instance() string {
hostname, _ := os.Hostname()
port, _ := beego.AppConfig.String("httpport")
return "http://" + hostname + ":" + port
}
func (d backendService) Status() string {
//hostname, _ := os.Hostname()
//port, _ := beego.AppConfig.String("httpport")
return "200"
}
func (d backendService) DetailInfo() (json.RawMessage, error) {
hostname, _ := os.Hostname()
detail := struct {
IP string `json:"ip"`
HostName string `json:"hostName"`
}{
IP: "",
HostName: hostname,
}
return json.Marshal(detail)
}
func RegistryBackend() {
r := registor.NewRegistry(redisParam, backendService{})
r.Start()
time.Sleep(time.Second * 5)
r.Stop()
}
......@@ -27,11 +27,77 @@ func (m PayMethodType) String() string {
return "苹果支付"
case ManualPay:
return "手动充值"
default:
return "_"
}
}
type TradeFlowType int
const (
Income TradeFlowType = iota + 1
Expenditure
)
func (m TradeFlowType) String() string {
switch m {
case Income:
return "收入"
case Expenditure:
return "支出"
default:
return "未知支付方式"
}
}
type TradeKind int
const (
Charge TradeKind = iota + 1
Spending
Withdrawal
)
func (m TradeKind) String() string {
switch m {
case Charge:
return "充值"
case Spending:
return "消费"
case Withdrawal:
return "提现"
default:
return "未知支付方式"
}
}
type PayStatus int
const (
InitiatePay PayStatus = iota + 1
PendingPay
SuccessPay
FinishCharge
Billed
)
func (m PayStatus) String() string {
switch m {
case InitiatePay:
return "发起充值"
case PendingPay:
return "待支付"
case SuccessPay:
return "支付成功"
case FinishCharge:
return "充值完成"
case Billed:
return "已出账"
default:
return "未知"
}
}
type ChargeRequest struct {
Amount float64 `json:"amount"`
PaymentMethod PayMethodType `json:"pay_method"`
......@@ -50,5 +116,39 @@ type ChargeRecord struct {
Deleted int `json:"deleted";orm:"column(deleted);size(1)"`
}
type Funds struct {
Id string `json:"id";orm:"column(id)"` // int64
Uid string `json:"uid";orm:"column(uid)"` // int
Amount string `json:"amount";orm:"column(amount)"` // int64
TradeChannel string `json:"trade_channel";orm:"column(trade_channel)"` // int
ChannelSerial string `json:"channel_serial";orm:"column(channel_serial)"` // string
Status string `json:"status";orm:"column(status);size(1)"` // int
TradeTime string `json:"trade_time";orm:"column(trade_time);type(datetime)"` // string
TradeFlow string `json:"trade_flow";orm:"column(trade_flow)"` // int
TradeType string `json:"trade_type";orm:"column(trade_type)"` // int
Balance string `json:"balance";orm:"column(balance)"` // int64
Remark string `json:"remark";orm:"column(remark)"` // string
OrderId string `json:"order_id";orm:"column(order_id)"` // string
}
type ResponseFunds struct {
Id string `json:"id";orm:"column(id)"` // int64
Uid string `json:"uid";orm:"column(uid)"` // int
Amount float64 `json:"amount";orm:"column(amount)"` // int64
TradeChannel string `json:"trade_channel";orm:"column(trade_channel)"` // int
ChannelSerial string `json:"channel_serial";orm:"column(channel_serial)"` // string
Status int `json:"status";orm:"column(status);size(1)"` // int
StatusDesc string `json:"status_desc";orm:"column(status_desc);size(1)"` // int
TradeTime string `json:"trade_time";orm:"column(trade_time);type(datetime)"` // string
TradeFlow string `json:"trade_flow";orm:"column(trade_flow)"` // int
TradeType string `json:"trade_type";orm:"column(trade_type)"` // int
Balance float64 `json:"balance";orm:"column(balance)"` // int64
Remark string `json:"remark";orm:"column(remark)"` // string
OrderId string `json:"order_id";orm:"column(order_id)"` // string
}
type IncomeAndExpenseRsponse struct {
Uid string `json:"uid";orm:"column(uid)"` // int
Amount string `json:"amount";orm:"column(amount)"`
Time string `json:"time";orm:"column(time);type(datetime)"`
}
......@@ -50,6 +50,7 @@ type TaskType struct {
SignUrl string `json:"sign_url";orm:"column(sign_url)"`
Username string `json:"username";orm:"column(username)"`
Password string `json:"password";orm:"column(password)"`
Model string `json:"model";orm:"column(model)"`
BaseModel string `json:"base_model";orm:"column(base_model)"`
Examples string `json:"examples";orm:"column(examples)"`
ApiDocUrl string `json:"api_doc_url";orm:"column(api_doc_url)"`
......@@ -65,6 +66,7 @@ type NewTaskType struct {
Id int `orm:"column(id);auto"`
Name string `json:"name";orm:"column(desc)"`
BaseModel string `json:"base_model";orm:"column(desc)"`
Model string `json:"model";orm:"column(model)"`
Version string `json:"version";orm:"column(desc)"`
Desc string `json:"desc";orm:"column(desc);size(20)"`
Price float64 `json:"price";orm:"column(price)"`
......@@ -102,6 +104,7 @@ type Model struct {
Type int `json:"type";orm:"column(type)"`
ApiPath string `json:"api_path";orm:"column(api_path)"`
BaseModel string `json:"base_model";orm:"column(base_model)"`
Model string `json:"model";orm:"column(model)"`
Examples string `json:"examples";orm:"column(examples)"`
ApiDocUrl string `json:"api_doc_url";orm:"column(api_doc_url)"`
ApiDocContent string `json:"api_doc_content";orm:"column(api_doc_content)"`
......@@ -117,6 +120,7 @@ type ResonseModel struct {
Type int `json:"type";orm:"column(type)"`
ApiPath string `json:"api_path";orm:"column(api_path)"`
BaseModel string `json:"base_model";orm:"column(base_model)"`
Model string `json:"model";orm:"column(model)"`
Examples interface{} `json:"examples";orm:"column(examples)"`
ApiDocUrl string `json:"api_doc_url,omitempty";orm:"column(api_doc_url)"`
ApiDocContent string `json:"api_doc_content,omitempty";orm:"column(api_doc_content)"`
......@@ -128,6 +132,7 @@ type Bills struct {
//Key int `orm:"column(key);auto"`
Id string `json:"id";orm:"column(id)"`
Type string `json:"type";orm:"column(type)"`
Kind int `json:"kind,omitempty"`
Uid string `json:"uid";orm:"column(uid)"`
ProfitAcc string `json:"profit_acc";orm:"column(profit_acc)"`
Fee string `json:"fee";orm:"column(fee)"`
......@@ -143,6 +148,8 @@ type Bills struct {
Desc string `json:"desc,omitempty"`
TaskType string `json:"task_type,omitempty"`
Balance int64 `json:"balance,omitempty"`
BaseModel string `json:"base_model,omitempty"`
Model string `json:"model,omitempty"`
}
type TotalType struct {
......
......@@ -12,4 +12,5 @@ func init() {
beego.AutoPrefix("api", &controllers.FundsController{})
beego.AutoPrefix("api", &controllers.UserLevelController{})
beego.AutoPrefix("api", &controllers.TaskController{})
beego.AutoPrefix("api", &controllers.MonitorController{})
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment