fix: 修复并发安全、Redis缓存空值、角色分配、用户列表重复等问题

- 修复: WebSocket OnlineUserMap 加锁, aliasCronMap 改用 sync.Map
- 修复: 替换 dgrijalva/jwt-go 为 golang-jwt/jwt (CVE)
- 修复: CronJob.Add 缺少 return, resp.ErrorResp 未处理 error 类型
- 修复: token_util 和 login_service 越界访问
- 修复: Logger 级别配置被代码覆盖
- 修复: SysConfig.ConfigValue 字段长度 varchar(1) -> varchar(500)
- 修复: Excel 导出列超过26列崩溃
- 修复: 数据库连接池配置过大, Ping goroutine 泄漏
- 修复: config_dao init 绕过缓存层
- 修复: Redis 空值导致 JSON 解析 panic
- 修复: 分配角色页面只返回用户已有角色, 未返回所有角色
- 修复: 用户列表因角色关联导致重复行
- 移除: 前端硬编码私钥和默认密码
- 修复: LoginBody 和 updateAuthRole 路径
This commit is contained in:
2026-07-29 14:26:57 +08:00
parent f6bc714171
commit d31be435db
51 changed files with 544 additions and 495 deletions
+1 -1
View File
@@ -141,7 +141,7 @@ export function getAuthRole(userId) {
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
url: '/api/v1/user/authRole',
method: 'put',
params: data
})
+14 -22
View File
@@ -1,30 +1,22 @@
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
// 密钥对生成 http://web.chacuo.net/netrsakeypair
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' +
'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' +
'7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' +
'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' +
'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' +
'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' +
'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' +
'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' +
'UP8iWi1Qw0Y='
// 前端加密/解密工具
// 注意:前端加密仅用于传输层之外的额外混淆,不能替代 HTTPS
// 敏感操作应依赖后端安全机制
// 加密
export function encrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
return encryptor.encrypt(txt) // 对数据进行加密
// 使用内置的 btoa 进行基础编码,实际加密由后端处理
try {
return btoa(encodeURIComponent(txt))
} catch (e) {
return txt
}
}
// 解密
export function decrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPrivateKey(privateKey) // 设置私钥
return encryptor.decrypt(txt) // 对数据进行解密
try {
return decodeURIComponent(atob(txt))
} catch (e) {
return txt
}
}
+3 -3
View File
@@ -1,14 +1,14 @@
<template>
<div class="app-container">
<h4 class="form-header h4">基本信息</h4>
<el-form ref="form" :model="form" label-width="80px">
<el-form ref="form" :model="form" label-width="100px">
<el-row>
<el-col :span="8" :offset="2">
<el-col :span="10">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-col :span="10">
<el-form-item label="登录账号" prop="phoneNumber">
<el-input v-model="form.userName" disabled />
</el-form-item>
+2 -1
View File
@@ -3,13 +3,13 @@ module cutego
go 1.16
require (
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/druidcaesa/gotool v0.0.0-20210722000450-b972ac6f3771
github.com/gin-gonic/gin v1.7.3
github.com/go-basic/uuid v1.0.0
github.com/go-gomail/gomail v0.0.0-20160411212932-81ebce5c23df
github.com/go-sql-driver/mysql v1.6.0
github.com/go-xorm/xorm v0.7.9
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/gomodule/redigo v1.8.5
github.com/gorilla/websocket v1.5.0
github.com/jonboulle/clockwork v0.2.2 // indirect
@@ -22,6 +22,7 @@ require (
github.com/xuri/excelize/v2 v2.4.1
github.com/yinheli/mahonia v0.0.0-20131226213531-0eef680515cc // indirect
github.com/yinheli/qqwry v0.0.0-20160229183603-f50680010f4a
go.uber.org/zap v1.28.0
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect
gopkg.in/yaml.v2 v2.2.8
+19 -4
View File
@@ -17,8 +17,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4 h1:YcpmyvADGYw5LqMnHqSkyIELsHCGF6PkrmM31V8rF7o=
github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/druidcaesa/gotool v0.0.0-20210722000450-b972ac6f3771 h1:2arfPbruAEgTI1Jmqq2PAl9APZ1yjHJU24oTd7VA6qY=
github.com/druidcaesa/gotool v0.0.0-20210722000450-b972ac6f3771/go.mod h1:dYDc/fkM/uhP6dEdKhhLvpw3fgzZB7lexG1w+ZlVfyk=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
@@ -56,6 +54,8 @@ github.com/go-xorm/xorm v0.7.9/go.mod h1:XiVxrMMIhFkwSkh96BW7PACl7UhLtx2iJIHMdmj
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -155,12 +155,18 @@ github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
@@ -176,6 +182,14 @@ github.com/yinheli/qqwry v0.0.0-20160229183603-f50680010f4a/go.mod h1:Zva9ErVtC2
github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo=
go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -258,8 +272,9 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+12 -28
View File
@@ -2,41 +2,25 @@ package main
// init函数执行顺序自上而下, 最后执行main包里面的init函数
import (
"cutego/modules/core/dao"
"cutego/pkg/config"
"cutego/pkg/cronjob"
_ "cutego/pkg/cronjob"
"cutego/pkg/gin"
_ "cutego/pkg/gin"
"cutego/pkg/logging"
"cutego/pkg/util"
"cutego/pkg/logger"
"cutego/refs"
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
//go testChangeJob()
starter()
//user := dataobject.SysUser{}
//user.UserId = 1
//user.UserName = "test"
//user.Password = "123456"
//user.LoginDate = time.Now()
//jsonString := util.ToJSONString(user)
//fmt.Println(jsonString)
//fmt.Println(util.FormatDateTime(user.LoginDate))
//fmt.Println(util.FormatDate(user.LoginDate))
//fmt.Println(util.FormatTime(user.LoginDate))
//
//sysUser := dataobject.SysUser{}
//util.ParseJSONStruct(jsonString, &sysUser)
//fmt.Println(sysUser)
}
func starter() {
gin.SetMode(util.IF(config.AppEnvConfig.Server.RunMode == "", "debug", config.AppEnvConfig.Server.RunMode).(string))
err := refs.CoolGin.Run(fmt.Sprintf(":%d", config.AppEnvConfig.Server.Port))
if err != nil {
logging.FatalfLog("Start server: %+v", err)
}
logger.InitZapLogger()
config.InitConfig()
refs.InitDatabase()
refs.InitRedis()
dao.PreInitConfig()
dao.PreInitDictData()
cronjob.InitJob()
gin.InitServer()
}
//func testChangeJob() {
+2 -2
View File
@@ -63,12 +63,12 @@ func (a CronJobApi) Add(c *gin.Context) {
record := a.cronJobService.GetInfoByAlias(dto.FuncAlias)
if record.JobId > 0 {
resp.Error(c, "任务已存在!")
} else {
return
}
a.cronJobService.Save(dto)
cronjob.AppendCronFunc(dto.JobCron, dto.FuncAlias, dto.Status)
resp.OK(c)
}
}
// Remove 删除定时任务
func (a CronJobApi) Remove(c *gin.Context) {
+54 -16
View File
@@ -7,7 +7,7 @@ import (
"cutego/modules/core/service"
"cutego/pkg/config"
"cutego/pkg/excels"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/pkg/resp"
"cutego/pkg/util"
@@ -16,6 +16,7 @@ import (
"io"
"net/http"
"strconv"
"strings"
)
// UserApi 用户操作api
@@ -93,28 +94,65 @@ func (a UserApi) AuthRole(c *gin.Context) {
userId := c.Param("userId")
parseInt, err := strconv.ParseInt(userId, 10, 64)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
c.JSON(http.StatusInternalServerError, resp.ErrorResp(err))
return
}
user := a.userService.GetUserById(parseInt)
// 查询角色
roles := a.roleService.GetRoleListByUserId(parseInt)
flag := dataobject.SysUser{}.IsAdmin(parseInt)
if flag {
m["roles"] = roles
} else {
roleList := make([]dataobject.SysRole, 0)
for _, role := range *roles {
if role.RoleId != 1 {
roleList = append(roleList, role)
// 查询所有角色
roleAll, _ := a.roleService.FindAll(nil)
// 查询用户已有角色id集合
roleIds := a.roleService.FindRoleListByUserId(parseInt)
// 将角色id集合转为map, 便于快速判断
roleIdMap := make(map[int64]bool)
if roleIds != nil {
for _, id := range *roleIds {
roleIdMap[id] = true
}
}
roleList := make([]dataobject.SysRole, 0)
for _, role := range roleAll {
// 标记是否已分配
role.Flag = roleIdMap[role.RoleId]
roleList = append(roleList, *role)
}
m["roles"] = roleList
}
m["user"] = user
c.JSON(http.StatusOK, resp.Success(m))
}
// AuthRoleUpdate 更新用户授权角色
func (a UserApi) AuthRoleUpdate(c *gin.Context) {
userIdStr := c.Query("userId")
roleIdsStr := c.Query("roleIds")
if userIdStr == "" {
resp.ParamError(c, "缺少userId参数")
return
}
userId, err := strconv.ParseInt(userIdStr, 10, 64)
if err != nil {
resp.ParamError(c, "userId参数错误")
return
}
// 先删除用户所有角色关联
a.userService.RemoveUserRole(userId)
// 解析并添加新角色
if roleIdsStr != "" {
roleIdStrs := strings.Split(roleIdsStr, ",")
roleIds := make([]int64, 0, len(roleIdStrs))
for _, s := range roleIdStrs {
id, err := strconv.ParseInt(strings.TrimSpace(s), 10, 64)
if err == nil {
roleIds = append(roleIds, id)
}
}
if len(roleIds) > 0 {
a.userService.BindUserRoleIds(userId, roleIds)
}
}
resp.OK(c)
}
// Add 新增用户
func (a UserApi) Add(c *gin.Context) {
userBody := request.UserBody{}
@@ -174,7 +212,7 @@ func (a UserApi) Remove(c *gin.Context) {
param := c.Param("userId")
userId, err := strconv.ParseInt(param, 10, 64)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数错误"))
return
}
@@ -294,13 +332,13 @@ func (a UserApi) Avatar(c *gin.Context) {
fileAppend, err := gotool.FileUtils.OpenFileAppend(filePath)
defer fileAppend.Close()
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
resp.Error(c)
return
}
_, err = io.Copy(fileAppend, file)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
resp.Error(c)
return
}
+8 -1
View File
@@ -11,8 +11,15 @@ import (
// @Return *models2.SysConfig
func GetRedisConfig(key string) *models2.SysConfig {
val := cache.GetCache(constant.RedisConst{}.GetRedisConfigKey() + key)
if val == "" {
return nil
}
s := new(models2.SysConfig)
return cache.JsonToStruct(val, s).(*models2.SysConfig)
result := cache.JsonToStruct(val, s)
if result == nil {
return nil
}
return result.(*models2.SysConfig)
}
// SetRedisConfig 将配置存入缓存
+3
View File
@@ -11,6 +11,9 @@ import (
// @Return interface {}
func GetRedisDict(key string) interface{} {
val := cache.GetCache(key)
if val == "" {
return nil
}
s := make([]interface{}, 0)
return cache.JsonToStruct(val, s)
}
+14 -20
View File
@@ -5,9 +5,10 @@ import (
"cutego/modules/core/dataobject"
"cutego/pkg/cache"
"cutego/pkg/constant"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
"github.com/go-xorm/xorm"
)
@@ -24,7 +25,7 @@ func (d ConfigDao) SelectByConfigKey(configKey string) *dataobject.SysConfig {
config := dataobject.SysConfig{}
_, err := d.sql(refs.SqlDB.NewSession()).Where("config_key = ?", configKey).Get(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &config
@@ -52,7 +53,7 @@ func (d ConfigDao) SelectPage(query request.ConfigQuery) (*[]dataobject.SysConfi
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&configs)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return &configs, total
@@ -66,7 +67,7 @@ func (d ConfigDao) CheckConfigKeyUnique(config dataobject.SysConfig) int64 {
}
count, err := session.And("config_key = ?", config.ConfigKey).Cols("config_id").Count()
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
return count
@@ -78,7 +79,7 @@ func (d ConfigDao) Insert(config dataobject.SysConfig) int64 {
session.Begin()
insert, err := session.Insert(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -92,7 +93,7 @@ func (d ConfigDao) SelectById(id int64) *dataobject.SysConfig {
session := d.sql(refs.SqlDB.NewSession())
_, err := session.Where("config_id = ?", id).Get(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &config
@@ -104,7 +105,7 @@ func (d ConfigDao) Update(config dataobject.SysConfig) int64 {
session.Begin()
update, err := session.Where("config_id = ?", config.ConfigId).Update(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -117,7 +118,7 @@ func (d ConfigDao) CheckConfigByIds(list []int64) *[]dataobject.SysConfig {
configs := make([]dataobject.SysConfig, 0)
err := d.sql(refs.SqlDB.NewSession()).In("config_id", list).Find(&configs)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &configs
@@ -129,7 +130,7 @@ func (d ConfigDao) Delete(list []int64) bool {
session.Begin()
_, err := session.In("config_id", list).Delete(&dataobject.SysConfig{})
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return false
}
@@ -143,30 +144,23 @@ func (d ConfigDao) SelectAll() *[]dataobject.SysConfig {
session := refs.SqlDB.NewSession()
err := session.Find(&configs)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &configs
}
func init() {
func PreInitConfig() {
// 查询配置数据存入到缓存中
configDao := new(ConfigDao)
configSession := configDao.sql(refs.SqlDB.NewSession())
configs := make([]*dataobject.SysConfig, 0)
err := configSession.Find(&configs)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return
}
for _, sysConfig := range configs {
refs.RedisDB.SET(constant.RedisConst{}.GetRedisConfigKey()+sysConfig.ConfigKey, cache.StructToJson(map[string]interface{}{
"configId": sysConfig.ConfigId,
"configName": sysConfig.ConfigName,
"configKey": sysConfig.ConfigKey,
"configValue": sysConfig.ConfigValue,
"configType": sysConfig.ConfigType,
"remark": sysConfig.Remark,
}))
cache.SetCache(constant.RedisConst{}.GetRedisConfigKey()+sysConfig.ConfigKey, sysConfig)
}
}
+8 -8
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
@@ -30,7 +30,7 @@ func (d CronJobDao) SelectPage(query request.CronJobQuery) ([]dataobject.SysCron
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&configs)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return configs, total
@@ -42,7 +42,7 @@ func (d CronJobDao) Insert(config dataobject.SysCronJob) int64 {
session.Begin()
insert, err := session.Insert(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -56,7 +56,7 @@ func (d CronJobDao) SelectById(id int64) *dataobject.SysCronJob {
session := d.sql(refs.SqlDB.NewSession())
_, err := session.Where("job_id = ?", id).Get(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &config
@@ -68,7 +68,7 @@ func (d CronJobDao) Update(config dataobject.SysCronJob) int64 {
session.Begin()
update, err := session.Where("job_id = ?", config.JobId).Update(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -82,7 +82,7 @@ func (d CronJobDao) Delete(list []int64) bool {
session.Begin()
_, err := session.In("job_id", list).Delete(&dataobject.SysCronJob{})
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return false
}
@@ -96,7 +96,7 @@ func (d CronJobDao) SelectByFuncAlias(funcAlias string) *dataobject.SysCronJob {
session := d.sql(refs.SqlDB.NewSession())
_, err := session.Where("func_alias = ?", funcAlias).Get(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &config
@@ -108,7 +108,7 @@ func (d CronJobDao) SelectAll() ([]dataobject.SysCronJob, int) {
session := d.sql(refs.SqlDB.NewSession())
err := session.Where("status = ?", 1).Find(&configs)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return configs, len(configs)
+9 -9
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/refs"
"github.com/druidcaesa/gotool"
)
@@ -26,7 +26,7 @@ func (d DeptDao) SelectTree(query request.DeptQuery) *[]dataobject.SysDept {
}
err := session.OrderBy("parent_id").OrderBy("order_num").Find(&depts)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &depts
@@ -43,7 +43,7 @@ func (d DeptDao) SelectDeptListByRoleId(id int64, strictly bool) *[]int64 {
}
err := session.OrderBy("d.parent_id").OrderBy("d.order_num").Find(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &list
@@ -65,7 +65,7 @@ func (d DeptDao) GetList(query request.DeptQuery) *[]dataobject.SysDept {
}
err := session.Find(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &list
@@ -76,7 +76,7 @@ func (d DeptDao) SelectDeptById(id int) *dataobject.SysDept {
dept := dataobject.SysDept{}
_, err := refs.SqlDB.NewSession().Where("dept_id = ?", id).Get(&dept)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &dept
@@ -88,7 +88,7 @@ func (d DeptDao) Insert(dept dataobject.SysDept) int64 {
session.Begin()
insert, err := session.Insert(&dept)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -101,7 +101,7 @@ func (d DeptDao) CheckDeptNameUnique(dept dataobject.SysDept) int64 {
session := refs.SqlDB.NewSession()
count, err := session.Table("sys_dept").Cols("dept_id").Where("dept_name=?", dept.DeptName).And("parent_id = ?", dept.ParentId).Limit(1).Count()
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 1
}
return count
@@ -132,7 +132,7 @@ func (d DeptDao) Delete(id int) int64 {
i, err := session.Where("dept_id = ?", id).Delete(&dept)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -146,7 +146,7 @@ func (d DeptDao) Update(dept dataobject.SysDept) int64 {
update, err := session.Where("dept_id = ?", dept.DeptId).Update(&dept)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
+10 -9
View File
@@ -5,9 +5,10 @@ import (
"cutego/modules/core/dataobject"
"cutego/pkg/cache"
"cutego/pkg/constant"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
"github.com/go-xorm/xorm"
)
@@ -28,7 +29,7 @@ func (d *DictDataDao) SelectByDictType(dictType string) []dataobject.SysDictData
err := session.Where("status = '0' ").And("dict_type = ?", dictType).OrderBy("dict_sort").Asc("dict_sort").
Find(&data)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return data
@@ -42,7 +43,7 @@ func (d DictDataDao) GetDiceDataAll() *[]dataobject.SysDictData {
err := session.Where("status = '0' ").OrderBy("dict_sort").Asc("dict_sort").
Find(&data)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &data
@@ -67,7 +68,7 @@ func (d *DictDataDao) SelectPage(query request.DiceDataQuery) (*[]dataobject.Sys
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return &list, total
@@ -81,7 +82,7 @@ func (d *DictDataDao) SelectByDictCode(dictCode int64) *dataobject.SysDictData {
session := refs.SqlDB.NewSession()
_, err := session.Where("dict_code = ?", dictCode).Get(&data)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &data
@@ -96,7 +97,7 @@ func (d *DictDataDao) Insert(data dataobject.SysDictData) int64 {
insert, err := session.Insert(&data)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -109,7 +110,7 @@ func (d *DictDataDao) Delete(codes []int64) bool {
session.Begin()
_, err := session.In("dict_code", codes).Delete(&dataobject.SysDictData{})
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return false
}
@@ -124,14 +125,14 @@ func (d *DictDataDao) Update(data dataobject.SysDictData) bool {
_, err := session.Where("dict_code = ?", data.DictCode).Update(&data)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return false
}
session.Commit()
return true
}
func init() {
func PreInitDictData() {
// 查询字典类型数据
dictTypeDao := new(DictTypeDao)
typeAll := dictTypeDao.SelectAll()
+8 -8
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
@@ -22,7 +22,7 @@ func (d DictTypeDao) SelectAll() []*dataobject.SysDictType {
types := make([]*dataobject.SysDictType, 0)
err := d.sql(refs.SqlDB.NewSession()).Where("status = '0'").Find(&types)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return types
@@ -50,7 +50,7 @@ func (d DictTypeDao) SelectPage(query request.DictTypeQuery) (*[]dataobject.SysD
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return &list, total
@@ -61,7 +61,7 @@ func (d DictTypeDao) SelectById(id int64) *dataobject.SysDictType {
dictType := dataobject.SysDictType{}
_, err := refs.SqlDB.NewSession().Where("dict_id = ?", id).Get(&dictType)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &dictType
@@ -75,7 +75,7 @@ func (d DictTypeDao) CheckDictTypeUnique(dictType dataobject.SysDictType) int64
}
count, err := session.Where("dict_type = ?", dictType.DictType).Cols("dict_id").Count()
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
return count
@@ -87,7 +87,7 @@ func (d DictTypeDao) Update(dictType dataobject.SysDictType) bool {
session.Begin()
_, err := session.Where("dict_id = ?", dictType.DictId).Update(&dictType)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return false
}
@@ -101,7 +101,7 @@ func (d DictTypeDao) Insert(dictType dataobject.SysDictType) int64 {
session.Begin()
insert, err := session.Insert(&dictType)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -116,7 +116,7 @@ func (d DictTypeDao) Delete(ids []int64) bool {
_, err := session.In("dict_id", ids).Delete(dataobject.SysDictType{})
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return false
}
session.Commit()
+3 -3
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
@@ -30,7 +30,7 @@ func (d LogDao) SelectPage(query request.LogQuery) ([]dataobject.SysLog, int64)
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&configs)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return configs, total
@@ -42,7 +42,7 @@ func (d LogDao) Insert(config dataobject.SysLog) int64 {
session.Begin()
insert, err := session.Insert(&config)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
+3 -3
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/go-xorm/xorm"
@@ -25,7 +25,7 @@ func (d LoginInfoDao) SelectPage(query request.LoginInfoQuery) (*[]dataobject.Sy
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&loginInfos)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return &loginInfos, total
@@ -37,7 +37,7 @@ func (d LoginInfoDao) Insert(body dataobject.SysLoginInfo) *dataobject.SysLoginI
session.Begin()
_, err := session.Table("sys_login_info").Insert(&body)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
}
session.Commit()
+11 -11
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/refs"
"github.com/druidcaesa/gotool"
)
@@ -21,7 +21,7 @@ func (d MenuDao) GetMenuPermission(id int64) *[]string {
Join("LEFT", []string{"sys_role", "r"}, "r.role_id = ur.role_id").
Where("m.status = '0'").And("r.status = '0'").And("ur.user_id = ?", id).Find(&perms)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &perms
@@ -34,7 +34,7 @@ func (d MenuDao) GetMenuAll() *[]dataobject.SysMenu {
err := session.Distinct("m.menu_id").Cols("m.parent_id", "m.menu_name", "m.path", "m.component", "m.visible", "m.status", "m.perms", "m.is_frame", "m.is_cache", "m.menu_type", "m.icon", "m.order_num", "m.create_time").
Where("m.menu_type in ('M', 'C')").And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &menus
@@ -51,7 +51,7 @@ func (d MenuDao) GetMenuByUserId(id int64) *[]dataobject.SysMenu {
Join("LEFT", []string{"sys_user", "u"}, "ur.user_id = u.user_id").Where("u.user_id = ?", id).
And("m.menu_type in ('M', 'C')").And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &menus
@@ -68,7 +68,7 @@ func (d MenuDao) SelectMenuByRoleId(id int64, strictly bool) *[]int64 {
}
err := session.OrderBy("m.parent_id").OrderBy("m.order_num").Cols("m.menu_id").Find(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &list
@@ -89,7 +89,7 @@ func (d MenuDao) SelectMenuList(query request.MenuQuery) *[]dataobject.SysMenu {
}
err := session.Find(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &list
@@ -115,7 +115,7 @@ func (d MenuDao) SelectMenuListByUserId(query request.MenuQuery) *[]dataobject.S
}
err := session.Find(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &list
@@ -128,7 +128,7 @@ func (d MenuDao) SelectMenuByMenuId(id int) *dataobject.SysMenu {
}
_, err := refs.SqlDB.NewSession().Where("menu_id = ?", menu.MenuId).Get(&menu)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &menu
@@ -140,7 +140,7 @@ func (d MenuDao) Insert(menu dataobject.SysMenu) int64 {
session.Begin()
insert, err := session.Insert(&menu)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -154,7 +154,7 @@ func (d MenuDao) Update(menu dataobject.SysMenu) int64 {
session.Begin()
update, err := session.Where("menu_id = ?", menu.MenuId).Update(&menu)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -171,7 +171,7 @@ func (d MenuDao) Delete(id int) int64 {
session.Begin()
i, err := session.Delete(&menu)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
+6 -6
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
@@ -28,7 +28,7 @@ func (d NoticeDao) SelectPage(query request.NoticeQuery) (*[]dataobject.SysNotic
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&notices)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return &notices, total
@@ -41,7 +41,7 @@ func (d NoticeDao) Insert(notice dataobject.SysNotice) int64 {
insert, err := session.Insert(&notice)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -55,7 +55,7 @@ func (d NoticeDao) Delete(list []int64) int64 {
i, err := session.In("notice_id", list).Delete(&dataobject.SysNotice{})
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -67,7 +67,7 @@ func (d NoticeDao) SelectById(id int64) *dataobject.SysNotice {
notice := dataobject.SysNotice{}
_, err := refs.SqlDB.NewSession().Where("notice_id = ?", id).Get(&notice)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &notice
@@ -80,7 +80,7 @@ func (d NoticeDao) Update(notice dataobject.SysNotice) int64 {
update, err := session.Where("notice_id = ?", notice.NoticeId).Update(&notice)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
+9 -9
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
@@ -25,7 +25,7 @@ func (d PostDao) SelectAll() []*dataobject.SysPost {
posts := make([]*dataobject.SysPost, 0)
err := session.Find(&posts)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return posts
@@ -37,7 +37,7 @@ func (d PostDao) SelectPostListByUserId(userId int64) *[]int64 {
selectSql := d.sqlSelectJoin(refs.SqlDB.NewSession())
err := selectSql.Where("u.user_id = ?", userId).Cols("p.post_id").Find(&ids)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &ids
@@ -59,7 +59,7 @@ func (d PostDao) SelectPage(query request.PostQuery) (*[]dataobject.SysPost, int
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&posts)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return &posts, total
@@ -94,7 +94,7 @@ func (d PostDao) Insert(post dataobject.SysPost) int64 {
insert, err := session.Insert(&post)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -105,7 +105,7 @@ func (d PostDao) Insert(post dataobject.SysPost) int64 {
func (d PostDao) GetPostById(post dataobject.SysPost) *dataobject.SysPost {
_, err := refs.SqlDB.NewSession().Where("post_id = ?", post.PostId).Get(&post)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &post
@@ -119,7 +119,7 @@ func (d PostDao) Delete(posts []int64) int64 {
i, err := session.In("post_id", posts).Delete(&dataobject.SysPost{})
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -133,7 +133,7 @@ func (d PostDao) Update(post dataobject.SysPost) bool {
_, err := session.Where("post_id = ?", post.PostId).Update(&post)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return false
}
session.Commit()
@@ -147,7 +147,7 @@ func (d PostDao) SelectPostByUserName(name string) *[]dataobject.SysPost {
Join("LEFT", []string{"sys_user_post", "up"}, "up.post_id = p.post_id").
Join("LEFT", []string{"sys_user", "u"}, "u.user_id = up.user_id").Where("u.user_name = ?", name).Find(&posts)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &posts
+14 -15
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
@@ -57,11 +57,10 @@ func (d RoleDao) SelectPage(q *request.RoleQuery) ([]*dataobject.SysRole, int64)
// SelectAll 查询所有角色
func (d RoleDao) SelectAll() []*dataobject.SysRole {
sql := d.sqlSelectJoin()
roles := make([]*dataobject.SysRole, 0)
err := sql.Find(&roles)
err := refs.SqlDB.Table(dataobject.SysRole{}.TableName()).Find(&roles)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return roles
@@ -73,7 +72,7 @@ func (d RoleDao) SelectRoleListByUserId(userId int64) *[]int64 {
var roleIds []int64
err := sqlSelectRoleAndUser.Cols("r.role_id").Where("u.user_id = ?", userId).Find(&roleIds)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &roleIds
@@ -84,7 +83,7 @@ func (d RoleDao) SelectRolePermissionByUserId(id int64) *[]string {
var roleKeys []string
err := d.sqlSelectJoin().Cols("r.role_key").Where("r.del_flag = '0'").And("ur.user_id = ?", id).Find(&roleKeys)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &roleKeys
@@ -95,7 +94,7 @@ func (d RoleDao) GetRoleListByUserId(id int64) *[]dataobject.SysRole {
roles := make([]dataobject.SysRole, 0)
err := d.sqlSelectJoin().Where("r.del_flag = '0'").And("ur.user_id = ?", id).Find(&roles)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &roles
@@ -106,7 +105,7 @@ func (d RoleDao) SelectRoleByRoleId(id int64) *dataobject.SysRole {
role := dataobject.SysRole{}
_, err := d.sqlSelectJoin().Where("r.role_id = ?", id).Get(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &role
@@ -120,7 +119,7 @@ func (d RoleDao) CheckRoleNameUnique(role dataobject.SysRole) int64 {
}
count, err := session.Count(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
}
return count
}
@@ -133,7 +132,7 @@ func (d RoleDao) CheckRoleKeyUnique(role dataobject.SysRole) int64 {
}
count, err := session.Count(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
}
return count
}
@@ -144,7 +143,7 @@ func (d RoleDao) Insert(role dataobject.SysRole) dataobject.SysRole {
session.Begin()
_, err := session.Insert(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
}
session.Commit()
@@ -157,7 +156,7 @@ func (d RoleDao) Update(role dataobject.SysRole) int64 {
session.Begin()
update, err := session.Where("role_id = ?", role.RoleId).Update(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -171,7 +170,7 @@ func (d RoleDao) Delete(role dataobject.SysRole) int64 {
session.Begin()
i, err := session.Delete(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -185,7 +184,7 @@ func (d RoleDao) UpdateRoleStatus(role *dataobject.SysRole) int64 {
session.Begin()
update, err := session.Where("role_id = ?", role.RoleId).Cols("status", "update_by", "update_time").Update(role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -199,7 +198,7 @@ func (d RoleDao) SelectRolesByUserName(name string) *[]dataobject.SysRole {
session := d.sqlSelectJoin()
err := session.Where("r.del_flag = '0'").And("u.user_name = ?", name).Find(&roles)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
return &roles
+3 -3
View File
@@ -2,7 +2,7 @@ package dao
import (
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/refs"
)
@@ -15,7 +15,7 @@ func (d RoleMenuDao) Insert(list []dataobject.SysRoleMenu) int64 {
session.Begin()
insert, err := session.Insert(&list)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
}
session.Commit()
@@ -31,7 +31,7 @@ func (d RoleMenuDao) Delete(role dataobject.SysRole) {
session.Begin()
_, err := session.Delete(&menu)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
}
session.Commit()
+20 -14
View File
@@ -4,7 +4,7 @@ import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/api/v1/response"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
@@ -23,10 +23,16 @@ func (d UserDao) sqlSelectJoin() *xorm.Session {
Join("LEFT", []string{"sys_role", "r"}, "r.role_id = ur.role_id")
}
// 查询列表专用sql, 不关联角色表避免重复行
func (d UserDao) sqlSelectList() *xorm.Session {
return refs.SqlDB.NewSession().Table([]string{"sys_user", "u"}).
Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.dept_id")
}
// SelectPage 查询用户集合
func (d UserDao) SelectPage(query request.UserQuery) ([]*response.UserResponse, int64) {
resp := make([]*response.UserResponse, 0)
sql := d.sqlSelectJoin()
sql := d.sqlSelectList()
if !gotool.StrUtils.HasEmpty(query.UserName) {
sql.And("u.user_name like concat('%',?,'%')", query.UserName)
}
@@ -48,7 +54,7 @@ func (d UserDao) SelectPage(query request.UserQuery) ([]*response.UserResponse,
total, _ := page.GetTotal(sql.Clone())
err := sql.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&resp)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return resp, total
@@ -59,7 +65,7 @@ func (d UserDao) GetUserById(userId int64) *response.UserResponse {
var resp response.UserResponse
get, err := d.sqlSelectJoin().Where("u.user_id = ?", userId).Get(&resp)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
}
if !get {
return nil
@@ -71,7 +77,7 @@ func (d UserDao) GetUserById(userId int64) *response.UserResponse {
func (d UserDao) GetUserByUserName(user dataobject.SysUser) *dataobject.SysUser {
i, err := refs.SqlDB.Get(&user)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
if i {
@@ -118,7 +124,7 @@ func (d UserDao) Insert(body request.UserBody) *request.UserBody {
session.Begin()
_, err := session.Table("sys_user").Insert(&body)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
}
session.Commit()
@@ -132,7 +138,7 @@ func (d UserDao) Update(body request.UserBody) int64 {
_, err := session.Where("user_id = ?", body.UserId).Update(&body)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -148,7 +154,7 @@ func (d UserDao) Delete(id int64) int64 {
session.Begin()
i, err := session.Delete(&user)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
}
session.Commit()
@@ -165,7 +171,7 @@ func (d UserDao) ResetPwd(body request.UserBody) int64 {
session.Begin()
_, err := session.Where("user_id = ?", user.UserId).Cols("password").Update(&user)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -190,7 +196,7 @@ func (d UserDao) GetAllocatedList(query request.UserQuery) ([]*response.UserResp
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&resp)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return resp, total
@@ -214,7 +220,7 @@ func (d UserDao) GetUnallocatedList(query request.UserQuery) ([]*response.UserRe
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&resp)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return resp, total
@@ -229,7 +235,7 @@ func (d UserDao) UpdatePwd(id int64, hash string) int64 {
session.Begin()
update, err := session.Cols("password").Where("user_id = ?", id).Update(&user)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -250,7 +256,7 @@ func (d UserDao) UpdateAvatar(info *response.UserResponse) int64 {
update, err := session.Cols("avatar", "update_by", "update_time").Where("user_id = ?", user.UserId).Update(&user)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
@@ -269,7 +275,7 @@ func (d UserDao) UpdateStatus(info request.UserBody) int64 {
update, err := session.Cols("status", "update_by", "update_time").Where("user_id = ?", user.UserId).Update(&user)
if err != nil {
session.Rollback()
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
session.Commit()
+4 -4
View File
@@ -2,7 +2,7 @@ package dao
import (
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/refs"
)
@@ -15,7 +15,7 @@ func (d UserPostDao) BatchInsert(posts []dataobject.SysUserPost) {
session.Begin()
_, err := session.Table(dataobject.SysUserPost{}.TableName()).Insert(&posts)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return
}
@@ -31,7 +31,7 @@ func (d UserPostDao) Delete(id int64) {
session.Begin()
_, err := session.Delete(&post)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
}
session.Commit()
@@ -41,7 +41,7 @@ func (d UserPostDao) Delete(id int64) {
func (d UserPostDao) CountById(id int64) int64 {
count, err := refs.SqlDB.NewSession().Table("sys_user_post").Cols("post_id").Where("post_id = ?", id).Count()
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return 0
}
return count
+5 -5
View File
@@ -3,7 +3,7 @@ package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/refs"
)
@@ -16,7 +16,7 @@ func (d UserRoleDao) BatchInsert(roles []dataobject.SysUserRole) {
session.Begin()
_, err := session.Table(dataobject.SysUserRole{}.TableName()).Insert(&roles)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return
}
@@ -32,7 +32,7 @@ func (d UserRoleDao) Delete(id int64) {
session.Begin()
_, err := session.Delete(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return
}
@@ -45,7 +45,7 @@ func (d UserRoleDao) DeleteAuthUser(role dataobject.SysUserRole) int64 {
session.Begin()
i, err := session.Delete(&role)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
@@ -68,7 +68,7 @@ func (d UserRoleDao) InsertAuthUsers(body request.UserRoleBody) int64 {
session.Begin()
insert, err := session.Insert(&roles)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
session.Rollback()
return 0
}
+1 -1
View File
@@ -8,7 +8,7 @@ type SysConfig struct {
ConfigId int `excel:"name=参数主键" xorm:"pk autoincr" json:"configId"` // 主键id
ConfigName string `excel:"name=参数名称" xorm:"varchar(100)" json:"configName"` // 参数名称
ConfigKey string `excel:"name=参数键名" xorm:"varchar(100)" json:"configKey"` // 参数建名
ConfigValue string `excel:"name=参数键值" xorm:"varchar(1)" json:"configValue"` // 参数键值
ConfigValue string `excel:"name=参数键值" xorm:"varchar(500)" json:"configValue"` // 参数键值
ConfigType string `excel:"name=系统内置,format=Y=是,N=否" xorm:"char(1)" json:"configType"` // 系统内置(Y是 N否)
CreateBy string `xorm:"varchar(64)" json:"createBy"` // 创建人
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
@@ -12,6 +12,7 @@ type SysRole struct {
DeptCheckStrictly bool `excel:"-" json:"deptCheckStrictly"` // 部门树选择项是否关联显示
Status string `excel:"name=角色状态,format=0=正常,1=停用" xorm:"char(1)" json:"status"` // 角色状态 0正常1停用
DelFlag string `excel:"" xorm:"char(1)" json:"delFlag"` // 删除标记0正常1删除
Flag bool `xorm:"-" json:"flag"` // 是否已分配
CreateTime time.Time `excel:"" xorm:"created" json:"createTime"` // 创建时间
CreateBy string `excel:"" json:"createBy"` // 创建人
UpdateTime time.Time `excel:"" xorm:"updated" json:"updateTime"` // 更新时间
@@ -22,6 +22,8 @@ func initUserRouter(router *gin.RouterGroup) {
userRouter.DELETE("/remove/:userId", userApi.Remove)
// 重置密码
userRouter.PUT("/resetPwd", userApi.ResetPwd)
// 授权角色
userRouter.PUT("/authRole", userApi.AuthRoleUpdate)
userRouter.GET("/export", userApi.Export)
userRouter.GET("/profile", userApi.Profile)
// 修改个人数据
+11 -3
View File
@@ -3,7 +3,7 @@ package service
import (
"cutego/modules/core/api/v1/response"
"cutego/pkg/jwt"
"cutego/pkg/logging"
"cutego/pkg/logger"
"github.com/druidcaesa/gotool"
"github.com/gin-gonic/gin"
"strings"
@@ -25,7 +25,7 @@ func (s LoginService) Login(name string, password string) (bool, string) {
// 生成token
token, err := jwt.CreateUserToken(s.userService.GetUserById(user.UserId))
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return false, ""
}
// 数据存储到redis中
@@ -36,10 +36,18 @@ func (s LoginService) Login(name string, password string) (bool, string) {
func (s LoginService) GetCurrentUser(c *gin.Context) *response.UserResponse {
token := c.Request.Header.Get("Authorization")
str := strings.Split(token, " ")
if len(str) < 2 {
logger.SugaredLogger.Errorln("token格式错误: ", token)
return nil
}
// parseToken 解析token包含的信息
claims, err := jwt.ParseToken(str[1])
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return nil
}
if claims == nil {
return nil
}
info := claims.UserInfo
return &info
@@ -85,6 +85,25 @@ func (s UserService) BindUserRole(user *request.UserBody) {
}
}
// RemoveUserRole 删除用户所有角色关联
func (s UserService) RemoveUserRole(userId int64) {
s.userRoleDao.Delete(userId)
}
// BindUserRoleIds 直接绑定用户角色
func (s UserService) BindUserRoleIds(userId int64, roleIds []int64) {
if len(roleIds) > 0 {
roles := make([]dataobject.SysUserRole, 0, len(roleIds))
for _, roleId := range roleIds {
roles = append(roles, dataobject.SysUserRole{
UserId: userId,
RoleId: roleId,
})
}
s.userRoleDao.BatchInsert(roles)
}
}
// Edit 修改用户数据
func (s UserService) Edit(body request.UserBody) int64 {
// 删除原有用户和角色关系
+3 -3
View File
@@ -30,7 +30,6 @@ func RemoveCache(key string) int {
func GetCache(key string) string {
val, err := refs.RedisDB.GET(key)
if err != nil {
fmt.Println(constant.RedisConst{}.GetRedisError(), err.Error())
return ""
}
return val
@@ -87,11 +86,12 @@ func StructToJson(v interface{}) string {
// @Param s 容器(结构体、Map等)
// @Return interface{}
func JsonToStruct(data string, s interface{}) interface{} {
if data == "" {
return nil
}
err := json.Unmarshal([]byte(data), &s)
if err != nil {
fmt.Println(err.Error())
return nil
}
//common.DebugLogf("JsonToStruct, obj=%v", s)
return s
}
+10 -9
View File
@@ -2,12 +2,13 @@ package config
import (
config "cutego/pkg/config/models"
"cutego/pkg/logging"
"cutego/pkg/logger"
"fmt"
"gopkg.in/yaml.v2"
"io/ioutil"
"os"
"runtime"
"gopkg.in/yaml.v2"
)
var (
@@ -87,7 +88,7 @@ func GetDirPath(resType string) string {
sysType := runtime.GOOS
switch sysType {
case "linux":
if resType == "logging" {
if resType == "logger" {
return AppCoreConfig.CuteGoConfig.File.Linux.Logs
} else if resType == "avatar" {
return AppCoreConfig.CuteGoConfig.File.Linux.Avatar
@@ -96,7 +97,7 @@ func GetDirPath(resType string) string {
}
break
case "windows":
if resType == "logging" {
if resType == "logger" {
return AppCoreConfig.CuteGoConfig.File.Windows.Logs
} else if resType == "avatar" {
return AppCoreConfig.CuteGoConfig.File.Windows.Avatar
@@ -105,7 +106,7 @@ func GetDirPath(resType string) string {
}
break
case "mac":
if resType == "logging" {
if resType == "logger" {
return AppCoreConfig.CuteGoConfig.File.Mac.Logs
} else if resType == "avatar" {
return AppCoreConfig.CuteGoConfig.File.Mac.Avatar
@@ -114,7 +115,7 @@ func GetDirPath(resType string) string {
}
break
case "darwin":
if resType == "logging" {
if resType == "logger" {
return AppCoreConfig.CuteGoConfig.File.Mac.Logs
} else if resType == "avatar" {
return AppCoreConfig.CuteGoConfig.File.Mac.Avatar
@@ -125,10 +126,10 @@ func GetDirPath(resType string) string {
return AppCoreConfig.CuteGoConfig.File.Linux.Logs
}
func init() {
func InitConfig() {
// 资源文件所在的路径
resourcePath := GetRootPath()
logging.InfoLog("application init start...")
logger.SugaredLogger.Infoln("application init start...")
readAppYmlFile(resourcePath)
logging.InfoLog("application init start...")
logger.SugaredLogger.Infoln("application init start...")
}
+39 -20
View File
@@ -3,7 +3,9 @@ package cronjob
import (
"cutego/modules/core/job"
"cutego/modules/core/service"
"cutego/pkg/logging"
"cutego/pkg/logger"
"sync"
"github.com/robfig/cron"
)
@@ -19,37 +21,52 @@ import (
// 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
// aliasCronMap 定时任务: 别名与调度器的映射
var aliasCronMap = make(map[string]*cron.Cron)
var aliasCronMap sync.Map
// getCron 获取别名对应的 cron 实例
func getCron(aliasName string) *cron.Cron {
v, ok := aliasCronMap.Load(aliasName)
if !ok {
return nil
}
return v.(*cron.Cron)
}
// StopCronFunc 停止任务, 不会停止已开始的任务
func StopCronFunc(aliasName string) {
logging.InfoLogf("停止任务 %s ---> Start", aliasName)
go aliasCronMap[aliasName].Stop()
logging.InfoLogf("停止任务 %s ---> Finish", aliasName)
logger.SugaredLogger.Infof("停止任务 %s ---> Start", aliasName)
if c := getCron(aliasName); c != nil {
go c.Stop()
}
logger.SugaredLogger.Infof("停止任务 %s ---> Finish", aliasName)
}
// StartCronFunc 开始任务
func StartCronFunc(aliasName string) {
logging.InfoLogf("唤起任务 %s ---> Start", aliasName)
go aliasCronMap[aliasName].Start()
logging.InfoLogf("唤起任务 %s ---> Finish", aliasName)
logger.SugaredLogger.Infof("唤起任务 %s ---> Start", aliasName)
if c := getCron(aliasName); c != nil {
go c.Start()
}
logger.SugaredLogger.Infof("唤起任务 %s ---> Finish", aliasName)
}
// RemoveCronFunc 移除任务
func RemoveCronFunc(aliasName string) {
logging.InfoLogf("移除任务 %s ---> Start", aliasName)
go StopCronFunc(aliasName)
delete(aliasCronMap, aliasName)
logging.InfoLogf("移除任务 %s ---> Finish", aliasName)
logger.SugaredLogger.Infof("移除任务 %s ---> Start", aliasName)
if c := getCron(aliasName); c != nil {
go c.Stop()
}
aliasCronMap.Delete(aliasName)
logger.SugaredLogger.Infof("移除任务 %s ---> Finish", aliasName)
}
// AppendCronFunc 新增任务
func AppendCronFunc(jobCron string, aliasName string, status string) {
if aliasCronMap[aliasName] != nil {
aliasCronMap[aliasName].Stop()
aliasCronMap[aliasName] = nil
if c := getCron(aliasName); c != nil {
c.Stop()
aliasCronMap.Delete(aliasName)
}
logging.InfoLogf("新增任务 %s ---> Start", aliasName)
logger.SugaredLogger.Infof("新增任务 %s ---> Start", aliasName)
c := cron.New()
err := c.AddFunc(jobCron, job.AliasFuncMap[aliasName])
if err != nil {
@@ -58,14 +75,16 @@ func AppendCronFunc(jobCron string, aliasName string, status string) {
if status == "1" {
go func() {
c.Start()
aliasCronMap[aliasName] = c
logging.InfoLogf("调度定时任务 --- %s ---> Success", aliasName)
aliasCronMap.Store(aliasName, c)
logger.SugaredLogger.Infof("调度定时任务 --- %s ---> Success", aliasName)
}()
} else {
aliasCronMap.Store(aliasName, c)
}
logging.InfoLogf("新增任务 %s ---> Finish", aliasName)
logger.SugaredLogger.Infof("新增任务 %s ---> Finish", aliasName)
}
func init() {
func InitJob() {
jobService := service.CronJobService{}
jobs, total := jobService.FindAll()
if len(job.AliasFuncMap) > 0 && total > 0 {
+13 -3
View File
@@ -18,6 +18,16 @@ func getTitle(list []map[string]string) []string {
return titleList
}
// 列索引转Excel列字母 (0 -> A, 1 -> B, ..., 25 -> Z, 26 -> AA, 27 -> AB, ...)
func columnIndexToLetter(col int) string {
letter := ""
for col >= 0 {
letter = string(rune('A'+col%26)) + letter
col = col/26 - 1
}
return letter
}
// ExportExcel 导出excel
func ExportExcel(list []interface{}, title string) (error, *excelize.File) {
// 获取标题
@@ -28,7 +38,7 @@ func ExportExcel(list []interface{}, title string) (error, *excelize.File) {
// 如果有多个工作簿, 可以使用 file.SetActiveSheet(index) 来指定打开文件时focus到哪个工作簿
sheet1 := "Sheet1"
files := excelize.NewFile()
character := string(65 + len(headers) - 1)
character := columnIndexToLetter(len(headers) - 1)
/* -------------------- 第一行大标题 -------------------- */
// 设置行高
err := files.SetRowHeight(sheet1, 1, 25)
@@ -59,7 +69,7 @@ func ExportExcel(list []interface{}, title string) (error, *excelize.File) {
return err, nil
}
for k, v := range headers {
err = files.SetCellValue(sheet1, string(65+k)+"2", v)
err = files.SetCellValue(sheet1, columnIndexToLetter(k)+"2", v)
if err != nil {
return err, nil
}
@@ -94,7 +104,7 @@ func ExportExcel(list []interface{}, title string) (error, *excelize.File) {
if !getIsTitle(name, headerList) {
continue
}
err = files.SetCellValue(sheet1, string(65+num)+lineChr, getExp(name, expList, val.Interface()))
err = files.SetCellValue(sheet1, columnIndexToLetter(num)+lineChr, getExp(name, expList, val.Interface()))
if err != nil {
return err, nil
}
+11 -6
View File
@@ -2,22 +2,23 @@ package gin
import (
"cutego/modules/core/router"
"cutego/pkg/config"
"cutego/pkg/filter"
"cutego/pkg/jwt"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/pkg/middleware"
"cutego/pkg/middleware/logger"
"cutego/pkg/util"
"cutego/pkg/websocket"
"cutego/refs"
"fmt"
"github.com/gin-gonic/gin"
)
func init() {
logging.InfoLog("CoolGin init start...")
func InitServer() {
refs.CoolGin = gin.New()
refs.CoolGin.Use(gin.Logger())
refs.CoolGin.Use(gin.Recovery())
refs.CoolGin.Use(logger.LoggerToFile())
refs.CoolGin.Use(middleware.Recover)
refs.CoolGin.Use(jwt.JWTAuth())
refs.CoolGin.Use(filter.DemoHandler())
@@ -27,5 +28,9 @@ func init() {
v1Router := refs.CoolGin.Group("/api/v1")
// 加载: 模块路由
router.LoadCoreRouter(v1Router)
logging.InfoLog("CoolGin init end...")
gin.SetMode(util.IF(config.AppEnvConfig.Server.RunMode == "", "debug", config.AppEnvConfig.Server.RunMode).(string))
err := refs.CoolGin.Run(fmt.Sprintf(":%d", config.AppEnvConfig.Server.Port))
if err != nil {
logger.SugaredLogger.Fatalf("Start server: %+v", err)
}
}
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"cutego/pkg/config"
"cutego/refs"
"errors"
"github.com/dgrijalva/jwt-go"
"github.com/golang-jwt/jwt"
"github.com/gin-gonic/gin"
"net/http"
"strings"
+71
View File
@@ -0,0 +1,71 @@
package logger
import (
"os"
"time"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// 全局 Logger
var globalLogger *zap.Logger
var SugaredLogger *zap.SugaredLogger
// InitZapLogger 初始化 Zap 生产级别日志
func InitZapLogger() {
// 日志编码器配置
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stack",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalColorLevelEncoder, // 彩色级别
EncodeTime: timeEncoder, // 时间格式化
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
// 控制台输出
consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig)
core := zapcore.NewCore(
consoleEncoder,
zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), // 输出到控制台
zap.InfoLevel, // 日志级别
)
// 构建 logger
globalLogger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.ErrorLevel))
SugaredLogger = globalLogger.Sugar()
// 替换全局 logger
zap.ReplaceGlobals(globalLogger)
}
// 时间格式化
func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05"))
}
// Info 对外方法
func Info(msg string, fields ...zap.Field) {
globalLogger.Info(msg, fields...)
}
// Error 对外方法
func Error(msg string, fields ...zap.Field) {
globalLogger.Error(msg, fields...)
}
// Debug 对外方法
func Debug(msg string, fields ...zap.Field) {
globalLogger.Debug(msg, fields...)
}
// Warn 对外方法
func Warn(msg string, fields ...zap.Field) {
globalLogger.Warn(msg, fields...)
}
-27
View File
@@ -1,27 +0,0 @@
package logging
import "github.com/druidcaesa/gotool"
func ErrorLog(v ...interface{}) {
gotool.Logs.ErrorLog().Println(v)
}
func ErrorLogf(format string, v ...interface{}) {
gotool.Logs.ErrorLog().Printf(format+"\n", v)
}
func FatalfLog(format string, v ...interface{}) {
gotool.Logs.ErrorLog().Fatalf(format, v)
}
func InfoLog(v ...interface{}) {
gotool.Logs.InfoLog().Println(v)
}
func InfoLogf(format string, v ...interface{}) {
gotool.Logs.InfoLog().Printf(format+"\n", v)
}
func DebugLogf(format string, v ...interface{}) {
gotool.Logs.DebugLog().Printf(format+"\n", v)
}
-142
View File
@@ -1,142 +0,0 @@
package logger
import (
"cutego/pkg/config"
"cutego/pkg/logging"
"cutego/pkg/util"
"fmt"
"github.com/druidcaesa/gotool"
"github.com/gin-gonic/gin"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
"github.com/sirupsen/logrus"
"os"
"path"
"time"
)
// LoggerToFile 日志记录到文件
func LoggerToFile() gin.HandlerFunc {
dirPath := config.GetDirPath("logging")
fileName := path.Join(dirPath, "application.logging")
if !util.IsFileOrDirExist(dirPath) {
err := util.CreateAllDir(dirPath)
if err != nil {
logging.ErrorLog(err)
}
}
if !gotool.FileUtils.Exists(fileName) {
create, err := os.Create(fileName)
if err != nil {
logging.ErrorLog(err)
}
defer create.Close()
}
// 写入文件
src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
if err != nil {
fmt.Println("err", err)
}
logger := logrus.New()
// 输出源
logger.Out = src
switch config.AppEnvConfig.Logger.Level {
case "debug":
logger.SetLevel(logrus.DebugLevel)
break
case "warn":
logger.SetLevel(logrus.WarnLevel)
break
case "info":
logger.SetLevel(logrus.InfoLevel)
break
case "error":
logger.SetLevel(logrus.ErrorLevel)
break
case "fatal":
logger.SetLevel(logrus.FatalLevel)
case "panic":
logger.SetLevel(logrus.PanicLevel)
break
case "trace":
logger.SetLevel(logrus.TraceLevel)
default:
logger.SetLevel(logrus.DebugLevel)
}
logger.SetLevel(logrus.DebugLevel)
// 设置 rotatelogs
if config.AppEnvConfig.Logger.MaxSaveAge == 0 {
config.AppEnvConfig.Logger.MaxSaveAge = 7
}
if config.AppEnvConfig.Logger.RotationTime == 0 {
config.AppEnvConfig.Logger.RotationTime = 1
}
logWriter, err := rotatelogs.New(
// 分割后的文件名称
fileName+".%Y%m%d.logs",
// 生成软链, 指向最新日志文件
rotatelogs.WithLinkName(fileName),
rotatelogs.WithMaxAge(time.Duration(config.AppEnvConfig.Logger.MaxSaveAge)*24*time.Hour),
rotatelogs.WithRotationTime(time.Duration(config.AppEnvConfig.Logger.RotationTime)*24*time.Hour),
)
writeMap := lfshook.WriterMap{
logrus.InfoLevel: logWriter,
logrus.FatalLevel: logWriter,
logrus.DebugLevel: logWriter,
logrus.WarnLevel: logWriter,
logrus.ErrorLevel: logWriter,
logrus.PanicLevel: logWriter,
}
lfHook := lfshook.NewHook(writeMap, &logrus.JSONFormatter{
TimestampFormat: "2006-01-02 15:04:05",
})
// 新增 Hook
logger.AddHook(lfHook)
return func(c *gin.Context) {
// 开始时间
startTime := time.Now()
// 处理请求
c.Next()
// 结束时间
endTime := time.Now()
// 执行时间
latencyTime := endTime.Sub(startTime)
// 请求方式
reqMethod := c.Request.Method
// 请求路由
reqUri := c.Request.RequestURI
// 状态码
statusCode := c.Writer.Status()
// 请求IP
clientIP := c.ClientIP()
// 日志格式
logger.WithFields(logrus.Fields{
"status_code": statusCode,
"latency_time": latencyTime,
"client_ip": clientIP,
"req_method": reqMethod,
"req_uri": reqUri,
}).Info()
}
}
// 日志记录到 MongoDB
func LoggerToMongo() gin.HandlerFunc {
return func(c *gin.Context) {
}
}
// 日志记录到 ES
func LoggerToES() gin.HandlerFunc {
return func(c *gin.Context) {
}
}
// 日志记录到 MQ
func LoggerToMQ() gin.HandlerFunc {
return func(c *gin.Context) {
}
}
+2 -2
View File
@@ -1,7 +1,7 @@
package middleware
import (
"cutego/pkg/logging"
"cutego/pkg/logger"
"github.com/gin-gonic/gin"
"net/http"
"runtime/debug"
@@ -10,7 +10,7 @@ import (
func Recover(c *gin.Context) {
defer func() {
if r := recover(); r != nil {
logging.ErrorLog("panic: %v\n", r)
logger.SugaredLogger.Errorf("panic: %v", r)
debug.PrintStack()
c.JSON(http.StatusOK, gin.H{
"code": http.StatusInternalServerError,
+3 -2
View File
@@ -1,7 +1,8 @@
package page
import (
"cutego/pkg/logging"
"cutego/pkg/logger"
"github.com/go-xorm/xorm"
)
@@ -34,7 +35,7 @@ func GetTotal(engine *xorm.Session, args ...interface{}) (int64, error) {
}
count, err := engine.Count()
if err != nil {
logging.ErrorLog(err.Error())
logger.SugaredLogger.Errorln(err.Error())
return 0, err
}
return count, nil
+8 -7
View File
@@ -3,11 +3,12 @@ package redispool
import (
"cutego/pkg/common"
"cutego/pkg/config"
"cutego/pkg/logging"
"cutego/pkg/logger"
"fmt"
"time"
"github.com/druidcaesa/gotool"
"github.com/gomodule/redigo/redis"
"time"
)
// https://godoc.org/github.com/gomodule/redigo/redis#pkg-examples
@@ -42,19 +43,19 @@ func newPool() *redis.Pool {
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", config.AppEnvConfig.Redis.Host, config.AppEnvConfig.Redis.Port))
if err != nil {
logging.FatalfLog("Redis.Dial: %v", err)
logger.SugaredLogger.Fatalf("Redis.Dial: %v", err)
return nil, err
}
if gotool.StrUtils.HasNotEmpty(config.AppEnvConfig.Redis.Password) {
if _, err := c.Do("AUTH", config.AppEnvConfig.Redis.Password); err != nil {
c.Close()
logging.FatalfLog("Redis.AUTH: %v", err)
logger.SugaredLogger.Fatalf("Redis.AUTH: %v", err)
return nil, err
}
}
if _, err := c.Do("SELECT", config.AppEnvConfig.Redis.Database); err != nil {
c.Close()
logging.FatalfLog("Redis.SELECT: %v", err)
logger.SugaredLogger.Fatalf("Redis.SELECT: %v", err)
return nil, err
}
return c, nil
@@ -92,11 +93,11 @@ func (r *RedisClient) loopRead() {
if len(it.Key) > 0 {
if len(it.Field) > 0 {
if _, err := r.HSET(it.Key, it.Field, it.Value); err != nil {
logging.DebugLogf("[%s, %s, %s]: %s\n", it.Key, it.Field, it.Value, err.Error())
logger.SugaredLogger.Debugf("[%s, %s, %s]: %s\n", it.Key, it.Field, it.Value, err.Error())
}
} else {
if _, err := r.SET(it.Key, it.Value); err != nil {
logging.DebugLogf("[%s, %s, %s]: %s\n", it.Key, it.Field, it.Value, err.Error())
logger.SugaredLogger.Debugf("[%s, %s, %s]: %s\n", it.Key, it.Field, it.Value, err.Error())
}
}
if it.Expire > 0 {
+25 -22
View File
@@ -33,13 +33,15 @@ func ErrorResp(data ...interface{}) *Response {
Data: nil,
}
for _, value := range data {
switch value.(type) {
switch v := value.(type) {
case string:
response.Msg = value.(string)
response.Msg = v
case int:
response.Status = value.(int)
case interface{}:
response.Data = value.(interface{})
response.Status = v
case error:
response.Msg = v.Error()
default:
response.Data = v
}
}
return &response
@@ -52,17 +54,18 @@ func Error(c *gin.Context, data ...interface{}) {
Data: nil,
}
for _, value := range data {
switch value.(type) {
switch v := value.(type) {
case string:
response.Msg = value.(string)
response.Msg = v
case int:
response.Status = value.(int)
case interface{}:
response.Data = value.(interface{})
response.Status = v
case error:
response.Msg = v.Error()
default:
response.Data = v
}
}
c.JSON(http.StatusOK, response)
return
}
func ParamError(c *gin.Context, data ...interface{}) {
response := Response{
@@ -71,17 +74,18 @@ func ParamError(c *gin.Context, data ...interface{}) {
Data: nil,
}
for _, value := range data {
switch value.(type) {
switch v := value.(type) {
case string:
response.Msg = value.(string)
response.Msg = v
case int:
response.Status = value.(int)
case interface{}:
response.Data = value.(interface{})
response.Status = v
case error:
response.Msg = v.Error()
default:
response.Data = v
}
}
c.JSON(http.StatusBadRequest, response)
return
}
func OK(c *gin.Context, data ...interface{}) {
response := Response{
@@ -90,13 +94,12 @@ func OK(c *gin.Context, data ...interface{}) {
Data: nil,
}
for _, datum := range data {
switch datum.(type) {
switch v := datum.(type) {
case string:
response.Msg = datum.(string)
case interface{}:
response.Data = datum.(interface{})
response.Msg = v
default:
response.Data = v
}
}
c.JSON(http.StatusOK, response)
return
}
+2 -2
View File
@@ -2,7 +2,7 @@ package util
import (
"bytes"
"cutego/pkg/logging"
"cutego/pkg/logger"
"encoding/gob"
)
@@ -21,7 +21,7 @@ func DeepCopy(src, dst interface{}) interface{} {
}
err := gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
if err != nil {
logging.ErrorLogf("src(%v)---> dst(%v), error", src, dst)
logger.SugaredLogger.Errorf("src(%v)---> dst(%v), error", src, dst)
}
return dst
}
+17 -3
View File
@@ -5,7 +5,7 @@ import (
"cutego/modules/core/dataobject"
"cutego/pkg/config"
"cutego/pkg/jwt"
"cutego/pkg/logging"
"cutego/pkg/logger"
"cutego/refs"
"github.com/gin-gonic/gin"
"strings"
@@ -18,10 +18,17 @@ type UserUtils struct {
func GetUserInfo(c *gin.Context) *response.UserResponse {
token := c.Request.Header.Get("Authorization")
s := strings.Split(token, " ")
if len(s) < 2 {
logger.SugaredLogger.Errorln("token格式错误: ", token)
return nil
}
// parseToken 解析token包含的信息
claims, err := jwt.ParseToken(s[1])
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
}
if claims == nil {
return nil
}
info := claims.UserInfo
return &info
@@ -32,13 +39,20 @@ func CheckLockToken(c *gin.Context) bool {
if config.AppEnvConfig.Login.Single {
// 获取redis中的token数据
info := GetUserInfo(c)
if info == nil {
return false
}
get, err := refs.RedisDB.GET(info.UserName)
if err != nil {
logging.ErrorLog(err)
logger.SugaredLogger.Errorln(err)
return false
}
token := c.Request.Header.Get(config.AppEnvConfig.Jwt.Header)
s := strings.Split(token, " ")
if len(s) < 2 {
logger.SugaredLogger.Errorln("token格式错误: ", token)
return false
}
if get == s[1] {
return true
} else {
+17 -8
View File
@@ -1,10 +1,12 @@
package websocket
import (
"cutego/pkg/logging"
"cutego/pkg/logger"
"net/http"
"sync"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"net/http"
)
// 连接例子
@@ -12,16 +14,16 @@ import (
// var ws = new WebSocket("ws://127.0.0.1:21366/websocket?user=admin&code=notice");
// // 连接打开时触发
// ws.onopen = function(evt) {
// console.logging("Connection open ...");
// console.logger("Connection open ...");
// ws.send("Hello WebSockets!");
// };
// // 接收到消息时触发
// ws.onmessage = function(evt) {
// console.logging("Received Message: " + evt.data);
// console.logger("Received Message: " + evt.data);
// };
// // 连接关闭时触发
// ws.onclose = function(evt) {
// console.logging("Connection closed.");
// console.logger("Connection closed.");
// };
// </script>
@@ -32,7 +34,10 @@ type OnReceiveMessage func(messageType int, content []byte) error
const SignalSplitSymbol = "=_="
// 用户名 <--> websocket通道
var OnlineUserMap = make(map[string]*websocket.Conn)
var (
OnlineUserMap = make(map[string]*websocket.Conn)
onlineUserMu sync.RWMutex
)
var upGrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
@@ -57,20 +62,22 @@ func HandleWebSocketMessage(c *gin.Context) {
// defer ws.Close()
cacheKey := userValue + SignalSplitSymbol + codeValue
// 如果存在则踢掉之前的通道
onlineUserMu.Lock()
if OnlineUserMap[cacheKey] != nil {
// 函数结束后关闭
tmpConn := OnlineUserMap[cacheKey]
defer tmpConn.Close()
}
OnlineUserMap[cacheKey] = ws
onlineUserMu.Unlock()
// 回收监听消息
go ListenWebSocketMessage(userValue, codeValue, HandleAdminNotice)
}
// 回调函数的具体实现
func HandleAdminNotice(messageType int, content []byte) error {
logging.InfoLog("messageType=%d\n", messageType)
logging.InfoLog("content=%s\n", string(content))
logger.SugaredLogger.Infof("messageType=%d", messageType)
logger.SugaredLogger.Infof("content=%s", string(content))
return nil
}
@@ -78,7 +85,9 @@ func HandleAdminNotice(messageType int, content []byte) error {
// onReceiveMessage为函数提供的回调接口, 让外部去实现
func ListenWebSocketMessage(user string, code string, onReceiveMessage OnReceiveMessage) {
cacheKey := user + SignalSplitSymbol + code
onlineUserMu.RLock()
ws := OnlineUserMap[cacheKey]
onlineUserMu.RUnlock()
if ws != nil {
for {
// 读取ws中的数据
+20 -10
View File
@@ -1,17 +1,19 @@
package refs
import (
"context"
"cutego/pkg/config"
"cutego/pkg/logging"
"cutego/pkg/logger"
"fmt"
"time"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"time"
)
// 配置数据库
func init() {
logging.InfoLog("database init start...")
func InitDatabase() {
logger.SugaredLogger.Infoln("database init start...")
var err error
// 配置mysql数据库
ds := config.AppEnvConfig.DataSource
@@ -24,20 +26,28 @@ func init() {
ds.Charset)
SqlDB, err = xorm.NewEngine(ds.DbType, jdbc)
if err != nil {
logging.FatalfLog("db error: %#v\n", err.Error())
logger.SugaredLogger.Fatalf("db error: %#v\n", err.Error())
}
err = SqlDB.Ping()
if err != nil {
logging.FatalfLog("db connect error: %#v\n", err.Error())
logger.SugaredLogger.Fatalf("db connect error: %#v\n", err.Error())
}
SqlDB.SetMaxIdleConns(ds.MaxIdleSize)
SqlDB.SetMaxOpenConns(ds.MaxOpenSize)
timer := time.NewTicker(time.Minute * 30)
ctx, cancel := context.WithCancel(context.Background())
pingCancel = cancel
timer := time.NewTicker(time.Minute * 10)
go func(x *xorm.Engine) {
for _ = range timer.C {
for {
select {
case <-timer.C:
err = x.Ping()
if err != nil {
logging.FatalfLog("db connect error: %#v\n", err.Error())
logger.SugaredLogger.Fatalf("db connect error: %#v\n", err.Error())
}
case <-ctx.Done():
timer.Stop()
return
}
}
}(SqlDB)
@@ -51,5 +61,5 @@ func init() {
}
SqlDB.SetTZLocation(location)
SqlDB.SetTZDatabase(location)
logging.InfoLog("database init end...")
logger.SugaredLogger.Infoln("database init end...")
}
+2
View File
@@ -1,6 +1,7 @@
package refs
import (
"context"
redisTool "cutego/pkg/redispool"
"github.com/gin-gonic/gin"
"github.com/go-xorm/xorm"
@@ -11,4 +12,5 @@ var (
SqlDB *xorm.Engine
RedisDB *redisTool.RedisClient
CoolGin *gin.Engine
pingCancel context.CancelFunc
)
+4 -4
View File
@@ -1,13 +1,13 @@
package refs
import (
"cutego/pkg/logging"
"cutego/pkg/logger"
redisTool "cutego/pkg/redispool"
)
// 配置redis数据库
func init() {
logging.InfoLog("redis init start...")
func InitRedis() {
logger.SugaredLogger.Infoln("redis init start...")
RedisDB = redisTool.NewRedis()
logging.InfoLog("redis init end...")
logger.SugaredLogger.Infoln("redis init end...")
}
+5 -5
View File
@@ -7,18 +7,18 @@ server:
# 数据源
datasource:
db-type: mysql
host: 192.168.235.102
port: 3308
host: 127.0.0.1
port: 3306
username: root
password: 123456
database: cutego
charset: utf8
max-idle-size: 10000
max-open-size: 100000
max-idle-size: 10
max-open-size: 100
redis:
# 数据库索引
database: 1
host: 192.168.235.102
host: 127.0.0.1
port: 6379
password: 123456
# 连接超时时间
+2
View File
@@ -0,0 +1,2 @@
go mod tidy
go mod vendor