Browse Source

update

master
dengbiao 4 months ago
parent
commit
15cec7b989
59 changed files with 1591 additions and 4633 deletions
  1. +1
    -1
      README.md
  2. +0
    -44
      app/db/dao/admin_dao.go
  3. +0
    -25
      app/db/dao/admin_role_dao.go
  4. +0
    -5
      app/db/dao/permission_dao.go
  5. +0
    -8
      app/db/dao/permission_group_dao.go
  6. +0
    -5
      app/db/dao/permission_group_permission_dao.go
  7. +0
    -25
      app/db/dao/role_dao.go
  8. +0
    -11
      app/db/dao/role_permission_group_dao.go
  9. +14
    -0
      app/db/dao/sys_cfg_dao.go
  10. +0
    -112
      app/db/db.go
  11. +0
    -82
      app/db/db_sys_cfg.go
  12. +0
    -104
      app/db/dbs.go
  13. +0
    -194
      app/db/dbs_map.go
  14. +0
    -115
      app/db/implement/admin_implement.go
  15. +0
    -77
      app/db/implement/admin_role_implement.go
  16. +0
    -33
      app/db/implement/permission_group_implement.go
  17. +0
    -14
      app/db/implement/permission_group_permission_implement.go
  18. +0
    -14
      app/db/implement/permission_implement.go
  19. +0
    -73
      app/db/implement/role_implement.go
  20. +0
    -32
      app/db/implement/role_permission_group_implement.go
  21. +124
    -0
      app/db/implement/sys_cfg_implement.go
  22. +0
    -14
      app/db/model/admin.go
  23. +0
    -10
      app/db/model/admin_role.go
  24. +0
    -14
      app/db/model/db_mapping.go
  25. +0
    -10
      app/db/model/permission.go
  26. +0
    -11
      app/db/model/permission_group.go
  27. +0
    -9
      app/db/model/permission_group_permission.go
  28. +0
    -10
      app/db/model/role.go
  29. +0
    -9
      app/db/model/role_permission_group.go
  30. +0
    -5
      app/db/super/dao/medium_list_dao.go
  31. +0
    -14
      app/db/super/implement/medium_list_implement.go
  32. +0
    -25
      app/db/super/model/medium_list.go
  33. +7
    -7
      app/hdl/hdl_login.go
  34. +56
    -56
      app/hdl/hdl_role.go
  35. +1
    -1
      app/lib/auth/auth.go
  36. +1
    -1
      app/md/app_redis_key.go
  37. +7
    -0
      app/md/md_api_response.go
  38. +3
    -2
      app/md/md_login.go
  39. +1
    -1
      app/md/md_role.go
  40. +15
    -20
      app/mw/mw_db.go
  41. +7
    -0
      app/router/router.go
  42. +3
    -3
      app/svc/svc_admin.go
  43. +3
    -5
      app/svc/svc_auth.go
  44. +1
    -1
      app/svc/svc_db.go
  45. +1
    -1
      app/svc/svc_login.go
  46. +11
    -11
      app/svc/svc_role.go
  47. +6
    -6
      app/svc/svc_sys_cfg_get.go
  48. +1
    -1
      cmd_db.bat
  49. +415
    -1246
      docs/docs.go
  50. +404
    -1197
      docs/swagger.json
  51. +303
    -822
      docs/swagger.yaml
  52. +41
    -0
      etc/cfg.yml
  53. +43
    -27
      go.mod
  54. +90
    -0
      k8s/container.yaml
  55. +0
    -0
      k8s/container_prd.yaml
  56. +17
    -0
      k8s/ingress.yaml
  57. +0
    -56
      k8s/mall-task-prd.yaml
  58. +0
    -56
      k8s/mall-task.yaml
  59. +15
    -8
      main.go

+ 1
- 1
README.md View File

@@ -1,4 +1,4 @@
# 广告站长平台
# 广告站长平台

## 要看 nginx.conf 和 wap conf



+ 0
- 44
app/db/dao/admin_dao.go View File

@@ -1,44 +0,0 @@
package dao

import (
"applet/app/db/model"
"xorm.io/xorm"
)

type AdminDao interface {
CreateAdminId() (admId int, err error)
AdminDeleteBySession(session *xorm.Session, admId interface{}) (int64, error)
GetAdmin(id int) (m *model.Admin, err error)
GetAdminByUserName(userName string) (m *model.Admin, err error)
GetAdminRolePermission(admId int) (list []*AdminRolePermission, total int64, err error)
FindAdmin(username string, state, page, limit int) (list []model.Admin, total int64, err error)
UpdateAdmin(m *model.Admin, columns ...string) (int64, error)
AdminInsert(m *model.Admin) (int64, error)
FindAdminRolePermissionGroup(admId int) (list []*AdminRolePermissionGroup, total int64, err error)
}

type AdminRolePermissionGroup struct {
model.Admin `xorm:"extends"`
model.AdminRole `xorm:"extends"`
model.Role `xorm:"extends"`
model.RolePermissionGroup `xorm:"extends"`
model.PermissionGroup `xorm:"extends"`
}

func (AdminRolePermissionGroup) TableName() string {
return "admin"
}

type AdminRolePermission struct {
model.Admin `xorm:"extends"`
model.AdminRole `xorm:"extends"`
model.Role `xorm:"extends"`
model.RolePermissionGroup `xorm:"extends"`
model.PermissionGroup `xorm:"extends"`
model.PermissionGroupPermission `xorm:"extends"`
model.Permission `xorm:"extends"`
}

func (AdminRolePermission) TableName() string {
return "admin"
}

+ 0
- 25
app/db/dao/admin_role_dao.go View File

@@ -1,25 +0,0 @@
package dao

import (
"applet/app/db/model"
"xorm.io/xorm"
)

type AdminRoleDao interface {
FindAdminRole(id int) (*[]model.AdminRole, error)
FindAdminRoleByRoleId(id int) (*[]model.AdminRole, error)
AdminDeleteBySessionForAdmId(session *xorm.Session, admId interface{}) (int64, error)
GetAdminRoleByRole(id int) (m *model.AdminRole, err error)
AdminRoleDeleteForRoleBySession(session *xorm.Session, roleId interface{}) (int64, error)
AdminRoleDeleteBySession(session *xorm.Session, id interface{}) (int64, error)
BatchAddAdminRoleBySession(session *xorm.Session, mm []*model.AdminRole) (int64, error)
}

type AdminRole struct {
model.Admin `xorm:"extends"`
model.AdminRole `xorm:"extends"`
}

func (AdminRole) TableName() string {
return "admin_role"
}

+ 0
- 5
app/db/dao/permission_dao.go View File

@@ -1,5 +0,0 @@
package dao

type PermissionDao interface {
//TODO:: You can add specific method definitions here
}

+ 0
- 8
app/db/dao/permission_group_dao.go View File

@@ -1,8 +0,0 @@
package dao

import "applet/app/db/model"

type PermissionGroupDao interface {
FindPermissionGroup() (*[]model.PermissionGroup, error)
FindPermissionGroupV2() (*[]model.PermissionGroup, error)
}

+ 0
- 5
app/db/dao/permission_group_permission_dao.go View File

@@ -1,5 +0,0 @@
package dao

type PermissionGroupPermissionDao interface {
//TODO:: You can add specific method definitions here
}

+ 0
- 25
app/db/dao/role_dao.go View File

@@ -1,25 +0,0 @@
package dao

import (
"applet/app/db/model"
"xorm.io/xorm"
)

type RoleDao interface {
FindRole() (*[]model.Role, error)
GetRole() (m *model.Role, err error)
UpdateRole(m *model.Role, columns ...string) (int64, error)
RoleDeleteBySession(session *xorm.Session, id interface{}) (int64, error)
RoleInsert(m *model.Role) (int, error)
FindPermissionGroupByRole(roleId int) (list []*RolePermissionGroup, total int64, err error)
}

type RolePermissionGroup struct {
model.Role `xorm:"extends"`
model.RolePermissionGroup `xorm:"extends"`
model.PermissionGroup `xorm:"extends"`
}

func (RolePermissionGroup) TableName() string {
return "role"
}

+ 0
- 11
app/db/dao/role_permission_group_dao.go View File

@@ -1,11 +0,0 @@
package dao

import (
"applet/app/db/model"
"xorm.io/xorm"
)

type RolePermissionGroupDao interface {
RolePermissionGroupDeleteForRoleBySession(session *xorm.Session, roleId interface{}) (int64, error)
BatchAddRolePermissionGroupBySession(session *xorm.Session, mm []*model.RolePermissionGroup) (int64, error)
}

+ 14
- 0
app/db/dao/sys_cfg_dao.go View File

@@ -0,0 +1,14 @@
package dao

import "applet/app/db/model"

type SysCfgDao interface {
SysCfgGetAll() (*[]model.SysCfg, error)
SysCfgGetOneNoDataNoErr(key string) (*model.SysCfg, error)
SysCfgGetOne(key string) (*model.SysCfg, error)
SysCfgInsert(key, val, memo string) bool
SysCfgUpdate(key, val string) bool
SysCfgGetWithDb(HKey string) string
SysCfgDel(HKey string) error
SysCfgFindWithDb(keys ...string) map[string]string
}

+ 0
- 112
app/db/db.go View File

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

import (
"database/sql"
"fmt"
"os"
"time"

_ "github.com/go-sql-driver/mysql" //必须导入mysql驱动,否则会panic
"xorm.io/xorm"
"xorm.io/xorm/log"

"applet/app/cfg"
"applet/app/utils/logx"
)

var Db *xorm.Engine

//根据DB配置文件初始化数据库
func InitDB(c *cfg.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
}

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

// 数据批量插入
func DbInsertBatch(Db *xorm.Engine, m ...interface{}) error {
if len(m) == 0 {
return nil
}
id, err := Db.Insert(m...)
if id == 0 || err != nil {
return logx.Warn("cannot insert data :", err)
}
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
}

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

// GetComm
// payload *model
// return *model,has,err
func GetComm(Db *xorm.Engine, model interface{}) (interface{}, bool, error) {
has, err := Db.Get(model)
if err != nil {
_ = logx.Warn(err)
return nil, false, err
}
return model, has, nil
}

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

+ 0
- 82
app/db/db_sys_cfg.go View File

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

import (
"applet/app/db/model"
"applet/app/md"
"applet/app/utils/cache"
"applet/app/utils/logx"
"fmt"
"xorm.io/xorm"
)

// 系统配置get
func SysCfgGetAll(Db *xorm.Engine) (*[]model.SysCfg, error) {
var cfgList []model.SysCfg
if err := Db.Cols("key,val,memo").Find(&cfgList); err != nil {
return nil, logx.Error(err)
}
return &cfgList, nil
}

// 获取一条记录
func SysCfgGetOne(Db *xorm.Engine, key string) (*model.SysCfg, error) {
var cfgList model.SysCfg
if has, err := Db.Where("`key`=?", key).Get(&cfgList); err != nil || has == false {
return nil, logx.Error(err)
}
return &cfgList, nil
}

// 返回最后插入id
func SysCfgInsert(Db *xorm.Engine, key, val, memo string) bool {
cfg := model.SysCfg{Key: key, Val: val, Memo: memo}
_, err := Db.InsertOne(&cfg)
if err != nil {
logx.Error(err)
return false
}
return true
}

func SysCfgUpdate(Db *xorm.Engine, key, val, memo string) bool {
cfg := model.SysCfg{Key: key, Val: val, Memo: memo}
_, err := Db.Where("`key`=?", key).Cols("val,memo").Update(&cfg)
if err != nil {
logx.Error(err)
return false
}
return true
}
func SysCfgGetWithDb(eg *xorm.Engine, masterId string, HKey string) string {
cacheKey := fmt.Sprintf(md.AppCfgCacheKey, masterId) + HKey
get, err := cache.GetString(cacheKey)
if err != nil || get == "" {
cfg, err := SysCfgGetOne(eg, HKey)
if err != nil || cfg == nil {
_ = logx.Error(err)
return ""
}

// key是否存在
cacheKeyExist := false
if cache.Exists(cacheKey) {
cacheKeyExist = true
}

// 设置缓存
_, err = cache.SetEx(cacheKey, cfg.Val, 30)
if err != nil {
_ = logx.Error(err)
return ""
}
if !cacheKeyExist { // 如果是首次设置 设置过期时间
_, err := cache.Expire(cacheKey, md.CfgCacheTime)
if err != nil {
_ = logx.Error(err)
return ""
}
}
return cfg.Val
}
return get
}

+ 0
- 104
app/db/dbs.go View File

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

import (
"fmt"
"os"
"time"

"xorm.io/xorm"
"xorm.io/xorm/log"

"applet/app/cfg"
"applet/app/db/model"
"applet/app/utils/logx"
)

var DBs map[string]*xorm.Engine

// 每个站长都要有自己的syscfg 缓存, 键是站长id,值是缓存名
// var SysCfgMapKey map[string]string

func NewDB(c *cfg.DBCfg) (*xorm.Engine, error) {
db, err := xorm.NewEngine("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4", c.User, c.Psw, c.Host, c.Name))
if err != nil {
return nil, err
}
db.SetConnMaxLifetime(c.MaxLifetime * time.Second)
db.SetMaxOpenConns(c.MaxOpenConns)
db.SetMaxIdleConns(c.MaxIdleConns)
err = db.Ping()
if err != nil {
return nil, err
}
if c.ShowLog {
db.ShowSQL(true)
db.Logger().SetLevel(log.LOG_DEBUG)
f, err := os.OpenFile(c.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 nil, err
}
}
logger := log.NewSimpleLogger(f)
logger.ShowSQL(true)
db.SetLogger(logger)
}
return db, nil
}

// InitDBs is 初始化多数据库
func InitDBs(ch chan int) {
// 初始化多数据库
var tables *[]model.DbMapping
InitMapDbs(cfg.DB, cfg.Prd)
ch <- 1
// 每10s 查询一次模板数据库的db mapping 表,如果有新增数据库记录,则添加到 DBs中
ticker := time.NewTicker(time.Duration(time.Second * 120))
for range ticker.C {
if cfg.Prd {
tables = GetAllDatabasePrd() //默认获取全部
} else {
tables = GetAllDatabaseDev() //默认获取全部
}
if tables == nil {
logx.Warn("no database tables data")
continue
}
for _, item := range *tables {
_, ok := DBs[item.DbMasterId]
if !ok {
// 不在db.DBs 则添加进去
dbCfg := cfg.DBCfg{
Name: item.DbName,
ShowLog: cfg.DB.ShowLog,
MaxLifetime: cfg.DB.MaxLifetime,
MaxOpenConns: cfg.DB.MaxOpenConns,
MaxIdleConns: cfg.DB.MaxIdleConns,
Path: fmt.Sprintf(cfg.DB.Path, item.DbName),
}
if item.DbHost != "" && item.DbUsername != "" && item.DbPassword != "" {
dbCfg.Host = item.DbHost
dbCfg.User = item.DbUsername
dbCfg.Psw = item.DbPassword
} else {
dbCfg.Host = cfg.DB.Host
dbCfg.User = cfg.DB.User
dbCfg.Psw = cfg.DB.Psw
}
e, err := NewDB(&dbCfg)
if err != nil || e == nil {
logx.Warnf("db engine can't create, please check config, params[host:%s, user:%s, psw: %s, name: %s], err: %v", dbCfg.Host, dbCfg.User, dbCfg.Psw, dbCfg.Name, err)
} else {
DBs[item.DbMasterId] = e
}
}
// 如果 被禁用则删除
if item.DeletedAt == 1 {
logx.Infof("%s have been removed", item.DbMasterId)
delete(DBs, item.DbMasterId)
}
}
}

}

+ 0
- 194
app/db/dbs_map.go View File

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

import (
"errors"
"fmt"

"xorm.io/xorm"

"applet/app/cfg"
"applet/app/db/model"
"applet/app/utils/logx"
)

func MapBaseExists() (bool, error) {
return Db.IsTableExist("db_mapping")
}

func InitMapDbs(c *cfg.DBCfg, prd bool) {
var tables *[]model.DbMapping
exists, err := MapBaseExists()
if !exists || err != nil {
logx.Fatalf("db_mapping not exists : %v", err)
}
// tables := MapAllDatabases(debug)
if prd {
tables = GetAllDatabasePrd() //debug 获取生产
} else {
tables = GetAllDatabaseDev() //debug 获取开发
}

if tables == nil {
logx.Fatal("no database tables data")
}
var e *xorm.Engine
DBs = map[string]*xorm.Engine{}
for _, v := range *tables {
if v.DbName != "" && v.DeletedAt == 0 && v.DbName != c.Name {
dbCfg := cfg.DBCfg{
Name: v.DbName,
ShowLog: c.ShowLog,
MaxLifetime: c.MaxLifetime,
MaxOpenConns: c.MaxOpenConns,
MaxIdleConns: c.MaxIdleConns,
Path: fmt.Sprintf(c.Path, v.DbName),
}
if v.DbHost != "" && v.DbUsername != "" && v.DbPassword != "" {
dbCfg.Host = v.DbHost
dbCfg.User = v.DbUsername
dbCfg.Psw = v.DbPassword
} else {
dbCfg.Host = c.Host
dbCfg.User = c.User
dbCfg.Psw = c.Psw
}
e, err = NewDB(&dbCfg)
if err != nil || e == nil {
logx.Warnf("db engine can't create, please check config, params[host:%s, user:%s, psw: %s, name: %s], err: %v", dbCfg.Host, dbCfg.User, dbCfg.Psw, dbCfg.Name, err)
} else {
DBs[v.DbMasterId] = e
}
}
}
}

func MapAllDatabases(debug bool) *[]model.DbMapping {
sql := "`db_name` != ?"
if debug {
sql = "`db_name` = ?"
}
var m []model.DbMapping
if err := Db.Where(sql, cfg.DB.Name).Find(&m); err != nil || len(m) == 0 {
logx.Warn(err)
return nil
}
return &m
}

// GetAllDatabasePrd is 获取生成库 所有db 除了 deleted_at = 1 的
func GetAllDatabasePrd() *[]model.DbMapping {
var m []model.DbMapping
if err := Db.Where("deleted_at != ? AND is_dev = '0' ", 1).Find(&m); err != nil || len(m) == 0 {
logx.Warn(err)
return nil
}
return &m
}

// GetAllDatabaseDev is 获取开发库 所有db 除了 deleted_at = 1 的
func GetAllDatabaseDev() *[]model.DbMapping {
var m []model.DbMapping
var err error
fmt.Println("cfg.Local is: ", cfg.Local)
if cfg.Local { // 本地调试 加快速度
fmt.Println("notice:LOCAL TEST, only masterId:** 123456 ** available!")
err = Db.Where("deleted_at != ? AND is_dev = '1' AND db_master_id=?", 1, 123456).Find(&m)
} else {
err = Db.Where("deleted_at != ? AND is_dev = '1' ", 1).Find(&m)
}

//err := Db.Where("deleted_at != ? AND is_dev = '1' and db_master_id='123456'", 1).Find(&m)
if err != nil || len(m) == 0 {
logx.Warn(err)
return nil
}
return &m
}

//GetDatabaseByMasterID is 根据站长id 获取对应的的数据库信息
func GetDatabaseByMasterID(Db *xorm.Engine, id string) (*model.DbMapping, error) {
var m model.DbMapping
has, err := Db.Where("db_master_id=?", id).Get(&m)
if !has {
return nil, errors.New("Not Found DB data by " + id)
}
if err != nil {
return nil, err
}
if m.DbHost == "" {
m.DbHost = cfg.DB.Host
m.DbUsername = cfg.DB.User
m.DbPassword = cfg.DB.Psw
}
return &m, nil
}

//SessionGetDatabaseByMasterID is 根据站长id 获取对应的的数据库信息
func SessionGetDatabaseByMasterID(Db *xorm.Session, id string) (*model.DbMapping, error) {
var m model.DbMapping
has, err := Db.Where("db_master_id=?", id).Get(&m)
if !has {
return nil, errors.New("Not Found DB data by " + id)
}
if err != nil {
return nil, err
}
if m.DbHost == "" {
m.DbHost = cfg.DB.Host
m.DbName = cfg.DB.Name
m.DbUsername = cfg.DB.User
m.DbPassword = cfg.DB.Psw
}
return &m, nil
}

// 获取自动任务队列
func MapCrontabCfg(eg *xorm.Engine) *[]model.SysCfg {
var c []model.SysCfg
// 数据库查询如果有下划线会认为是一个任意字符
if err := eg.Where("`key` LIKE 'mall_cron\\_%' AND val != ''").Cols("`key`,`val`").Find(&c); err != nil || len(c) == 0 {
logx.Warn(err)
return nil
}
return &c
}

// 获取官方域名
func GetOfficialDomainInfoByType(Db *xorm.Engine, masterId, key string) (string, error) {
type SysCfg struct {
K string
V string
Memo string
}
var domainBase SysCfg

has, err := Db.Where("k=?", "domain_base").Get(&domainBase)
if err != nil {
return "", err
}
if has == false {
return "", errors.New("can not find key by : domain_base")
}

if key == "wap" {
return "h5." + masterId + "." + domainBase.V, nil
}

if key == "api" {
var apiDomain SysCfg
has, err = Db.Where("k=?", "domain_api_base").Get(&apiDomain)
if err != nil {
return "", err
}
if has == false {
return "", errors.New("can not find key by : domain_api_base")
}
return apiDomain.V, nil
}

if key == "admin" {
return "admin." + masterId + "." + domainBase.V, nil
}
// 默认返回H5的
return "h5." + masterId + "." + domainBase.V, nil
}

+ 0
- 115
app/db/implement/admin_implement.go View File

@@ -1,115 +0,0 @@
package implement

import (
"applet/app/db/dao"
"applet/app/db/model"
"applet/app/utils/logx"
"reflect"
"xorm.io/xorm"
)

func NewAdminDb(engine *xorm.Engine) dao.AdminDao {
return &AdminDb{Db: engine}
}

type AdminDb struct {
Db *xorm.Engine
}

func (a AdminDb) CreateAdminId() (admId int, err error) {
m := new(model.Admin)
has, err := a.Db.Desc("adm_id").Get(m)
if err != nil {
return 0, logx.Error(err)
}
if has == false {
return 0, nil
}
admId = m.AdmId + 1
return admId, nil
}

func (a AdminDb) AdminDeleteBySession(session *xorm.Session, admId interface{}) (int64, error) {
if reflect.TypeOf(admId).Kind() == reflect.Slice {
return session.In("adm_id", admId).Delete(model.Admin{})
} else {
return session.Where("id = ?", admId).Delete(model.Admin{})
}
}

func (a AdminDb) GetAdmin(id int) (m *model.Admin, err error) {
m = new(model.Admin)
has, err := a.Db.Where("adm_id =?", id).Get(m)
if err != nil {
return nil, logx.Error(err)
}
if has == false {
return nil, nil
}
return m, nil
}

func (a AdminDb) GetAdminByUserName(userName string) (m *model.Admin, err error) {
m = new(model.Admin)
has, err := a.Db.Where("username =?", userName).Get(m)
if err != nil {
return nil, logx.Error(err)
}
if has == false {
return nil, nil
}
return m, nil
}

func (a AdminDb) GetAdminRolePermission(admId int) (list []*dao.AdminRolePermission, total int64, err error) {
total, err = a.Db.Where("admin.adm_id =?", admId).
Join("LEFT", "admin_role", "admin.adm_id = admin_role.adm_id").
Join("LEFT", "role", "admin_role.role_id = role.id").
Join("LEFT", "role_permission_group", "role.id = role_permission_group.role_id").
Join("LEFT", "permission_group", "role_permission_group.group_id = permission_group.id").
Join("LEFT", "permission_group_permission", "permission_group.id = permission_group_permission.group_id").
Join("LEFT", "permission", "permission_group_permission.permission_id = permission.id").
FindAndCount(&list)
return
}

func (a AdminDb) FindAdmin(username string, state, page, limit int) (list []model.Admin, total int64, err error) {
sess := a.Db.Desc("adm_id").Limit(limit, (page-1)*limit)
if username != "" {
sess.And("username like ?", "%"+username+"%")
}
if state != 0 {
sess.And("state = ?", state)
}
total, err = sess.FindAndCount(&list)
if err != nil {
return nil, 0, err
}
return
}

func (a AdminDb) UpdateAdmin(m *model.Admin, columns ...string) (int64, error) {
affected, err := a.Db.Where("adm_id =?", m.AdmId).Cols(columns...).Update(m)
if err != nil {
return 0, err
}
return affected, nil
}

func (a AdminDb) AdminInsert(m *model.Admin) (int64, error) {
insertAffected, err := a.Db.InsertOne(m)
if err != nil {
return 0, err
}
return insertAffected, nil
}

func (a AdminDb) FindAdminRolePermissionGroup(admId int) (list []*dao.AdminRolePermissionGroup, total int64, err error) {
total, err = a.Db.Where("admin.adm_id =?", admId).
Join("LEFT", "admin_role", "admin.adm_id = admin_role.adm_id").
Join("LEFT", "role", "admin_role.role_id = role.id").
//Join("LEFT", "role_permission_group", "role.id = role_permission_group.role_id").
//Join("LEFT", "permission_group", "role_permission_group.group_id = permission_group.id").
FindAndCount(&list)
return
}

+ 0
- 77
app/db/implement/admin_role_implement.go View File

@@ -1,77 +0,0 @@
package implement

import (
"applet/app/db/dao"
"applet/app/db/model"
"applet/app/utils/logx"
"reflect"
"xorm.io/xorm"
)

func NewAdminRoleDb(engine *xorm.Engine) dao.AdminRoleDao {
return &AdminRoleDb{Db: engine}
}

type AdminRoleDb struct {
Db *xorm.Engine
}

func (a AdminRoleDb) FindAdminRole(id int) (*[]model.AdminRole, error) {
var m []model.AdminRole
if err := a.Db.Where("adm_id =?", id).Find(&m); err != nil {
return nil, logx.Error(err)
}
return &m, nil
}

func (a AdminRoleDb) FindAdminRoleByRoleId(id int) (*[]model.AdminRole, error) {
var m []model.AdminRole
if err := a.Db.Where("role_id =?", id).Find(&m); err != nil {
return nil, logx.Error(err)
}
return &m, nil
}

func (a AdminRoleDb) AdminDeleteBySessionForAdmId(session *xorm.Session, admId interface{}) (int64, error) {
if reflect.TypeOf(admId).Kind() == reflect.Slice {
return session.In("adm_id", admId).Delete(model.AdminRole{})
} else {
return session.Where("adm_id = ?", admId).Delete(model.AdminRole{})
}
}

func (a AdminRoleDb) GetAdminRoleByRole(id int) (m *model.AdminRole, err error) {
m = new(model.AdminRole)
has, err := a.Db.Where("role_id =?", id).Get(m)
if err != nil {
return nil, logx.Error(err)
}
if has == false {
return nil, nil
}
return m, nil
}

func (a AdminRoleDb) AdminRoleDeleteForRoleBySession(session *xorm.Session, roleId interface{}) (int64, error) {
if reflect.TypeOf(roleId).Kind() == reflect.Slice {
return session.In("role_id", roleId).Delete(model.AdminRole{})
} else {
return session.Where("role_id = ?", roleId).Delete(model.AdminRole{})
}
}

func (a AdminRoleDb) AdminRoleDeleteBySession(session *xorm.Session, id interface{}) (int64, error) {
if reflect.TypeOf(id).Kind() == reflect.Slice {
return session.In("id", id).Delete(model.AdminRole{})
} else {
return session.Where("adm_id = ?", id).Delete(model.AdminRole{})
}
}

func (a AdminRoleDb) BatchAddAdminRoleBySession(session *xorm.Session, mm []*model.AdminRole) (int64, error) {
affected, err := session.Insert(mm)
if err != nil {
return 0, err
}
return affected, nil
}

+ 0
- 33
app/db/implement/permission_group_implement.go View File

@@ -1,33 +0,0 @@
package implement

import (
"applet/app/db/dao"
"applet/app/db/model"
"applet/app/enum"
"applet/app/utils/logx"
"xorm.io/xorm"
)

func NewPermissionGroupDb(engine *xorm.Engine) dao.PermissionGroupDao {
return &PermissionGroupDb{Db: engine}
}

type PermissionGroupDb struct {
Db *xorm.Engine
}

func (p PermissionGroupDb) FindPermissionGroup() (*[]model.PermissionGroup, error) {
var m []model.PermissionGroup
if err := p.Db.Where("state = ?", enum.PermissionGroupStateForNormal).Asc("id").Find(&m); err != nil {
return nil, logx.Error(err)
}
return &m, nil
}

func (p PermissionGroupDb) FindPermissionGroupV2() (*[]model.PermissionGroup, error) {
var m []model.PermissionGroup
if err := p.Db.Asc("id").Find(&m); err != nil {
return nil, logx.Error(err)
}
return &m, nil
}

+ 0
- 14
app/db/implement/permission_group_permission_implement.go View File

@@ -1,14 +0,0 @@
package implement

import (
"applet/app/db/dao"
"xorm.io/xorm"
)

type PermissionGroupPermissionDb struct {
Db *xorm.Engine
}

func NewPermissionGroupPermissionDb(engine *xorm.Engine) dao.PermissionGroupPermissionDao {
return &PermissionGroupPermissionDb{Db: engine}
}

+ 0
- 14
app/db/implement/permission_implement.go View File

@@ -1,14 +0,0 @@
package implement

import (
"applet/app/db/dao"
"xorm.io/xorm"
)

type PermissionDb struct {
Db *xorm.Engine
}

func NewPermissionDb(engine *xorm.Engine) dao.PermissionDao {
return &PermissionDb{Db: engine}
}

+ 0
- 73
app/db/implement/role_implement.go View File

@@ -1,73 +0,0 @@
package implement

import (
"applet/app/db/dao"
"applet/app/db/model"
"applet/app/utils/logx"
"reflect"
"xorm.io/xorm"
)

func NewRoleDb(engine *xorm.Engine, id int) dao.RoleDao {
return &RoleDb{
Db: engine,
Id: id,
}
}

type RoleDb struct {
Db *xorm.Engine
Id int `json:"id"`
}

func (r RoleDb) FindRole() (*[]model.Role, error) {
var m []model.Role
if err := r.Db.Desc("id").Find(&m); err != nil {
return nil, logx.Error(err)
}
return &m, nil
}

func (r RoleDb) GetRole() (m *model.Role, err error) {
m = new(model.Role)
has, err := r.Db.Where("id = ?", r.Id).Get(m)
if err != nil {
return nil, logx.Error(err)
}
if has == false {
return nil, nil
}
return m, nil
}

func (r RoleDb) UpdateRole(m *model.Role, columns ...string) (int64, error) {
affected, err := r.Db.Where("id =?", m.Id).Cols(columns...).Update(m)
if err != nil {
return 0, err
}
return affected, nil
}

func (r RoleDb) RoleDeleteBySession(session *xorm.Session, id interface{}) (int64, error) {
if reflect.TypeOf(id).Kind() == reflect.Slice {
return session.In("id", id).Delete(model.Role{})
} else {
return session.Where("id = ?", id).Delete(model.Role{})
}
}

func (r RoleDb) RoleInsert(m *model.Role) (int, error) {
_, err := r.Db.InsertOne(m)
if err != nil {
return 0, err
}
return m.Id, nil
}

func (r RoleDb) FindPermissionGroupByRole(roleId int) (list []*dao.RolePermissionGroup, total int64, err error) {
total, err = r.Db.Where("role.id =?", roleId).
Join("LEFT", "role_permission_group", "role_permission_group.role_id = role.id").
Join("LEFT", "permission_group", "permission_group.id = role_permission_group.group_id").
FindAndCount(&list)
return
}

+ 0
- 32
app/db/implement/role_permission_group_implement.go View File

@@ -1,32 +0,0 @@
package implement

import (
"applet/app/db/dao"
"applet/app/db/model"
"reflect"
"xorm.io/xorm"
)

func NewRolePermissionGroupDb(engine *xorm.Engine) dao.RolePermissionGroupDao {
return &RolePermissionGroupDb{Db: engine}
}

type RolePermissionGroupDb struct {
Db *xorm.Engine
}

func (r RolePermissionGroupDb) RolePermissionGroupDeleteForRoleBySession(session *xorm.Session, roleId interface{}) (int64, error) {
if reflect.TypeOf(roleId).Kind() == reflect.Slice {
return session.In("role_id", roleId).Delete(model.RolePermissionGroup{})
} else {
return session.Where("role_id = ?", roleId).Delete(model.RolePermissionGroup{})
}
}

func (r RolePermissionGroupDb) BatchAddRolePermissionGroupBySession(session *xorm.Session, mm []*model.RolePermissionGroup) (int64, error) {
affected, err := session.Insert(mm)
if err != nil {
return 0, err
}
return affected, nil
}

+ 124
- 0
app/db/implement/sys_cfg_implement.go View File

@@ -0,0 +1,124 @@
package implement

import (
"applet/app/db/dao"
"applet/app/db/model"
"applet/app/md"
"applet/app/utils/cache"
"applet/app/utils/logx"
"fmt"
"xorm.io/xorm"
)

func NewSysCfgDb(engine *xorm.Engine, masterId string) dao.SysCfgDao {
return &SysCfgDb{
Db: engine,
MasterId: masterId,
}
}

type SysCfgDb struct {
Db *xorm.Engine
MasterId string
}

func (s SysCfgDb) SysCfgGetAll() (*[]model.SysCfg, error) {
var cfgList []model.SysCfg
if err := s.Db.Cols("key,val,memo").Find(&cfgList); err != nil {
return nil, logx.Error(err)
}
return &cfgList, nil
}

func (s SysCfgDb) SysCfgGetOneNoDataNoErr(key string) (*model.SysCfg, error) {
var cfgList model.SysCfg
has, err := s.Db.Where("`key`=?", key).Get(&cfgList)
if err != nil {
return nil, logx.Error(err)
}
if !has {
return nil, nil
}
return &cfgList, nil
}

func (s SysCfgDb) SysCfgGetOne(key string) (*model.SysCfg, error) {
var cfgList model.SysCfg
if has, err := s.Db.Where("`key`=?", key).Get(&cfgList); err != nil || has == false {
return nil, logx.Error(err)
}
return &cfgList, nil
}

func (s SysCfgDb) SysCfgInsert(key, val, memo string) bool {
cfg := model.SysCfg{Key: key, Val: val, Memo: memo}
_, err := s.Db.InsertOne(&cfg)
if err != nil {
logx.Error(err)
return false
}
return true
}

func (s SysCfgDb) SysCfgUpdate(key, val string) bool {
cfg := model.SysCfg{Key: key, Val: val}
_, err := s.Db.Where("`key`=?", key).Cols("val").Update(&cfg)
if err != nil {
logx.Error(err)
return false
}
s.SysCfgDel(key)
return true
}

func (s SysCfgDb) SysCfgGetWithDb(HKey string) string {
cacheKey := fmt.Sprintf(md.AppCfgCacheKey, s.MasterId, HKey[0:1])
get, err := cache.HGetString(cacheKey, HKey)
if err != nil || get == "" {
cfg, err := s.SysCfgGetOne(HKey)
if err != nil || cfg == nil {
_ = logx.Error(err)
return ""
}

// key是否存在
cacheKeyExist := false
if cache.Exists(cacheKey) {
cacheKeyExist = true
}

// 设置缓存
_, err = cache.HSet(cacheKey, HKey, cfg.Val)
if err != nil {
_ = logx.Error(err)
return ""
}
if !cacheKeyExist { // 如果是首次设置 设置过期时间
_, err := cache.Expire(cacheKey, md.CfgCacheTime)
if err != nil {
_ = logx.Error(err)
return ""
}
}
return cfg.Val
}
return get
}

func (s SysCfgDb) SysCfgDel(HKey string) error {
cacheKey := fmt.Sprintf(md.AppCfgCacheKey, s.MasterId, HKey[0:1])
_, err := cache.HDel(cacheKey, HKey)
if err != nil {
return err
}
return nil
}

func (s SysCfgDb) SysCfgFindWithDb(keys ...string) map[string]string {
res := map[string]string{}
for _, v := range keys {
val := s.SysCfgGetWithDb(v)
res[v] = val
}
return res
}

+ 0
- 14
app/db/model/admin.go View File

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

type Admin struct {
AdmId int `json:"adm_id" xorm:"not null comment('管理员id') INT(11)"`
Username string `json:"username" xorm:"not null default '' comment('用户名') VARCHAR(255)"`
Password string `json:"password" xorm:"not null default '' comment('密码') VARCHAR(255)"`
State int `json:"state" xorm:"not null default 1 comment('状态(1:正常 2:冻结)') TINYINT(1)"`
IsSuperAdministrator int `json:"is_super_administrator" xorm:"not null default 0 comment('是否为超级管理员(0:否 1:是)') TINYINT(1)"`
Memo string `json:"memo" xorm:"not null default '' comment('备注信息') VARCHAR(244)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
OpenId string `json:"open_id" xorm:"not null default '' comment('微信openid') VARCHAR(255)"`
UnionId string `json:"union_id" xorm:"not null default '' comment('微信用户id') VARCHAR(255)"`
}

+ 0
- 10
app/db/model/admin_role.go View File

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

type AdminRole struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
AdmId int `json:"adm_id" xorm:"not null default 0 comment('管理员id') INT(11)"`
RoleId int `json:"role_id" xorm:"not null default 0 comment('角色id') INT(11)"`
State int `json:"state" xorm:"not null default 1 comment('状态(1:正常 2:冻结)') TINYINT(1)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
}

+ 0
- 14
app/db/model/db_mapping.go View File

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

type DbMapping struct {
DbMasterId string `json:"db_master_id" xorm:"not null pk comment('站长id') VARCHAR(16)"`
DbHost string `json:"db_host" xorm:"not null default '' comment('数据库连接(带port)') VARCHAR(255)"`
DbUsername string `json:"db_username" xorm:"not null default '' comment('数据库用户名') VARCHAR(255)"`
DbPassword string `json:"db_password" xorm:"not null default '' comment('数据库用户名密码') VARCHAR(255)"`
DbName string `json:"db_name" xorm:"not null comment('数据库名') VARCHAR(255)"`
ExternalMysql string `json:"external_mysql" xorm:"not null default '0' comment('是否外部mysql(0是内部,1是外部)') VARCHAR(255)"`
IsDev int `json:"is_dev" xorm:"not null default 0 comment('开发库是1,0是生产库') TINYINT(1)"`
CreatedAt string `json:"created_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"`
UpdatedAt string `json:"updated_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"`
DeletedAt int `json:"deleted_at" xorm:"not null default 0 comment('是否已删除') TINYINT(1)"`
}

+ 0
- 10
app/db/model/permission.go View File

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

type Permission struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Name string `json:"name" xorm:"not null default '' comment('名称') VARCHAR(255)"`
Action string `json:"action" xorm:"not null default '' comment('路由') unique VARCHAR(255)"`
State int `json:"state" xorm:"not null default 1 comment('状态(1:正常 2:废弃)') TINYINT(1)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
}

+ 0
- 11
app/db/model/permission_group.go View File

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

type PermissionGroup struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
ParentId int `json:"parent_id" xorm:"not null default 0 comment('父级id') INT(11)"`
Key string `json:"key" xorm:"not null default '' VARCHAR(255)"`
Name string `json:"name" xorm:"not null default '' comment('名称') VARCHAR(255)"`
State int `json:"state" xorm:"not null default 1 comment('状态(1:正常 2:废弃)') TINYINT(1)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
}

+ 0
- 9
app/db/model/permission_group_permission.go View File

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

type PermissionGroupPermission struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
GroupId int `json:"group_id" xorm:"not null default 0 comment('权限组id') INT(11)"`
PermissionId int `json:"permission_id" xorm:"not null default 0 comment('权限id') INT(11)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
}

+ 0
- 10
app/db/model/role.go View File

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

type Role struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Name string `json:"name" xorm:"not null default '' comment('名称') VARCHAR(255)"`
State int `json:"state" xorm:"not null default 1 comment('状态(1:正常 2:冻结)') TINYINT(1)"`
Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(255)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
}

+ 0
- 9
app/db/model/role_permission_group.go View File

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

type RolePermissionGroup struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
RoleId int `json:"role_id" xorm:"not null default 0 comment('角色id') INT(11)"`
GroupId int `json:"group_id" xorm:"not null default 0 comment('权限组id') INT(11)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
}

+ 0
- 5
app/db/super/dao/medium_list_dao.go View File

@@ -1,5 +0,0 @@
package dao

type MediumListDao interface {
//TODO:: You can add specific method definitions here
}

+ 0
- 14
app/db/super/implement/medium_list_implement.go View File

@@ -1,14 +0,0 @@
package implement

import (
"applet/app/db/super/dao"
"xorm.io/xorm"
)

func NewMediumListDb(engine *xorm.Engine) dao.MediumListDao {
return &MediumListDb{Db: engine}
}

type MediumListDb struct {
Db *xorm.Engine
}

+ 0
- 25
app/db/super/model/medium_list.go View File

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

type MediumList struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uuid int `json:"uuid" xorm:"not null comment('站长id') index unique(IDX_UUID_TYPE) INT(11)"`
MediumId int `json:"medium_id" xorm:"not null comment('媒体id') unique(IDX_UUID_TYPE) INT(11)"`
Kind int `json:"kind" xorm:"not null default 1 comment('类型(1:企业 2:个人)') TINYINT(1)"`
CompanyName string `json:"company_name" xorm:"not null default '' comment('公司名称') VARCHAR(255)"`
CompanyAbbreviation string `json:"company_abbreviation" xorm:"not null default '' comment('公司简称') VARCHAR(255)"`
UnifiedSocialCreditCode string `json:"unified_social_credit_code" xorm:"not null default '' comment('统一社会信用代码') VARCHAR(255)"`
CertificateType int `json:"certificate_type" xorm:"not null default 1 comment('证件类型') TINYINT(1)"`
BusinessLicenseImgUrl string `json:"business_license_img_url" xorm:"not null default '' comment('营业执照照片') VARCHAR(255)"`
LegalRepresentative string `json:"legal_representative" xorm:"not null default '' comment('法定代表人') CHAR(50)"`
CountryRegionId int `json:"country_region_id" xorm:"not null default 1 comment('国家地区id') TINYINT(3)"`
CountryRegion string `json:"country_region" xorm:"not null default '' comment('国家地区') CHAR(50)"`
RegisteredAddressProvinceId int `json:"registered_address_province_id" xorm:"not null default 0 comment('注册地址-省份id') INT(11)"`
RegisteredAddressCityId int `json:"registered_address_city_id" xorm:"not null default 0 comment('注册地址-市id') INT(11)"`
RegisteredAddressCountyId int `json:"registered_address_county_id" xorm:"not null default 0 comment('注册地址-县/区id') INT(11)"`
RegisteredAddress string `json:"registered_address" xorm:"not null default '' comment('注册地址') VARCHAR(255)"`
BusinessLicenseAddress string `json:"business_license_address" xorm:"not null default '' comment('营业执照地址') VARCHAR(255)"`
CertificateValidity string `json:"certificate_validity" xorm:"not null default '0000-00-00' comment('证件有效期') CHAR(50)"`
State int `json:"state" xorm:"not null default 0 comment('状态(0:待审核 1:审核通过 2:审核拒绝)') TINYINT(1)"`
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"`
}

+ 7
- 7
app/hdl/hdl_login.go View File

@@ -1,26 +1,26 @@
package hdl

import (
"applet/app/db"
"applet/app/db/implement"
"applet/app/e"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"fmt"
"github.com/gin-gonic/gin"
)

// Login 登陆
// @Summary 登陆
// @Tags ADMIN
// @Tags 登录注册
// @Description 登入
// @Accept json
// @Produce json
// @Param req body md2.LoginReq true "用户名密码"
// @Success 200 {object} md2.LoginResponse "token"
// @Failure 400 {object} md2.Response "具体错误"
// @Param req body md.LoginReq true "用户名密码"
// @Success 200 {object} md.LoginResponse "token"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/login [post]
func Login(c *gin.Context) {
var req md.LoginReq
@@ -31,7 +31,7 @@ func Login(c *gin.Context) {
e.OutErr(c, err1.Code, err1.Error())
return
}
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
adminDb := implement.NewAdminDb(engine)
admin, err := adminDb.GetAdminByUserName(req.UserName)
if err != nil {


+ 56
- 56
app/hdl/hdl_role.go View File

@@ -1,33 +1,33 @@
package hdl

import (
"applet/app/db"
"applet/app/db/implement"
"applet/app/db/model"
"applet/app/e"
"applet/app/enum"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
"github.com/gin-gonic/gin"
"time"
)

// PermissionGroupList
// @Summary 权限组列表
// @Tags ADMIN-权限管理
// @Description 权限组列表
// @Tags 权限管理
// @Description 权限管理-权限组列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @param adm_id query string true "管理员id"
// @Success 200 {string} "具体看返回内容"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/permissionGroupList [GET]
// @Router /role/permissionGroupList [GET]
func PermissionGroupList(c *gin.Context) {
roleId := c.DefaultQuery("role_id", "")
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
qrcodeWithBatchRecordsDb := implement.NewPermissionGroupDb(engine)
groupList, err := qrcodeWithBatchRecordsDb.FindPermissionGroup()
if err != nil {
@@ -101,16 +101,16 @@ func PermissionGroupList(c *gin.Context) {

// RoleList
// @Summary 角色列表
// @Tags ADMIN-权限管理
// @Description 角色列表
// @Tags 权限管理
// @Description 权限管理-角色列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Success 200 {string} "具体看返回内容"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/roleList [GET]
// @Router /role/roleList [GET]
func RoleList(c *gin.Context) {
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
roleDb := implement.NewRoleDb(engine, 0)
roleList, err := roleDb.FindRole()
if err != nil {
@@ -161,15 +161,15 @@ func RoleList(c *gin.Context) {

// AddRole
// @Summary 添加角色
// @Tags ADMIN-权限管理
// @Description 添加角色
// @Tags 权限管理
// @Description 权限管理-添加角色
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.AddRoleReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/addRole [POST]
// @Router /role/addRole [POST]
func AddRole(c *gin.Context) {
var req md.AddRoleReq
err := c.ShouldBindJSON(&req)
@@ -179,7 +179,7 @@ func AddRole(c *gin.Context) {
e.OutErr(c, err1.Code, err1.Error())
return
}
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
roleDb := implement.NewRoleDb(engine, 0)
now := time.Now()
_, err = roleDb.RoleInsert(&model.Role{
@@ -200,15 +200,15 @@ func AddRole(c *gin.Context) {

// UpdateRole
// @Summary 修改角色
// @Tags ADMIN-权限管理
// @Description 修改角色
// @Tags 权限管理
// @Description 权限管理-修改角色
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.UpdateRoleReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/updateRole [POST]
// @Router /role/updateRole [POST]
func UpdateRole(c *gin.Context) {
var req md.UpdateRoleReq
err := c.ShouldBindJSON(&req)
@@ -218,7 +218,7 @@ func UpdateRole(c *gin.Context) {
e.OutErr(c, err1.Code, err1.Error())
return
}
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
roleDb := implement.NewRoleDb(engine, req.RoleId)
role, err := roleDb.GetRole()
if err != nil {
@@ -242,15 +242,15 @@ func UpdateRole(c *gin.Context) {

// RoleBindPermissionGroup
// @Summary 角色绑定权限组
// @Tags ADMIN-权限管理
// @Description 角色绑定权限组
// @Tags 权限管理
// @Description 权限管理-角色绑定权限组
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.RoleBindPermissionGroupReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/roleBindPermissionGroup [POST]
// @Router /role/roleBindPermissionGroup [POST]
func RoleBindPermissionGroup(c *gin.Context) {
var req md.RoleBindPermissionGroupReq
err := c.ShouldBindJSON(&req)
@@ -272,15 +272,15 @@ func RoleBindPermissionGroup(c *gin.Context) {

// UpdateRoleState
// @Summary 修改角色状态
// @Tags ADMIN-权限管理
// @Description 修改角色状态
// @Tags 权限管理
// @Description 权限管理-修改角色状态
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.UpdateRoleStateReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/updateRole [POST]
// @Router /role/updateRole [POST]
func UpdateRoleState(c *gin.Context) {
var req md.UpdateRoleStateReq
err := c.ShouldBindJSON(&req)
@@ -290,7 +290,7 @@ func UpdateRoleState(c *gin.Context) {
e.OutErr(c, err1.Code, err1.Error())
return
}
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
roleDb := implement.NewRoleDb(engine, req.RoleId)
role, err := roleDb.GetRole()
if err != nil {
@@ -313,18 +313,18 @@ func UpdateRoleState(c *gin.Context) {

// DeleteRole
// @Summary 删除角色
// @Tags ADMIN-权限管理
// @Description 删除角色
// @Tags 权限管理
// @Description 权限管理-删除角色
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.UpdateRoleStateReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/deleteRole/{$id} [DELETE]
// @Router /role/deleteRole/{$id} [DELETE]
func DeleteRole(c *gin.Context) {
id := c.Param("id")
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
roleDb := implement.NewRoleDb(engine, utils.StrToInt(id))
role, err := roleDb.GetRole()
if err != nil {
@@ -348,15 +348,15 @@ func DeleteRole(c *gin.Context) {

// AdminList
// @Summary 管理员列表
// @Tags ADMIN-权限管理
// @Description 管理员列表
// @Tags 权限管理
// @Description 权限管理-管理员列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.AdminListReq true "请求参数"
// @Success 200 {string} "具体看返回内容"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/adminList [POST]
// @Router /role/adminList [POST]
func AdminList(c *gin.Context) {
var req md.AdminListReq
err := c.ShouldBindJSON(&req)
@@ -372,7 +372,7 @@ func AdminList(c *gin.Context) {
if req.Page == 0 {
req.Page = 10
}
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
adminDb := implement.NewAdminDb(engine)
adminList, total, err := adminDb.FindAdmin(req.UserName, req.State, req.Page, req.Limit)
if err != nil {
@@ -422,15 +422,15 @@ func AdminList(c *gin.Context) {

// UpdateAdminState
// @Summary 修改管理员状态
// @Tags ADMIN-权限管理
// @Description 修改管理员状态
// @Tags 权限管理
// @Description 权限管理-修改管理员状态
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.UpdateAdminStateReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/updateAdminState [POST]
// @Router /role/updateAdminState [POST]
func UpdateAdminState(c *gin.Context) {
var req md.UpdateAdminStateReq
err := c.ShouldBindJSON(&req)
@@ -441,7 +441,7 @@ func UpdateAdminState(c *gin.Context) {
return
}

engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
admDb := implement.NewAdminDb(engine)
admin, err := admDb.GetAdmin(req.AdmId)
if err != nil {
@@ -464,15 +464,15 @@ func UpdateAdminState(c *gin.Context) {

// UpdateAdmin
// @Summary 修改管理员信息
// @Tags ADMIN-权限管理
// @Description 修改管理员信息
// @Tags 权限管理
// @Description 权限管理-修改管理员信息
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.UpdateAdminReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/updateAdmin [POST]
// @Router /role/updateAdmin [POST]
func UpdateAdmin(c *gin.Context) {
var req md.UpdateAdminReq
err := c.ShouldBindJSON(&req)
@@ -482,7 +482,7 @@ func UpdateAdmin(c *gin.Context) {
e.OutErr(c, err1.Code, err1.Error())
return
}
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
admDb := implement.NewAdminDb(engine)
admin, err := admDb.GetAdmin(req.AdmId)
if err != nil {
@@ -507,15 +507,15 @@ func UpdateAdmin(c *gin.Context) {

// AddAdmin
// @Summary 新增管理员
// @Tags ADMIN-权限管理
// @Description 新增管理员
// @Tags 权限管理
// @Description 权限管理-新增管理员
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.AddAdminReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/addAdmin [POST]
// @Router /role/addAdmin [POST]
func AddAdmin(c *gin.Context) {
var req md.AddAdminReq
err := c.ShouldBindJSON(&req)
@@ -525,7 +525,7 @@ func AddAdmin(c *gin.Context) {
e.OutErr(c, err1.Code, err1.Error())
return
}
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
admDb := implement.NewAdminDb(engine)
isHasAdmin, err := admDb.GetAdminByUserName(req.Username)
if err != nil {
@@ -563,14 +563,14 @@ func AddAdmin(c *gin.Context) {

// DeleteAdmin
// @Summary 删除管理员
// @Tags ADMIN-权限管理
// @Description 删除管理员
// @Tags 权限管理
// @Description 权限管理-删除管理员
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/deleteAdmin/{$adm_id} [DELETE]
// @Router /role/deleteAdmin/{$adm_id} [DELETE]
func DeleteAdmin(c *gin.Context) {
admId := c.Param("adm_id")
err := svc.AdminDelete(c, []int{utils.StrToInt(admId)})
@@ -584,15 +584,15 @@ func DeleteAdmin(c *gin.Context) {

// BindAdminRole
// @Summary 管理员绑定角色
// @Tags ADMIN-权限管理
// @Description 管理员绑定角色
// @Tags 权限管理
// @Description 权限管理-管理员绑定角色
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.BindAdminRoleReq true "请求参数"
// @Success 200 {string} "success"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/bindAdminRole/ [POST]
// @Router /role/bindAdminRole/ [POST]
func BindAdminRole(c *gin.Context) {
var req md.BindAdminRoleReq
err := c.ShouldBindJSON(&req)
@@ -613,18 +613,18 @@ func BindAdminRole(c *gin.Context) {

// AdminInfo
// @Summary 管理员信息
// @Tags ADMIN-权限管理
// @Description 管理员信息
// @Tags 权限管理
// @Description 权限管理-管理员信息
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @param adm_id query string true "管理员id"
// @Success 200 {string} "具体看返回内容"
// @Failure 400 {object} md.Response "具体错误"
// @Router /admin/role/adminInfo [GET]
// @Router /role/adminInfo [GET]
func AdminInfo(c *gin.Context) {
admId := c.DefaultQuery("adm_id", "")
engine := db.DBs[svc.GetMasterId(c)]
engine := db.Db
admDb := implement.NewAdminDb(engine)
admin, err := admDb.GetAdmin(utils.StrToInt(admId))
if err != nil {


+ 1
- 1
app/lib/auth/auth.go View File

@@ -14,7 +14,7 @@ func GenToken(admId int, username string) (string, error) {
Username: username,
StandardClaims: jwt.StandardClaims{
ExpiresAt: time.Now().Add(TokenExpireDuration).Unix(), // 过期时间
Issuer: "advertisement", // 签发人
Issuer: "super_advertisement", // 签发人
},
}
// 使用指定的签名方法创建签名对象


+ 1
- 1
app/md/app_redis_key.go View File

@@ -2,7 +2,7 @@ package md

// 缓存key统一管理, %s格式化为masterId
const (
JwtTokenKey = "%s:advertisement_jwt_token:%s" // jwt, 占位符:ip, admin:id
JwtTokenKey = "%s:super_advertisement_jwt_token:%s" // jwt, 占位符:ip, admin:id

JwtTokenCacheTime = 3600 * 24



+ 7
- 0
app/md/md_api_response.go View File

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

type Response struct {
Code string `json:"code" example:"响应码"`
Data interface{} `json:"data" ` //内容
Msg string `json:"msg" example:"具体错误原因"`
}

+ 3
- 2
app/md/md_login.go View File

@@ -1,8 +1,9 @@
package md

type LoginReq struct {
UserName string `json:"username" binding:"required" label:"登录账号"`
PassWord string `json:"password" binding:"required" label:"登录密码"`
UserName string `json:"username" binding:"required" example:"登录账号"`
PassWord string `json:"password" binding:"required" example:"登录密码"`
Code string `json:"code" example:"验证码"`
}

type LoginResponse struct {


+ 1
- 1
app/md/md_role.go View File

@@ -1,7 +1,7 @@
package md

import (
"applet/app/db/model"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
)

type RoleListResp struct {


+ 15
- 20
app/mw/mw_db.go View File

@@ -1,30 +1,25 @@
package mw

import (
"applet/app/db"
"applet/app/e"
"applet/app/svc"
"errors"
"fmt"
"github.com/gin-gonic/gin"
)

// DB is 中间件 用来检查master_id是否有对应的数据库engine
func DB(c *gin.Context) {
fmt.Println(c.Request.Header)
masterID := svc.GetMasterId(c)
fmt.Println("master_id", masterID)
if masterID == "" {
e.OutErr(c, e.ERR_MASTER_ID, errors.New("not found master_id"))
return
}
_, ok := db.DBs[masterID]
if !ok {
e.OutErr(c, e.ERR_MASTER_ID, errors.New("not found master_id in DBs"))
return
}
fmt.Println("master_id", masterID)
c.Set("mid", masterID)
//fmt.Println(c.Request.Header)
//masterID := svc.GetMasterId(c)
//fmt.Println("master_id", masterID)
//if masterID == "" {
// e.OutErr(c, e.ERR_MASTER_ID, errors.New("not found master_id"))
// return
//}
//
//_, ok := db.DBs[masterID]
//if !ok {
// e.OutErr(c, e.ERR_MASTER_ID, errors.New("not found master_id in DBs"))
// return
//}
//fmt.Println("master_id", masterID)
//c.Set("mid", masterID)
c.Next()
}

+ 7
- 0
app/router/router.go View File

@@ -6,6 +6,8 @@ import (
"applet/app/mw"
_ "applet/docs"
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)

// 初始化路由
@@ -18,6 +20,11 @@ func Init() *gin.Engine {
gin.SetMode(mode)
//创建一个新的启动器
r := gin.New()
r.GET("/api/swagger/*any", func(c *gin.Context) {
//r.Use(mw.SwagAuth())
ginSwagger.DisablingWrapHandler(swaggerFiles.Handler, "SWAGGER")(c)
})

r.Use(mw.ChangeHeader)

// 是否打印访问日志, 在非正式环境都打印


+ 3
- 3
app/svc/svc_admin.go View File

@@ -1,13 +1,13 @@
package svc

import (
"applet/app/db"
"applet/app/db/implement"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"github.com/gin-gonic/gin"
)

func AdminDelete(c *gin.Context, admIds []int) (err error) {
engine := db.DBs[GetMasterId(c)]
engine := db.Db
session := engine.NewSession()
defer session.Close()
session.Begin()


+ 3
- 5
app/svc/svc_auth.go View File

@@ -1,10 +1,10 @@
package svc

import (
"applet/app/db"
"applet/app/db/implement"
"applet/app/db/model"
"applet/app/lib/auth"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
"errors"
"github.com/gin-gonic/gin"
"strings"
@@ -22,8 +22,6 @@ func GetUser(c *gin.Context) *model.Admin {
Memo: "",
CreateAt: "",
UpdateAt: "",
OpenId: "",
UnionId: "",
}
}
return user.(*model.Admin)


+ 1
- 1
app/svc/svc_db.go View File

@@ -1,7 +1,7 @@
package svc

import (
"applet/app/db"
db "code.fnuoos.com/zhimeng/model.git/src"
"github.com/gin-gonic/gin"
"xorm.io/xorm"
)


+ 1
- 1
app/svc/svc_login.go View File

@@ -1,11 +1,11 @@
package svc

import (
"applet/app/db/model"
"applet/app/lib/auth"
"applet/app/md"
"applet/app/utils/cache"
"applet/app/utils/logx"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
)

func HandleLoginToken(cacheKey string, admin *model.Admin) (string, error) {


+ 11
- 11
app/svc/svc_role.go View File

@@ -1,12 +1,12 @@
package svc

import (
"applet/app/db"
"applet/app/db/implement"
"applet/app/db/model"
"applet/app/md"
"applet/app/utils"
"applet/app/utils/cache"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
"encoding/json"
"errors"
"github.com/gin-gonic/gin"
@@ -34,7 +34,7 @@ func CheckUserRole(c *gin.Context, cacheKey, uri string, admId int) (isHasPermis
return
}
} else {
adminDb := implement.NewAdminDb(db.DBs[GetMasterId(c)])
adminDb := implement.NewAdminDb(db.Db)
list, _, err1 := adminDb.GetAdminRolePermission(admId)
if err1 != nil {
return isHasPermission, err1
@@ -72,7 +72,7 @@ func DeleteRole(c *gin.Context, roleId int) (err error) {
session.Begin()

//1、删除 `role`
roleDb := implement.NewRoleDb(db.DBs[GetMasterId(c)], roleId)
roleDb := implement.NewRoleDb(db.Db, roleId)
_, err = roleDb.RoleDeleteBySession(session, roleId)
if err != nil {
_ = session.Rollback()
@@ -80,7 +80,7 @@ func DeleteRole(c *gin.Context, roleId int) (err error) {
}

//2、删除 `role_permission_group`
rolePermissionGroupDb := implement.NewRolePermissionGroupDb(db.DBs[GetMasterId(c)])
rolePermissionGroupDb := implement.NewRolePermissionGroupDb(db.Db)
_, err = rolePermissionGroupDb.RolePermissionGroupDeleteForRoleBySession(session, roleId)
if err != nil {
_ = session.Rollback()
@@ -88,7 +88,7 @@ func DeleteRole(c *gin.Context, roleId int) (err error) {
}

//3、删除 `admin_role`
adminRoleDb := implement.NewAdminRoleDb(db.DBs[GetMasterId(c)])
adminRoleDb := implement.NewAdminRoleDb(db.Db)
_, err = adminRoleDb.AdminRoleDeleteForRoleBySession(session, roleId)
if err != nil {
_ = session.Rollback()
@@ -103,7 +103,7 @@ func RoleBindPermissionGroup(c *gin.Context, req md.RoleBindPermissionGroupReq)
defer session.Close()
session.Begin()
//1、查询 `role`
roleDb := implement.NewRoleDb(db.DBs[GetMasterId(c)], req.RoleId)
roleDb := implement.NewRoleDb(db.Db, req.RoleId)
role, err := roleDb.GetRole()
if err != nil {
return
@@ -113,7 +113,7 @@ func RoleBindPermissionGroup(c *gin.Context, req md.RoleBindPermissionGroupReq)
}

//1、删除 `role_permission_group`
rolePermissionGroupDb := implement.NewRolePermissionGroupDb(db.DBs[GetMasterId(c)])
rolePermissionGroupDb := implement.NewRolePermissionGroupDb(db.Db)
_, err = rolePermissionGroupDb.RolePermissionGroupDeleteForRoleBySession(session, req.RoleId)
if err != nil {
_ = session.Rollback()
@@ -145,7 +145,7 @@ func BindAdminRole(c *gin.Context, req md.BindAdminRoleReq) (err error) {
defer session.Close()
session.Begin()
//1、查询 `role`
adminDb := implement.NewAdminDb(db.DBs[GetMasterId(c)])
adminDb := implement.NewAdminDb(db.Db)
role, err := adminDb.GetAdmin(req.AdmId)
if err != nil {
return
@@ -155,7 +155,7 @@ func BindAdminRole(c *gin.Context, req md.BindAdminRoleReq) (err error) {
}

//1、删除 `admin_role`
adminRoleDb := implement.NewAdminRoleDb(db.DBs[GetMasterId(c)])
adminRoleDb := implement.NewAdminRoleDb(db.Db)
_, err = adminRoleDb.AdminRoleDeleteBySession(session, req.AdmId)
if err != nil {
_ = session.Rollback()


+ 6
- 6
app/svc/svc_sys_cfg_get.go View File

@@ -1,10 +1,10 @@
package svc

import (
db "code.fnuoos.com/zhimeng/model.git/src"
"github.com/gin-gonic/gin"
"xorm.io/xorm"

"applet/app/db"
"applet/app/md"
"applet/app/utils/cache"
)
@@ -12,7 +12,7 @@ import (
// 单挑记录获取
func SysCfgGet(c *gin.Context, key string) string {
mid := c.GetString("mid")
eg := db.DBs[mid]
eg := db.Db
return db.SysCfgGetWithDb(eg, mid, key)
}

@@ -32,7 +32,7 @@ func SysCfgFindComm(masterId string, keys ...string) map[string]string {
if masterId == "" {
eg = db.Db
} else {
eg = db.DBs[masterId]
eg = db.Db
}
res := map[string]string{}
//TODO::判断keys长度(大于10个直接查数据库)
@@ -88,13 +88,13 @@ func SysCfgCleanCache() {

// 写入系统设置
func SysCfgSet(c *gin.Context, key, val, memo string) bool {
cfg, err := db.SysCfgGetOne(db.DBs[c.GetString("mid")], key)
cfg, err := db.SysCfgGetOne(db.Db, key)
if err != nil || cfg == nil {
return db.SysCfgInsert(db.DBs[c.GetString("mid")], key, val, memo)
return db.SysCfgInsert(db.Db, key, val, memo)
}
if memo != "" && cfg.Memo != memo {
cfg.Memo = memo
}
SysCfgCleanCache()
return db.SysCfgUpdate(db.DBs[c.GetString("mid")], key, val, cfg.Memo)
return db.SysCfgUpdate(db.Db, key, val, cfg.Memo)
}

+ 1
- 1
cmd_db.bat View File

@@ -12,7 +12,7 @@ if "%one%" NEQ "" (
set BasePath="./"
set DBUSER="root"
set DBPSW="Fnuo123com@"
set DBNAME="advertisement"
set DBNAME="super_advertisement"
set DBHOST="119.23.182.117"
set DBPORT="3306"



+ 415
- 1246
docs/docs.go
File diff suppressed because it is too large
View File


+ 404
- 1197
docs/swagger.json
File diff suppressed because it is too large
View File


+ 303
- 822
docs/swagger.yaml
File diff suppressed because it is too large
View File


+ 41
- 0
etc/cfg.yml View File

@@ -0,0 +1,41 @@
# 当前域名
debug: true
curldebug: true
prd: false
local: true
# 服务器参数
srv_addr: ':1001'
# 缓存
redis_addr: '120.24.28.6:32572'

# 连接官网数据库获取db mapping
db:
host: '119.23.182.117:3306'
name: 'super_advertisement'
user: 'root'
psw: 'Fnuo123com@'
show_log: true
max_lifetime: 30
max_open_conns: 100
max_idle_conns: 100
path: 'tmp/%s.log'

# 日志
log:
app_name: 'applet'
level: 'debug' # 普通日志级别 #debug, info, warn, fatal, panic
is_stdout: true
time_format: 'standard' # sec, second, milli, nano, standard, iso
encoding: 'console'
is_file_out: true
file_dir: './tmp/'
file_max_size: 256
file_max_age: 1
file_name: 'debug.log'

# 连接RabbitMq
mq:
host: '116.62.62.35'
port: '5672'
user: 'zhios'
pwd: 'ZHIoscnfnuo123'

+ 43
- 27
go.mod View File

@@ -2,20 +2,22 @@ module applet

go 1.18

//replace code.fnuoos.com/zhimeng/model.git => E:/company/ad/models

require (
code.fnuoos.com/zhimeng/model.git v0.0.3-0.20240816151818-a491f294f782
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/boombuler/barcode v1.0.1
github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/forgoer/openssl v0.0.0-20201023062029-c3112b0c8700
github.com/gin-contrib/sessions v0.0.3
github.com/gin-gonic/gin v1.6.3
github.com/go-playground/locales v0.13.0
github.com/go-playground/universal-translator v0.17.0
github.com/go-playground/validator/v10 v10.4.2
github.com/gin-gonic/gin v1.10.0
github.com/go-playground/locales v0.14.1
github.com/go-playground/universal-translator v0.18.1
github.com/go-playground/validator/v10 v10.20.0
github.com/go-redis/redis v6.15.9+incompatible
github.com/go-sql-driver/mysql v1.6.0
github.com/go-sql-driver/mysql v1.8.1
github.com/gocolly/colly v1.2.0
github.com/gomodule/redigo v2.0.0+incompatible
github.com/iGoogle-ink/gopay v1.5.36
@@ -23,16 +25,19 @@ require (
github.com/qiniu/api.v7/v7 v7.8.2
github.com/robfig/cron/v3 v3.0.1
github.com/sony/sonyflake v1.0.0
github.com/swaggo/swag v1.7.0
github.com/syyongx/php2go v0.9.4
github.com/swaggo/files v1.0.1
github.com/swaggo/gin-swagger v1.6.0
github.com/swaggo/swag v1.8.12
github.com/syyongx/php2go v0.9.8
github.com/tidwall/gjson v1.7.4
go.uber.org/zap v1.16.0
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v2 v2.4.0
xorm.io/xorm v1.0.7
xorm.io/xorm v1.3.1
)

require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/PuerkitoBio/goquery v1.5.1 // indirect
github.com/PuerkitoBio/purell v1.1.1 // indirect
@@ -41,50 +46,61 @@ require (
github.com/antchfx/htmlquery v1.3.2 // indirect
github.com/antchfx/xmlquery v1.4.1 // indirect
github.com/antchfx/xpath v1.3.1 // indirect
github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/jsonreference v0.19.5 // indirect
github.com/go-openapi/spec v0.20.3 // indirect
github.com/go-openapi/jsonreference v0.19.6 // indirect
github.com/go-openapi/spec v0.20.4 // indirect
github.com/go-openapi/swag v0.19.15 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/gookit/color v1.3.8 // indirect
github.com/gorilla/context v1.1.1 // indirect
github.com/gorilla/securecookie v1.1.1 // indirect
github.com/gorilla/sessions v1.2.1 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.10 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kennygrant/sanitize v1.2.4 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-isatty v0.0.12 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/onsi/ginkgo v1.15.0 // indirect
github.com/onsi/gomega v1.10.5 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect
github.com/smartystreets/goconvey v1.6.4 // indirect
github.com/stretchr/testify v1.7.0 // indirect
github.com/syndtr/goleveldb v1.0.0 // indirect
github.com/temoto/robotstxt v1.1.2 // indirect
github.com/tidwall/match v1.0.3 // indirect
github.com/tidwall/pretty v1.1.0 // indirect
github.com/ugorji/go/codec v1.2.5 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
golang.org/x/net v0.7.0 // indirect
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
golang.org/x/sys v0.5.0 // indirect
golang.org/x/text v0.7.0 // indirect
golang.org/x/tools v0.1.12 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
golang.org/x/tools v0.7.0 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/appengine v1.6.1 // indirect
google.golang.org/protobuf v1.26.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
honnef.co/go/tools v0.0.1-2020.1.4 // indirect
xorm.io/builder v0.3.9 // indirect
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect
)

+ 90
- 0
k8s/container.yaml View File

@@ -0,0 +1,90 @@
kind: Deployment
apiVersion: apps/v1
# 元数据
metadata:
name: advertisement-super
namespace: advertisement-super
labels:
app: advertisement-super
annotations:
kubesphere.io/creator: dengbiao
kubesphere.io/description: advertisement-super
# deployment主要部分
spec:
replicas: 1
selector:
matchLabels:
# 名称与上面的labels对应
app: advertisement-super
template:
metadata:
labels:
# 名称与上面的matchLabels对应
app: advertisement-super
spec:
# 声明挂载卷(将外部已存在的pvc、config等挂载进来)
volumes:
# 用于时区校正
- name: host-time
hostPath:
path: /etc/localtime
type: ''
# 将前面创建的configMap也挂载进来
- name: advertisement-super-cfg
configMap:
# 这里的名字就是前面创建的configMap的名字
name: advertisement-super-cfg
defaultMode: 420
# pvc
- name: advertisement-super-pvc # 在该部署中的名称,后面使用改名称挂载
persistentVolumeClaim:
claimName: advertisement-super-pvc # pvc的名称
# Nginx配置
- name: advertisement-super-nginx
configMap:
name: advertisement-super-nginx # 外部configMap的名称
items:
- key: go.conf
path: default.conf
containers:
# 主容器
- name: advertisement-super-container
# 镜像地址(提前打包好并推送的镜像仓库)
image: 'registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/advertisement-super:0.0.1'
ports:
- name: ad-1003
# 容器端口号(注意与golang web server启动的端口一致)
containerPort: 1003
protocol: TCP
# 将前面volume声明的需要用到的pvc、config挂载上来
volumeMounts:
- name: host-time
readOnly: true
mountPath: /etc/localtime
- name: advertisement-super-cfg # 该名字对应前面volumes声明的名字
readOnly: true
# 挂载到容器的哪个路径
mountPath: /var/zyos
imagePullPolicy: Always
# Nginx 容器
- name: nginx
image: 'registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/nginx:latest'
ports:
- name: http-80
containerPort: 80
protocol: TCP
volumeMounts:
# 时区校正
- name: host-time
readOnly: true
mountPath: /etc/localtime
# 存储卷 用于存放前端代码
- name: advertisement-super-pvc # 前面volumes声明的名称
mountPath: /usr/share/nginx/html
- name: advertisement-super-nginx # Nginx 配置
readOnly: true
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst

k8s/zyos-mall-deployment_prd.yaml → k8s/container_prd.yaml View File


+ 17
- 0
k8s/ingress.yaml View File

@@ -0,0 +1,17 @@
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: advertisement # ingress名称
namespace: advertisement
annotations:
kubesphere.io/creator: dengbiao
spec:
rules:
- host: super.advertisement.dengbiao.top # 使用的域名
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
serviceName: advertisement # 流量转发到的服务
servicePort: 80

+ 0
- 56
k8s/mall-task-prd.yaml View File

@@ -1,56 +0,0 @@
kind: Deployment
apiVersion: apps/v1
metadata:
name: mall-task
namespace: zhios
labels:
app: mall-task
annotations:
kubesphere.io/creator: wuhanqin
kubesphere.io/description: 自营商城go定时任务
spec:
replicas: 1
selector:
matchLabels:
app: mall-task
template:
metadata:
labels:
app: mall-task
spec:
volumes:
- name: host-time
hostPath:
path: /etc/localtime
type: ''
- name: mall-task-cfg1
configMap:
name: zhios-mall-task
items:
- key: task.yml
path: task.yml
defaultMode: 420
containers:
- name: container-mall-task
image: 'registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/zyos-mall-task:0.3'
resources:
limits:
cpu: '1'
memory: 1000Mi
requests:
cpu: 200m
memory: 1000Mi
volumeMounts:
- name: host-time
readOnly: true
mountPath: /etc/localtime
- name: mall-task-cfg1
readOnly: true
mountPath: /var/zyos/task.yml
subPath: task.yml
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst

+ 0
- 56
k8s/mall-task.yaml View File

@@ -1,56 +0,0 @@
kind: Deployment
apiVersion: apps/v1
metadata:
name: mall-task
namespace: dev
labels:
app: mall-task
annotations:
kubesphere.io/creator: wuhanqin
kubesphere.io/description: 自营商城go定时任务
spec:
replicas: 1
selector:
matchLabels:
app: mall-task
template:
metadata:
labels:
app: mall-task
spec:
volumes:
- name: host-time
hostPath:
path: /etc/localtime
type: ''
- name: mall-task-cfg1
configMap:
name: mall-task-cfg
items:
- key: task.yml
path: task.yml
defaultMode: 420
containers:
- name: container-mall-task
image: 'registry.cn-shenzhen.aliyuncs.com/fnuoos-prd/zyos-mall-task:0.1'
resources:
limits:
cpu: '1'
memory: 1000Mi
requests:
cpu: 200m
memory: 1000Mi
volumeMounts:
- name: host-time
readOnly: true
mountPath: /etc/localtime
- name: mall-task-cfg1
readOnly: true
mountPath: /var/zyos/task.yml
subPath: task.yml
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst

+ 15
- 8
main.go View File

@@ -1,6 +1,7 @@
package main

import (
"code.fnuoos.com/zhimeng/model.git/src"
"context"
"fmt"
"log"
@@ -11,12 +12,11 @@ import (
"time"

"applet/app/cfg"
"applet/app/db"
"applet/app/router"
"applet/app/utils"
)

//系统初始化
// 系统初始化
func init() {
cfg.InitCfg() //配置初始化
cfg.InitLog() //日志初始化
@@ -33,16 +33,23 @@ func init() {

}

// @title 智莺生活移动端接口
// @title 广告联盟-总站长平台
// @version 1.0
// @description 移动端接口
// @termsOfService 智莺生活后端组
// @contact.name sherlockwhite
// @host localhost:5000
// @description 总站长后台接口
// @termsOfService http://swagger.io/terms/

// @contact.name dengbiao
// @contact.url http://www.swagger.io/support
// @contact.email 1239118001@qq.com

// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html

// @host localhost:1001 or advertisement.dengbiao.top
// @securityDefinitions.apikey MasterID
// @in header
// @name MasterID
// @BasePath /
// @BasePath /api
func main() {
// 启动获取所有品牌
//go taoke.GetAllBrand()


Loading…
Cancel
Save