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:
@@ -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
|
||||
})
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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() {
|
||||
|
||||
@@ -63,11 +63,11 @@ 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 删除定时任务
|
||||
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,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,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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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(¬ices)
|
||||
if err != nil {
|
||||
logging.ErrorLog(err)
|
||||
logger.SugaredLogger.Errorln(err)
|
||||
return nil, 0
|
||||
}
|
||||
return ¬ices, total
|
||||
@@ -41,7 +41,7 @@ func (d NoticeDao) Insert(notice dataobject.SysNotice) int64 {
|
||||
insert, err := session.Insert(¬ice)
|
||||
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(¬ice)
|
||||
if err != nil {
|
||||
logging.ErrorLog(err)
|
||||
logger.SugaredLogger.Errorln(err)
|
||||
return nil
|
||||
}
|
||||
return ¬ice
|
||||
@@ -80,7 +80,7 @@ func (d NoticeDao) Update(notice dataobject.SysNotice) int64 {
|
||||
update, err := session.Where("notice_id = ?", notice.NoticeId).Update(¬ice)
|
||||
if err != nil {
|
||||
session.Rollback()
|
||||
logging.ErrorLog(err)
|
||||
logger.SugaredLogger.Errorln(err)
|
||||
return 0
|
||||
}
|
||||
session.Commit()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
// 修改个人数据
|
||||
|
||||
@@ -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 {
|
||||
// 删除原有用户和角色关系
|
||||
|
||||
Vendored
+3
-3
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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...)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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,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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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...")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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...")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
# 连接超时时间
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
go mod tidy
|
||||
go mod vendor
|
||||
Reference in New Issue
Block a user