zoie vor 1 Jahr
Ursprung
Commit
68e742b744

+ 2 - 1
.gitignore

@@ -35,7 +35,8 @@ main
 nohup.out
 /bin
 Makefile
-ofile
+/ofile
 ./setting.yml
 ./settings.yml
+/temp
 

+ 7 - 1
app/admin/controller/sys_dept.go

@@ -5,6 +5,7 @@ import (
 	"Medical_OAuth/app/admin/service"
 	"Medical_OAuth/app/admin/service/dto"
 	"Medical_OAuth/common/actions"
+	"encoding/json"
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin/binding"
 	"gogs.baozhida.cn/zoie/OAuth-core/api"
@@ -244,5 +245,10 @@ func (e SysDeptController) Enter(c *gin.Context) {
 		e.Error(500, err, "进入失败")
 		return
 	}
-	e.OK(req.GetId(), "进入成功")
+	data := make([]map[string]interface{}, 0)
+	err = json.Unmarshal([]byte(model.HaveDeptMenu), &data)
+	if err != nil {
+		e.Error(500, err, err.Error())
+	}
+	e.OK(data, "进入成功")
 }

+ 43 - 0
app/admin/controller/sys_menu.go

@@ -4,11 +4,13 @@ import (
 	"Medical_OAuth/app/admin/model"
 	"Medical_OAuth/app/admin/service"
 	"Medical_OAuth/app/admin/service/dto"
+	"encoding/json"
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin/binding"
 	"gogs.baozhida.cn/zoie/OAuth-core/api"
 	"gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
 	_ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
+	"strconv"
 )
 
 type SysMenuController struct {
@@ -208,3 +210,44 @@ func (e SysMenuController) GetMenuRole(c *gin.Context) {
 
 	e.OK(result, "")
 }
+
+func (e SysMenuController) List(c *gin.Context) {
+	s := service.SysMenu{}
+	req := dto.SysMenuGetPageReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.Form).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var deptId int
+	deptId = user.GetDeptId(c)
+	if deptId == 0 {
+		deptIdStr, err := e.Cache.Get(model.GetEnterDeptCacheKey(user.GetUserId(c)))
+		if err == nil {
+			deptId, _ = strconv.Atoi(deptIdStr)
+		}
+	}
+
+	if deptId == 0 {
+		data := make([]map[string]interface{}, 0)
+		err = json.Unmarshal([]byte(model.NoDeptMenu), &data)
+		if err != nil {
+			e.Error(500, err, err.Error())
+		}
+		e.OK(data, "查询成功")
+		return
+	}
+
+	data := make([]map[string]interface{}, 0)
+	err = json.Unmarshal([]byte(model.HaveDeptMenu), &data)
+	if err != nil {
+		e.Error(500, err, err.Error())
+	}
+	e.OK(data, "查询成功")
+
+}

+ 2 - 0
app/admin/controller/sys_service.go

@@ -250,6 +250,7 @@ func (e SysService) UserInfo(c *gin.Context) {
 		RoleName:  user.GetRoleName(c),
 		RoleKey:   user.GetRoleKey(c),
 		DataScope: user.GetDataScope(c),
+		DeptName:  user.GetDeptName(c),
 	}
 
 	if deptIdStr, err := e.Cache.Get(model.GetEnterDeptCacheKey(user.GetUserId(c))); err == nil {
@@ -258,6 +259,7 @@ func (e SysService) UserInfo(c *gin.Context) {
 	if deptNameStr, err := e.Cache.Get(model.GetEnterDeptNameCacheKey(user.GetUserId(c))); err == nil {
 		info.DeptName = deptNameStr
 	}
+	e.Logger.Debug("info", info)
 
 	e.OK(info, "ok")
 }

+ 181 - 0
app/admin/model/sys_menu.go

@@ -43,3 +43,184 @@ func (e *SysMenu) Generate() model2.ActiveRecord {
 func (e *SysMenu) GetId() interface{} {
 	return e.Id
 }
+
+var (
+	NoDeptMenu = `[
+  {
+    "path": "/usermanagement",
+    "name": "usermanagement",
+    "icon": "icon-icon-",
+    "component": "@/views/usermanagement/index.vue",
+    "redirect":  "/usermanagement/user",
+    "meta": {
+      "roles": false,
+      "title": "用户管理"
+    },
+    "children": [
+      {
+        "path": "/usermanagement/user",
+        "name": "user",
+        "icon": "icon-icon-",
+        "component": "@/views/usermanagement/user/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "用户管理"
+        }
+      },
+      {
+        "path": "/usermanagement/company",
+        "name": "company",
+        "icon": "icon-zhuye1",
+        "component": "@/views/usermanagement/company/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "公司管理"
+        }
+      }
+    ]
+  }
+]`
+
+	HaveDeptMenu = `[
+  {
+    "path": "/home",
+    "name": "home",
+    "icon": "icon-shouye_zhuyehui",
+    "component": "@/views/home/index.vue",
+    "meta": {
+      "roles": false,
+      "title": "工作台"
+    }
+  },
+  {
+    "path": "/essentialinfo",
+    "name": "essentialinfo",
+    "icon": "icon-zhuye1",
+    "component": "@/views/essentialinfo/index.vue",
+    "meta": {
+      "roles": false,
+      "title": "基本信息"
+    }
+  },
+  {
+    "path": "/usermanagement",
+    "name": "usermanagement",
+    "icon": "icon-icon-",
+    "component": "@/views/usermanagement/index.vue",
+    "redirect":  "/usermanagement/user",
+    "meta": {
+      "roles": false,
+      "title": "用户管理"
+    },
+    "children": [
+      {
+        "path": "/usermanagement/user",
+        "name": "user",
+        "icon": "icon-icon-",
+        "component": "@/views/usermanagement/user/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "用户管理"
+        }
+      },
+      {
+        "path": "/usermanagement/company",
+        "name": "company",
+        "icon": "icon-zhuye1",
+        "component": "@/views/usermanagement/company/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "公司管理"
+        }
+      }
+    ]
+  },
+  {
+    "path": "/stockcontrol",
+    "name": "stockcontrol",
+    "icon": "icon-_kucun",
+    "component": "@/views/stockcontrol/index.vue",
+    "redirect":  "/stockcontrol/storagePut",
+    "meta": {
+      "roles": false,
+      "title": "库存管理"
+    },
+    "children": [
+      {
+        "path": "/stockcontrol/storagePut",
+        "name": "storagePut",
+        "icon": "icon-_kucun",
+        "component": "@/views/stockcontrol/storagePut/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "入库管理"
+        }
+      },
+      {
+        "path": "/stockcontrol/storageFrom",
+        "name": "storageFrom",
+        "icon": "icon-ruku",
+        "component": "@/views/stockcontrol/storageFrom/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "出库管理"
+        }
+      },
+      {
+        "path": "/stockcontrol/storageInquire",
+        "name": "storageInquire",
+        "icon": "icon-fenxixiangmuku",
+        "component": "@/views/stockcontrol/storageInquire/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "库存查询"
+        }
+      },
+      {
+        "path": "/stockcontrol/transmitReceive",
+        "name": "transmitReceive",
+        "icon": "icon-ruku",
+        "component": "@/views/stockcontrol/transmitReceive/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "收发记录"
+        }
+      }
+    ]
+  },
+  {
+    "path": "/salesmanagement",
+    "name": "salesmanagement",
+    "icon": "icon-chukuliucheng",
+    "component": "@/views/salesmanagement/index.vue",
+    "redirect":  "/salesmanagement/sellManage",
+    "meta": {
+      "roles": false,
+      "title": "销售管理"
+    },
+    "children": [
+      {
+        "path": "/salesmanagement/sellManage",
+        "name": "sellManage",
+        "icon": "icon-chukuliucheng",
+        "component": "@/views/salesmanagement/sellManage/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "销售管理"
+        }
+      },
+      {
+        "path": "/salesmanagement/storageOrderGoods",
+        "name": "storageOrderGoods",
+        "icon": "icon-dingdan",
+        "component": "@/views/salesmanagement/storageOrderGoods/index.vue",
+        "meta": {
+          "roles": false,
+          "title": "销售订单"
+        }
+      }
+    ]
+  }
+]
+`
+)

+ 6 - 2
app/admin/model/sys_opera_log.go

@@ -73,9 +73,13 @@ func SaveOperaLog(message storage.Messager) (err error) {
 		// Log writing to the database ignores error
 		return nil
 	}
+	// 外部调用获取身份信息,操作频繁,不做日志记录
+	if l.OperaUrl == "/api/service/userinfo" {
+		return nil
+	}
 	// 超出100个字符返回值截断
-	if len(l.JsonResult) > 100 {
-		l.JsonResult = l.JsonResult[:100]
+	if len(l.JsonResult) > 500 {
+		l.JsonResult = l.JsonResult[:500]
 	}
 	l.OperaTime = time.Now()
 	err = db.Create(&l).Error

+ 3 - 0
app/admin/model/sys_user.go

@@ -54,6 +54,9 @@ func (e *SysUser) BeforeCreate(_ *gorm.DB) error {
 }
 
 func (e *SysUser) BeforeUpdate(_ *gorm.DB) error {
+	if e.Username == "admin" {
+		return errors.New("禁止修改系统用户")
+	}
 	var err error
 	if e.Password != "" {
 		err = e.Encrypt()

+ 1 - 0
app/admin/router/sys_menu.go

@@ -18,6 +18,7 @@ func registerSysMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
 	r := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
 	{
 		r.GET("", cont.GetPage)
+		r.GET("/list", cont.List)
 		r.GET("/:id", cont.Get)
 		r.POST("", cont.Insert)
 		r.PUT("/:id", cont.Update)

+ 2 - 2
app/admin/service/dto/sys_dept.go

@@ -7,8 +7,8 @@ import (
 
 // SysDeptGetPageReq 列表或者搜索使用结构体
 type SysDeptGetPageReq struct {
-	DeptName string `form:"deptName" search:"type:exact;column:dept_name;table:sys_dept" example:"部门名称"` //部门名称
-	DeptId   int    `form:"deptId" search:"-" swaggerignore:"true"`                                      //部门名称
+	DeptName string `form:"deptName" search:"type:contains;column:dept_name;table:sys_dept" example:"部门名称"` //部门名称
+	DeptId   int    `form:"deptId" search:"-" swaggerignore:"true"`                                         //部门名称
 	SysDeptOrder
 }
 

+ 5 - 5
cmd/api/server.go

@@ -2,7 +2,6 @@ package api
 
 import (
 	"Medical_OAuth/app/admin/model"
-	"Medical_OAuth/app/jobs"
 	global2 "Medical_OAuth/common/global"
 	"Medical_OAuth/common/middleware"
 	"Medical_OAuth/common/middleware/handler"
@@ -98,10 +97,11 @@ func run() error {
 	//
 	//}()
 
-	go func() {
-		jobs.InitJob()
-		jobs.Setup(sdk.Runtime.GetDb())
-	}()
+	// fixme 定时任务,需要时再配置
+	//go func() {
+	//	jobs.InitJob()
+	//	jobs.Setup(sdk.Runtime.GetDb())
+	//}()
 
 	go func() {
 		// 服务连接

+ 6 - 5
common/middleware/auth.go

@@ -18,11 +18,12 @@ func AuthInit() (*jwt.GinJWTMiddleware, error) {
 		}
 	}
 	return jwt.New(&jwt.GinJWTMiddleware{
-		Realm:           "bzd oauth",
-		Key:             []byte(config.JwtConfig.Secret),
-		Timeout:         timeout,
-		SendCookie:      true,
-		MaxRefresh:      time.Hour,
+		Realm:      "bzd oauth",
+		Key:        []byte(config.JwtConfig.Secret),
+		Timeout:    timeout,
+		SendCookie: true,
+		// token 最大刷新时间
+		MaxRefresh:      2 * time.Hour,
 		PayloadFunc:     handler.PayloadFunc,
 		IdentityHandler: handler.IdentityHandler,
 		Authenticator:   handler.Authenticator,

+ 2 - 2
common/middleware/handler/auth.go

@@ -101,7 +101,7 @@ func Authenticator(c *gin.Context) (interface{}, error) {
 	//		return nil, jwt.ErrInvalidVerificationCode
 	//	}
 	//}
-	u, role, e := loginVals.GetUser(ormDB)
+	u, role, dept, e := loginVals.GetUser(ormDB)
 
 	username = loginVals.Username
 	if e != nil {
@@ -118,7 +118,7 @@ func Authenticator(c *gin.Context) (interface{}, error) {
 	err = sdk.Runtime.GetCacheAdapter().Del(model.GetEnterDeptCacheKey(u.Id))
 	err = sdk.Runtime.GetCacheAdapter().Del(model.GetEnterDeptNameCacheKey(u.Id))
 
-	return map[string]interface{}{"user": u, "role": role, "single": single}, nil
+	return map[string]interface{}{"user": u, "role": role, "dept": dept, "single": single}, nil
 }
 
 // LoginLogToDB Write log to database

+ 9 - 1
common/middleware/handler/login.go

@@ -14,7 +14,7 @@ type Login struct {
 	//UUID     string `form:"UUID" json:"uuid" binding:"required"`
 }
 
-func (u *Login) GetUser(tx *gorm.DB) (user SysUser, role SysRole, err error) {
+func (u *Login) GetUser(tx *gorm.DB) (user SysUser, role SysRole, dept SysDept, err error) {
 	err = tx.Table("sys_user").Where("username = ? and status = 2", u.Username).First(&user).Error
 	if err != nil {
 		log.Errorf("get user error, %s", err.Error())
@@ -30,6 +30,14 @@ func (u *Login) GetUser(tx *gorm.DB) (user SysUser, role SysRole, err error) {
 		log.Errorf("get role error, %s", err.Error())
 		return
 	}
+	if user.DeptId > 0 {
+		err = tx.Table("sys_dept").Where("id = ? ", user.DeptId).First(&dept).Error
+		if err != nil {
+			log.Errorf("get dept error, %s", err.Error())
+			return
+		}
+	}
+
 	return
 }
 

+ 1 - 1
common/middleware/service_auth.go

@@ -34,7 +34,7 @@ func AuthCheckService() gin.HandlerFunc {
 			return
 		}
 		if service.Status == 1 {
-			response.Error(c, 400, err, "未认证")
+			response.Error(c, 400, err, "服务已停用")
 			return
 		}
 		c.Next()

+ 2 - 0
conf/db.sql

@@ -64,4 +64,6 @@ INSERT INTO sys_dept VALUES (1, 0, '/0/1/', '贵州宝智达网络科技有限
 INSERT INTO sys_role VALUES (1, '系统管理员', '2', 'admin', 1, '', '', 1, '', 1, 1, '2022-08-23 19:56:37.913', '2022-08-23 19:56:37.913', NULL);
 INSERT INTO sys_user VALUES (1, 'a192362a-5119-46ab-a9a7-a7b57029ce48', 'admin', '$2a$10$X3RBKl2.WonUVKBVyP43EOUHcyZEolRrRhftpD6sc/0dcruxtOWme', 'admin', '12322334455', 1, '', 1, '', '2', 0, 0, '2023-06-07 14:40:54.226', '2023-06-07 14:40:54.226', NULL);
 
+INSERT INTO sys_user (`id`, `uuid`, `username`, `password`, `nick_name`, `phone`, `role_id`, `salt`, `dept_id`, `post_id`, `remark`, `status`, `create_by`, `update_by`, `created_at`, `updated_at`, `deleted_at`) VALUES (1, 'b583d1fa-3317-48de-9a55-eaa204c43060', 'admin', '$2a$10$Zls2VZVy0Lpm7ugbfq6eVe6ajAvchj9AS7bM8LgoY1iirknoxgC6u', 'test', '', 1, '', 0, 0, '', '2', 8, 0, '2023-11-15 16:57:47.764', '2023-11-15 16:57:47.764', NULL);
+INSERT INTO sys_role (`id`, `name`, `status`, `role_key`, `sort`, `data_scope`, `remark`, `create_by`, `update_by`, `created_at`, `updated_at`, `deleted_at`) VALUES (1, '管理员', '2', 'admin', 0, 3, '', 1, 1, '2022-08-23 19:56:37.913', '2023-06-15 17:19:50.932', NULL);
 

+ 51 - 0
conf/setting.yml

@@ -0,0 +1,51 @@
+settings:
+  application:
+    # dev开发环境 test测试环境 prod线上环境
+    mode: test
+    # 服务器ip,默认使用 0.0.0.0
+    host: 0.0.0.0
+    # 服务名称
+    name: Medical_OAuth
+    # 端口号
+    port: 8000 # 服务端口号
+    readtimeout: 1
+    writertimeout: 2
+    # 数据权限功能开关
+    enabledp: true
+  logger:
+    # 日志存放路径
+    path: temp/logs
+    # 日志输出,file:文件,default:命令行,其他:命令行
+    stdout: '' #控制台日志,启用后,不输出到文件
+    # 日志等级, trace, debug, info, warn, error, fatal
+    level: trace
+    # 数据库日志开关
+    enableddb: true
+  jwt:
+    # token 密钥,生产环境时及的修改
+    secret: JA6WD#*SwAR7
+    # token 过期时间 单位:秒
+    timeout: 3600
+  database:
+    # 数据库类型 mysql
+    driver: mysql
+    # 数据库连接字符串 mysql 缺省信息 charset=utf8&parseTime=True&loc=Local&timeout=1000ms
+    source: godown:wCHDXHL35kZGSD8r@tcp(127.0.0.1:40306)/godown?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
+    host: localhost:6400
+  cache:
+    redis:
+      addr: 127.0.0.1:43379
+      password:
+      db: 3
+    # key存在即可
+    memory: ''
+  extend:
+    # 服务发现服务信息
+    service:
+      number: "3EDJRaag"
+      authCode: "3EDJRaagFTVVo2Ilo80nHJfLVN1OgN8d"
+      name: "统一身份认证"
+    # 赛邮短信
+    subMail:
+      appid: "97173"
+      signature: "f639a60e41ee0554921d89884f5ff87e"

+ 11 - 16
conf/settings.yml

@@ -1,17 +1,17 @@
 settings:
   application:
     # dev开发环境 test测试环境 prod线上环境
-    mode: dev
+    mode: test
     # 服务器ip,默认使用 0.0.0.0
     host: 0.0.0.0
     # 服务名称
     name: Medical_OAuth
     # 端口号
-    port: 8000 # 服务端口号
+    port: 6400 # 服务端口号
     readtimeout: 1
     writertimeout: 2
     # 数据权限功能开关
-    enabledp: false
+    enabledp: true
   logger:
     # 日志存放路径
     path: temp/logs
@@ -20,23 +20,25 @@ settings:
     # 日志等级, trace, debug, info, warn, error, fatal
     level: trace
     # 数据库日志开关
-    enableddb: false
+    enableddb: true
   jwt:
     # token 密钥,生产环境时及的修改
-    secret: bzd_OAuth
+    secret: JA6WD#*SwAR7
     # token 过期时间 单位:秒
     timeout: 3600
   database:
     # 数据库类型 mysql
     driver: mysql
     # 数据库连接字符串 mysql 缺省信息 charset=utf8&parseTime=True&loc=Local&timeout=1000ms
-    source: medical_erp:XMzTDthD4By3ArjG@tcp(192.168.11.77:3306)/medical_erp?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
-    host: localhost:8081
+#    source: godown:Fp8stPSZ!W3@#G@tcp(192.168.0.88:3306)/godown?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
+    source: godown:wCHDXHL35kZGSD8rG@tcp(127.0.0.1:40306)/godown?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
+    host: localhost:6400
   cache:
     redis:
-      addr: 192.168.11.77:6379
+#      addr: 192.168.0.33:6379
+      addr: 127.0.0.1:43379
       password:
-      db: 2
+      db: 3
     # key存在即可
     memory: ''
   extend:
@@ -48,10 +50,3 @@ settings:
     subMail:
       appid: "97173"
       signature: "f639a60e41ee0554921d89884f5ff87e"
-
-
-
-
-
-
-

+ 18 - 3
db/init.go

@@ -29,8 +29,23 @@ func Setup() {
 			c.Registers[i].Policy,
 			c.Registers[i].Tables)
 	}
-	resolverConfig := toolsDB.NewConfigure(c.Source, c.MaxIdleConns, c.MaxOpenConns, c.ConnMaxIdleTime, c.ConnMaxLifeTime, registers)
-	db, err := resolverConfig.Init(&gorm.Config{
+	//resolverConfig := toolsDB.NewConfigure(c.Source, c.MaxIdleConns, c.MaxOpenConns, c.ConnMaxIdleTime, c.ConnMaxLifeTime, registers)
+	//db, err := resolverConfig.Init(&gorm.Config{
+	//	NamingStrategy: schema.NamingStrategy{
+	//		SingularTable: true,
+	//	},
+	//	Logger: New(
+	//		logger.Config{
+	//			SlowThreshold: time.Second,
+	//			Colorful:      true,
+	//			LogLevel: logger.LogLevel(
+	//				log.DefaultLogger.Options().Level.LevelForGorm()),
+	//		},
+	//	),
+	//	DisableAutomaticPing: true,
+	//}, mysql.Open)
+
+	db, err := gorm.Open(mysql.Open(c.Source), &gorm.Config{
 		NamingStrategy: schema.NamingStrategy{
 			SingularTable: true,
 		},
@@ -42,7 +57,7 @@ func Setup() {
 					log.DefaultLogger.Options().Level.LevelForGorm()),
 			},
 		),
-	}, mysql.Open)
+		DisableAutomaticPing: true})
 
 	if err != nil {
 		log.Fatal(pkg.Red("mysql connect error :"), err)

+ 10 - 11
db/migration.go

@@ -1,7 +1,6 @@
 package db
 
 import (
-	jobsModel "Medical_OAuth/app/jobs/model"
 	"go.uber.org/zap"
 
 	"Medical_OAuth/app/admin/model"
@@ -17,20 +16,20 @@ func AutoMigrateDB() {
 			&model.SysService{},
 			&model.SysUser{},
 			&model.SysRole{},
-			&model.ServMenu{},
-			&model.ServApi{},
-			&model.ServRoleApi{},
-			&model.SysRoleMenu{},
-			&model.SysMenu{},
+			//&model.ServMenu{},
+			//&model.ServApi{},
+			//&model.ServRoleApi{},
+			//&model.SysRoleMenu{},
+			//&model.SysMenu{},
 			&model.SysDept{},
-			&model.SysPost{},
-			&model.SysRegisterAuth{},
-			&model.SysDictData{},
-			&model.SysDictType{},
+			//&model.SysPost{},
+			//&model.SysRegisterAuth{},
+			//&model.SysDictData{},
+			//&model.SysDictType{},
 			&model.SysLoginLog{},
 			&model.SysOperaLog{},
 			&model.SysConfig{},
-			&jobsModel.SysJob{},
+			//&jobsModel.SysJob{},
 		)
 	if err != nil {
 		zap.L().Panic("migrate db fail", zap.Error(err))

+ 3 - 3
setting.yml

@@ -16,21 +16,21 @@ settings:
     # 日志存放路径
     path: temp/logs
     # 日志输出,file:文件,default:命令行,其他:命令行
-    stdout: '' #控制台日志,启用后,不输出到文件
+    stdout: 'file' #控制台日志,启用后,不输出到文件
     # 日志等级, trace, debug, info, warn, error, fatal
     level: trace
     # 数据库日志开关
     enableddb: true
   jwt:
     # token 密钥,生产环境时及的修改
-    secret: BZD_OAuth
+    secret: JA6WD#*SwAR7
     # token 过期时间 单位:秒
     timeout: 3600
   database:
     # 数据库类型 mysql
     driver: mysql
     # 数据库连接字符串 mysql 缺省信息 charset=utf8&parseTime=True&loc=Local&timeout=1000ms
-    source: medical_erp:XMzTDthD4By3ArjG@tcp(192.168.11.77:3306)/medical_erp?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
+    source: medical_erp:XMzTDthD4By3ArjG_@tcp(192.168.11.77:3306)/medical_erp?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
   #    host: localhost:8080
   #    host: 192.168.31.163:8080
   cache: