DengBiao 2 роки тому
джерело
коміт
f855522b2b
9 змінених файлів з 251 додано та 0 видалено
  1. +46
    -0
      .gitignore
  2. +84
    -0
      db/db.go
  3. +18
    -0
      db/model/pay_channel.go
  4. +10
    -0
      db/model/pay_channel_master.go
  5. +6
    -0
      go.mod
  6. +16
    -0
      md/cfg_app.go
  7. +34
    -0
      pay/init.go
  8. +20
    -0
      pay/pay.go
  9. +17
    -0
      pay/pay_test.go

+ 46
- 0
.gitignore Переглянути файл

@@ -0,0 +1,46 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
.idea
.vscode
*.log
.DS_Store
Thumbs.db
*.swp
*.swn
*.swo
*.swm
*.7z
*.zip
*.rar
*.tar
*.tar.gz
go.sum
/etc/cfg.yaml
images
test/test.json
etc/cfg.yml
t.json
t1.json
t2.json
t3.json
t.go
wait-for-it.sh
test.go
xorm
test.csv
nginx.conf
.devcontainer
.devcontainer/Dockerfile
.devcontainer/sources.list
/t1.go
/tmp/*
.idea/*
/.idea/modules.xml

+ 84
- 0
db/db.go Переглянути файл

@@ -0,0 +1,84 @@
package db

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/md"
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //必须导入mysql驱动,否则会panic
"os"
"time"
"xorm.io/xorm"
"xorm.io/xorm/log"
)

var Db *xorm.Engine

//根据DB配置文件初始化数据库
func InitDB(c *md.DBCfg) error {
var (
err error
f *os.File
)
//创建Orm引擎
if Db, err = xorm.NewEngine("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4", c.User, c.Psw, c.Host, c.Name)); err != nil {
return err
}
Db.SetConnMaxLifetime(c.MaxLifetime * time.Second) //设置最长连接时间
Db.SetMaxOpenConns(c.MaxOpenConns) //设置最大打开连接数
Db.SetMaxIdleConns(c.MaxIdleConns) //设置连接池的空闲数大小
if err = Db.Ping(); err != nil { //尝试ping数据库
return err
}
if c.ShowLog { //根据配置文件设置日志
Db.ShowSQL(true) //设置是否打印sql
Db.Logger().SetLevel(0) //设置日志等级
//修改日志文件存放路径文件名是%s.log
path := fmt.Sprintf(c.Path, c.Name)
f, err = os.OpenFile(path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777)
if err != nil {
os.RemoveAll(c.Path)
if f, err = os.OpenFile(c.Path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777); err != nil {
return err
}
}
logger := log.NewSimpleLogger(f)
logger.ShowSQL(true)
Db.SetLogger(logger)
}
return nil
}

/********************************************* 公用方法 *********************************************/

// QueryNativeString 查询原生sql
func QueryNativeString(Db *xorm.Engine, sql string, args ...interface{}) ([]map[string]string, error) {
results, err := Db.SQL(sql, args...).QueryString()
return results, err
}

// UpdateComm common update
func UpdateComm(Db *xorm.Engine, id interface{}, model interface{}) (int64, error) {
row, err := Db.ID(id).Update(model)
return row, err
}

// InsertComm common insert
func InsertComm(Db *xorm.Engine, model interface{}) (int64, error) {
row, err := Db.InsertOne(model)
return row, err
}

// InsertCommWithSession common insert
func InsertCommWithSession(session *xorm.Session, model interface{}) (int64, error) {
row, err := session.InsertOne(model)
return row, err
}

// ExecuteOriginalSql 执行原生sql
func ExecuteOriginalSql(session *xorm.Session, sql string) (sql.Result, error) {
result, err := session.Exec(sql)
if err != nil {
return nil, err
}
return result, nil
}

+ 18
- 0
db/model/pay_channel.go Переглянути файл

@@ -0,0 +1,18 @@
package model

import "time"

type PayChannel struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Name string `json:"name" xorm:"not null comment('渠道名称') VARCHAR(255)"`
IsUse int `json:"is_use" xorm:"not null default 1 comment('是否开启;1:开启;0:关闭') TINYINT(1)"`
ThirdPartyId string `json:"third_party_id" xorm:"not null comment('第三方聚合支付的渠道id') VARCHAR(20)"`
Kind string `json:"kind" xorm:"not null comment('渠道种类(self:自有支付 zhiYing:智莺支付 thirdParty 第三方聚合支付 )') VARCHAR(255)"`
ModuleIdentifier string `json:"module_identifier" xorm:"not null comment('模块标识符') VARCHAR(255)"`
ModuleName string `json:"module_name" xorm:"not null comment('模块名称') VARCHAR(255)"`
CommissionRate string `json:"commission_rate" xorm:"not null comment('抽成比例(千分之)') VARCHAR(255)"`
Memo string `json:"memo" xorm:"not null comment('备注') VARCHAR(255)"`
Ext string `json:"ext" xorm:"comment('拓展字段(json存储)') TEXT"`
CreateAt time.Time `json:"create_at" xorm:"default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"`
UpdateAt time.Time `json:"update_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"`
}

+ 10
- 0
db/model/pay_channel_master.go Переглянути файл

@@ -0,0 +1,10 @@
package model

type PayChannelMaster struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
ChannelId int `json:"channel_id" xorm:"not null default 1 comment('支付通道id') INT(11)"`
Identifier string `json:"identifier" xorm:"not null comment('场景标识符') VARCHAR(255)"`
MasterId int `json:"master_id" xorm:"not null default 1 comment('站长id') INT(11)"`
MasterNickname string `json:"master_nickname" xorm:"not null comment('站长名称') VARCHAR(255)"`
AppId int `json:"app_id" xorm:"not null default 1 comment('应用id(mid)') INT(20)"`
}

+ 6
- 0
go.mod Переглянути файл

@@ -1,3 +1,9 @@
module code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git

go 1.16

require (
github.com/go-sql-driver/mysql v1.6.0
xorm.io/builder v0.3.10 // indirect
xorm.io/xorm v1.3.0
)

+ 16
- 0
md/cfg_app.go Переглянути файл

@@ -0,0 +1,16 @@
package md

import "time"

//数据库配置结构体
type DBCfg struct {
Host string `yaml:"host"` //ip及端口
Name string `yaml:"name"` //库名
User string `yaml:"user"` //用户
Psw string `yaml:"psw"` //密码
ShowLog bool `yaml:"show_log"` //是否显示SQL语句
MaxLifetime time.Duration `yaml:"max_lifetime"`
MaxOpenConns int `yaml:"max_open_conns"`
MaxIdleConns int `yaml:"max_idle_conns"`
Path string `yaml:"path"` //日志文件存放路径
}

+ 34
- 0
pay/init.go Переглянути файл

@@ -0,0 +1,34 @@
package pay

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/db"
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/md"
)

var cfg = md.DBCfg{
Host: "",
Name: "",
User: "",
Psw: "",
ShowLog: false,
MaxLifetime: 0,
MaxOpenConns: 0,
MaxIdleConns: 0,
Path: "",
}

func Init(host, name, user, psw string) error {
cfg.Host = host
cfg.Name = name
cfg.User = user
cfg.Psw = psw
cfg.ShowLog = true
cfg.MaxLifetime = 30
cfg.MaxOpenConns = 100
cfg.MaxIdleConns = 100
cfg.Path = "tmp/%s.log"
if err := db.InitDB(&cfg); err != nil {
return err
}
return nil
}

+ 20
- 0
pay/pay.go Переглянути файл

@@ -0,0 +1,20 @@
package pay

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/db"
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/db/model"
"errors"
)

func JudgePayChannel(mid, paySceneIdentifier string) (model.PayChannel, error) {
var payChannelMaster = model.PayChannelMaster{}
var payChannel = model.PayChannel{}
_, err := db.Db.Where("app_id = ?", mid).And("identifier = ?", paySceneIdentifier).Get(&payChannelMaster)
if err != nil {
return payChannel, err
}
if payChannelMaster.ChannelId == 0 {
return payChannel, errors.New("请联系服务商绑定支付渠道")
}
return payChannel, nil
}

+ 17
- 0
pay/pay_test.go Переглянути файл

@@ -0,0 +1,17 @@
package pay

import (
"testing"
)

func TestPay(t *testing.T) {
err := Init("119.23.182.117:3306", "zyos_website", "root", "Fnuo123com@")
if err != nil {
t.Errorf("Reverse == %s", err)
}
channel, err := JudgePayChannel("35618318", "mall")
if err != nil {
t.Errorf("Reverse == %s", err)
}
t.Log(channel.Name)
}

Завантаження…
Відмінити
Зберегти