init...
This commit is contained in:
@@ -0,0 +1,152 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
cache2 "cutego/core/cache"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/cache"
|
||||||
|
"cutego/pkg/excels"
|
||||||
|
"cutego/pkg/file"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConfigApi struct {
|
||||||
|
configService service.ConfigService
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetConfigValue 根据参数键名查询参数值
|
||||||
|
func (a ConfigApi) GetConfigValue(c *gin.Context) {
|
||||||
|
param := c.Query("key")
|
||||||
|
if !gotool.StrUtils.HasEmpty(param) {
|
||||||
|
key := a.configService.GetConfigKey(param)
|
||||||
|
c.JSON(http.StatusOK, resp.Success(key.ConfigValue, ""))
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数不合法"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 查询设置列表
|
||||||
|
func (a ConfigApi) List(c *gin.Context) {
|
||||||
|
query := request.ConfigQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
find, i := a.configService.FindPage(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: find,
|
||||||
|
Total: i,
|
||||||
|
Size: query.PageSize,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加数据
|
||||||
|
func (a ConfigApi) Add(c *gin.Context) {
|
||||||
|
config := entity.SysConfig{}
|
||||||
|
if c.Bind(&config) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 检验key是否存在
|
||||||
|
if a.configService.CheckConfigKeyUnique(config) {
|
||||||
|
resp.Error(c, "新增参数'"+config.ConfigName+"'失败, 参数键名已存在")
|
||||||
|
}
|
||||||
|
config.CreateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.configService.Save(config) > 0 {
|
||||||
|
// 进行缓存数据添加
|
||||||
|
cache2.SetRedisConfig(config)
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 查询数据
|
||||||
|
func (a ConfigApi) Get(c *gin.Context) {
|
||||||
|
param := c.Param("configId")
|
||||||
|
configId, _ := strconv.ParseInt(param, 10, 64)
|
||||||
|
resp.OK(c, a.configService.GetInfo(configId))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改数据
|
||||||
|
func (a ConfigApi) Edit(c *gin.Context) {
|
||||||
|
config := entity.SysConfig{}
|
||||||
|
if c.Bind(&config) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 检验key是否存在
|
||||||
|
if a.configService.CheckConfigKeyUnique(config) {
|
||||||
|
resp.Error(c, "修改参数'"+config.ConfigName+"'失败, 参数键名已存在")
|
||||||
|
}
|
||||||
|
config.UpdateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.configService.Edit(config) > 0 {
|
||||||
|
cache2.SetRedisConfig(config)
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除数据
|
||||||
|
func (a ConfigApi) Delete(c *gin.Context) {
|
||||||
|
ids := strings.Split(c.Param("ids"), ",")
|
||||||
|
list := make([]int64, 0)
|
||||||
|
for _, id := range ids {
|
||||||
|
parseInt, _ := strconv.ParseInt(id, 10, 64)
|
||||||
|
list = append(list, parseInt)
|
||||||
|
}
|
||||||
|
// 进行校验, 查看是否可以删除
|
||||||
|
byIds := a.configService.CheckConfigByIds(list)
|
||||||
|
for _, config := range *byIds {
|
||||||
|
if config.ConfigType == "Y" {
|
||||||
|
resp.Error(c, "内置参数"+config.ConfigName+"不能删除")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 进行删除
|
||||||
|
if a.configService.Remove(list) {
|
||||||
|
// 刷新缓存
|
||||||
|
strs := make([]string, 0)
|
||||||
|
for _, config := range *byIds {
|
||||||
|
strs = append(strs, config.ConfigKey)
|
||||||
|
}
|
||||||
|
cache.RemoveList(strs)
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RefreshCache 刷新缓存
|
||||||
|
func (a ConfigApi) RefreshCache(c *gin.Context) {
|
||||||
|
all := a.configService.FindAll()
|
||||||
|
for _, sysConfig := range *all {
|
||||||
|
cache2.RemoveRedisConfig(sysConfig.ConfigKey)
|
||||||
|
cache2.SetRedisConfig(sysConfig)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export 导出数据
|
||||||
|
func (a ConfigApi) Export(c *gin.Context) {
|
||||||
|
query := request.ConfigQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
find, _ := a.configService.FindPage(query)
|
||||||
|
items := make([]interface{}, 0)
|
||||||
|
for _, config := range *find {
|
||||||
|
items = append(items, config)
|
||||||
|
}
|
||||||
|
_, files := excels.ExportExcel(items, "配置表")
|
||||||
|
file.DownloadExcel(c, files)
|
||||||
|
}
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/cache"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CronJobApi struct {
|
||||||
|
cronJobService service.CronJobService
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 获取定时任务数据
|
||||||
|
func (a CronJobApi) List(c *gin.Context) {
|
||||||
|
query := request.CronJobQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
find, i := a.cronJobService.FindPage(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: find,
|
||||||
|
Total: i,
|
||||||
|
Size: query.PageSize,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改定时任务
|
||||||
|
func (a CronJobApi) Edit(c *gin.Context) {
|
||||||
|
dictType := entity.SysDictType{}
|
||||||
|
if c.Bind(&dictType) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//检验定时任务是否存在
|
||||||
|
if a.dictTypeService.CheckDictTypeUnique(dictType) {
|
||||||
|
resp.Error(c, "修改字典'"+dictType.DictName+"'失败, 定时任务已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//修改数据
|
||||||
|
if a.dictTypeService.Edit(dictType) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 新增定时任务
|
||||||
|
func (a CronJobApi) Add(c *gin.Context) {
|
||||||
|
dictType := entity.SysDictType{}
|
||||||
|
if c.Bind(&dictType) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//检验定时任务是否存在
|
||||||
|
if a.dictTypeService.CheckDictTypeUnique(dictType) {
|
||||||
|
resp.Error(c, "新增字典'"+dictType.DictName+"'失败, 定时任务已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//新增定时任务
|
||||||
|
if a.dictTypeService.Save(dictType) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 批量删除定时任务
|
||||||
|
func (a CronJobApi) Remove(c *gin.Context) {
|
||||||
|
param := c.Param("dictId")
|
||||||
|
split := strings.Split(param, ",")
|
||||||
|
ids := make([]int64, 0)
|
||||||
|
types := make([]string, 0)
|
||||||
|
for _, s := range split {
|
||||||
|
parseInt, _ := strconv.ParseInt(s, 10, 64)
|
||||||
|
ids = append(ids, parseInt)
|
||||||
|
}
|
||||||
|
//校验定时任务是否使用
|
||||||
|
for _, id := range ids {
|
||||||
|
dictType := a.dictTypeService.GetById(id)
|
||||||
|
if len(a.dictDataService.FindByDictType(dictType.DictType)) > 0 {
|
||||||
|
resp.Error(c, dictType.DictName+"已分配,不能删除")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
types = append(types, dictType.DictType)
|
||||||
|
}
|
||||||
|
//批量删除
|
||||||
|
if a.dictTypeService.Remove(ids) {
|
||||||
|
//从缓存中删除数据
|
||||||
|
cache.RemoveList(types)
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 改变任务状态
|
||||||
|
func (a CronJobApi) ChangeStatus(context *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/tree/tree_dept"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DeptApi struct {
|
||||||
|
deptService service.DeptService
|
||||||
|
}
|
||||||
|
|
||||||
|
// TreeSelect 查询部门菜单树
|
||||||
|
func (a DeptApi) DeptTreeSelect(c *gin.Context) {
|
||||||
|
query := request.DeptQuery{}
|
||||||
|
if c.BindQuery(&query) == nil {
|
||||||
|
treeSelect := a.deptService.FindTreeSelect(query)
|
||||||
|
list := tree_dept.DeptList{}
|
||||||
|
c.JSON(http.StatusOK, resp.Success(list.GetTree(treeSelect)))
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数绑定错误"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RoleDeptTreeSelect 加载对应角色部门列表树
|
||||||
|
func (a DeptApi) RoleDeptTreeSelect(c *gin.Context) {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
param := c.Param("roleId")
|
||||||
|
roleId, _ := strconv.ParseInt(param, 10, 64)
|
||||||
|
checkedKeys := a.deptService.FindDeptListByRoleId(roleId)
|
||||||
|
m["checkedKeys"] = checkedKeys
|
||||||
|
treeSelect := a.deptService.FindTreeSelect(request.DeptQuery{})
|
||||||
|
list := tree_dept.DeptList{}
|
||||||
|
tree := list.GetTree(treeSelect)
|
||||||
|
m["depts"] = tree
|
||||||
|
resp.OK(c, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find 查询部门列表
|
||||||
|
func (a DeptApi) Find(c *gin.Context) {
|
||||||
|
query := request.DeptQuery{}
|
||||||
|
if c.BindQuery(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.OK(c, a.deptService.FindDeptList(query))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExcludeChild 查询部门列表(排除节点)
|
||||||
|
func (a DeptApi) ExcludeChild(c *gin.Context) {
|
||||||
|
param := c.Param("deptId")
|
||||||
|
deptId, err := strconv.Atoi(param)
|
||||||
|
if err != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list := a.deptService.FindDeptList(request.DeptQuery{})
|
||||||
|
var depts = *list
|
||||||
|
deptList := make([]entity.SysDept, 0)
|
||||||
|
for _, dept := range depts {
|
||||||
|
if dept.DeptId == deptId || strings.Contains(dept.Ancestors, strconv.Itoa(deptId)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
deptList = append(deptList, dept)
|
||||||
|
}
|
||||||
|
resp.OK(c, deptList)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInfo 根据部门编号获取详细信息
|
||||||
|
func (a DeptApi) GetInfo(c *gin.Context) {
|
||||||
|
param := c.Param("deptId")
|
||||||
|
deptId, err := strconv.Atoi(param)
|
||||||
|
if err != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.OK(c, a.deptService.GetDeptById(deptId))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加部门
|
||||||
|
func (a DeptApi) Add(c *gin.Context) {
|
||||||
|
dept := entity.SysDept{}
|
||||||
|
if c.Bind(&dept) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 校验部门名称是否唯一
|
||||||
|
unique := a.deptService.CheckDeptNameUnique(dept)
|
||||||
|
if unique {
|
||||||
|
resp.Error(c, "新增部门'"+dept.DeptName+"'失败, 部门名称已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
info := a.deptService.GetDeptById(dept.ParentId)
|
||||||
|
if info.Status == "1" {
|
||||||
|
resp.Error(c, "部门停用, 不允许新增")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dept.Ancestors = info.Ancestors + "," + strconv.Itoa(dept.ParentId)
|
||||||
|
dept.CreateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.deptService.Save(dept) > 0 {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除部门
|
||||||
|
func (a DeptApi) Delete(c *gin.Context) {
|
||||||
|
param := c.Param("deptId")
|
||||||
|
deptId, _ := strconv.Atoi(param)
|
||||||
|
// 是否存在部门子节点
|
||||||
|
if a.deptService.HasChildByDeptId(deptId) > 0 {
|
||||||
|
resp.Error(c, "存在下级部门,不允许删除")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.deptService.CheckDeptExistUser(deptId) > 0 {
|
||||||
|
resp.Error(c, "部门存在用户,不允许删除")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.deptService.Remove(deptId) > 0 {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改部门数据接口
|
||||||
|
func (a DeptApi) Edit(c *gin.Context) {
|
||||||
|
dept := entity.SysDept{}
|
||||||
|
if c.Bind(&dept) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dept.UpdateTime = time.Now()
|
||||||
|
dept.UpdateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.deptService.Edit(dept) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/api/v1/response"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/excels"
|
||||||
|
"cutego/pkg/file"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DictDataApi struct {
|
||||||
|
dictDataService service.DictDataService
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetByType 根据字典类型查询字典数据d
|
||||||
|
func (a DictDataApi) GetByType(c *gin.Context) {
|
||||||
|
param := c.Param("dictType")
|
||||||
|
if !gotool.StrUtils.HasEmpty(param) {
|
||||||
|
list := a.dictDataService.FindByDictType(param)
|
||||||
|
var result []response.DictDataResponse
|
||||||
|
for _, data := range list {
|
||||||
|
result = append(result, response.DictDataResponse{
|
||||||
|
DictCode: data.DictCode,
|
||||||
|
DictLabel: data.DictLabel,
|
||||||
|
DictSort: data.DictSort,
|
||||||
|
DictValue: data.DictValue,
|
||||||
|
DictType: data.DictType,
|
||||||
|
IsDefault: data.IsDefault,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, resp.Success(result))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 查询字典数据集合
|
||||||
|
func (a DictDataApi) List(c *gin.Context) {
|
||||||
|
query := request.DiceDataQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list, i := a.dictDataService.FindPage(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: list,
|
||||||
|
Total: i,
|
||||||
|
Size: query.PageSize,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 根据id查询字典数据
|
||||||
|
func (a DictDataApi) Get(c *gin.Context) {
|
||||||
|
param := c.Param("dictCode")
|
||||||
|
dictCode, _ := strconv.ParseInt(param, 10, 64)
|
||||||
|
resp.OK(c, a.dictDataService.GetByCode(dictCode))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加字典数据
|
||||||
|
func (a DictDataApi) Add(c *gin.Context) {
|
||||||
|
data := entity.SysDictData{}
|
||||||
|
if c.Bind(&data) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data.CreateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.dictDataService.Save(data) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 编辑字典数据
|
||||||
|
func (a DictDataApi) Edit(c *gin.Context) {
|
||||||
|
data := entity.SysDictData{}
|
||||||
|
if c.Bind(&data) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data.UpdateBy = util.GetUserInfo(c).UserName
|
||||||
|
data.UpdateTime = time.Now()
|
||||||
|
if a.dictDataService.Edit(data) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除数据
|
||||||
|
func (a DictDataApi) Delete(c *gin.Context) {
|
||||||
|
param := c.Param("dictCode")
|
||||||
|
split := strings.Split(param, ",")
|
||||||
|
dictCodeList := make([]int64, 0)
|
||||||
|
for _, s := range split {
|
||||||
|
diceCode, _ := strconv.ParseInt(s, 10, 64)
|
||||||
|
dictCodeList = append(dictCodeList, diceCode)
|
||||||
|
}
|
||||||
|
if a.dictDataService.Remove(dictCodeList) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export 导出excel
|
||||||
|
func (a DictDataApi) Export(c *gin.Context) {
|
||||||
|
query := request.DiceDataQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
items := make([]interface{}, 0)
|
||||||
|
list, _ := a.dictDataService.FindPage(query)
|
||||||
|
for _, data := range *list {
|
||||||
|
items = append(items, data)
|
||||||
|
}
|
||||||
|
_, files := excels.ExportExcel(items, "字典数据表")
|
||||||
|
file.DownloadExcel(c, files)
|
||||||
|
}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
service2 "cutego/core/service"
|
||||||
|
"cutego/pkg/cache"
|
||||||
|
"cutego/pkg/excels"
|
||||||
|
"cutego/pkg/file"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DictTypeApi struct {
|
||||||
|
dictTypeService service2.DictTypeService
|
||||||
|
dictDataService service2.DictDataService
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 获取字典类型数据
|
||||||
|
func (a DictTypeApi) List(c *gin.Context) {
|
||||||
|
query := request.DictTypeQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
find, i := a.dictTypeService.FindPage(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: find,
|
||||||
|
Total: i,
|
||||||
|
Size: query.PageSize,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 根据id查询字典类型数据
|
||||||
|
func (a DictTypeApi) Get(c *gin.Context) {
|
||||||
|
param := c.Param("dictTypeId")
|
||||||
|
dictTypeId, _ := strconv.ParseInt(param, 0, 64)
|
||||||
|
resp.OK(c, a.dictTypeService.GetById(dictTypeId))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改字典类型
|
||||||
|
func (a DictTypeApi) Edit(c *gin.Context) {
|
||||||
|
dictType := entity.SysDictType{}
|
||||||
|
if c.Bind(&dictType) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//检验字典类型是否存在
|
||||||
|
if a.dictTypeService.CheckDictTypeUnique(dictType) {
|
||||||
|
resp.Error(c, "修改字典'"+dictType.DictName+"'失败, 字典类型已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//修改数据
|
||||||
|
if a.dictTypeService.Edit(dictType) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 新增字典类型
|
||||||
|
func (a DictTypeApi) Add(c *gin.Context) {
|
||||||
|
dictType := entity.SysDictType{}
|
||||||
|
if c.Bind(&dictType) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//检验字典类型是否存在
|
||||||
|
if a.dictTypeService.CheckDictTypeUnique(dictType) {
|
||||||
|
resp.Error(c, "新增字典'"+dictType.DictName+"'失败, 字典类型已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//新增字典类型
|
||||||
|
if a.dictTypeService.Save(dictType) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 批量删除字典类型
|
||||||
|
func (a DictTypeApi) Remove(c *gin.Context) {
|
||||||
|
param := c.Param("dictId")
|
||||||
|
split := strings.Split(param, ",")
|
||||||
|
ids := make([]int64, 0)
|
||||||
|
types := make([]string, 0)
|
||||||
|
for _, s := range split {
|
||||||
|
parseInt, _ := strconv.ParseInt(s, 10, 64)
|
||||||
|
ids = append(ids, parseInt)
|
||||||
|
}
|
||||||
|
//校验字典类型是否使用
|
||||||
|
for _, id := range ids {
|
||||||
|
dictType := a.dictTypeService.GetById(id)
|
||||||
|
if len(a.dictDataService.FindByDictType(dictType.DictType)) > 0 {
|
||||||
|
resp.Error(c, dictType.DictName+"已分配,不能删除")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
types = append(types, dictType.DictType)
|
||||||
|
}
|
||||||
|
//批量删除
|
||||||
|
if a.dictTypeService.Remove(ids) {
|
||||||
|
//从缓存中删除数据
|
||||||
|
cache.RemoveList(types)
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RefreshCache 刷新缓存
|
||||||
|
func (a DictTypeApi) RefreshCache(c *gin.Context) {
|
||||||
|
a.dictTypeService.RefreshCache()
|
||||||
|
resp.OK(c)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export 导出Excel
|
||||||
|
func (a DictTypeApi) Export(c *gin.Context) {
|
||||||
|
query := request.DictTypeQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
find, _ := a.dictTypeService.FindPage(query)
|
||||||
|
list := make([]interface{}, 0)
|
||||||
|
for _, dictType := range *find {
|
||||||
|
list = append(list, dictType)
|
||||||
|
}
|
||||||
|
_, files := excels.ExportExcel(list, "字典类型表")
|
||||||
|
file.DownloadExcel(c, files)
|
||||||
|
}
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
cache2 "cutego/core/cache"
|
||||||
|
"cutego/core/entity"
|
||||||
|
service2 "cutego/core/service"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/tree/tree_menu"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LoginApi struct {
|
||||||
|
loginService service2.LoginService
|
||||||
|
roleService service2.RoleService
|
||||||
|
permissionService service2.PermissionService
|
||||||
|
menuService service2.MenuService
|
||||||
|
loginInfoService service2.LoginInfoService
|
||||||
|
}
|
||||||
|
|
||||||
|
// Login 登录
|
||||||
|
func (a LoginApi) Login(c *gin.Context) {
|
||||||
|
loginBody := request.LoginBody{}
|
||||||
|
if c.BindJSON(&loginBody) == nil {
|
||||||
|
m := make(map[string]string)
|
||||||
|
loginStatus, token := a.loginService.Login(loginBody.UserName, loginBody.Password)
|
||||||
|
if loginStatus {
|
||||||
|
a.handleLoginInfo(c, loginBody, loginStatus)
|
||||||
|
// 将token存入到redis中
|
||||||
|
cache2.SetRedisToken(loginBody.UserName, token)
|
||||||
|
m["token"] = token
|
||||||
|
c.JSON(http.StatusOK, resp.Success(m))
|
||||||
|
} else {
|
||||||
|
a.handleLoginInfo(c, loginBody, loginStatus)
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(token))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(500, "参数绑定错误"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a LoginApi) handleLoginInfo(c *gin.Context, body request.LoginBody, loginStatus bool) {
|
||||||
|
status := common.If(loginStatus, "1", "0")
|
||||||
|
|
||||||
|
clientIp := a.loginInfoService.GetRequestClientIp(c)
|
||||||
|
var location string
|
||||||
|
if "127.0.0.1" == clientIp {
|
||||||
|
location = "本机"
|
||||||
|
} else {
|
||||||
|
location = a.loginInfoService.GetLocationByIp(clientIp).Country
|
||||||
|
}
|
||||||
|
|
||||||
|
a.loginInfoService.Save(entity.SysLoginInfo{
|
||||||
|
UserName: body.UserName,
|
||||||
|
IpAddr: clientIp,
|
||||||
|
LoginLocation: location,
|
||||||
|
Browser: c.GetHeader("User-Agent"),
|
||||||
|
OS: strings.ReplaceAll(c.GetHeader("sec-ch-ua-platform"), "\"", ""),
|
||||||
|
Status: status.(string),
|
||||||
|
LoginTime: time.Now(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserInfo 获取用户信息
|
||||||
|
func (a LoginApi) GetUserInfo(c *gin.Context) {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
user := a.loginService.GetCurrentUser(c)
|
||||||
|
// 查询用户角色集合
|
||||||
|
roleKeys := a.permissionService.GetRolePermissionByUserId(user)
|
||||||
|
// 权限集合
|
||||||
|
perms := a.permissionService.GetMenuPermission(user)
|
||||||
|
m["roles"] = roleKeys
|
||||||
|
m["permissions"] = perms
|
||||||
|
m["user"] = user
|
||||||
|
c.JSON(http.StatusOK, resp.Success(m))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRouters 根据用户ID查询菜单
|
||||||
|
func (a LoginApi) GetRouters(c *gin.Context) {
|
||||||
|
// 获取当前登录用户
|
||||||
|
user := a.loginService.GetCurrentUser(c)
|
||||||
|
menus := a.menuService.GetMenuTreeByUserId(user)
|
||||||
|
systemMenus := tree_menu.SystemMenus{}
|
||||||
|
systemMenus = *menus
|
||||||
|
array := systemMenus.ConvertToINodeArray(menus)
|
||||||
|
generateTree := tree_menu.GenerateTree(array, nil)
|
||||||
|
c.JSON(http.StatusOK, resp.Success(generateTree))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetLoginHistory 根据用户名称查询登录记录
|
||||||
|
func (a LoginApi) GetLoginHistory(c *gin.Context) {
|
||||||
|
// 获取当前登录用户
|
||||||
|
user := a.loginService.GetCurrentUser(c)
|
||||||
|
// 配置参数
|
||||||
|
query := request.LoginInfoQuery{}
|
||||||
|
query.UserName = user.UserName
|
||||||
|
// 查询
|
||||||
|
list, i := a.loginInfoService.FindPage(query)
|
||||||
|
success := resp.Success(page.Page{
|
||||||
|
Size: query.PageSize,
|
||||||
|
Total: i,
|
||||||
|
List: list,
|
||||||
|
}, "查询成功")
|
||||||
|
c.JSON(http.StatusOK, success)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Logout 退出登录
|
||||||
|
func (a LoginApi) Logout(c *gin.Context) {
|
||||||
|
// 删除Redis缓存
|
||||||
|
name := util.GetUserInfo(c).UserName
|
||||||
|
cache2.RemoveRedisToken(name)
|
||||||
|
resp.OK(c)
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/tree/tree_menu"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MenuApi struct {
|
||||||
|
menuService service.MenuService
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 查询菜单数据
|
||||||
|
func (a MenuApi) List(c *gin.Context) {
|
||||||
|
// 获取当前登录用户
|
||||||
|
info := util.GetUserInfo(c)
|
||||||
|
// 获取参数
|
||||||
|
query := request.MenuQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.OK(c, a.menuService.FindMenuList(query, info))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInfo 根据id查询菜单详情
|
||||||
|
func (a MenuApi) GetInfo(c *gin.Context) {
|
||||||
|
param := c.Param("menuId")
|
||||||
|
menuId, err := strconv.Atoi(param)
|
||||||
|
if err != nil {
|
||||||
|
resp.ParamError(c, "参数绑定错误")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.OK(c, a.menuService.GetMenuByMenuId(menuId))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RoleMenuTreeSelect 加载对应角色菜单列表树
|
||||||
|
func (a MenuApi) RoleMenuTreeSelect(c *gin.Context) {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
param := c.Param("roleId")
|
||||||
|
roleId, _ := strconv.ParseInt(param, 10, 64)
|
||||||
|
// 获取当前登录用户
|
||||||
|
info := util.GetUserInfo(c)
|
||||||
|
menuList := a.menuService.GetMenuTreeByUserId(info)
|
||||||
|
menus := tree_menu.SystemMenus{}
|
||||||
|
tree := menus.GetTree(menuList)
|
||||||
|
ids := a.menuService.FindMenuListByRoleId(roleId)
|
||||||
|
m["checkedKeys"] = ids
|
||||||
|
m["menus"] = tree
|
||||||
|
c.JSON(http.StatusOK, resp.Success(m))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TreeSelect 获取菜单下拉树列表
|
||||||
|
func (a MenuApi) TreeSelect(c *gin.Context) {
|
||||||
|
info := util.GetUserInfo(c)
|
||||||
|
menus := a.menuService.GetMenuTreeByUserId(info)
|
||||||
|
systemMenus := tree_menu.SystemMenus{}
|
||||||
|
tree := systemMenus.GetTree(menus)
|
||||||
|
c.JSON(http.StatusOK, resp.Success(tree))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加菜单数据
|
||||||
|
func (a MenuApi) Add(c *gin.Context) {
|
||||||
|
menu := entity.SysMenu{}
|
||||||
|
if c.Bind(&menu) != nil {
|
||||||
|
resp.ParamError(c, "参数绑定异常")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.menuService.Save(menu) > 0 {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改菜单数据
|
||||||
|
func (a MenuApi) Edit(c *gin.Context) {
|
||||||
|
menu := entity.SysMenu{}
|
||||||
|
if c.Bind(&menu) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
menu.UpdateBy = util.GetUserInfo(c).UserName
|
||||||
|
menu.UpdateTime = time.Now()
|
||||||
|
if a.menuService.Edit(menu) > 0 {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除菜单
|
||||||
|
func (a MenuApi) Delete(c *gin.Context) {
|
||||||
|
param := c.Param("menuId")
|
||||||
|
menuId, err := strconv.Atoi(param)
|
||||||
|
if err != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.menuService.Remove(menuId) > 0 {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NoticeApi struct {
|
||||||
|
noticeService service.NoticeService
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 查询集合
|
||||||
|
func (a NoticeApi) List(c *gin.Context) {
|
||||||
|
query := request.NoticeQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
find, i := a.noticeService.FindPage(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: find,
|
||||||
|
Total: i,
|
||||||
|
Size: query.PageSize,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加公告
|
||||||
|
func (a NoticeApi) Add(c *gin.Context) {
|
||||||
|
notice := entity.SysNotice{}
|
||||||
|
if c.Bind(¬ice) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
notice.CreateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.noticeService.Save(notice) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除
|
||||||
|
func (a NoticeApi) Delete(c *gin.Context) {
|
||||||
|
ids := strings.Split(c.Param("ids"), ",")
|
||||||
|
idList := make([]int64, 0)
|
||||||
|
for _, s := range ids {
|
||||||
|
id, _ := strconv.ParseInt(s, 10, 64)
|
||||||
|
idList = append(idList, id)
|
||||||
|
}
|
||||||
|
if a.noticeService.Remove(idList) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 查询
|
||||||
|
func (a NoticeApi) Get(c *gin.Context) {
|
||||||
|
param := c.Param("id")
|
||||||
|
id, _ := strconv.ParseInt(param, 10, 64)
|
||||||
|
resp.OK(c, a.noticeService.GetById(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改
|
||||||
|
func (a NoticeApi) Edit(c *gin.Context) {
|
||||||
|
notice := entity.SysNotice{}
|
||||||
|
if c.Bind(¬ice) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
notice.UpdateTime = time.Now()
|
||||||
|
notice.UpdateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.noticeService.Edit(notice) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
service2 "cutego/core/service"
|
||||||
|
"cutego/pkg/excels"
|
||||||
|
"cutego/pkg/file"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PostApi struct {
|
||||||
|
postService service2.PostService
|
||||||
|
userPostService service2.UserPostService
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 查询刚问分页数据
|
||||||
|
func (a PostApi) List(c *gin.Context) {
|
||||||
|
query := request.PostQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list, i := a.postService.FindPage(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: list,
|
||||||
|
Total: i,
|
||||||
|
Size: query.PageSize,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 新增岗位
|
||||||
|
func (a PostApi) Add(c *gin.Context) {
|
||||||
|
post := entity.SysPost{}
|
||||||
|
if c.Bind(&post) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 校验岗位名称是否存在
|
||||||
|
if a.postService.CheckPostNameUnique(post) {
|
||||||
|
resp.Error(c, "新增岗位'"+post.PostName+"'失败, 岗位名称已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 检验岗位编码是否存在
|
||||||
|
if a.postService.CheckPostCodeUnique(post) {
|
||||||
|
resp.Error(c, "新增岗位'"+post.PostCode+"'失败, 岗位编码已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
post.CreateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.postService.Save(post) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 根据岗位编号获取详细信息
|
||||||
|
func (a PostApi) Get(c *gin.Context) {
|
||||||
|
param := c.Param("postId")
|
||||||
|
postId, _ := strconv.ParseInt(param, 10, 64)
|
||||||
|
resp.OK(c, a.postService.GetPostById(postId))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除岗位数据
|
||||||
|
func (a PostApi) Delete(c *gin.Context) {
|
||||||
|
// 获取postId
|
||||||
|
param := c.Param("postId")
|
||||||
|
list := make([]int64, 0)
|
||||||
|
if gotool.StrUtils.HasNotEmpty(param) {
|
||||||
|
strs := strings.Split(param, ",")
|
||||||
|
for _, str := range strs {
|
||||||
|
postId, _ := strconv.ParseInt(str, 10, 64)
|
||||||
|
list = append(list, postId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 判断是否可以删除
|
||||||
|
postId := a.userPostService.CountUserPostById(list)
|
||||||
|
if postId > 0 {
|
||||||
|
post := a.postService.GetPostById(postId)
|
||||||
|
resp.Error(c, post.PostName+"岗位已分配, 不允许删除")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.postService.Remove(list) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改岗位数据接口
|
||||||
|
func (a PostApi) Edit(c *gin.Context) {
|
||||||
|
post := entity.SysPost{}
|
||||||
|
if c.Bind(&post) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 校验岗位名称是否存在
|
||||||
|
if a.postService.CheckPostNameUnique(post) {
|
||||||
|
resp.Error(c, "修改岗位'"+post.PostName+"'失败, 岗位名称已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 检验岗位编码是否存在
|
||||||
|
if a.postService.CheckPostCodeUnique(post) {
|
||||||
|
resp.Error(c, "修改岗位'"+post.PostCode+"'失败, 岗位编码已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
post.UpdateBy = util.GetUserInfo(c).UserName
|
||||||
|
post.UpdateTime = time.Now()
|
||||||
|
if a.postService.Edit(post) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export 导出excel
|
||||||
|
func (a PostApi) Export(c *gin.Context) {
|
||||||
|
query := request.PostQuery{}
|
||||||
|
if c.Bind(&query) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list, _ := a.postService.FindPage(query)
|
||||||
|
excelList := make([]interface{}, 0)
|
||||||
|
for _, post := range *list {
|
||||||
|
excelList = append(excelList, post)
|
||||||
|
}
|
||||||
|
_, files := excels.ExportExcel(excelList, "岗位数据表")
|
||||||
|
file.DownloadExcel(c, files)
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
type ConfigQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
ConfigName string `form:"configName"`
|
||||||
|
ConfigType string `form:"configType"`
|
||||||
|
ConfigKey string `form:"configKey"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
type CronJobQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
JobName string `form:"jobName"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
// DeptQuery 部门查询参数结构体 GET请求
|
||||||
|
type DeptQuery struct {
|
||||||
|
ParentId int `form:"parentId"`
|
||||||
|
DeptName string `form:"deptName"`
|
||||||
|
Status string `form:"status"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
type DiceDataQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
DictType string `form:"dictType"`
|
||||||
|
DictLabel string `form:"dictLabel"`
|
||||||
|
Status string `form:"status"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
type DictTypeQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
DictName string `form:"dictName"`
|
||||||
|
Status string `form:"status"`
|
||||||
|
DictType string `form:"dictType"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
// LoginInfoQuery 用户get请求数据参数
|
||||||
|
type LoginInfoQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
UserName string // 筛选用户名称
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
// LoginBody 登录参数
|
||||||
|
type LoginBody struct {
|
||||||
|
UserName string `json:"username"` // 用户名
|
||||||
|
Password string `json:"password"` // 密码
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
// MenuQuery 菜单查询条件封装
|
||||||
|
type MenuQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
MenuName string `json:"menuName" form:"menuName"`
|
||||||
|
Visible string `json:"visible" form:"visible"`
|
||||||
|
Status string `json:"status" form:"status"`
|
||||||
|
UserId int64 `json:"userId" form:"userId"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
type NoticeQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
NoticeTitle string `form:"noticeTitle"`
|
||||||
|
NoticeType string `form:"noticeType"`
|
||||||
|
CreateBy string `form:"createBy"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
type PostQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
PostCode string `form:"postCode"`
|
||||||
|
Status string `form:"status"`
|
||||||
|
PostName string `form:"postName"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import "cutego/pkg/base"
|
||||||
|
|
||||||
|
// RoleQuery 角色Get请求参数
|
||||||
|
type RoleQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
RoleName string `form:"roleName"` // 角色名称
|
||||||
|
Status string `form:"status"` // 角色状态
|
||||||
|
RoleKey string `form:"roleKey"` // 角色Key
|
||||||
|
}
|
||||||
|
|
||||||
|
// RoleBody 角色Post和Put参数
|
||||||
|
type RoleBody struct {
|
||||||
|
RoleId int64 `json:"roleId"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/pkg/base"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UserQuery 用户get请求数据参数
|
||||||
|
type UserQuery struct {
|
||||||
|
base.GlobalQuery
|
||||||
|
RoleId int64 `form:"roleId"` // 角色id
|
||||||
|
UserName string `form:"userName"` // 用户名
|
||||||
|
Status string `form:"status"` // 状态
|
||||||
|
PhoneNumber string `form:"phoneNumber"` // 手机号
|
||||||
|
DeptId int64 `form:"deptId"` // 部门id
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserBody 用户接收POST 或者 PUT请求参数
|
||||||
|
type UserBody struct {
|
||||||
|
UserId int64 `xorm:"pk autoincr" json:"userId"` // 用户ID
|
||||||
|
DeptId int64 `json:"deptId"` // 部门ID
|
||||||
|
UserName string `json:"userName"` // 登录用户名
|
||||||
|
NickName string `json:"nickName"` // 用户昵称
|
||||||
|
Email string `json:"email"` // 邮箱
|
||||||
|
PhoneNumber string `json:"phoneNumber"` // 手机号
|
||||||
|
Sex string `json:"sex"` // 性别0男1女
|
||||||
|
Avatar string `json:"avatar"` // 头像路径
|
||||||
|
Password string `json:"password"` // 密码
|
||||||
|
Status string `json:"status"` // 状态 0正常1停用
|
||||||
|
DelFlag string `json:"delFlag"` // 0正常1删除
|
||||||
|
LoginIp string `json:"loginIp"` // 登录ip
|
||||||
|
LoginDate time.Time `json:"loginDate"` // 登录时间
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
RoleIds []int64 `xorm:"-" json:"roleIds"` // 角色id组
|
||||||
|
PostIds []int64 `xorm:"-" json:"postIds"` // 岗位id组
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package request
|
||||||
|
|
||||||
|
// UserRoleBody 用户角色Post和Put参数接收结构体
|
||||||
|
type UserRoleBody struct {
|
||||||
|
RoleId int64 `form:"roleId" json:"roleId"`
|
||||||
|
UserIds []int64 `form:"userIds" json:"userIds"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package response
|
||||||
|
|
||||||
|
// DictDataResponse 字典数据实体返回结构体
|
||||||
|
type DictDataResponse struct {
|
||||||
|
DictCode int64 `excel:"name=字典编码" xorm:"pk autoincr" json:"dictCode"` // 字典ID
|
||||||
|
DictSort int `excel:"name=字典排序" xorm:"int" json:"dictSort"` // 字典排序
|
||||||
|
DictLabel string `excel:"name=字典标签" xorm:"varchar(128)" json:"dictLabel"` // 字典标签
|
||||||
|
DictValue string `excel:"name=字典键值" xorm:"varchar(128)" json:"dictValue"` // 字典键值
|
||||||
|
DictType string `excel:"name=字典类型" xorm:"varchar(128)" json:"dictType"` // 字典类型
|
||||||
|
IsDefault string `excel:"name=是否默认,format=Y=是,N=否" json:"isDefault"` // 是否默认
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package response
|
||||||
|
|
||||||
|
import (
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UserResponse 用户实体返回结构体
|
||||||
|
type UserResponse struct {
|
||||||
|
UserId int64 `json:"userId"` // 用户ID
|
||||||
|
DeptId int64 `excel:"name=部门" json:"deptId"` // 部门ID
|
||||||
|
UserName string `excel:"name=用户登录名" json:"userName"` // 登录用户名
|
||||||
|
NickName string `excel:"name=用户昵称" json:"nickName"` // 用户昵称
|
||||||
|
Email string `excel:"name=用户邮箱" json:"email"` // 邮箱
|
||||||
|
PhoneNumber string `excel:"name=手机号" json:"phoneNumber"` // 手机号
|
||||||
|
Sex string `excel:"name=性别,format=0=男,1=女,2=未知" json:"sex"` // 性别0男1女
|
||||||
|
Avatar string `json:"avatar"` // 头像路径
|
||||||
|
Status string `json:"status"` // 状态 0正常1停用
|
||||||
|
DelFlag string `json:"delFlag"` // 0正常1删除
|
||||||
|
LoginIp string `json:"loginIp"` // 登录ip
|
||||||
|
LoginDate time.Time `json:"loginDate"` // 登录时间
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
SysDept models2.SysDept `xorm:"extends" json:"dept"` // 部门实体
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserInfo 用户整体数据
|
||||||
|
type UserInfo struct {
|
||||||
|
User *UserResponse `json:"user,omitempty"` // 用户数据
|
||||||
|
Roles []*models2.SysRole `json:"roles,omitempty"` // 角色集合
|
||||||
|
Posts []*models2.SysPost `json:"posts,omitempty"` // 部门集合
|
||||||
|
PostIds *[]int64 `json:"postIds,omitempty"` // 岗位id集合
|
||||||
|
RoleIds *[]int64 `json:"roleIds,omitempty"` // 觉得id集合
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsAdmin 判断当前用户是否是管理员
|
||||||
|
func (r UserResponse) IsAdmin() bool {
|
||||||
|
return r.UserId == 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,202 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
req2 "cutego/core/api/v1/request"
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
service2 "cutego/core/service"
|
||||||
|
"cutego/pkg/excels"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RoleApi struct {
|
||||||
|
roleService service2.RoleService
|
||||||
|
userService service2.UserService
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find 分页查询角色数据
|
||||||
|
func (a RoleApi) Find(c *gin.Context) {
|
||||||
|
query := req2.RoleQuery{}
|
||||||
|
if c.BindQuery(&query) == nil {
|
||||||
|
list, i := a.roleService.FindPage(query)
|
||||||
|
p := page.Page{
|
||||||
|
List: list,
|
||||||
|
Total: i,
|
||||||
|
Size: query.PageSize,
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, resp.Success(p))
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数绑定异常"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoleId 根据人roleId查询角色数据
|
||||||
|
func (a RoleApi) GetRoleId(c *gin.Context) {
|
||||||
|
param := c.Param("roleId")
|
||||||
|
roleId, err := strconv.ParseInt(param, 10, 64)
|
||||||
|
if err == nil {
|
||||||
|
role := a.roleService.GetRoleByRoleId(roleId)
|
||||||
|
c.JSON(200, resp.Success(role))
|
||||||
|
} else {
|
||||||
|
c.JSON(500, resp.ErrorResp("参数绑定异常"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加角色业务操作
|
||||||
|
func (a RoleApi) Add(c *gin.Context) {
|
||||||
|
role := models2.SysRole{}
|
||||||
|
if c.BindJSON(&role) == nil {
|
||||||
|
if a.roleService.CheckRoleNameUnique(role) > 0 {
|
||||||
|
c.JSON(500, resp.ErrorResp(500, "新增角色'"+role.RoleName+"'失败, 角色名称已存在"))
|
||||||
|
} else if a.roleService.CheckRoleKeyUnique(role) > 0 {
|
||||||
|
c.JSON(500, resp.ErrorResp(500, "新增角色'"+role.RoleName+"'失败, 角色权限已存在"))
|
||||||
|
}
|
||||||
|
role.CreateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.roleService.Save(role) > 0 {
|
||||||
|
c.JSON(200, resp.Success("保存成功"))
|
||||||
|
} else {
|
||||||
|
c.JSON(500, resp.Success("保存失败"))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c.JSON(500, resp.ErrorResp("参数绑定异常"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改角色
|
||||||
|
func (a RoleApi) Edit(c *gin.Context) {
|
||||||
|
role := models2.SysRole{}
|
||||||
|
if c.BindJSON(&role) == nil {
|
||||||
|
if a.roleService.CheckRoleNameUnique(role) > 0 {
|
||||||
|
c.JSON(500, resp.ErrorResp(500, "修改角色'"+role.RoleName+"'失败, 角色名称已存在"))
|
||||||
|
} else if a.roleService.CheckRoleKeyUnique(role) > 0 {
|
||||||
|
c.JSON(500, resp.ErrorResp(500, "修改角色'"+role.RoleName+"'失败, 角色权限已存在"))
|
||||||
|
}
|
||||||
|
role.CreateBy = util.GetUserInfo(c).UserName
|
||||||
|
role.CreateTime = time.Now()
|
||||||
|
if a.roleService.Edit(role) > 0 {
|
||||||
|
c.JSON(200, resp.Success("修改成功"))
|
||||||
|
} else {
|
||||||
|
c.JSON(500, resp.Success("修改失败"))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c.JSON(500, resp.ErrorResp("参数绑定异常"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除角色
|
||||||
|
func (a RoleApi) Delete(c *gin.Context) {
|
||||||
|
param := c.Param("roleId")
|
||||||
|
roleId, err := strconv.ParseInt(param, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(500, resp.ErrorResp("参数绑定异常"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.roleService.Remove(roleId) > 0 {
|
||||||
|
c.JSON(200, resp.Success("删除成功"))
|
||||||
|
} else {
|
||||||
|
c.JSON(500, resp.Success("删除失败"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangeStatus 状态修改
|
||||||
|
func (a RoleApi) ChangeStatus(c *gin.Context) {
|
||||||
|
body := models2.SysRole{}
|
||||||
|
if c.BindJSON(&body) != nil {
|
||||||
|
c.JSON(500, resp.ErrorResp("参数绑定异常"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
allowed, s := a.roleService.CheckRoleAllowed(body.RoleId)
|
||||||
|
if !allowed {
|
||||||
|
c.JSON(500, resp.ErrorResp(s))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
body.UpdateTime = time.Now()
|
||||||
|
body.UpdateBy = util.GetUserInfo(c).UserName
|
||||||
|
if a.roleService.EditRoleStatus(&body) > 0 {
|
||||||
|
resp.OK(c, "修改成功")
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AllocatedList 查询已分配用户角色列表
|
||||||
|
func (a RoleApi) AllocatedList(c *gin.Context) {
|
||||||
|
query := req2.UserQuery{}
|
||||||
|
if c.BindQuery(&query) != nil {
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list, i := a.userService.GetAllocatedList(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: list,
|
||||||
|
Total: i,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnallocatedList 查询未分配用户角色列表
|
||||||
|
func (a RoleApi) UnallocatedList(c *gin.Context) {
|
||||||
|
query := req2.UserQuery{}
|
||||||
|
if c.BindQuery(&query) != nil {
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list, i := a.userService.GetUnallocatedList(query)
|
||||||
|
resp.OK(c, page.Page{
|
||||||
|
List: list,
|
||||||
|
Total: i,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CancelAuthUser 取消授权用户
|
||||||
|
func (a RoleApi) CancelAuthUser(c *gin.Context) {
|
||||||
|
roleUser := models2.SysUserRole{}
|
||||||
|
if c.BindJSON(&roleUser) != nil {
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.roleService.DeleteAuthUser(roleUser) > 0 {
|
||||||
|
resp.OK(c, "操作成功")
|
||||||
|
} else {
|
||||||
|
resp.Error(c, "操作失败")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateAuthUserAll 批量选择用户授权
|
||||||
|
func (a RoleApi) UpdateAuthUserAll(c *gin.Context) {
|
||||||
|
body := req2.UserRoleBody{}
|
||||||
|
if c.Bind(&body) != nil {
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.roleService.InsertAuthUsers(body) > 0 {
|
||||||
|
resp.OK(c, "操作成功")
|
||||||
|
} else {
|
||||||
|
resp.Error(c, "操作失败")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export 导出Excel
|
||||||
|
func (a RoleApi) Export(c *gin.Context) {
|
||||||
|
query := req2.RoleQuery{}
|
||||||
|
items := make([]interface{}, 0)
|
||||||
|
if c.BindQuery(&query) == nil {
|
||||||
|
list, _ := a.roleService.FindPage(query)
|
||||||
|
for _, role := range list {
|
||||||
|
items = append(items, *role)
|
||||||
|
}
|
||||||
|
_, file := excels.ExportExcel(items, "角色表")
|
||||||
|
c.Header("Content-Type", "application/octet-stream")
|
||||||
|
c.Header("Content-Disposition", "attachment; filename="+gotool.IdUtils.IdUUIDToRan(false)+".xlsx")
|
||||||
|
c.Header("Content-Transfer-Encoding", "binary")
|
||||||
|
c.Header("FileName", gotool.IdUtils.IdUUIDToRan(false)+".xlsx")
|
||||||
|
file.Write(c.Writer)
|
||||||
|
} else {
|
||||||
|
c.JSON(200, resp.ErrorResp(500, "参数错误"))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,334 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/api/v1/response"
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
service2 "cutego/core/service"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/excels"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"cutego/pkg/resp"
|
||||||
|
"cutego/pkg/util"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UserApi 用户操作api
|
||||||
|
type UserApi struct {
|
||||||
|
userService service2.UserService
|
||||||
|
roleService service2.RoleService
|
||||||
|
postService service2.PostService
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find 查询用户列表
|
||||||
|
func (a UserApi) Find(c *gin.Context) {
|
||||||
|
query := request.UserQuery{}
|
||||||
|
if c.BindQuery(&query) == nil {
|
||||||
|
list, i := a.userService.FindList(query)
|
||||||
|
success := resp.Success(page.Page{
|
||||||
|
Size: query.PageSize,
|
||||||
|
Total: i,
|
||||||
|
List: list,
|
||||||
|
}, "查询成功")
|
||||||
|
c.JSON(http.StatusOK, success)
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "参数错误"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInfo 查询用户信息
|
||||||
|
func (a UserApi) GetInfo(c *gin.Context) {
|
||||||
|
param := c.Param("userId")
|
||||||
|
r := new(response.UserInfo)
|
||||||
|
// 查询角色
|
||||||
|
roleAll, _ := a.roleService.FindAll(nil)
|
||||||
|
// 岗位所有数据
|
||||||
|
postAll := a.postService.FindAll()
|
||||||
|
// 判断id传入的是否为空
|
||||||
|
if !gotool.StrUtils.HasEmpty(param) {
|
||||||
|
parseInt, err := strconv.ParseInt(param, 10, 64)
|
||||||
|
if err == nil {
|
||||||
|
// 判断当前登录用户是否是admin
|
||||||
|
m := new(models2.SysUser)
|
||||||
|
if m.IsAdmin(parseInt) {
|
||||||
|
r.Roles = roleAll
|
||||||
|
} else {
|
||||||
|
roles := make([]*models2.SysRole, 0)
|
||||||
|
for _, role := range roleAll {
|
||||||
|
if role.RoleId != 1 {
|
||||||
|
roles = append(roles, role)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.Roles = roles
|
||||||
|
}
|
||||||
|
// 根据id获取用户数据
|
||||||
|
r.User = a.userService.GetUserById(parseInt)
|
||||||
|
// 根据用户ID查询岗位id集合
|
||||||
|
r.PostIds = a.postService.FindPostListByUserId(parseInt)
|
||||||
|
// 根据用户ID查询角色id集合
|
||||||
|
r.RoleIds = a.roleService.FindRoleListByUserId(parseInt)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//id为空不取管理员角色
|
||||||
|
roles := make([]*models2.SysRole, 0)
|
||||||
|
for _, role := range roleAll {
|
||||||
|
if role.RoleId != 1 {
|
||||||
|
roles = append(roles, role)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.Roles = roles
|
||||||
|
}
|
||||||
|
r.Posts = postAll
|
||||||
|
c.JSON(http.StatusOK, resp.Success(r, "操作成功"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// AuthRole 根据用户编号获取授权角色
|
||||||
|
func (a UserApi) AuthRole(c *gin.Context) {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
userId := c.Param("userId")
|
||||||
|
parseInt, err := strconv.ParseInt(userId, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp(err))
|
||||||
|
}
|
||||||
|
user := a.userService.GetUserById(parseInt)
|
||||||
|
// 查询角色
|
||||||
|
roles := a.roleService.GetRoleListByUserId(parseInt)
|
||||||
|
flag := models2.SysUser{}.IsAdmin(parseInt)
|
||||||
|
if flag {
|
||||||
|
m["roles"] = roles
|
||||||
|
} else {
|
||||||
|
roleList := make([]models2.SysRole, 0)
|
||||||
|
for _, role := range *roles {
|
||||||
|
if role.RoleId != 1 {
|
||||||
|
roleList = append(roleList, role)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m["roles"] = roleList
|
||||||
|
}
|
||||||
|
m["user"] = user
|
||||||
|
c.JSON(http.StatusOK, resp.Success(m))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 新增用户
|
||||||
|
func (a UserApi) Add(c *gin.Context) {
|
||||||
|
userBody := request.UserBody{}
|
||||||
|
if c.BindJSON(&userBody) == nil {
|
||||||
|
// 根据用户名查询用户
|
||||||
|
user := a.userService.GetUserByUserName(userBody.UserName)
|
||||||
|
if user != nil {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 登录账号已存在"))
|
||||||
|
return
|
||||||
|
} else if a.userService.CheckPhoneNumUnique(userBody) != nil {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 手机号码已存在"))
|
||||||
|
return
|
||||||
|
} else if a.userService.CheckEmailUnique(userBody) != nil {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 邮箱已存在"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 进行密码加密
|
||||||
|
userBody.Password = gotool.BcryptUtils.Generate(userBody.Password)
|
||||||
|
// 添加用户
|
||||||
|
if a.userService.Save(userBody) {
|
||||||
|
c.JSON(http.StatusOK, resp.Success(nil))
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("保存失败"))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数错误"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改用户
|
||||||
|
func (a UserApi) Edit(c *gin.Context) {
|
||||||
|
userBody := request.UserBody{}
|
||||||
|
if c.BindJSON(&userBody) == nil {
|
||||||
|
if a.userService.CheckPhoneNumUnique(userBody) != nil {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 手机号码已存在"))
|
||||||
|
return
|
||||||
|
} else if a.userService.CheckEmailUnique(userBody) != nil {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 邮箱已存在"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 进行用户修改操作
|
||||||
|
if a.userService.Edit(userBody) > 0 {
|
||||||
|
resp.OK(c)
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除用户
|
||||||
|
func (a UserApi) Remove(c *gin.Context) {
|
||||||
|
param := c.Param("userId")
|
||||||
|
userId, err := strconv.ParseInt(param, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数错误"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.userService.Remove(userId) > 0 {
|
||||||
|
c.JSON(http.StatusOK, resp.Success(nil))
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("删除失败"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResetPwd 修改重置密码
|
||||||
|
func (a UserApi) ResetPwd(c *gin.Context) {
|
||||||
|
userBody := request.UserBody{}
|
||||||
|
if c.BindJSON(&userBody) == nil {
|
||||||
|
if a.userService.CheckUserAllowed(userBody) {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("不允许操作超级管理员用户"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
userBody.Password = gotool.BcryptUtils.Generate(userBody.Password)
|
||||||
|
if a.userService.ResetPwd(userBody) > 0 {
|
||||||
|
c.JSON(http.StatusOK, resp.Success(nil))
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("重置失败"))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数错误"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export 导出excel
|
||||||
|
func (a UserApi) Export(c *gin.Context) {
|
||||||
|
query := request.UserQuery{}
|
||||||
|
if c.BindQuery(&query) == nil {
|
||||||
|
items := make([]interface{}, 0)
|
||||||
|
list, _ := a.userService.FindList(query)
|
||||||
|
for _, userResponse := range list {
|
||||||
|
items = append(items, *userResponse)
|
||||||
|
}
|
||||||
|
_, file := excels.ExportExcel(items, "用户表")
|
||||||
|
c.Header("Content-Type", "application/octet-stream")
|
||||||
|
c.Header("Content-Disposition", "attachment; filename="+gotool.IdUtils.IdUUIDToRan(false)+".xlsx")
|
||||||
|
c.Header("Content-Transfer-Encoding", "binary")
|
||||||
|
c.Header("FileName", gotool.IdUtils.IdUUIDToRan(false)+".xlsx")
|
||||||
|
file.Write(c.Writer)
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "参数错误"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Profile 查询个人信息
|
||||||
|
func (a UserApi) Profile(c *gin.Context) {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
info := util.GetUserInfo(c)
|
||||||
|
u := a.userService.GetUserById(info.UserId)
|
||||||
|
m["user"] = u
|
||||||
|
// 查询所属角色组
|
||||||
|
m["roleGroup"] = a.roleService.GetRolesByUserName(info.UserName)
|
||||||
|
m["postGroup"] = a.postService.FindPostByUserName(info.UserName)
|
||||||
|
resp.OK(c, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateProfile 修改个人数据
|
||||||
|
func (a UserApi) UpdateProfile(c *gin.Context) {
|
||||||
|
user := request.UserBody{}
|
||||||
|
if c.Bind(&user) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.userService.CheckEmailUnique(user) != nil {
|
||||||
|
resp.Error(c, "修改用户'"+user.UserName+"'失败, 邮箱账号已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.userService.CheckPhoneNumUnique(user) != nil {
|
||||||
|
resp.Error(c, "修改用户'"+user.UserName+"'失败, 手机号已存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.userService.EditProfile(user) > 0 {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatePwd 修改个人密码
|
||||||
|
func (a UserApi) UpdatePwd(c *gin.Context) {
|
||||||
|
oldPassword := c.Query("oldPassword")
|
||||||
|
newPassword := c.Query("newPassword")
|
||||||
|
info := util.GetUserInfo(c)
|
||||||
|
name := a.userService.GetUserByUserName(info.UserName)
|
||||||
|
hash := gotool.BcryptUtils.CompareHash(name.Password, oldPassword)
|
||||||
|
if !hash {
|
||||||
|
resp.Error(c, "修改密码失败, 旧密码错误")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
generate := gotool.BcryptUtils.Generate(oldPassword)
|
||||||
|
compareHash := gotool.BcryptUtils.CompareHash(generate, newPassword)
|
||||||
|
if compareHash {
|
||||||
|
resp.Error(c, "新密码不能与旧密码相同")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pwd := a.userService.EditPwd(info.UserId, gotool.BcryptUtils.Generate(newPassword))
|
||||||
|
if pwd {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Avatar 修改头像
|
||||||
|
func (a UserApi) Avatar(c *gin.Context) {
|
||||||
|
dirPath := common.GetDirPath("avatar")
|
||||||
|
file, _, err := c.Request.FormFile("avatarFile")
|
||||||
|
fileName := gotool.IdUtils.IdUUIDToRan(true) + ".jpg"
|
||||||
|
filePath := dirPath + fileName
|
||||||
|
fileAppend, err := gotool.FileUtils.OpenFileAppend(filePath)
|
||||||
|
defer fileAppend.Close()
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = io.Copy(fileAppend, file)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
resp.Error(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
info := util.GetUserInfo(c)
|
||||||
|
info.Avatar = filePath
|
||||||
|
avatar := a.userService.EditAvatar(info)
|
||||||
|
if avatar {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
m["imgUrl"] = filePath
|
||||||
|
resp.OK(c, m)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改可用状态
|
||||||
|
func (a UserApi) ChangeStatus(c *gin.Context) {
|
||||||
|
user := request.UserBody{}
|
||||||
|
if c.Bind(&user) != nil {
|
||||||
|
resp.ParamError(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if user.UserId == 1 && user.Status == "1" {
|
||||||
|
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "不可禁用admin账号"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if a.userService.EditStatus(user) {
|
||||||
|
resp.OK(c)
|
||||||
|
} else {
|
||||||
|
resp.Error(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+30
@@ -0,0 +1,30 @@
|
|||||||
|
package cache
|
||||||
|
|
||||||
|
import (
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
"cutego/pkg/cache"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/constant"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetRedisConfig 根据key从缓存中获取配置数据
|
||||||
|
// @Param key 键
|
||||||
|
// @Return *models2.SysConfig
|
||||||
|
func GetRedisConfig(key string) *models2.SysConfig {
|
||||||
|
val := cache.GetCache(constant.RedisConst{}.GetRedisConfigKey() + key)
|
||||||
|
s := new(models2.SysConfig)
|
||||||
|
return common.JsonToStruct(val, s).(*models2.SysConfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRedisConfig 将配置存入缓存
|
||||||
|
// @Param config models2.SysConfig
|
||||||
|
func SetRedisConfig(config models2.SysConfig) {
|
||||||
|
cache.SetCache(config.ConfigKey, common.StructToJson(config))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveRedisConfig 从缓存中删除配置
|
||||||
|
// @Param configKey string 配置键
|
||||||
|
// @Return 影响的行数
|
||||||
|
func RemoveRedisConfig(configKey string) int {
|
||||||
|
return cache.RemoveCache(constant.RedisConst{}.GetRedisConfigKey() + configKey)
|
||||||
|
}
|
||||||
Vendored
+35
@@ -0,0 +1,35 @@
|
|||||||
|
package cache
|
||||||
|
|
||||||
|
import (
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
"cutego/pkg/cache"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/constant"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetRedisDict 根据key获取缓存中的字典数据
|
||||||
|
// @Param key string 键
|
||||||
|
// @Return interface {}
|
||||||
|
func GetRedisDict(key string) interface{} {
|
||||||
|
val := cache.GetCache(key)
|
||||||
|
s := make([]interface{}, 0)
|
||||||
|
return common.JsonToStruct(val, s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRedisDict 保存字典数据
|
||||||
|
// @Param dictType string 字典类型
|
||||||
|
// @Param list []models2.SysDictData
|
||||||
|
func SetRedisDict(dictType string, list []models2.SysDictData) {
|
||||||
|
cache.SetCache(constant.RedisConst{}.GetRedisDictKey()+dictType, list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveRedisDictList 批量删除字典数据
|
||||||
|
// @Param dictType []string 字典类型集合
|
||||||
|
func RemoveRedisDictList(dictType []string) {
|
||||||
|
includeKey := make([]string, 0)
|
||||||
|
header := constant.RedisConst{}.GetRedisDictKey()
|
||||||
|
for _, e := range dictType {
|
||||||
|
includeKey = append(includeKey, header+e)
|
||||||
|
}
|
||||||
|
cache.RemoveList(includeKey)
|
||||||
|
}
|
||||||
Vendored
+24
@@ -0,0 +1,24 @@
|
|||||||
|
package cache
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/pkg/cache"
|
||||||
|
"cutego/pkg/config"
|
||||||
|
"cutego/pkg/constant"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetRedisToken 将token存入到redis
|
||||||
|
// @Param username string 用户名
|
||||||
|
// @Param token string token令牌
|
||||||
|
func SetRedisToken(username string, token string) {
|
||||||
|
if config.AppEnvConfig.Login.Single {
|
||||||
|
cache.SetCacheTTL(constant.RedisOnlineUserKey+username, token, 3600)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveRedisToken 将token从redis中删除
|
||||||
|
// @Param username string 用户名
|
||||||
|
// @Return 删除的行数
|
||||||
|
func RemoveRedisToken(username string) int {
|
||||||
|
// 不管是不是单点登录, 直接踢
|
||||||
|
return cache.RemoveCache(constant.RedisOnlineUserKey + username)
|
||||||
|
}
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConfigDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d ConfigDao) sql(session *xorm.Session) *xorm.Session {
|
||||||
|
return session.Table("sys_config")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectByConfigKey 根据键名查询参数配置信息
|
||||||
|
func (d ConfigDao) SelectByConfigKey(configKey string) *entity.SysConfig {
|
||||||
|
config := entity.SysConfig{}
|
||||||
|
_, err := d.sql(SqlDB.NewSession()).Where("config_key = ?", configKey).Get(&config)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &config
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 分页查询数据
|
||||||
|
func (d ConfigDao) SelectPage(query request.ConfigQuery) (*[]entity.SysConfig, int64) {
|
||||||
|
configs := make([]entity.SysConfig, 0)
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.ConfigName) {
|
||||||
|
session.And("config_name like concat('%', ?, '%')", query.ConfigName)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.ConfigType) {
|
||||||
|
session.And("config_type = ?", query.ConfigType)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.ConfigKey) {
|
||||||
|
session.And("config_key like concat('%', ?, '%')", query.ConfigKey)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.BeginTime) {
|
||||||
|
session.And("date_format(create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.EndTime) {
|
||||||
|
session.And("date_format(create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&configs)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return &configs, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckConfigKeyUnique 校验是否存在
|
||||||
|
func (d ConfigDao) CheckConfigKeyUnique(config entity.SysConfig) int64 {
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
if config.ConfigId > 0 {
|
||||||
|
session.Where("config_id != ?", config.ConfigId)
|
||||||
|
}
|
||||||
|
count, err := session.And("config_key = ?", config.ConfigKey).Cols("config_id").Count()
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加数据
|
||||||
|
func (d ConfigDao) Insert(config entity.SysConfig) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&config)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectById 查询数据
|
||||||
|
func (d ConfigDao) SelectById(id int64) *entity.SysConfig {
|
||||||
|
config := entity.SysConfig{}
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
_, err := session.Where("config_id = ?", id).Get(&config)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &config
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改数据
|
||||||
|
func (d ConfigDao) Update(config entity.SysConfig) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Where("config_id = ?", config.ConfigId).Update(&config)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckConfigByIds 根据id集合查询
|
||||||
|
func (d ConfigDao) CheckConfigByIds(list []int64) *[]entity.SysConfig {
|
||||||
|
configs := make([]entity.SysConfig, 0)
|
||||||
|
err := d.sql(SqlDB.NewSession()).In("config_id", list).Find(&configs)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &configs
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除数据
|
||||||
|
func (d ConfigDao) Delete(list []int64) bool {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.In("config_id", list).Delete(&entity.SysConfig{})
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectAll 查询所有数据
|
||||||
|
func (d ConfigDao) SelectAll() *[]entity.SysConfig {
|
||||||
|
configs := make([]entity.SysConfig, 0)
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
err := session.Find(&configs)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &configs
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CronJobDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d CronJobDao) sql(session *xorm.Session) *xorm.Session {
|
||||||
|
return session.Table("sys_cron_job")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 分页查询数据
|
||||||
|
func (d CronJobDao) SelectPage(query request.CronJobQuery) ([]entity.SysCronJob, int64) {
|
||||||
|
configs := make([]entity.SysCronJob, 0)
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.JobName) {
|
||||||
|
session.And("job_name like concat('%', ?, '%')", query.JobName)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&configs)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return configs, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加数据
|
||||||
|
func (d CronJobDao) Insert(config entity.SysCronJob) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&config)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectById 查询数据
|
||||||
|
func (d CronJobDao) SelectById(id int64) *entity.SysCronJob {
|
||||||
|
config := entity.SysCronJob{}
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
_, err := session.Where("job_id = ?", id).Get(&config)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &config
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改数据
|
||||||
|
func (d CronJobDao) Update(config entity.SysCronJob) int64 {
|
||||||
|
//session := SqlDB.NewSession()
|
||||||
|
//session.Begin()
|
||||||
|
//update, err := session.Where("job_id = ?", config.JobId).Update(&config)
|
||||||
|
//if err != nil {
|
||||||
|
// common.ErrorLog(err)
|
||||||
|
// session.Rollback()
|
||||||
|
// return 0
|
||||||
|
//}
|
||||||
|
//session.Commit()
|
||||||
|
return CustomUpdateById("job_id", config.JobId, config)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除数据
|
||||||
|
func (d CronJobDao) Delete(list []int64) bool {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.In("config_id", list).Delete(&entity.SysCronJob{})
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通过方法别名获取任务详情
|
||||||
|
func (d CronJobDao) SelectByFuncAlias(funcAlias string) *entity.SysCronJob {
|
||||||
|
config := entity.SysCronJob{}
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
_, err := session.Where("func_alias = ?", funcAlias).Get(&config)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &config
|
||||||
|
}
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DeptDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectTree 根据条件查询部门集合
|
||||||
|
func (d DeptDao) SelectTree(query request.DeptQuery) *[]entity.SysDept {
|
||||||
|
depts := make([]entity.SysDept, 0)
|
||||||
|
session := SqlDB.NewSession().Where("del_flag = '0'")
|
||||||
|
if query.ParentId > 0 {
|
||||||
|
session.And("parent_id = ?", query.ParentId)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(query.DeptName) {
|
||||||
|
session.And("dept_name like concat('%', ?, '%')", query.DeptName)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(query.Status) {
|
||||||
|
session.And("status = ?", query.Status)
|
||||||
|
}
|
||||||
|
err := session.OrderBy("parent_id").OrderBy("order_num").Find(&depts)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &depts
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectDeptListByRoleId 根据角色ID查询部门树信息
|
||||||
|
func (d DeptDao) SelectDeptListByRoleId(id int64, strictly bool) *[]int64 {
|
||||||
|
list := make([]int64, 0)
|
||||||
|
session := SqlDB.NewSession().Table([]string{"sys_dept", "d"}).Cols("d.dept_id")
|
||||||
|
session.Join("LEFT", []string{"sys_role_dept", "rd"}, "d.dept_id = rd.dept_id").
|
||||||
|
Where("rd.role_id = ?", id)
|
||||||
|
if strictly {
|
||||||
|
session.And("d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = ?)", id)
|
||||||
|
}
|
||||||
|
err := session.OrderBy("d.parent_id").OrderBy("d.order_num").Find(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &list
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetList 查询部门列表
|
||||||
|
func (d DeptDao) GetList(query request.DeptQuery) *[]entity.SysDept {
|
||||||
|
list := make([]entity.SysDept, 0)
|
||||||
|
session := SqlDB.NewSession().OrderBy("parent_id").OrderBy("order_num")
|
||||||
|
session.Where("del_flag = '0'")
|
||||||
|
if query.ParentId > 0 {
|
||||||
|
session.And("parent_id = ?", query.ParentId)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.DeptName) {
|
||||||
|
session.And("dept_name like concat('%', ?, '%')", query.DeptName)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Status) {
|
||||||
|
session.And("status = ?", query.Status)
|
||||||
|
}
|
||||||
|
err := session.Find(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &list
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectDeptById 根据部门编号获取详细信息
|
||||||
|
func (d DeptDao) SelectDeptById(id int) *entity.SysDept {
|
||||||
|
dept := entity.SysDept{}
|
||||||
|
_, err := SqlDB.NewSession().Where("dept_id = ?", id).Get(&dept)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &dept
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加部门数据
|
||||||
|
func (d DeptDao) Insert(dept entity.SysDept) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&dept)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckDeptNameUnique 校验部门名称是否唯一
|
||||||
|
func (d DeptDao) CheckDeptNameUnique(dept entity.SysDept) int64 {
|
||||||
|
session := 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 {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasChildByDeptId 是否存在部门子节点
|
||||||
|
func (d DeptDao) HasChildByDeptId(id int) int64 {
|
||||||
|
count, _ := SqlDB.NewSession().Table("sys_dept").Cols("dept_id").Where("parent_id = ?", id).
|
||||||
|
And("del_flag = '0'").Limit(1).Count()
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckDeptExistUser 查询部门是否存在用户
|
||||||
|
func (d DeptDao) CheckDeptExistUser(id int) int64 {
|
||||||
|
count, _ := SqlDB.NewSession().Table("sys_user").Cols("user_id").Where("dept_id = ?", id).
|
||||||
|
And("del_flag = '0'").Count()
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除部门
|
||||||
|
func (d DeptDao) Delete(id int) int64 {
|
||||||
|
dept := entity.SysDept{
|
||||||
|
DeptId: id,
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
i, err := session.Where("dept_id = ?", id).Delete(&dept)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 更新部门
|
||||||
|
func (d DeptDao) Update(dept entity.SysDept) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Where("dept_id = ?", dept.DeptId).Update(&dept)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DictDataDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DictDataDao) sql(session *xorm.Session) *xorm.Session {
|
||||||
|
return session.Table("sys_dict_data")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectByDictType 根据字典类型查询字典数据
|
||||||
|
// @Param dictType string 字典类型
|
||||||
|
// @Return []entity.SysDictData
|
||||||
|
func (d *DictDataDao) SelectByDictType(dictType string) []entity.SysDictData {
|
||||||
|
data := make([]entity.SysDictData, 0)
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
err := session.Where("status = '0' ").And("dict_type = ?", dictType).OrderBy("dict_sort").Asc("dict_sort").
|
||||||
|
Find(&data)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDiceDataAll 查询所有字典数据
|
||||||
|
// @Return *[]entity.SysDictData
|
||||||
|
func (d DictDataDao) GetDiceDataAll() *[]entity.SysDictData {
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
data := make([]entity.SysDictData, 0)
|
||||||
|
err := session.Where("status = '0' ").OrderBy("dict_sort").Asc("dict_sort").
|
||||||
|
Find(&data)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &data
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 查询集合数据
|
||||||
|
// @Param query request.DiceDataQuery
|
||||||
|
// @Return *[]entity.SysDictData
|
||||||
|
// @Return 总行数
|
||||||
|
func (d *DictDataDao) SelectPage(query request.DiceDataQuery) (*[]entity.SysDictData, int64) {
|
||||||
|
list := make([]entity.SysDictData, 0)
|
||||||
|
session := SqlDB.NewSession().Table("sys_dict_data").OrderBy("dict_sort").Asc("dict_sort")
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.DictType) {
|
||||||
|
session.And("dict_type = ?", query.DictType)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.DictLabel) {
|
||||||
|
session.And("dict_label like concat('%', ?, '%')", query.DictLabel)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Status) {
|
||||||
|
session.And("status = ?", query.Status)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return &list, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectByDictCode 根据dictCode查询字典数据
|
||||||
|
// @Param dictCode int64
|
||||||
|
// @Return *entity.SysDictData
|
||||||
|
func (d *DictDataDao) SelectByDictCode(dictCode int64) *entity.SysDictData {
|
||||||
|
data := entity.SysDictData{}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
_, err := session.Where("dict_code = ?", dictCode).Get(&data)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &data
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加字典数据
|
||||||
|
// @Param data entity.SysDictData
|
||||||
|
// @Return 新增的行数
|
||||||
|
func (d *DictDataDao) Insert(data entity.SysDictData) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&data)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除字典数据
|
||||||
|
func (d *DictDataDao) Delete(codes []int64) bool {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.In("dict_code", codes).Delete(&entity.SysDictData{})
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改字典数据
|
||||||
|
func (d *DictDataDao) Update(data entity.SysDictData) bool {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Where("dict_code = ?", data.DictCode).Update(&data)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DictTypeDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d DictTypeDao) sql(session *xorm.Session) *xorm.Session {
|
||||||
|
return session.Table("sys_dict_type")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectAll 查询所有字典类型数据
|
||||||
|
func (d DictTypeDao) SelectAll() []*entity.SysDictType {
|
||||||
|
types := make([]*entity.SysDictType, 0)
|
||||||
|
err := d.sql(SqlDB.NewSession()).Where("status = '0'").Find(&types)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return types
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 分页查询字典类型数据
|
||||||
|
func (d DictTypeDao) SelectPage(query request.DictTypeQuery) (*[]entity.SysDictType, int64) {
|
||||||
|
list := make([]entity.SysDictType, 0)
|
||||||
|
session := SqlDB.NewSession().Table("sys_dict_type")
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.DictName) {
|
||||||
|
session.And("dict_name like concat('%', ?, '%')", query.DictName)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Status) {
|
||||||
|
session.And("status = ?", query.Status)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.DictType) {
|
||||||
|
session.And("AND dict_type like concat('%', ?, '%')", query.DictType)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.BeginTime) {
|
||||||
|
session.And("date_format(create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.EndTime) {
|
||||||
|
session.And("date_format(create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return &list, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectById 根据id查询字典类型数据
|
||||||
|
func (d DictTypeDao) SelectById(id int64) *entity.SysDictType {
|
||||||
|
dictType := entity.SysDictType{}
|
||||||
|
_, err := SqlDB.NewSession().Where("dict_id = ?", id).Get(&dictType)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &dictType
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckDictTypeUnique 检验字典类型是否存在
|
||||||
|
func (d DictTypeDao) CheckDictTypeUnique(dictType entity.SysDictType) int64 {
|
||||||
|
session := SqlDB.NewSession().Table("sys_dict_type")
|
||||||
|
if dictType.DictId > 0 {
|
||||||
|
session.And("dict_id != ?", dictType.DictId)
|
||||||
|
}
|
||||||
|
count, err := session.Where("dict_type = ?", dictType.DictType).Cols("dict_id").Count()
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改字典
|
||||||
|
func (d DictTypeDao) Update(dictType entity.SysDictType) bool {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Where("dict_id = ?", dictType.DictId).Update(&dictType)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 新增字典类型
|
||||||
|
func (d DictTypeDao) Insert(dictType entity.SysDictType) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&dictType)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 批量删除
|
||||||
|
func (d DictTypeDao) Delete(ids []int64) bool {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.In("dict_id", ids).Delete(entity.SysDictType{})
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/config"
|
||||||
|
"cutego/pkg/constant"
|
||||||
|
redisTool "cutego/pkg/redispool"
|
||||||
|
"fmt"
|
||||||
|
_ "github.com/go-sql-driver/mysql"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// X 全局DB
|
||||||
|
var (
|
||||||
|
SqlDB *xorm.Engine
|
||||||
|
RedisDB *redisTool.RedisClient
|
||||||
|
)
|
||||||
|
|
||||||
|
func initDatabase() {
|
||||||
|
var err error
|
||||||
|
// 配置mysql数据库
|
||||||
|
ds := config.AppEnvConfig.DataSource
|
||||||
|
jdbc := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
|
||||||
|
ds.Username,
|
||||||
|
ds.Password,
|
||||||
|
ds.Host,
|
||||||
|
ds.Port,
|
||||||
|
ds.Database,
|
||||||
|
ds.Charset,
|
||||||
|
)
|
||||||
|
SqlDB, _ = xorm.NewEngine(ds.DbType, jdbc)
|
||||||
|
if err != nil {
|
||||||
|
common.FatalfLog("db error: %#v\n", err.Error())
|
||||||
|
}
|
||||||
|
err = SqlDB.Ping()
|
||||||
|
if err != nil {
|
||||||
|
common.FatalfLog("db connect error: %#v\n", err.Error())
|
||||||
|
}
|
||||||
|
SqlDB.SetMaxIdleConns(ds.MaxIdleSize)
|
||||||
|
SqlDB.SetMaxOpenConns(ds.MaxOpenSize)
|
||||||
|
timer := time.NewTicker(time.Minute * 30)
|
||||||
|
go func(x *xorm.Engine) {
|
||||||
|
for _ = range timer.C {
|
||||||
|
err = x.Ping()
|
||||||
|
if err != nil {
|
||||||
|
common.FatalfLog("db connect error: %#v\n", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}(SqlDB)
|
||||||
|
SqlDB.ShowSQL(true)
|
||||||
|
}
|
||||||
|
func initRedis() {
|
||||||
|
// 配置redis数据库
|
||||||
|
RedisDB = redisTool.NewRedis()
|
||||||
|
}
|
||||||
|
func init() {
|
||||||
|
initDatabase()
|
||||||
|
initRedis()
|
||||||
|
cacheInitDataToRedis()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化缓存数据
|
||||||
|
func cacheInitDataToRedis() {
|
||||||
|
initDict()
|
||||||
|
initConfig()
|
||||||
|
}
|
||||||
|
|
||||||
|
func initDict() {
|
||||||
|
// 查询字典类型数据
|
||||||
|
dictTypeDao := new(DictTypeDao)
|
||||||
|
typeAll := dictTypeDao.SelectAll()
|
||||||
|
// 所有字典数据
|
||||||
|
d := new(DictDataDao)
|
||||||
|
listData := d.GetDiceDataAll()
|
||||||
|
for _, dictType := range typeAll {
|
||||||
|
dictData := make([]map[string]interface{}, 0)
|
||||||
|
for _, data := range *listData {
|
||||||
|
if dictType.DictType == data.DictType {
|
||||||
|
dictData = append(dictData, map[string]interface{}{
|
||||||
|
"dictCode": data.DictCode,
|
||||||
|
"dictSort": data.DictSort,
|
||||||
|
"dictLabel": data.DictLabel,
|
||||||
|
"dictValue": data.DictValue,
|
||||||
|
"isDefault": data.IsDefault,
|
||||||
|
"remark": data.Remark,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RedisDB.SET(constant.RedisConst{}.GetRedisDictKey()+dictType.DictType, common.StructToJson(dictData))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func initConfig() {
|
||||||
|
// 查询配置数据存入到缓存中
|
||||||
|
configDao := new(ConfigDao)
|
||||||
|
configSession := configDao.sql(SqlDB.NewSession())
|
||||||
|
configs := make([]*models2.SysConfig, 0)
|
||||||
|
err := configSession.Find(&configs)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, sysConfig := range configs {
|
||||||
|
RedisDB.SET(constant.RedisConst{}.GetRedisConfigKey()+sysConfig.ConfigKey, common.StructToJson(map[string]interface{}{
|
||||||
|
"configId": sysConfig.ConfigId,
|
||||||
|
"configName": sysConfig.ConfigName,
|
||||||
|
"configKey": sysConfig.ConfigKey,
|
||||||
|
"configValue": sysConfig.ConfigValue,
|
||||||
|
"configType": sysConfig.ConfigType,
|
||||||
|
"remark": sysConfig.Remark,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通用: 根据ID更新
|
||||||
|
// @Param idColumnName 字段名称
|
||||||
|
// @Param idColumnValue 字段值
|
||||||
|
// @Param bean 更新的bean内容
|
||||||
|
// @Return
|
||||||
|
func CustomUpdateById(idColumnName string, idColumnValue interface{}, bean interface{}) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Where(idColumnName+" = ?", idColumnValue).Update(&bean)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LoginInfoDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询公共sql
|
||||||
|
func (d LoginInfoDao) sql(session *xorm.Session) *xorm.Session {
|
||||||
|
return session.Table("sys_login_info")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 分页查询数据
|
||||||
|
func (d LoginInfoDao) SelectPage(query request.LoginInfoQuery) (*[]entity.SysLoginInfo, int64) {
|
||||||
|
loginInfos := make([]entity.SysLoginInfo, 0)
|
||||||
|
session := d.sql(SqlDB.NewSession())
|
||||||
|
session.And("user_name = ?", query.UserName)
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&loginInfos)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return &loginInfos, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加登录记录
|
||||||
|
func (d LoginInfoDao) Insert(body entity.SysLoginInfo) *entity.SysLoginInfo {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Table("sys_login_info").Insert(&body)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return &body
|
||||||
|
}
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MenuDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMenuPermission 根据用户ID查询权限
|
||||||
|
func (d MenuDao) GetMenuPermission(id int64) *[]string {
|
||||||
|
var perms []string
|
||||||
|
session := SqlDB.Table([]string{"sys_menu", "m"})
|
||||||
|
err := session.Distinct("m.perms").
|
||||||
|
Join("LEFT", []string{"sys_role_menu", "rm"}, "m.menu_id = rm.menu_id").
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id").
|
||||||
|
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 {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &perms
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMenuAll 查询所有菜单数据
|
||||||
|
func (d MenuDao) GetMenuAll() *[]entity.SysMenu {
|
||||||
|
menus := make([]entity.SysMenu, 0)
|
||||||
|
session := SqlDB.Table([]string{entity.SysMenu{}.TableName(), "m"})
|
||||||
|
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 {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &menus
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMenuByUserId 根据用户ID查询菜单
|
||||||
|
func (d MenuDao) GetMenuByUserId(id int64) *[]entity.SysMenu {
|
||||||
|
menus := make([]entity.SysMenu, 0)
|
||||||
|
session := SqlDB.Table([]string{entity.SysMenu{}.TableName(), "m"})
|
||||||
|
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").
|
||||||
|
Join("LEFT", []string{"sys_role_menu", "rm"}, "m.menu_id = rm.menu_id").
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id").
|
||||||
|
Join("LEFT", []string{"sys_role", "ro"}, "ur.role_id = ro.role_id").
|
||||||
|
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 {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &menus
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectMenuByRoleId 根据角色ID查询菜单树信息
|
||||||
|
func (d MenuDao) SelectMenuByRoleId(id int64, strictly bool) *[]int64 {
|
||||||
|
list := make([]int64, 0)
|
||||||
|
session := SqlDB.NewSession().Table([]string{"sys_menu", "m"})
|
||||||
|
session.Join("LEFT", []string{"sys_role_menu", "rm"}, "m.menu_id = rm.menu_id")
|
||||||
|
session.Where("rm.role_id = ?", id)
|
||||||
|
if strictly {
|
||||||
|
session.And("m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = ?)", id)
|
||||||
|
}
|
||||||
|
err := session.OrderBy("m.parent_id").OrderBy("m.order_num").Cols("m.menu_id").Find(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &list
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectMenuList 查询系统菜单列表
|
||||||
|
func (d MenuDao) SelectMenuList(query request.MenuQuery) *[]entity.SysMenu {
|
||||||
|
list := make([]entity.SysMenu, 0)
|
||||||
|
session := SqlDB.NewSession().OrderBy("parent_id").OrderBy("order_num")
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.MenuName) {
|
||||||
|
session.And("menu_name like concat('%', ?, '%')", query.MenuName)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Visible) {
|
||||||
|
session.And("visible = ?", query.Visible)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Status) {
|
||||||
|
session.And("status = ?", query.Status)
|
||||||
|
}
|
||||||
|
err := session.Find(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &list
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectMenuListByUserId 根据用户查询系统菜单列表
|
||||||
|
func (d MenuDao) SelectMenuListByUserId(query request.MenuQuery) *[]entity.SysMenu {
|
||||||
|
session := SqlDB.NewSession().OrderBy("parent_id").OrderBy("order_num")
|
||||||
|
list := make([]entity.SysMenu, 0)
|
||||||
|
session.Distinct("m.menu_id", "m.parent_id", "m.menu_name", "m.path", "m.component", "m.visible", "m.status", "ifnull(m.perms,'') as perms", "m.is_frame", "m.is_cache", "m.menu_type", "m.icon", "m.order_num", "m.create_time")
|
||||||
|
session.Join("LEFT", []string{"sys_role_menu", "rm"}, "m.menu_id = rm.menu_id").
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id").
|
||||||
|
Join("LEFT", []string{"sys_role", "ro"}, "ur.role_id = ro.role_id").
|
||||||
|
Where("ur.user_id = ?", query.UserId)
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.MenuName) {
|
||||||
|
session.And("menu_name like concat('%', ?, '%')", query.MenuName)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Visible) {
|
||||||
|
session.And("visible = ?", query.Visible)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Status) {
|
||||||
|
session.And("status = ?", query.Status)
|
||||||
|
}
|
||||||
|
err := session.Find(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &list
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectMenuByMenuId 根据菜单ID查询信息
|
||||||
|
func (d MenuDao) SelectMenuByMenuId(id int) *entity.SysMenu {
|
||||||
|
menu := entity.SysMenu{
|
||||||
|
MenuId: id,
|
||||||
|
}
|
||||||
|
_, err := SqlDB.NewSession().Where("menu_id = ?", menu.MenuId).Get(&menu)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &menu
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加菜单数据
|
||||||
|
func (d MenuDao) Insert(menu entity.SysMenu) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&menu)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改菜单数据
|
||||||
|
func (d MenuDao) Update(menu entity.SysMenu) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Where("menu_id = ?", menu.MenuId).Update(&menu)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除菜单操作
|
||||||
|
func (d MenuDao) Delete(id int) int64 {
|
||||||
|
menu := entity.SysMenu{
|
||||||
|
MenuId: id,
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
i, err := session.Delete(&menu)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return i
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NoticeDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 查询集合
|
||||||
|
func (d NoticeDao) SelectPage(query request.NoticeQuery) (*[]entity.SysNotice, int64) {
|
||||||
|
notices := make([]entity.SysNotice, 0)
|
||||||
|
session := SqlDB.NewSession().Table(entity.SysNotice{}.TableName())
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.NoticeTitle) {
|
||||||
|
session.And("notice_title like concat('%', ?, '%')", query.NoticeTitle)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.NoticeType) {
|
||||||
|
session.And("notice_type = ?", query.NoticeType)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.CreateBy) {
|
||||||
|
session.And("create_by like concat('%', ?, '%')", query.CreateBy)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(¬ices)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return ¬ices, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加数据
|
||||||
|
func (d NoticeDao) Insert(notice entity.SysNotice) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(¬ice)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 批量删除
|
||||||
|
func (d NoticeDao) Delete(list []int64) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
i, err := session.In("notice_id", list).Delete(&entity.SysNotice{})
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectById 查询
|
||||||
|
func (d NoticeDao) SelectById(id int64) *entity.SysNotice {
|
||||||
|
notice := entity.SysNotice{}
|
||||||
|
_, err := SqlDB.NewSession().Where("notice_id = ?", id).Get(¬ice)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return ¬ice
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改数据
|
||||||
|
func (d NoticeDao) Update(notice entity.SysNotice) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Where("notice_id = ?", notice.NoticeId).Update(¬ice)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PostDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d PostDao) sqlSelectJoin(session *xorm.Session) *xorm.Session {
|
||||||
|
return session.Table([]string{"sys_post", "p"}).
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectAll 查询所有岗位数据, 数据库操作
|
||||||
|
func (d PostDao) SelectAll() []*entity.SysPost {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
posts := make([]*entity.SysPost, 0)
|
||||||
|
err := session.Find(&posts)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return posts
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPostListByUserId 根据用户id查询岗位id集合
|
||||||
|
func (d PostDao) SelectPostListByUserId(userId int64) *[]int64 {
|
||||||
|
var ids []int64
|
||||||
|
selectSql := d.sqlSelectJoin(SqlDB.NewSession())
|
||||||
|
err := selectSql.Where("u.user_id = ?", userId).Cols("p.post_id").Find(&ids)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &ids
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 查询岗位分页数据
|
||||||
|
func (d PostDao) SelectPage(query request.PostQuery) (*[]entity.SysPost, int64) {
|
||||||
|
posts := make([]entity.SysPost, 0)
|
||||||
|
session := SqlDB.NewSession().Table(entity.SysPost{}.TableName())
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.PostCode) {
|
||||||
|
session.And("post_code like concat('%', ?, '%')", query.PostCode)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.Status) {
|
||||||
|
session.And("status = ?", query.Status)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.PostName) {
|
||||||
|
session.And("post_name like concat('%', ?, '%')", query.PostName)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&posts)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return &posts, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckPostNameUnique 校验岗位名称是否存在
|
||||||
|
func (d PostDao) CheckPostNameUnique(post entity.SysPost) int64 {
|
||||||
|
session := SqlDB.NewSession().Table("sys_post").Cols("post_id").
|
||||||
|
Where("post_name = ?", post.PostName)
|
||||||
|
if post.PostId > 0 {
|
||||||
|
session.And("post_id != ?", post.PostId)
|
||||||
|
}
|
||||||
|
count, _ := session.Count()
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckPostCodeUnique 校验岗位编码是否存在
|
||||||
|
func (d PostDao) CheckPostCodeUnique(post entity.SysPost) int64 {
|
||||||
|
session := SqlDB.NewSession().Table("sys_post").Cols("post_id").
|
||||||
|
Where("post_code = ?", post.PostCode)
|
||||||
|
if post.PostId > 0 {
|
||||||
|
session.And("post_id != ?", post.PostId)
|
||||||
|
}
|
||||||
|
count, _ := session.Count()
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加岗位数据
|
||||||
|
func (d PostDao) Insert(post entity.SysPost) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&post)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPostById 根据id查询岗位数据
|
||||||
|
func (d PostDao) GetPostById(post entity.SysPost) *entity.SysPost {
|
||||||
|
_, err := SqlDB.NewSession().Where("post_id = ?", post.PostId).Get(&post)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &post
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 批量删除岗位
|
||||||
|
func (d PostDao) Delete(posts []int64) int64 {
|
||||||
|
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
i, err := session.In("post_id", posts).Delete(&entity.SysPost{})
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改岗位数据
|
||||||
|
func (d PostDao) Update(post entity.SysPost) bool {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Where("post_id = ?", post.PostId).Update(&post)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d PostDao) SelectPostByUserName(name string) *[]entity.SysPost {
|
||||||
|
posts := make([]entity.SysPost, 0)
|
||||||
|
session := SqlDB.NewSession().Table([]string{entity.SysPost{}.TableName(), "p"})
|
||||||
|
err := session.Cols("p.post_id", "p.post_name", "p.post_code").
|
||||||
|
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 {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &posts
|
||||||
|
}
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RoleDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 角色公用sql
|
||||||
|
func (d RoleDao) sqlSelectJoin() *xorm.Session {
|
||||||
|
return SqlDB.Table([]string{entity.SysRole{}.TableName(), "r"}).
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.role_id").
|
||||||
|
Join("LEFT", []string{"sys_user", "u"}, "u.user_id = ur.user_id").
|
||||||
|
Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.dept_id")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户角色关系查询sql
|
||||||
|
func (d RoleDao) sqlSelectRoleAndUser() *xorm.Session {
|
||||||
|
return SqlDB.Table([]string{entity.SysRole{}.TableName(), "r"}).
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.role_id").
|
||||||
|
Join("LEFT", []string{"sys_user", "u"}, "u.user_id = ur.user_id")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 根据条件查询角色数据
|
||||||
|
func (d RoleDao) SelectPage(q *request.RoleQuery) ([]*entity.SysRole, int64) {
|
||||||
|
roles := make([]*entity.SysRole, 0)
|
||||||
|
session := d.sqlSelectJoin()
|
||||||
|
if !gotool.StrUtils.HasEmpty(q.RoleName) {
|
||||||
|
session.And("r.role_name like concat('%', ?, '%')", q.RoleName)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(q.Status) {
|
||||||
|
session.And("r.status = ?", q.Status)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(q.RoleKey) {
|
||||||
|
session.And("r.role_key like concat('%', ?, '%')", q.RoleKey)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(q.BeginTime) {
|
||||||
|
session.And("date_format(r.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", q.BeginTime)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(q.EndTime) {
|
||||||
|
session.And("date_format(r.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", q.EndTime)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(q.PageSize, page.StartSize(q.PageNum, q.PageSize)).OrderBy("r.role_sort").Find(&roles)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return roles, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectAll 查询所有角色
|
||||||
|
func (d RoleDao) SelectAll() []*entity.SysRole {
|
||||||
|
sql := d.sqlSelectJoin()
|
||||||
|
roles := make([]*entity.SysRole, 0)
|
||||||
|
err := sql.Find(&roles)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return roles
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectRoleListByUserId 根据用户id查询用户角色id集合
|
||||||
|
func (d RoleDao) SelectRoleListByUserId(userId int64) *[]int64 {
|
||||||
|
sqlSelectRoleAndUser := d.sqlSelectRoleAndUser()
|
||||||
|
var roleIds []int64
|
||||||
|
err := sqlSelectRoleAndUser.Cols("r.role_id").Where("u.user_id = ?", userId).Find(&roleIds)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &roleIds
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectRolePermissionByUserId 查询用户角色集合
|
||||||
|
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 {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &roleKeys
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoleListByUserId 根据用户ID查询角色
|
||||||
|
func (d RoleDao) GetRoleListByUserId(id int64) *[]entity.SysRole {
|
||||||
|
roles := make([]entity.SysRole, 0)
|
||||||
|
err := d.sqlSelectJoin().Where("r.del_flag = '0'").And("ur.user_id = ?", id).Find(&roles)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &roles
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectRoleByRoleId 根据角色id查询角色数据
|
||||||
|
func (d RoleDao) SelectRoleByRoleId(id int64) *entity.SysRole {
|
||||||
|
role := entity.SysRole{}
|
||||||
|
_, err := d.sqlSelectJoin().Where("r.role_id = ?", id).Get(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &role
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckRoleNameUnique 校验角色名称是否唯一
|
||||||
|
func (d RoleDao) CheckRoleNameUnique(role entity.SysRole) int64 {
|
||||||
|
session := SqlDB.Table(role.TableName()).Where("role_name = ?", role.RoleName)
|
||||||
|
if role.RoleId > 0 {
|
||||||
|
session.And("role_id != ?", role.RoleId)
|
||||||
|
}
|
||||||
|
count, err := session.Count(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckRoleKeyUnique 校验角色权限是否唯一
|
||||||
|
func (d RoleDao) CheckRoleKeyUnique(role entity.SysRole) int64 {
|
||||||
|
session := SqlDB.Table(role.TableName()).Where("role_key = ?", role.RoleKey)
|
||||||
|
if role.RoleId > 0 {
|
||||||
|
session.And("role_id != ?", role.RoleId)
|
||||||
|
}
|
||||||
|
count, err := session.Count(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加角色进入数据库操作
|
||||||
|
func (d RoleDao) Insert(role entity.SysRole) entity.SysRole {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Insert(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return role
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改数据
|
||||||
|
func (d RoleDao) Update(role entity.SysRole) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Where("role_id = ?", role.RoleId).Update(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除角色
|
||||||
|
func (d RoleDao) Delete(role entity.SysRole) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
i, err := session.Delete(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateRoleStatus 修改角色状态
|
||||||
|
func (d RoleDao) UpdateRoleStatus(role *entity.SysRole) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Where("role_id = ?", role.RoleId).Cols("status", "update_by", "update_time").Update(role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectRolesByUserName 查询角色组
|
||||||
|
func (d RoleDao) SelectRolesByUserName(name string) *[]entity.SysRole {
|
||||||
|
roles := make([]entity.SysRole, 0)
|
||||||
|
session := d.sqlSelectJoin()
|
||||||
|
err := session.Where("r.del_flag = '0'").And("u.user_name = ?", name).Find(&roles)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &roles
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RoleMenuDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加角色菜单关系
|
||||||
|
func (d RoleMenuDao) Insert(list []models2.SysRoleMenu) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&list)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除角色和菜单关系
|
||||||
|
func (d RoleMenuDao) Delete(role models2.SysRole) {
|
||||||
|
menu := models2.SysRoleMenu{
|
||||||
|
RoleId: role.RoleId,
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Delete(&menu)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
}
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/api/v1/response"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/page"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UserDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询公共sql
|
||||||
|
func (d UserDao) sqlSelectJoin() *xorm.Session {
|
||||||
|
return SqlDB.NewSession().Table([]string{"sys_user", "u"}).
|
||||||
|
Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.dept_id").
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "u.user_id = ur.user_id").
|
||||||
|
Join("LEFT", []string{"sys_role", "r"}, "r.role_id = ur.role_id")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 查询用户集合
|
||||||
|
func (d UserDao) SelectPage(query request.UserQuery) ([]*response.UserResponse, int64) {
|
||||||
|
resp := make([]*response.UserResponse, 0)
|
||||||
|
sql := d.sqlSelectJoin()
|
||||||
|
if !gotool.StrUtils.HasEmpty(query.UserName) {
|
||||||
|
sql.And("u.user_name like concat('%',?,'%')", query.UserName)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(query.Status) {
|
||||||
|
sql.And("i.status = ?", query.Status)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(query.PhoneNumber) {
|
||||||
|
sql.And("u.phone_number like concat('%',?,'%')", query.PhoneNumber)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(query.BeginTime) {
|
||||||
|
sql.And("date_format(u.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
|
||||||
|
}
|
||||||
|
if !gotool.StrUtils.HasEmpty(query.EndTime) {
|
||||||
|
sql.And("date_format(u.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
|
||||||
|
}
|
||||||
|
if query.DeptId > 0 {
|
||||||
|
sql.And("u.dept_id = ? OR u.dept_id in ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(?, ancestors))", query.DeptId, query.DeptId)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(sql.Clone())
|
||||||
|
err := sql.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&resp)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return resp, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserById 根据id查询用户数据
|
||||||
|
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 {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
}
|
||||||
|
if !get {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &resp
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserByUserName 根据用户名查询用户数据
|
||||||
|
func (d UserDao) GetUserByUserName(user entity.SysUser) *entity.SysUser {
|
||||||
|
i, err := SqlDB.Get(&user)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if i {
|
||||||
|
return &user
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckEmailUnique 校验邮箱是否存在
|
||||||
|
func (d UserDao) CheckEmailUnique(user request.UserBody) *entity.SysUser {
|
||||||
|
sysUser := entity.SysUser{}
|
||||||
|
session := SqlDB.NewSession().Table("sys_user")
|
||||||
|
session.Cols("user_id", "email")
|
||||||
|
session.Where("email = ?", user.Email)
|
||||||
|
if user.UserId > 0 {
|
||||||
|
session.And("user_id != ?", user.UserId)
|
||||||
|
}
|
||||||
|
get, _ := session.Limit(1).Get(&sysUser)
|
||||||
|
if !get {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &sysUser
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckPhoneNumUnique 校验手机号是否存在
|
||||||
|
func (d UserDao) CheckPhoneNumUnique(body request.UserBody) *entity.SysUser {
|
||||||
|
sysUser := entity.SysUser{}
|
||||||
|
session := SqlDB.NewSession().Table("sys_user")
|
||||||
|
session.Cols("user_id", "phone_num")
|
||||||
|
session.Where("phone_num = ?", body.PhoneNumber)
|
||||||
|
if body.UserId > 0 {
|
||||||
|
session.And("user_id != ?", body.UserId)
|
||||||
|
}
|
||||||
|
get, _ := session.Limit(1).Get(&sysUser)
|
||||||
|
if !get {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &sysUser
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加用户
|
||||||
|
func (d UserDao) Insert(body request.UserBody) *request.UserBody {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Table("sys_user").Insert(&body)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return &body
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改用户数据
|
||||||
|
func (d UserDao) Update(body request.UserBody) int64 {
|
||||||
|
session := SqlDB.NewSession().Table("sys_user")
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Where("user_id = ?", body.UserId).Update(&body)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 根据id删除用户数据
|
||||||
|
func (d UserDao) Delete(id int64) int64 {
|
||||||
|
user := entity.SysUser{
|
||||||
|
UserId: id,
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession().Table("sys_user")
|
||||||
|
session.Begin()
|
||||||
|
i, err := session.Delete(&user)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResetPwd 修改用户密码数据库操作
|
||||||
|
func (d UserDao) ResetPwd(body request.UserBody) int64 {
|
||||||
|
user := entity.SysUser{
|
||||||
|
UserId: body.UserId,
|
||||||
|
Password: body.Password,
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Where("user_id = ?", user.UserId).Cols("password").Update(&user)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAllocatedList 查询未分配用户角色列表
|
||||||
|
func (d UserDao) GetAllocatedList(query request.UserQuery) ([]*response.UserResponse, int64) {
|
||||||
|
resp := make([]*response.UserResponse, 0)
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Table([]string{"sys_user", "u"}).Distinct("u.user_id", "u.dept_id", "u.user_name", "u.nick_name", "u.email", "u.phone_number", "u.status", "u.create_time").
|
||||||
|
Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.dept_id").
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "u.user_id = ur.user_id").
|
||||||
|
Join("LEFT", []string{"sys_role", "r"}, "r.role_id = ur.role_id").Where("u.del_flag = '0'").And("r.role_id = ?", query.RoleId)
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.UserName) {
|
||||||
|
session.And("u.user_name like concat('%', ?, '%')", query.UserName)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.PhoneNumber) {
|
||||||
|
session.And("u.phone_number like concat('%', ?, '%')", query.PhoneNumber)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&resp)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return resp, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUnallocatedList 查询未分配用户角色列表
|
||||||
|
func (d UserDao) GetUnallocatedList(query request.UserQuery) ([]*response.UserResponse, int64) {
|
||||||
|
resp := make([]*response.UserResponse, 0)
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Table([]string{"sys_user", "u"}).Distinct("u.user_id", "u.dept_id", "u.user_name", "u.nick_name", "u.email", "u.phone_number", "u.status", "u.create_time").
|
||||||
|
Join("LEFT", []string{"sys_dept", "d"}, "u.dept_id = d.dept_id").
|
||||||
|
Join("LEFT", []string{"sys_user_role", "ur"}, "u.user_id = ur.user_id").
|
||||||
|
Join("LEFT", []string{"sys_role", "r"}, "r.role_id = ur.role_id").Where("u.del_flag = '0'").And("r.role_id = ? or r.role_id IS NULL", query.RoleId).
|
||||||
|
And("u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and ur.role_id = ?)", query.RoleId)
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.UserName) {
|
||||||
|
session.And("u.user_name like concat('%', ?, '%')", query.UserName)
|
||||||
|
}
|
||||||
|
if gotool.StrUtils.HasNotEmpty(query.PhoneNumber) {
|
||||||
|
session.And("u.phone_number like concat('%', ?, '%')", query.PhoneNumber)
|
||||||
|
}
|
||||||
|
total, _ := page.GetTotal(session.Clone())
|
||||||
|
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&resp)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
return resp, total
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatePwd 修改密码
|
||||||
|
func (d UserDao) UpdatePwd(id int64, hash string) int64 {
|
||||||
|
user := entity.SysUser{}
|
||||||
|
user.UserId = id
|
||||||
|
user.Password = hash
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Cols("password").Where("user_id = ?", id).Update(&user)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateAvatar 修改头像
|
||||||
|
func (d UserDao) UpdateAvatar(info *response.UserResponse) int64 {
|
||||||
|
user := entity.SysUser{
|
||||||
|
Avatar: info.Avatar,
|
||||||
|
UserId: info.UserId,
|
||||||
|
UpdateBy: info.UserName,
|
||||||
|
UpdateTime: time.Now(),
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Cols("avatar", "update_by", "update_time").Where("user_id = ?", user.UserId).Update(&user)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d UserDao) UpdateStatus(info request.UserBody) int64 {
|
||||||
|
user := entity.SysUser{
|
||||||
|
UserId: info.UserId,
|
||||||
|
Status: info.Status,
|
||||||
|
UpdateBy: info.UserName,
|
||||||
|
UpdateTime: time.Now(),
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
update, err := session.Cols("status", "update_by", "update_time").Where("user_id = ?", user.UserId).Update(&user)
|
||||||
|
if err != nil {
|
||||||
|
session.Rollback()
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return update
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UserPostDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchInsert 批量新增用户岗位信息
|
||||||
|
func (d UserPostDao) BatchInsert(posts []entity.SysUserPost) {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Table(entity.SysUserPost{}.TableName()).Insert(&posts)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除用户和岗位关系
|
||||||
|
func (d UserPostDao) Delete(id int64) {
|
||||||
|
post := entity.SysUserPost{
|
||||||
|
UserId: id,
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Delete(&post)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountById 通过岗位ID查询岗位使用数量
|
||||||
|
func (d UserPostDao) CountById(id int64) int64 {
|
||||||
|
count, err := SqlDB.NewSession().Table("sys_user_post").Cols("post_id").Where("post_id = ?", id).Count()
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UserRoleDao struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchInsert 批量新增用户角色信息
|
||||||
|
func (d UserRoleDao) BatchInsert(roles []entity.SysUserRole) {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Table(entity.SysUserRole{}.TableName()).Insert(&roles)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除用户和角色关系
|
||||||
|
func (d UserRoleDao) Delete(id int64) {
|
||||||
|
role := entity.SysUserRole{
|
||||||
|
UserId: id,
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
_, err := session.Delete(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteAuthUser 取消用户授权
|
||||||
|
func (d UserRoleDao) DeleteAuthUser(role entity.SysUserRole) int64 {
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
i, err := session.Delete(&role)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertAuthUsers 批量选择用户授权
|
||||||
|
func (d UserRoleDao) InsertAuthUsers(body request.UserRoleBody) int64 {
|
||||||
|
ids := body.UserIds
|
||||||
|
roles := make([]entity.SysUserRole, 0)
|
||||||
|
for i := 0; i < len(ids); i++ {
|
||||||
|
role := entity.SysUserRole{
|
||||||
|
RoleId: body.RoleId,
|
||||||
|
UserId: ids[i],
|
||||||
|
}
|
||||||
|
roles = append(roles, role)
|
||||||
|
}
|
||||||
|
session := SqlDB.NewSession()
|
||||||
|
session.Begin()
|
||||||
|
insert, err := session.Insert(&roles)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
session.Rollback()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
session.Commit()
|
||||||
|
return insert
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
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"` // 参数键值
|
||||||
|
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"` // 创建时间
|
||||||
|
UpdateBy string `xorm:"varchar(64)" json:"updateBy"` // 更新人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
Remark string `xorm:"varchar(500)" json:"remark"` // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c SysConfig) TableName() string {
|
||||||
|
return "sys_config"
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SysCronJob struct {
|
||||||
|
JobId int `xorm:"pk autoincr" json:"jobId"` // 任务主键
|
||||||
|
JobName string `xorm:"varchar(100)" json:"jobName"` // 任务名称
|
||||||
|
JobCron string `xorm:"varchar(255)" json:"job_cron"` // cron表达式
|
||||||
|
FuncAlias string `xorm:"varchar(100)" json:"funcAlias"` // 方法别名(程序内注册的别名)
|
||||||
|
FuncParam string `xorm:"varchar(1)" json:"funcParam"` // 方法参数
|
||||||
|
Status string `xorm:"char(1)" json:"status"` // 状态(1、Running 0、Stop)
|
||||||
|
Level int `xorm:"int(1)" json:"level"` // 任务级别(0、普通 1、一般 2、重要 3、强保)
|
||||||
|
CreateBy string `xorm:"varchar(64)" json:"createBy"` // 创建人
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
UpdateBy string `xorm:"varchar(64)" json:"updateBy"` // 更新人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
Remark string `xorm:"varchar(500)" json:"remark"` // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c SysCronJob) TableName() string {
|
||||||
|
return "sys_cron_job"
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// SysDept 部门结构体
|
||||||
|
type SysDept struct {
|
||||||
|
DeptId int `xorm:"pk autoincr" json:"deptId"`
|
||||||
|
Ancestors string `xorm:"varchar(50)" json:"ancestors"`
|
||||||
|
DeptName string `xorm:"varchar(128)" json:"deptName"`
|
||||||
|
OrderNum int `json:"orderNum"`
|
||||||
|
Leader string `xorm:"varchar(20)" json:"leader"`
|
||||||
|
ParentId int `json:"parentId"`
|
||||||
|
Phone string `xorm:"varchar(11)" json:"phone"`
|
||||||
|
Status string `xorm:"char(1)" json:"status"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
DelFlag string `xorm:"char(1) default('0')" json:"delFlag"`
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d SysDept) GetLabel() string {
|
||||||
|
return d.DeptName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d SysDept) GetId() int {
|
||||||
|
return d.DeptId
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d SysDept) GetParentId() int {
|
||||||
|
return d.ParentId
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d SysDept) GetData() interface{} {
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d SysDept) IsRoot() bool {
|
||||||
|
return d.ParentId == 0 || d.ParentId == d.DeptId
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysDept) TableName() string {
|
||||||
|
return "sys_dept"
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SysDictData 字典数据
|
||||||
|
type SysDictData struct {
|
||||||
|
DictCode int64 `excel:"name=字典编码" xorm:"pk autoincr" json:"dictCode"` // 字典ID
|
||||||
|
DictSort int `excel:"name=字典排序" xorm:"int" json:"dictSort"` // 字典排序
|
||||||
|
DictLabel string `excel:"name=字典标签" xorm:"varchar(128)" json:"dictLabel"` // 字典标签
|
||||||
|
DictValue string `excel:"name=字典键值" xorm:"varchar(128)" json:"dictValue"` // 字典键值
|
||||||
|
DictType string `excel:"name=字典类型" xorm:"varchar(128)" json:"dictType"` // 字典类型
|
||||||
|
IsDefault string `excel:"name=是否默认,format=Y=是,N=否" json:"isDefault"` // 是否默认
|
||||||
|
Status string `excel:"name=状态,format=0=正常,1=停用" xorm:"char(1)" json:"status"` // 状态 0正常1停用
|
||||||
|
Remark string `xorm:"varchar(512)" json:"remark"` // 备注
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysDictData) TableName() string {
|
||||||
|
return "sys_dict_data"
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SysDictType 字典类型表
|
||||||
|
type SysDictType struct {
|
||||||
|
DictId int64 `excel:"name=字典主键" xorm:"pk autoincr" json:"dictId"` // 字典ID
|
||||||
|
DictName string `excel:"name=字典名称" xorm:"varchar(128)" json:"dictName"` // 字典名称
|
||||||
|
DictType string `excel:"name=字典类型" xorm:"varchar(128)" json:"dictType"` // 字典类型
|
||||||
|
Status string `excel:"name=字典状态,format=0=正常,1=停用" xorm:"char(1)" json:"status"` // 状态 0正常1停用
|
||||||
|
Remark string `xorm:"varchar(512)" json:"remark"` // 备注
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysDictType) TableName() string {
|
||||||
|
return "sys_dict_type"
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SysLoginInfo struct {
|
||||||
|
Id int `excel:"name=主键id" xorm:"pk autoincr" json:"id"` // 主键id
|
||||||
|
UserName string `excel:"name=用户账号" xorm:"varchar(50)" json:"userName"` // 用户账号
|
||||||
|
IpAddr string `excel:"name=登录IP地址" xorm:"varchar(128)" json:"ipAddr"` // 登录IP地址
|
||||||
|
LoginLocation string `excel:"name=登录地点" xorm:"varchar(255)" json:"loginLocation"` // 登录地点
|
||||||
|
Browser string `excel:"name=浏览器类型" xorm:"varchar(255)" json:"browser"` // 浏览器类型
|
||||||
|
OS string `excel:"name=操作系统" xorm:"os varchar(50)" json:"os"` // 操作系统
|
||||||
|
Status string `excel:"name=登录状态,format=1=成功,0=失败" xorm:"char(1)" json:"status"` // 登录状态(1成功 0失败)
|
||||||
|
Msg string `excel:"name=提示消息" xorm:"varchar(255)" json:"msg"` // 提示消息
|
||||||
|
LoginTime time.Time `excel:"name=登录时间" xorm:"login_time" json:"loginTime"` // 登录时间
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c SysLoginInfo) TableName() string {
|
||||||
|
return "sys_login_info"
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SysMenu 菜单结构体
|
||||||
|
type SysMenu struct {
|
||||||
|
MenuId int `xorm:"pk autoincr" json:"menuId"` // 主键Id
|
||||||
|
ParentId int `json:"parentId"` // 父Id
|
||||||
|
MenuName string `xorm:"varchar(128)" json:"menuName"` // 菜单名称
|
||||||
|
OrderNum int `xorm:"int" json:"orderNum"` // 显示顺序
|
||||||
|
Path string `xorm:"varchar(200)" json:"path"` // 请求路径
|
||||||
|
MenuType string `xorm:"char(1)" json:"menuType"` // 菜单类型 (M目录 C菜单 F按钮)
|
||||||
|
Visible string `xorm:"char(1)" json:"visible"` // 菜单状态 (0显示 1隐藏)
|
||||||
|
IsFrame int `json:"isFrame"` // 是否为外链(0是 1否)
|
||||||
|
IsCache int `json:"isCache"` // 是否缓存(0缓存 1不缓存)
|
||||||
|
Perms string `xorm:"varchar(100)" json:"perms"` // 权限标识
|
||||||
|
Icon string `xorm:"varchar(100)" json:"icon"` // 图标
|
||||||
|
Remark string `xorm:"varchar(512)" json:"remark"` // 备注
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
Status string `xorm:"char(1)" json:"status"` // 菜单状态(0正常 1停用)
|
||||||
|
Component string `xorm:"varchar(255)" json:"component"` // 组件路径
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysMenu) TableName() string {
|
||||||
|
return "sys_menu"
|
||||||
|
}
|
||||||
|
func (s SysMenu) GetPath() string {
|
||||||
|
return s.Path
|
||||||
|
}
|
||||||
|
func (s SysMenu) GetName() string {
|
||||||
|
return strings.Title(s.Path)
|
||||||
|
}
|
||||||
|
func (s SysMenu) GetMenuId() int {
|
||||||
|
return s.MenuId
|
||||||
|
}
|
||||||
|
func (s SysMenu) GetParentId() int {
|
||||||
|
return s.ParentId
|
||||||
|
}
|
||||||
|
func (s SysMenu) GetData() interface{} {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
func (s SysMenu) IsRoot() bool {
|
||||||
|
// 这里通过FatherId等于0 或者 FatherId等于自身Id表示顶层根节点
|
||||||
|
return s.ParentId == 0 || s.ParentId == s.MenuId
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SysMenu) GetId() int {
|
||||||
|
return s.MenuId
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SysMenu) GetLabel() string {
|
||||||
|
return s.MenuName
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type SysNotice struct {
|
||||||
|
NoticeId int64 `xorm:"pk autoincr" json:"noticeId"` // 公告id
|
||||||
|
NoticeTitle string `xorm:"notice_title" json:"noticeTitle"` // 公告标题
|
||||||
|
NoticeType string `xorm:"notice_type" json:"noticeType"` // 公告类型(1通知 2公告)
|
||||||
|
NoticeContent string `json:"noticeContent"` // 公告内容
|
||||||
|
Status string `json:"status"` // 公告状态(0正常 1关闭)
|
||||||
|
CreateBy string `xorm:"varchar(64)" json:"createBy"` // 创建人
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
UpdateBy string `xorm:"varchar(64)" json:"updateBy"` // 更新人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
Remark string `xorm:"varchar(500)" json:"remark"` // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysNotice) TableName() string {
|
||||||
|
return "sys_notice"
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// SysPost 岗位表对应结构体
|
||||||
|
type SysPost struct {
|
||||||
|
PostId int64 `excel:"name=岗位编号" xorm:"pk autoincr" json:"postId"` // 岗位ID
|
||||||
|
PostCode string `excel:"name=岗位编码" xorm:"varchar(64)" json:"postCode"` // 岗位编码
|
||||||
|
PostName string `excel:"name=岗位名称" xorm:"varchar(64)" json:"postName"` // 岗位名称
|
||||||
|
PostSort int `excel:"name=岗位排序" json:"postSort"` // 显示顺序
|
||||||
|
Status string `excel:"name=状态,format=0=正常,1=停用" xorm:"char(1)" json:"status"` // 状态 0正常 1停用
|
||||||
|
Remark string `xorm:"varchar(512)" json:"remark"` // 备注
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysPost) TableName() string {
|
||||||
|
return "sys_post"
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type SysRole struct {
|
||||||
|
RoleId int64 `excel:"name=角色序号" xorm:"pk autoincr" json:"roleId"` // 角色id
|
||||||
|
RoleName string `excel:"name=角色名称" xorm:"varchar(64)" json:"roleName"` // 角色名称
|
||||||
|
RoleKey string `excel:"name=角色权限" xorm:"varchar(64)" json:"roleKey"` // 角色权限标识
|
||||||
|
RoleSort int `excel:"name=角色排序" xorm:"int" json:"roleSort"` // 角色顺序
|
||||||
|
DataScope string `excel:"-" json:"dataScope"` // 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)
|
||||||
|
MenuCheckStrictly bool `excel:"-" json:"menuCheckStrictly"` // 菜单树选择项是否关联显示
|
||||||
|
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删除
|
||||||
|
CreateTime time.Time `excel:"" xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `excel:"" json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `excel:"" json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `excel:"" json:"updateBy"` // 更新人
|
||||||
|
Remark string `excel:"" json:"remark"` // 备注
|
||||||
|
MenuIds []int64 `xorm:"-" json:"menuIds"` // 菜单组
|
||||||
|
DeptIds []int64 `xorm:"-" json:"deptIds"` // 部门组
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r SysRole) TableName() string {
|
||||||
|
return "sys_role"
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
// SysRoleMenu 角色菜单数据结构
|
||||||
|
type SysRoleMenu struct {
|
||||||
|
RoleId int64 `xorm:"pk" json:"roleId"` // 角色id
|
||||||
|
MenuId int64 `xorm:"pk" json:"menuId"` // 菜单id
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysRoleMenu) TableName() string {
|
||||||
|
return "sys_role_menu"
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SysUser 用户表数据结构体
|
||||||
|
type SysUser struct {
|
||||||
|
UserId int64 `xorm:"pk autoincr" json:"userId"` // 用户ID
|
||||||
|
DeptId int64 `json:"deptId"` // 部门ID
|
||||||
|
UserName string `xorm:"varchar(128)" json:"userName"` // 登录用户名
|
||||||
|
NickName string `xorm:"varchar(128)" json:"nickName"` // 用户昵称
|
||||||
|
Email string `xorm:"varchar(1024)" json:"email"` // 邮箱
|
||||||
|
PhoneNumber string `xorm:"varchar(11)" json:"phoneNumber"` // 手机号
|
||||||
|
Sex string `xorm:"char(1)" json:"sex"` // 性别0男1女
|
||||||
|
Avatar string `xorm:"varchar(128)" json:"avatar"` // 头像路径
|
||||||
|
Password string `xorm:"varchar(128)" json:"-"` // 密码
|
||||||
|
Status string `xorm:"char(1)" json:"status"` // 状态 0正常1停用
|
||||||
|
DelFlag string `xorm:"char(1)" json:"delFlag"` // 0正常1删除
|
||||||
|
LoginIp string `xorm:"varchar(128)" json:"loginIp"` // 登录ip
|
||||||
|
LoginDate time.Time `json:"loginDate"` // 登录时间
|
||||||
|
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
}
|
||||||
|
|
||||||
|
func (receiver SysUser) TableName() string {
|
||||||
|
return "sys_user"
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsAdmin 判断用户是不是管理员
|
||||||
|
func (u SysUser) IsAdmin(userId int64) bool {
|
||||||
|
return userId > 0 && 1 == userId
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a SysUser) IsEmpty() bool {
|
||||||
|
return reflect.DeepEqual(a, SysUser{})
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
type SysUserPost struct {
|
||||||
|
UserId int64 `json:"userId"` // 用户id
|
||||||
|
PostId int64 `json:"postId"` // 部门id
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysUserPost) TableName() string {
|
||||||
|
return "sys_user_post"
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package entity
|
||||||
|
|
||||||
|
type SysUserRole struct {
|
||||||
|
UserId int64 `xorm:"pk" json:"userId"` // 用户id
|
||||||
|
RoleId int64 `xorm:"pk" json:"roleId"` // 角色id
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SysUserRole) TableName() string {
|
||||||
|
return "sys_user_role"
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package job
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 定时任务: 别名与方法的映射
|
||||||
|
var AliasFuncMap = make(map[string]func())
|
||||||
|
|
||||||
|
// 注册任务
|
||||||
|
func RegisterFunc(aliasName string, f func()) {
|
||||||
|
currentJob := service.CronJobService{}.GetInfoByAlias(aliasName)
|
||||||
|
AliasFuncMap[aliasName] = f
|
||||||
|
common.InfoLogf("注册定时任务 --- %s ---> Success", currentJob.JobName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 注册方法
|
||||||
|
func init() {
|
||||||
|
//RegisterFunc("test1", TestJob)
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package job
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func TestJob() {
|
||||||
|
fmt.Println("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈")
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func initConfigRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.ConfigApi)
|
||||||
|
group := router.Group("/config")
|
||||||
|
{
|
||||||
|
// 根据参数键名查询参数值
|
||||||
|
group.GET("", v.GetConfigValue)
|
||||||
|
// 查询设置列表
|
||||||
|
group.GET("/list", v.List)
|
||||||
|
// 添加
|
||||||
|
group.POST("/create", v.Add)
|
||||||
|
// 查询
|
||||||
|
group.GET("/:configId", v.Get)
|
||||||
|
// 修改
|
||||||
|
group.PUT("/modify", v.Edit)
|
||||||
|
// 批量删除
|
||||||
|
group.DELETE("/:ids", v.Delete)
|
||||||
|
// 刷新缓存
|
||||||
|
group.DELETE("/refreshCache", v.RefreshCache)
|
||||||
|
// 导出数据
|
||||||
|
group.GET("/export", v.Export)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 初始化定时任务路由
|
||||||
|
func initCronJobRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.CronJobApi)
|
||||||
|
group := router.Group("/cronJob")
|
||||||
|
{
|
||||||
|
// 查询定时任务分页数据
|
||||||
|
group.GET("/list", v.List)
|
||||||
|
// 修改定时任务
|
||||||
|
group.PUT("/modify", v.Edit)
|
||||||
|
// 新增定时任务
|
||||||
|
group.POST("/create", v.Add)
|
||||||
|
// 删除定时任务
|
||||||
|
group.DELETE("/:jobId", v.Remove)
|
||||||
|
// 改变定时任务状态
|
||||||
|
group.DELETE("/changeStatus", v.ChangeStatus)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 部门接口操作
|
||||||
|
func initDeptRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.DeptApi)
|
||||||
|
group := router.Group("/dept")
|
||||||
|
{
|
||||||
|
// 获取部门下拉树列表
|
||||||
|
group.GET("/treeSelect", v.DeptTreeSelect)
|
||||||
|
// 加载对应角色部门列表树
|
||||||
|
group.GET("/roleDeptTreeSelect/:roleId", v.RoleDeptTreeSelect)
|
||||||
|
// 查询部门列表
|
||||||
|
group.GET("/list", v.Find)
|
||||||
|
// 查询部门列表(排除节点)
|
||||||
|
group.GET("/list/exclude/:deptId", v.ExcludeChild)
|
||||||
|
// 根据部门编号获取详细信息
|
||||||
|
group.GET("/:deptId", v.GetInfo)
|
||||||
|
// 添加部门
|
||||||
|
group.POST("/create", v.Add)
|
||||||
|
// 删除部门
|
||||||
|
group.DELETE("/:deptId", v.Delete)
|
||||||
|
// 修改部门
|
||||||
|
group.PUT("/modify", v.Edit)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 初始化字典数据路由
|
||||||
|
func initDictDataRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.DictDataApi)
|
||||||
|
group := router.Group("/dict/data")
|
||||||
|
{
|
||||||
|
// 根据字典类型查询字典数据信息
|
||||||
|
group.GET("/type/:dictType", v.GetByType)
|
||||||
|
// 查询字典数据集合
|
||||||
|
group.GET("/list", v.List)
|
||||||
|
// 根据id查询字典数据
|
||||||
|
group.GET("/:dictCode", v.Get)
|
||||||
|
// 添加字点数据
|
||||||
|
group.POST("/create", v.Add)
|
||||||
|
// 删除字典数据
|
||||||
|
group.DELETE("/:dictCode", v.Delete)
|
||||||
|
// 导出字典数据
|
||||||
|
group.GET("/export", v.Export)
|
||||||
|
// 编辑字典数据
|
||||||
|
group.PUT("/modify", v.Edit)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 初始化字典类型路由
|
||||||
|
func initDictTypeRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.DictTypeApi)
|
||||||
|
group := router.Group("/dict/type")
|
||||||
|
{
|
||||||
|
// 查询字典类型分页数据
|
||||||
|
group.GET("/list", v.List)
|
||||||
|
// 根据id查询字典类型数据
|
||||||
|
group.GET("/:dictTypeId", v.Get)
|
||||||
|
// 修改字典类型
|
||||||
|
group.PUT("/modify", v.Edit)
|
||||||
|
// 新增字典类型
|
||||||
|
group.POST("/create", v.Add)
|
||||||
|
// 删除字典类型
|
||||||
|
group.DELETE("/:dictId", v.Remove)
|
||||||
|
// 刷新缓存
|
||||||
|
group.DELETE("/refreshCache", v.RefreshCache)
|
||||||
|
// 导出excel
|
||||||
|
group.GET("/export", v.Export)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 登录调用路由
|
||||||
|
func initLoginRouter(router *gin.RouterGroup) {
|
||||||
|
loginApi := new(v1.LoginApi)
|
||||||
|
loginRouter := router.Group("/")
|
||||||
|
{
|
||||||
|
// 登录
|
||||||
|
loginRouter.POST("/login", loginApi.Login)
|
||||||
|
loginRouter.GET("/getInfo", loginApi.GetUserInfo)
|
||||||
|
loginRouter.GET("/getRouters", loginApi.GetRouters)
|
||||||
|
loginRouter.GET("/getLoginHistory", loginApi.GetLoginHistory)
|
||||||
|
// 退出登录
|
||||||
|
loginRouter.POST("/logout", loginApi.Logout)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func initMenuRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.MenuApi)
|
||||||
|
vg := router.Group("/menu")
|
||||||
|
{
|
||||||
|
// 查询菜单数据
|
||||||
|
vg.GET("/:menuId", v.GetInfo)
|
||||||
|
// 查询菜单列表
|
||||||
|
vg.GET("/list", v.List)
|
||||||
|
// 加载对应角色菜单列表树
|
||||||
|
vg.GET("/roleMenuTreeSelect/:roleId", v.RoleMenuTreeSelect)
|
||||||
|
// 获取菜单下拉树列表
|
||||||
|
vg.GET("/treeSelect", v.TreeSelect)
|
||||||
|
// 添加菜单数据
|
||||||
|
vg.POST("/create", v.Add)
|
||||||
|
// 修改菜单数据
|
||||||
|
vg.PUT("/modify", v.Edit)
|
||||||
|
// 删除菜单数据
|
||||||
|
vg.DELETE("/:menuId", v.Delete)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func initNoticeRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.NoticeApi)
|
||||||
|
group := router.Group("/notice")
|
||||||
|
{
|
||||||
|
group.GET("/list", v.List)
|
||||||
|
// 添加公告
|
||||||
|
group.POST("/create", v.Add)
|
||||||
|
// 删除
|
||||||
|
group.DELETE("/:ids", v.Delete)
|
||||||
|
// 查询
|
||||||
|
group.GET("/:id", v.Get)
|
||||||
|
// 修改
|
||||||
|
group.PUT("/modify", v.Edit)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 初始化岗位路由
|
||||||
|
func initPostRouter(router *gin.RouterGroup) {
|
||||||
|
v := new(v1.PostApi)
|
||||||
|
group := router.Group("/post")
|
||||||
|
{
|
||||||
|
// 查询岗位数据
|
||||||
|
group.GET("/list", v.List)
|
||||||
|
// 添加岗位
|
||||||
|
group.POST("/create", v.Add)
|
||||||
|
// 查询岗位详情
|
||||||
|
group.GET("/:postId", v.Get)
|
||||||
|
// 删除岗位数据
|
||||||
|
group.DELETE("/:postId", v.Delete)
|
||||||
|
// 修改岗位数据接口
|
||||||
|
group.PUT("/modify", v.Edit)
|
||||||
|
// 导出excel
|
||||||
|
group.GET("/export", v.Export)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func initRoleRouter(router *gin.RouterGroup) {
|
||||||
|
roleApi := new(v1.RoleApi)
|
||||||
|
group := router.Group("/role")
|
||||||
|
{
|
||||||
|
// 查询角色数据
|
||||||
|
group.GET("/findList", roleApi.Find)
|
||||||
|
// 根据id查询角色数据
|
||||||
|
group.GET("/:roleId", roleApi.GetRoleId)
|
||||||
|
// 添加角色
|
||||||
|
group.POST("/create", roleApi.Add)
|
||||||
|
// 修改角色
|
||||||
|
group.PUT("/modify", roleApi.Edit)
|
||||||
|
// 删除角色
|
||||||
|
group.DELETE("/:roleId", roleApi.Delete)
|
||||||
|
// 修改角色状态
|
||||||
|
group.PUT("/changeStatus", roleApi.ChangeStatus)
|
||||||
|
// 查看分配角色列表
|
||||||
|
group.GET("/authUser/allocatedList", roleApi.AllocatedList)
|
||||||
|
// 查询未分配用户角色列表
|
||||||
|
group.GET("/authUser/unallocatedList", roleApi.UnallocatedList)
|
||||||
|
// 取消授权
|
||||||
|
group.PUT("/authUser/cancel", roleApi.CancelAuthUser)
|
||||||
|
// 批量选择用户授权
|
||||||
|
group.PUT("/authUser/selectAll", roleApi.UpdateAuthUserAll)
|
||||||
|
// 导出excel
|
||||||
|
group.GET("/export", roleApi.Export)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/pkg/filter"
|
||||||
|
"cutego/pkg/jwt"
|
||||||
|
"cutego/pkg/middleware"
|
||||||
|
"cutego/pkg/middleware/logger"
|
||||||
|
"cutego/pkg/websocket"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Init() *gin.Engine {
|
||||||
|
router := gin.New()
|
||||||
|
router.Use(gin.Logger())
|
||||||
|
router.Use(gin.Recovery())
|
||||||
|
router.Use(logger.LoggerToFile())
|
||||||
|
router.Use(middleware.Recover)
|
||||||
|
router.Use(jwt.JWTAuth())
|
||||||
|
router.Use(filter.DemoHandler())
|
||||||
|
// websocket
|
||||||
|
router.GET("/websocket", websocket.HandleWebSocketMessage)
|
||||||
|
// v1版本api
|
||||||
|
v1Router := router.Group("/api/v1")
|
||||||
|
{
|
||||||
|
// 登录接口
|
||||||
|
initLoginRouter(v1Router)
|
||||||
|
// 用户路由接口
|
||||||
|
initUserRouter(v1Router)
|
||||||
|
// 部门路由注册
|
||||||
|
initDeptRouter(v1Router)
|
||||||
|
// 初始化字典数据路由
|
||||||
|
initDictDataRouter(v1Router)
|
||||||
|
// 注册配置路由
|
||||||
|
initConfigRouter(v1Router)
|
||||||
|
// 注册角色路由
|
||||||
|
initRoleRouter(v1Router)
|
||||||
|
// 注册菜单路由
|
||||||
|
initMenuRouter(v1Router)
|
||||||
|
// 注册岗位路由
|
||||||
|
initPostRouter(v1Router)
|
||||||
|
// 注册字典类型路由
|
||||||
|
initDictTypeRouter(v1Router)
|
||||||
|
// 注册公告路由
|
||||||
|
initNoticeRouter(v1Router)
|
||||||
|
// 注册定时任务路由
|
||||||
|
initCronJobRouter(v1Router)
|
||||||
|
}
|
||||||
|
return router
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 用户路由
|
||||||
|
func initUserRouter(router *gin.RouterGroup) {
|
||||||
|
userApi := new(v1.UserApi)
|
||||||
|
userRouter := router.Group("/user")
|
||||||
|
{
|
||||||
|
userRouter.GET("/list", userApi.Find)
|
||||||
|
userRouter.GET("/getInfo/:userId", userApi.GetInfo)
|
||||||
|
userRouter.GET("/getInfo", userApi.GetInfo)
|
||||||
|
userRouter.GET("/authRole/:userId", userApi.AuthRole)
|
||||||
|
// 新增用户
|
||||||
|
userRouter.POST("/create", userApi.Add)
|
||||||
|
// 修改用户
|
||||||
|
userRouter.PUT("/modify", userApi.Edit)
|
||||||
|
// 删除用户
|
||||||
|
userRouter.DELETE("/remove/:userId", userApi.Remove)
|
||||||
|
// 重置密码
|
||||||
|
userRouter.PUT("/resetPwd", userApi.ResetPwd)
|
||||||
|
userRouter.GET("/export", userApi.Export)
|
||||||
|
userRouter.GET("/profile", userApi.Profile)
|
||||||
|
// 修改个人数据
|
||||||
|
userRouter.PUT("/profile", userApi.UpdateProfile)
|
||||||
|
// 修改个人密码
|
||||||
|
userRouter.PUT("/profile/updatePwd", userApi.UpdatePwd)
|
||||||
|
// 修改头像
|
||||||
|
userRouter.POST("/profile/avatar", userApi.Avatar)
|
||||||
|
// 修改可用状态
|
||||||
|
userRouter.PUT("/changeStatus", userApi.ChangeStatus)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
cache2 "cutego/core/cache"
|
||||||
|
"cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConfigService struct {
|
||||||
|
configDao dao.ConfigDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetConfigKey 根据键名查询参数配置信息
|
||||||
|
func (s ConfigService) GetConfigKey(param string) *entity.SysConfig {
|
||||||
|
// 从缓存中取出数据判断是否存在, 存在直接使用, 不存在就从数据库查询
|
||||||
|
val := cache2.GetRedisConfig(param)
|
||||||
|
if val != nil {
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
configKey := s.configDao.SelectByConfigKey(param)
|
||||||
|
cache2.SetRedisConfig(*configKey)
|
||||||
|
return configKey
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPage 分页查询数据
|
||||||
|
func (s ConfigService) FindPage(query request.ConfigQuery) (*[]entity.SysConfig, int64) {
|
||||||
|
return s.configDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckConfigKeyUnique 校验是否存在
|
||||||
|
func (s ConfigService) CheckConfigKeyUnique(config entity.SysConfig) bool {
|
||||||
|
return s.configDao.CheckConfigKeyUnique(config) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加数据
|
||||||
|
func (s ConfigService) Save(config entity.SysConfig) int64 {
|
||||||
|
return s.configDao.Insert(config)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInfo 查询数据
|
||||||
|
func (s ConfigService) GetInfo(id int64) *entity.SysConfig {
|
||||||
|
return s.configDao.SelectById(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改数据
|
||||||
|
func (s ConfigService) Edit(config entity.SysConfig) int64 {
|
||||||
|
return s.configDao.Update(config)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 批量删除
|
||||||
|
func (s ConfigService) Remove(list []int64) bool {
|
||||||
|
return s.configDao.Delete(list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckConfigByIds 根据id集合查询
|
||||||
|
func (s ConfigService) CheckConfigByIds(list []int64) *[]entity.SysConfig {
|
||||||
|
return s.configDao.CheckConfigByIds(list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindAll 查询所有数据
|
||||||
|
func (s ConfigService) FindAll() *[]entity.SysConfig {
|
||||||
|
return s.configDao.SelectAll()
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CronJobService struct {
|
||||||
|
cronJobService dao.CronJobDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPage 分页查询数据
|
||||||
|
func (s CronJobService) FindPage(query request.CronJobQuery) ([]entity.SysCronJob, int64) {
|
||||||
|
return s.cronJobService.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加数据
|
||||||
|
func (s CronJobService) Save(config entity.SysCronJob) int64 {
|
||||||
|
return s.cronJobService.Insert(config)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInfo 查询数据
|
||||||
|
func (s CronJobService) GetInfo(id int64) *entity.SysCronJob {
|
||||||
|
return s.cronJobService.SelectById(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInfo 查询数据
|
||||||
|
func (s CronJobService) GetInfoByAlias(funcAlias string) *entity.SysCronJob {
|
||||||
|
return s.cronJobService.SelectByFuncAlias(funcAlias)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改数据
|
||||||
|
func (s CronJobService) Edit(config entity.SysCronJob) int64 {
|
||||||
|
return s.cronJobService.Update(config)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 批量删除
|
||||||
|
func (s CronJobService) Remove(list []int64) bool {
|
||||||
|
return s.cronJobService.Delete(list)
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
dao2 "cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DeptService struct {
|
||||||
|
deptDao dao2.DeptDao
|
||||||
|
roleDao dao2.RoleDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// TreeSelect 根据条件查询部门树
|
||||||
|
func (s DeptService) FindTreeSelect(query request.DeptQuery) *[]entity.SysDept {
|
||||||
|
treeSelect := s.deptDao.SelectTree(query)
|
||||||
|
return treeSelect
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindDeptListByRoleId 根据角色ID查询部门树信息
|
||||||
|
func (s DeptService) FindDeptListByRoleId(id int64) *[]int64 {
|
||||||
|
role := s.roleDao.SelectRoleByRoleId(id)
|
||||||
|
return s.deptDao.SelectDeptListByRoleId(id, role.DeptCheckStrictly)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindDeptList 查询部门列表
|
||||||
|
func (s DeptService) FindDeptList(query request.DeptQuery) *[]entity.SysDept {
|
||||||
|
return s.deptDao.GetList(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDeptById 根据部门编号获取详细信息
|
||||||
|
func (s DeptService) GetDeptById(id int) *entity.SysDept {
|
||||||
|
return s.deptDao.SelectDeptById(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加部门数据
|
||||||
|
func (s DeptService) Save(dept entity.SysDept) int64 {
|
||||||
|
return s.deptDao.Insert(dept)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckDeptNameUnique 校验部门名称是否唯一
|
||||||
|
func (s DeptService) CheckDeptNameUnique(dept entity.SysDept) bool {
|
||||||
|
if s.deptDao.CheckDeptNameUnique(dept) > 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除部门
|
||||||
|
func (s DeptService) Remove(id int) int64 {
|
||||||
|
return s.deptDao.Delete(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasChildByDeptId 是否存在部门子节点
|
||||||
|
func (s DeptService) HasChildByDeptId(id int) int64 {
|
||||||
|
return s.deptDao.HasChildByDeptId(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckDeptExistUser 查询部门是否存在用户
|
||||||
|
func (s DeptService) CheckDeptExistUser(id int) int64 {
|
||||||
|
return s.deptDao.CheckDeptExistUser(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改部门
|
||||||
|
func (s DeptService) Edit(dept entity.SysDept) bool {
|
||||||
|
return s.deptDao.Update(dept) > 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
cache2 "cutego/core/cache"
|
||||||
|
"cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/constant"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DictDataService struct {
|
||||||
|
dictDataDao dao.DictDataDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindByDictType 根据字典类型查询字典数据
|
||||||
|
func (s DictDataService) FindByDictType(dictType string) []entity.SysDictData {
|
||||||
|
// 先从缓存中拉数据
|
||||||
|
key := cache2.GetRedisDict(dictType)
|
||||||
|
if key != nil {
|
||||||
|
return key.([]entity.SysDictData)
|
||||||
|
} else {
|
||||||
|
// 缓存中为空, 从数据库中取数据
|
||||||
|
return s.dictDataDao.SelectByDictType(dictType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPage 查询字段数据集合
|
||||||
|
func (s DictDataService) FindPage(query request.DiceDataQuery) (*[]entity.SysDictData, int64) {
|
||||||
|
return s.dictDataDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetByCode 根据code查询字典数据
|
||||||
|
// @Param code int64
|
||||||
|
// @Return *entity.SysDictData
|
||||||
|
func (s DictDataService) GetByCode(code int64) *entity.SysDictData {
|
||||||
|
return s.dictDataDao.SelectByDictCode(code)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 新增字典数据
|
||||||
|
// @Param data entity.SysDictData
|
||||||
|
// @Return bool
|
||||||
|
func (s DictDataService) Save(data entity.SysDictData) bool {
|
||||||
|
insert := s.dictDataDao.Insert(data)
|
||||||
|
if insert > 0 {
|
||||||
|
// 刷新缓存数据
|
||||||
|
byType := s.GetNoCacheByType(data.DictType)
|
||||||
|
cache2.SetRedisDict(data.DictType, byType)
|
||||||
|
}
|
||||||
|
return insert > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除数据
|
||||||
|
// @Param codes 字典code集合
|
||||||
|
// @Return bool
|
||||||
|
func (s DictDataService) Remove(codes []int64) bool {
|
||||||
|
dictType := s.GetByCode(codes[0]).DictType
|
||||||
|
remove := s.dictDataDao.Delete(codes)
|
||||||
|
if remove {
|
||||||
|
// 刷新缓存
|
||||||
|
code := s.GetNoCacheByType(dictType)
|
||||||
|
cache2.SetRedisDict(dictType, code)
|
||||||
|
}
|
||||||
|
return remove
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNoCacheByType 根据字典类型查询字典数据
|
||||||
|
// @Param dictType 字典类型
|
||||||
|
// @Return []entity.SysDictData
|
||||||
|
func (s DictDataService) GetNoCacheByType(dictType string) []entity.SysDictData {
|
||||||
|
return s.dictDataDao.SelectByDictType(constant.RedisConst{}.GetRedisDictKey() + dictType)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改字典数据
|
||||||
|
func (s DictDataService) Edit(data entity.SysDictData) bool {
|
||||||
|
return s.dictDataDao.Update(data)
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
cache2 "cutego/core/cache"
|
||||||
|
dao2 "cutego/core/dao"
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DictTypeService struct {
|
||||||
|
dictTypeDao dao2.DictTypeDao
|
||||||
|
dictDataDao dao2.DictDataDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPage 分页查询字典类型数据
|
||||||
|
func (s DictTypeService) FindPage(query request.DictTypeQuery) (*[]models2.SysDictType, int64) {
|
||||||
|
return s.dictTypeDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetById 根据id查询字典类型数据
|
||||||
|
func (s DictTypeService) GetById(id int64) *models2.SysDictType {
|
||||||
|
return s.dictTypeDao.SelectById(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckDictTypeUnique 检验字典类型是否存在
|
||||||
|
func (s DictTypeService) CheckDictTypeUnique(dictType models2.SysDictType) bool {
|
||||||
|
return s.dictTypeDao.CheckDictTypeUnique(dictType) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改字典数据
|
||||||
|
func (s DictTypeService) Edit(dictType models2.SysDictType) bool {
|
||||||
|
return s.dictTypeDao.Update(dictType)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 新增字典类型
|
||||||
|
func (s DictTypeService) Save(dictType models2.SysDictType) bool {
|
||||||
|
insert := s.dictTypeDao.Insert(dictType)
|
||||||
|
if insert > 0 {
|
||||||
|
cache2.SetRedisDict(dictType.DictType, nil)
|
||||||
|
}
|
||||||
|
return insert > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 批量删除
|
||||||
|
func (s DictTypeService) Remove(ids []int64) bool {
|
||||||
|
return s.dictTypeDao.Delete(ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindAll 查询所有字典类型数据
|
||||||
|
func (s DictTypeService) FindAll() []*models2.SysDictType {
|
||||||
|
return s.dictTypeDao.SelectAll()
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveAllCache 删除所有字典缓存
|
||||||
|
func (s DictTypeService) RemoveAllCache() []string {
|
||||||
|
typeList := make([]string, 0)
|
||||||
|
allType := s.FindAll()
|
||||||
|
for _, dictType := range allType {
|
||||||
|
typeList = append(typeList, dictType.DictType)
|
||||||
|
}
|
||||||
|
// 删除缓存
|
||||||
|
cache2.RemoveRedisDictList(typeList)
|
||||||
|
return typeList
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadDictCache 将字典数据存入缓存
|
||||||
|
func (s DictTypeService) LoadDictCache() {
|
||||||
|
typeList := make([]string, 0)
|
||||||
|
allType := s.FindAll()
|
||||||
|
for _, dictType := range allType {
|
||||||
|
typeList = append(typeList, dictType.DictType)
|
||||||
|
}
|
||||||
|
allData := s.dictDataDao.GetDiceDataAll()
|
||||||
|
for _, key := range typeList {
|
||||||
|
list := make([]models2.SysDictData, 0)
|
||||||
|
for _, data := range *allData {
|
||||||
|
if key == data.DictType {
|
||||||
|
list = append(list, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cache2.SetRedisDict(key, list)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RefreshCache 刷新缓存数据
|
||||||
|
func (s DictTypeService) RefreshCache() {
|
||||||
|
typeList := s.RemoveAllCache()
|
||||||
|
allData := s.dictDataDao.GetDiceDataAll()
|
||||||
|
for _, key := range typeList {
|
||||||
|
list := make([]models2.SysDictData, 0)
|
||||||
|
for _, data := range *allData {
|
||||||
|
if key == data.DictType {
|
||||||
|
list = append(list, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cache2.SetRedisDict(key, list)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"cutego/pkg/config"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/yinheli/qqwry"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LoginInfoService struct {
|
||||||
|
loginInfoDao dao.LoginInfoDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPage 分页查询数据
|
||||||
|
func (s LoginInfoService) FindPage(query request.LoginInfoQuery) (*[]entity.SysLoginInfo, int64) {
|
||||||
|
return s.loginInfoDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加登录记录业务逻辑
|
||||||
|
func (s LoginInfoService) Save(body entity.SysLoginInfo) bool {
|
||||||
|
// 添加登录记录数据库操作
|
||||||
|
user := s.loginInfoDao.Insert(body)
|
||||||
|
if user != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRequestClientIp 获取请求客户端的ip
|
||||||
|
func (s LoginInfoService) GetRequestClientIp(c *gin.Context) string {
|
||||||
|
reqIP := c.ClientIP()
|
||||||
|
if reqIP == "::1" {
|
||||||
|
reqIP = "127.0.0.1"
|
||||||
|
}
|
||||||
|
return reqIP
|
||||||
|
}
|
||||||
|
|
||||||
|
// 纯真数据库获取ip地址
|
||||||
|
// @return {"Ip": "180.89.94.90","Country": "北京市","City": "鹏博士宽带"}
|
||||||
|
func (s LoginInfoService) GetLocationByIp(ipAddr string) *qqwry.QQwry {
|
||||||
|
address := net.ParseIP(ipAddr)
|
||||||
|
if ipAddr == "" || address == nil {
|
||||||
|
panic("参数ipAddr是空的")
|
||||||
|
} else {
|
||||||
|
dir, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
panic("无法获取当前路径, " + err.Error())
|
||||||
|
}
|
||||||
|
q := qqwry.NewQQwry(dir + "/" + config.BaseConfigDirPath + "/scanip/qqwry.dat")
|
||||||
|
q.Find(ipAddr)
|
||||||
|
return q
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/response"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/jwt"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LoginService struct {
|
||||||
|
userService UserService
|
||||||
|
}
|
||||||
|
|
||||||
|
// Login 用户登录业务处理
|
||||||
|
func (s LoginService) Login(name string, password string) (bool, string) {
|
||||||
|
user := s.userService.GetUserByUserName(name)
|
||||||
|
if user == nil {
|
||||||
|
return false, "用户不存在"
|
||||||
|
}
|
||||||
|
if !gotool.BcryptUtils.CompareHash(user.Password, password) {
|
||||||
|
return false, "密码错误"
|
||||||
|
}
|
||||||
|
// 生成token
|
||||||
|
token, err := jwt.CreateUserToken(s.userService.GetUserById(user.UserId))
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
return false, ""
|
||||||
|
}
|
||||||
|
// 数据存储到redis中
|
||||||
|
return true, token
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCurrentUser 获取当前登录用户
|
||||||
|
func (s LoginService) GetCurrentUser(c *gin.Context) *response.UserResponse {
|
||||||
|
token := c.Request.Header.Get("Authorization")
|
||||||
|
str := strings.Split(token, " ")
|
||||||
|
// parseToken 解析token包含的信息
|
||||||
|
claims, err := jwt.ParseToken(str[1])
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
}
|
||||||
|
info := claims.UserInfo
|
||||||
|
return &info
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/api/v1/response"
|
||||||
|
dao2 "cutego/core/dao"
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MenuService struct {
|
||||||
|
menuDao dao2.MenuDao
|
||||||
|
roleDao dao2.RoleDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMenuTreeByUserId 根据用户ID查询菜单
|
||||||
|
func (s MenuService) GetMenuTreeByUserId(user *response.UserResponse) *[]models2.SysMenu {
|
||||||
|
var menuList *[]models2.SysMenu
|
||||||
|
// 判断是否是管理员
|
||||||
|
flag := models2.SysUser{}.IsAdmin(user.UserId)
|
||||||
|
if flag {
|
||||||
|
menuList = s.menuDao.GetMenuAll()
|
||||||
|
} else {
|
||||||
|
menuList = s.menuDao.GetMenuByUserId(user.UserId)
|
||||||
|
}
|
||||||
|
return menuList
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindMenuListByRoleId 根据角色ID查询菜单树信息
|
||||||
|
func (s MenuService) FindMenuListByRoleId(id int64) *[]int64 {
|
||||||
|
role := s.roleDao.SelectRoleByRoleId(id)
|
||||||
|
return s.menuDao.SelectMenuByRoleId(id, role.MenuCheckStrictly)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMenuList 获取菜单列表
|
||||||
|
func (s MenuService) FindMenuList(query request.MenuQuery, info *response.UserResponse) *[]models2.SysMenu {
|
||||||
|
if info.IsAdmin() {
|
||||||
|
return s.menuDao.SelectMenuList(query)
|
||||||
|
} else {
|
||||||
|
query.UserId = info.UserId
|
||||||
|
return s.menuDao.SelectMenuListByUserId(query)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMenuByMenuId 根据菜单ID查询信息
|
||||||
|
func (s MenuService) GetMenuByMenuId(id int) *models2.SysMenu {
|
||||||
|
return s.menuDao.SelectMenuByMenuId(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加菜单数据
|
||||||
|
func (s MenuService) Save(menu models2.SysMenu) int64 {
|
||||||
|
return s.menuDao.Insert(menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改菜单数据
|
||||||
|
func (s MenuService) Edit(menu models2.SysMenu) int64 {
|
||||||
|
return s.menuDao.Update(menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除菜单操作
|
||||||
|
func (s MenuService) Remove(id int) int64 {
|
||||||
|
return s.menuDao.Delete(id)
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NoticeService struct {
|
||||||
|
noticeDao dao.NoticeDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPage 查询集合数据
|
||||||
|
func (s NoticeService) FindPage(query request.NoticeQuery) (*[]entity.SysNotice, int64) {
|
||||||
|
return s.noticeDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加公告
|
||||||
|
func (s NoticeService) Save(notice entity.SysNotice) bool {
|
||||||
|
return s.noticeDao.Insert(notice) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 批量删除
|
||||||
|
func (s NoticeService) Remove(list []int64) bool {
|
||||||
|
return s.noticeDao.Delete(list) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetById 查询
|
||||||
|
func (s NoticeService) GetById(id int64) *entity.SysNotice {
|
||||||
|
return s.noticeDao.SelectById(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改
|
||||||
|
func (s NoticeService) Edit(notice entity.SysNotice) bool {
|
||||||
|
return s.noticeDao.Update(notice) > 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/response"
|
||||||
|
dao2 "cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PermissionService struct {
|
||||||
|
roleDao dao2.RoleDao
|
||||||
|
menuDao dao2.MenuDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRolePermissionByUserId 查询用户角色集合
|
||||||
|
func (s PermissionService) GetRolePermissionByUserId(user *response.UserResponse) *[]string {
|
||||||
|
admin := entity.SysUser{}.IsAdmin(user.UserId)
|
||||||
|
roleKeys := s.roleDao.SelectRolePermissionByUserId(user.UserId)
|
||||||
|
if admin && roleKeys != nil {
|
||||||
|
*roleKeys = append(*roleKeys, "admin")
|
||||||
|
}
|
||||||
|
duplication := gotool.StrArrayUtils.ArrayDuplication(*roleKeys)
|
||||||
|
return &duplication
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMenuPermission 获取菜单数据权限
|
||||||
|
func (s PermissionService) GetMenuPermission(user *response.UserResponse) *[]string {
|
||||||
|
flag := entity.SysUser{}.IsAdmin(user.UserId)
|
||||||
|
// 查询菜单数据权限
|
||||||
|
permission := s.menuDao.GetMenuPermission(user.UserId)
|
||||||
|
if flag && permission != nil {
|
||||||
|
*permission = append(*permission, "*:*:*")
|
||||||
|
}
|
||||||
|
var ret []string
|
||||||
|
duplication := gotool.StrArrayUtils.ArrayDuplication(*permission)
|
||||||
|
for i := 0; i < len(duplication); i++ {
|
||||||
|
if (i > 0 && duplication[i-1] == duplication[i]) || len(duplication[i]) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
ret = append(ret, duplication[i])
|
||||||
|
}
|
||||||
|
return &ret
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/dao"
|
||||||
|
"cutego/core/entity"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PostService struct {
|
||||||
|
postDao dao.PostDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindAll 查询所有岗位业务方法
|
||||||
|
func (s PostService) FindAll() []*entity.SysPost {
|
||||||
|
return s.postDao.SelectAll()
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPostListByUserId 根据用户id查询岗位id集合
|
||||||
|
func (s PostService) FindPostListByUserId(userId int64) *[]int64 {
|
||||||
|
return s.postDao.SelectPostListByUserId(userId)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindList 查询岗位分页列表
|
||||||
|
func (s PostService) FindPage(query request.PostQuery) (*[]entity.SysPost, int64) {
|
||||||
|
return s.postDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckPostNameUnique 校验岗位名称是否存在
|
||||||
|
func (s PostService) CheckPostNameUnique(post entity.SysPost) bool {
|
||||||
|
return s.postDao.CheckPostNameUnique(post) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckPostCodeUnique 校验岗位编码是否存在
|
||||||
|
func (s PostService) CheckPostCodeUnique(post entity.SysPost) bool {
|
||||||
|
return s.postDao.CheckPostCodeUnique(post) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加岗位数据
|
||||||
|
func (s PostService) Save(post entity.SysPost) bool {
|
||||||
|
return s.postDao.Insert(post) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPostById 根据id查询岗位数据
|
||||||
|
func (s PostService) GetPostById(id int64) *entity.SysPost {
|
||||||
|
post := entity.SysPost{
|
||||||
|
PostId: id,
|
||||||
|
}
|
||||||
|
return s.postDao.GetPostById(post)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 批量删除岗位信息
|
||||||
|
func (s PostService) Remove(ids []int64) bool {
|
||||||
|
return s.postDao.Delete(ids) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改岗位数据
|
||||||
|
func (s PostService) Edit(post entity.SysPost) bool {
|
||||||
|
return s.postDao.Update(post)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPostByUserName 获取岗位数据
|
||||||
|
func (s PostService) FindPostByUserName(name string) string {
|
||||||
|
list := s.postDao.SelectPostByUserName(name)
|
||||||
|
var buffer bytes.Buffer
|
||||||
|
var postName string
|
||||||
|
for _, post := range *list {
|
||||||
|
buffer.WriteString(post.PostName)
|
||||||
|
buffer.WriteString(",")
|
||||||
|
}
|
||||||
|
s2 := buffer.String()
|
||||||
|
if gotool.StrUtils.HasNotEmpty(s2) {
|
||||||
|
postName = s2[0:(len(s2) - 1)]
|
||||||
|
}
|
||||||
|
return postName
|
||||||
|
}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
req2 "cutego/core/api/v1/request"
|
||||||
|
dao2 "cutego/core/dao"
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RoleService struct {
|
||||||
|
roleDao dao2.RoleDao
|
||||||
|
roleMenuDao dao2.RoleMenuDao
|
||||||
|
userRoleDao dao2.UserRoleDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindAll 查询所有角色
|
||||||
|
func (s RoleService) FindAll(query *req2.RoleQuery) ([]*models2.SysRole, int64) {
|
||||||
|
if query == nil {
|
||||||
|
all := s.roleDao.SelectAll()
|
||||||
|
return all, 0
|
||||||
|
}
|
||||||
|
return s.roleDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindRoleListByUserId 根据用户id查询角色id集合
|
||||||
|
func (s RoleService) FindRoleListByUserId(parseInt int64) *[]int64 {
|
||||||
|
return s.roleDao.SelectRoleListByUserId(parseInt)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoleListByUserId 根据用户ID查询角色
|
||||||
|
func (s RoleService) GetRoleListByUserId(id int64) *[]models2.SysRole {
|
||||||
|
return s.roleDao.GetRoleListByUserId(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindPage 分页查询角色数据
|
||||||
|
func (s RoleService) FindPage(query req2.RoleQuery) ([]*models2.SysRole, int64) {
|
||||||
|
return s.roleDao.SelectPage(&query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoleByRoleId 根据角色id查询角色数据
|
||||||
|
func (s RoleService) GetRoleByRoleId(id int64) *models2.SysRole {
|
||||||
|
return s.roleDao.SelectRoleByRoleId(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckRoleNameUnique 判断角色名城是否存在
|
||||||
|
func (s RoleService) CheckRoleNameUnique(role models2.SysRole) int64 {
|
||||||
|
return s.roleDao.CheckRoleNameUnique(role)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckRoleKeyUnique 校验角色权限是否唯一
|
||||||
|
func (s RoleService) CheckRoleKeyUnique(role models2.SysRole) int64 {
|
||||||
|
return s.roleDao.CheckRoleKeyUnique(role)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 添加角色数据
|
||||||
|
func (s RoleService) Save(role models2.SysRole) int64 {
|
||||||
|
role = s.roleDao.Insert(role)
|
||||||
|
return s.BindRoleMenu(role)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加角色菜单关系
|
||||||
|
func (s RoleService) BindRoleMenu(role models2.SysRole) int64 {
|
||||||
|
list := make([]models2.SysRoleMenu, 0)
|
||||||
|
for _, id := range role.MenuIds {
|
||||||
|
menu := models2.SysRoleMenu{
|
||||||
|
RoleId: role.RoleId,
|
||||||
|
MenuId: id,
|
||||||
|
}
|
||||||
|
list = append(list, menu)
|
||||||
|
}
|
||||||
|
return s.roleMenuDao.Insert(list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改角色数据
|
||||||
|
func (s RoleService) Edit(role models2.SysRole) int64 {
|
||||||
|
// 删除菜单关联关系
|
||||||
|
s.roleMenuDao.Delete(role)
|
||||||
|
s.BindRoleMenu(role)
|
||||||
|
// 修改数据
|
||||||
|
return s.roleDao.Update(role)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除角色
|
||||||
|
func (s RoleService) Remove(id int64) int64 {
|
||||||
|
role := models2.SysRole{
|
||||||
|
RoleId: id,
|
||||||
|
}
|
||||||
|
// 删除菜单角色关系
|
||||||
|
s.roleMenuDao.Delete(role)
|
||||||
|
// 删除角色
|
||||||
|
return s.roleDao.Delete(role)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckRoleAllowed 校验是否可以操作
|
||||||
|
func (s RoleService) CheckRoleAllowed(id int64) (bool, string) {
|
||||||
|
if id == 1 {
|
||||||
|
return false, "超级管理员不允许操作"
|
||||||
|
}
|
||||||
|
return true, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditRoleStatus 角色状态修改
|
||||||
|
func (s RoleService) EditRoleStatus(role *models2.SysRole) int64 {
|
||||||
|
return s.roleDao.UpdateRoleStatus(role)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteAuthUser 取消授权用户
|
||||||
|
func (s RoleService) DeleteAuthUser(userRole models2.SysUserRole) int64 {
|
||||||
|
return s.userRoleDao.DeleteAuthUser(userRole)
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertAuthUsers 批量选择用户授权
|
||||||
|
func (s RoleService) InsertAuthUsers(body req2.UserRoleBody) int64 {
|
||||||
|
return s.userRoleDao.InsertAuthUsers(body)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRolesByUserName 查询所属角色组
|
||||||
|
func (s RoleService) GetRolesByUserName(name string) string {
|
||||||
|
list := s.roleDao.SelectRolesByUserName(name)
|
||||||
|
var buffer bytes.Buffer
|
||||||
|
var roleName string
|
||||||
|
for _, role := range *list {
|
||||||
|
buffer.WriteString(role.RoleName)
|
||||||
|
buffer.WriteString(",")
|
||||||
|
}
|
||||||
|
s2 := buffer.String()
|
||||||
|
if gotool.StrUtils.HasNotEmpty(s2) {
|
||||||
|
roleName = s2[0:(len(s2) - 1)]
|
||||||
|
}
|
||||||
|
return roleName
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/dao"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UserPostService struct {
|
||||||
|
userPostDao dao.UserPostDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountUserPostById 统计岗位数据数量
|
||||||
|
func (s UserPostService) CountUserPostById(ids []int64) int64 {
|
||||||
|
for _, id := range ids {
|
||||||
|
if s.userPostDao.CountById(id) > 0 {
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/api/v1/response"
|
||||||
|
dao2 "cutego/core/dao"
|
||||||
|
models2 "cutego/core/entity"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UserService 用户操作业务逻辑
|
||||||
|
type UserService struct {
|
||||||
|
userDao dao2.UserDao
|
||||||
|
userPostDao dao2.UserPostDao
|
||||||
|
userRoleDao dao2.UserRoleDao
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindList 查询用户集合业务方法
|
||||||
|
func (s UserService) FindList(query request.UserQuery) ([]*response.UserResponse, int64) {
|
||||||
|
return s.userDao.SelectPage(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserById 根据id查询用户数据
|
||||||
|
func (s UserService) GetUserById(parseInt int64) *response.UserResponse {
|
||||||
|
return s.userDao.GetUserById(parseInt)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserByUserName 根据用户名查询用户
|
||||||
|
func (s UserService) GetUserByUserName(name string) *models2.SysUser {
|
||||||
|
user := models2.SysUser{}
|
||||||
|
user.UserName = name
|
||||||
|
return s.userDao.GetUserByUserName(user)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckEmailUnique 校验邮箱是否存在
|
||||||
|
func (s UserService) CheckEmailUnique(user request.UserBody) *models2.SysUser {
|
||||||
|
return s.userDao.CheckEmailUnique(user)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckPhoneNumUnique 校验手机号是否存在
|
||||||
|
func (s UserService) CheckPhoneNumUnique(body request.UserBody) *models2.SysUser {
|
||||||
|
return s.userDao.CheckPhoneNumUnique(body)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 添加用户业务逻辑
|
||||||
|
func (s UserService) Save(body request.UserBody) bool {
|
||||||
|
// 添加用户数据库操作
|
||||||
|
user := s.userDao.Insert(body)
|
||||||
|
if user != nil {
|
||||||
|
s.BindUserPost(user)
|
||||||
|
s.BindUserRole(user)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增用户岗位信息
|
||||||
|
func (s UserService) BindUserPost(user *request.UserBody) {
|
||||||
|
postIds := user.PostIds
|
||||||
|
if len(postIds) > 0 {
|
||||||
|
sysUserPosts := make([]models2.SysUserPost, 0)
|
||||||
|
for i := 0; i < len(postIds); i++ {
|
||||||
|
m := models2.SysUserPost{
|
||||||
|
UserId: user.UserId,
|
||||||
|
PostId: postIds[i],
|
||||||
|
}
|
||||||
|
sysUserPosts = append(sysUserPosts, m)
|
||||||
|
}
|
||||||
|
s.userPostDao.BatchInsert(sysUserPosts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增用户角色信息
|
||||||
|
func (s UserService) BindUserRole(user *request.UserBody) {
|
||||||
|
roleIds := user.RoleIds
|
||||||
|
if len(roleIds) > 0 {
|
||||||
|
roles := make([]models2.SysUserRole, 0)
|
||||||
|
for i := 0; i < len(roleIds); i++ {
|
||||||
|
role := models2.SysUserRole{
|
||||||
|
RoleId: roleIds[i],
|
||||||
|
UserId: user.UserId,
|
||||||
|
}
|
||||||
|
roles = append(roles, role)
|
||||||
|
}
|
||||||
|
s.userRoleDao.BatchInsert(roles)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit 修改用户数据
|
||||||
|
func (s UserService) Edit(body request.UserBody) int64 {
|
||||||
|
// 删除原有用户和角色关系
|
||||||
|
s.userRoleDao.Delete(body.UserId)
|
||||||
|
// 重新添加用具角色关系
|
||||||
|
s.BindUserRole(&body)
|
||||||
|
// 删除原有用户岗位关系
|
||||||
|
s.userPostDao.Delete(body.UserId)
|
||||||
|
// 添加新的用户岗位关系
|
||||||
|
s.BindUserPost(&body)
|
||||||
|
// 修改用户数据
|
||||||
|
return s.userDao.Update(body)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 根据用户id删除用户相关数据
|
||||||
|
func (s UserService) Remove(id int64) int64 {
|
||||||
|
// 删除原有用户和角色关系
|
||||||
|
s.userRoleDao.Delete(id)
|
||||||
|
// 删除原有用户岗位关系
|
||||||
|
s.userPostDao.Delete(id)
|
||||||
|
// 删除用户数据
|
||||||
|
return s.userDao.Delete(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckUserAllowed 校验是否可以修改用户密码
|
||||||
|
func (s UserService) CheckUserAllowed(body request.UserBody) bool {
|
||||||
|
user := models2.SysUser{}
|
||||||
|
return user.IsAdmin(body.UserId)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResetPwd 修改用户密码
|
||||||
|
func (s UserService) ResetPwd(body request.UserBody) int64 {
|
||||||
|
return s.userDao.ResetPwd(body)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAllocatedList 查询未分配用户角色列表
|
||||||
|
func (s UserService) GetAllocatedList(query request.UserQuery) ([]*response.UserResponse, int64) {
|
||||||
|
return s.userDao.GetAllocatedList(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUnallocatedList 查询未分配用户角色列表
|
||||||
|
func (s UserService) GetUnallocatedList(query request.UserQuery) ([]*response.UserResponse, int64) {
|
||||||
|
return s.userDao.GetUnallocatedList(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditProfile 修改数据
|
||||||
|
func (s UserService) EditProfile(user request.UserBody) int64 {
|
||||||
|
return s.userDao.Update(user)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditPwd 修改密码
|
||||||
|
func (s UserService) EditPwd(id int64, hash string) bool {
|
||||||
|
return s.userDao.UpdatePwd(id, hash) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditAvatar 修改头像
|
||||||
|
func (s UserService) EditAvatar(info *response.UserResponse) bool {
|
||||||
|
return s.userDao.UpdateAvatar(info) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditStatus 修改可用状态
|
||||||
|
func (s UserService) EditStatus(info request.UserBody) bool {
|
||||||
|
return s.userDao.UpdateStatus(info) > 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package base
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// GlobalModel 全局映射实体
|
||||||
|
type GlobalModel struct {
|
||||||
|
CreateTime time.Time `json:"createTime"` // 创建时间
|
||||||
|
CreateBy string `json:"createBy"` // 创建人
|
||||||
|
UpdateTime time.Time `json:"updateTime"` // 更新时间
|
||||||
|
UpdateBy string `json:"updateBy"` // 更新人
|
||||||
|
}
|
||||||
|
|
||||||
|
// GlobalQuery 全局Query通用条件
|
||||||
|
type GlobalQuery struct {
|
||||||
|
BeginTime string `form:"beginTime"` // 开始时间
|
||||||
|
EndTime string `form:"endTime"` // 结束时间
|
||||||
|
PageNum int `form:"pageNum"` // 当前页码
|
||||||
|
PageSize int `form:"pageSize"` // 显示条数
|
||||||
|
}
|
||||||
Vendored
+58
@@ -0,0 +1,58 @@
|
|||||||
|
package cache
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/dao"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"cutego/pkg/constant"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RemoveList 批量根据Key删除数据
|
||||||
|
// @Param list []string 键合集
|
||||||
|
func RemoveList(list []string) {
|
||||||
|
dao.RedisDB.DELALL(list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveKey 根据key删除
|
||||||
|
// @Param key 键
|
||||||
|
// @Return int 删除的数量
|
||||||
|
func RemoveCache(key string) int {
|
||||||
|
del, err := dao.RedisDB.DEL(key)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(err)
|
||||||
|
}
|
||||||
|
return del
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCache 获取缓存数据
|
||||||
|
// @Param key 键
|
||||||
|
// @Return string 值
|
||||||
|
func GetCache(key string) string {
|
||||||
|
val, err := dao.RedisDB.GET(key)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(constant.RedisConst{}.GetRedisError(), err.Error())
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCache 设置缓存数据
|
||||||
|
// @Param key 键
|
||||||
|
// @Param value 值
|
||||||
|
// @Return 新增的行数
|
||||||
|
func SetCache(key string, value interface{}) int {
|
||||||
|
n, err := dao.RedisDB.SET(key, common.StructToJson(value))
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorLog(constant.RedisConst{}.GetRedisError(), err.Error())
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return int(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCache 设置缓存数据, 并指定过期时间
|
||||||
|
// @Param key 键
|
||||||
|
// @Param value 值
|
||||||
|
// @Param sec 过期时间(单位: 秒)
|
||||||
|
// @Return 新增的行数
|
||||||
|
func SetCacheTTL(key string, value interface{}, sec int) {
|
||||||
|
dao.RedisDB.SETEX(key, sec, common.StructToJson(value))
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
// RedisData 存储数据结构
|
||||||
|
type RedisData struct {
|
||||||
|
Key string
|
||||||
|
Field string
|
||||||
|
Value string
|
||||||
|
Expire int64
|
||||||
|
}
|
||||||
|
|
||||||
|
// RedisDataArray RedisData of array
|
||||||
|
type RedisDataArray []*RedisData
|
||||||
|
|
||||||
|
// IRedis redis client interface
|
||||||
|
type IRedis interface {
|
||||||
|
// KEYS get patten key array
|
||||||
|
KEYS(patten string) ([]string, error)
|
||||||
|
|
||||||
|
// SCAN get patten key array
|
||||||
|
SCAN(patten string) ([]string, error)
|
||||||
|
|
||||||
|
// DEL delete k-v
|
||||||
|
DEL(key string) (int, error)
|
||||||
|
|
||||||
|
// DELALL delete key array
|
||||||
|
DELALL(key []string) (int, error)
|
||||||
|
|
||||||
|
// GET get k-v
|
||||||
|
GET(key string) (string, error)
|
||||||
|
|
||||||
|
// SET set k-v
|
||||||
|
//SET(key string, value string) (int64, error)
|
||||||
|
|
||||||
|
// SETEX set k-v expire seconds
|
||||||
|
SETEX(key string, sec int, value string) (int64, error)
|
||||||
|
|
||||||
|
// EXPIRE set key expire seconds
|
||||||
|
EXPIRE(key string, sec int64) (int64, error)
|
||||||
|
|
||||||
|
// HGETALL get map of key
|
||||||
|
HGETALL(key string) (map[string]string, error)
|
||||||
|
|
||||||
|
// HGET get value of key-field
|
||||||
|
HGET(key string, field string) (string, error)
|
||||||
|
|
||||||
|
// HSET set value of key-field
|
||||||
|
//HSET(key string, field string, value string) (int64, error)
|
||||||
|
|
||||||
|
// Write 向redis中写入多组数据
|
||||||
|
Write(data RedisDataArray)
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import "github.com/druidcaesa/gotool"
|
||||||
|
|
||||||
|
func ErrorLog(v ...interface{}) {
|
||||||
|
gotool.Logs.ErrorLog().Println(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)
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/pkg/config"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"runtime"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// IntToString int转string
|
||||||
|
func IntToString(n int) string {
|
||||||
|
return strconv.Itoa(n)
|
||||||
|
}
|
||||||
|
func mapToBytes(data map[string]interface{}) []byte {
|
||||||
|
bytes, _ := json.Marshal(data)
|
||||||
|
return bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
// MapToStruct map转struct
|
||||||
|
func MapToStruct(data map[string]interface{}, v interface{}) {
|
||||||
|
_ = json.Unmarshal(mapToBytes(data), v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDirPath 获取目录路径
|
||||||
|
func GetDirPath(resType string) string {
|
||||||
|
sysType := runtime.GOOS
|
||||||
|
switch sysType {
|
||||||
|
case "linux":
|
||||||
|
if resType == "log" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Linux.Logs
|
||||||
|
} else if resType == "avatar" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Linux.Avatar
|
||||||
|
} else if resType == "file" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Linux.Path
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case "windows":
|
||||||
|
if resType == "log" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Windows.Logs
|
||||||
|
} else if resType == "avatar" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Windows.Avatar
|
||||||
|
} else if resType == "file" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Windows.Path
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case "mac":
|
||||||
|
if resType == "log" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Mac.Logs
|
||||||
|
} else if resType == "avatar" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Mac.Avatar
|
||||||
|
} else if resType == "file" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Mac.Path
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case "darwin":
|
||||||
|
if resType == "log" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Mac.Logs
|
||||||
|
} else if resType == "avatar" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Mac.Avatar
|
||||||
|
} else if resType == "file" {
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Mac.Path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return config.AppCoreConfig.CuteGoConfig.File.Linux.Logs
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateAllDir 递归创建文件夹
|
||||||
|
func CreateAllDir(filePath string) error {
|
||||||
|
if !IsFileOrDirExist(filePath) {
|
||||||
|
err := os.MkdirAll(filePath, os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("创建文件夹失败, error info:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsFileOrDirExist 判断所给路径文件/文件夹是否存在(返回true是存在)
|
||||||
|
func IsFileOrDirExist(path string) bool {
|
||||||
|
// os.Stat获取文件信息
|
||||||
|
_, err := os.Stat(path)
|
||||||
|
if err != nil {
|
||||||
|
if os.IsExist(err) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 类三元表达式
|
||||||
|
// condition 成立条件
|
||||||
|
// trueVal 当条件为true时返回
|
||||||
|
// false 当条件为false时返回
|
||||||
|
func If(condition bool, trueVal, falseVal interface{}) interface{} {
|
||||||
|
if condition {
|
||||||
|
return trueVal
|
||||||
|
}
|
||||||
|
return falseVal
|
||||||
|
}
|
||||||
|
|
||||||
|
// 结构体、Map等转Json字符串
|
||||||
|
// @Param v interface{}
|
||||||
|
// @Return Json字符串
|
||||||
|
func StructToJson(v interface{}) string {
|
||||||
|
jsonBytes, err := json.Marshal(&v)
|
||||||
|
if err != nil {
|
||||||
|
ErrorLog(err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
s := string(jsonBytes)
|
||||||
|
DebugLogf("StructToJson, json=%s", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Json字符串转结构体、Map等
|
||||||
|
//
|
||||||
|
// 单个对象
|
||||||
|
// s := new(models2.SysConfig)
|
||||||
|
// return common.JsonToStruct(get, s).(*models2.SysConfig)
|
||||||
|
//
|
||||||
|
// 切片(interface{}.(期望类型))
|
||||||
|
// s := make([]interface {}, 0)
|
||||||
|
// target := common.JsonToStruct(get, s)
|
||||||
|
// target.([]entity.SysDictData)
|
||||||
|
//
|
||||||
|
// @Param data Json字符串
|
||||||
|
// @Param s 容器(结构体、Map等)
|
||||||
|
// @Return interface{}
|
||||||
|
func JsonToStruct(data string, s interface{}) interface{} {
|
||||||
|
err := json.Unmarshal([]byte(data), &s)
|
||||||
|
if err != nil {
|
||||||
|
ErrorLog(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
DebugLogf("JsonToStruct, obj=%v", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
config "cutego/pkg/config/models"
|
||||||
|
"fmt"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// AppCoreConfig 核心配置
|
||||||
|
AppCoreConfig *config.ApplicationCoreStruct
|
||||||
|
// AppEnvConfig 环境配置
|
||||||
|
AppEnvConfig *config.ApplicationEnvStruct
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetRootPath 获取项目根路径
|
||||||
|
func GetRootPath() string {
|
||||||
|
rootPath, _ := os.Getwd()
|
||||||
|
return rootPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPathSeparator 获取路径分隔符
|
||||||
|
func GetPathSeparator() string {
|
||||||
|
return string(os.PathSeparator)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathExists 判断文件或文件夹是否存在
|
||||||
|
// 如果返回的错误为nil,说明文件或文件夹存在
|
||||||
|
// 如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
|
||||||
|
// 如果返回的错误为其它类型,则不确定是否在存在
|
||||||
|
func PathExists(path string) (bool, error) {
|
||||||
|
_, err := os.Stat(path)
|
||||||
|
if err == nil {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadYamlFile 加载yaml文件
|
||||||
|
func LoadYamlFile(filename string, v interface{}) {
|
||||||
|
data, err := ioutil.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
|
err = yaml.Unmarshal(data, v)
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置文件所在路径
|
||||||
|
const BaseConfigDirPath = "configs"
|
||||||
|
|
||||||
|
func readAppYmlFile(resourcePath string) {
|
||||||
|
|
||||||
|
// 读取主配置文件
|
||||||
|
applicationCoreFileName := BaseConfigDirPath + "/application.yml"
|
||||||
|
applicationCoreFilePath := resourcePath + GetPathSeparator() + applicationCoreFileName
|
||||||
|
exists, _ := PathExists(applicationCoreFilePath)
|
||||||
|
if !exists {
|
||||||
|
panic(applicationCoreFileName + "配置文件不存在!")
|
||||||
|
}
|
||||||
|
AppCoreConfig = &config.ApplicationCoreStruct{}
|
||||||
|
// 由于要改变appConfig内部的值, 所以这里要取址
|
||||||
|
LoadYamlFile(applicationCoreFilePath, AppCoreConfig)
|
||||||
|
|
||||||
|
// 读取环境文件
|
||||||
|
applicationEnvFileName := fmt.Sprintf(BaseConfigDirPath+"/application-%s.yml", AppCoreConfig.CuteGoConfig.Active)
|
||||||
|
applicationEnvFilePath := resourcePath + GetPathSeparator() + applicationEnvFileName
|
||||||
|
exists, _ = PathExists(applicationEnvFilePath)
|
||||||
|
if !exists {
|
||||||
|
panic(applicationEnvFileName + "配置文件不存在!")
|
||||||
|
}
|
||||||
|
AppEnvConfig = &config.ApplicationEnvStruct{}
|
||||||
|
// 由于要改变appConfig内部的值, 所以这里要取址
|
||||||
|
LoadYamlFile(applicationEnvFilePath, AppEnvConfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecuteTip 执行日志
|
||||||
|
func ExecuteTip(message string) {
|
||||||
|
fmt.Println(fmt.Sprintf("-------------------- %s --------------------", message))
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// 资源文件所在的路径
|
||||||
|
resourcePath := GetRootPath()
|
||||||
|
ExecuteTip("初始化应用配置 start")
|
||||||
|
readAppYmlFile(resourcePath)
|
||||||
|
ExecuteTip("初始化应用配置 end")
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type ApplicationCoreStruct struct {
|
||||||
|
CuteGoConfig CuteGoConfig `yaml:"cutego"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CuteGoConfig 总配置
|
||||||
|
type CuteGoConfig struct {
|
||||||
|
// 默认激活dev配置
|
||||||
|
Active string `yaml:"active" default:"dev"`
|
||||||
|
// 开启演示模式
|
||||||
|
DemoMode bool `yaml:"demo-mode"`
|
||||||
|
Mail MailConfig `yaml:"mail"`
|
||||||
|
TaskPool TaskPoolConfig `yaml:"task-pool"`
|
||||||
|
Captcha CaptchaConfig `yaml:"captcha"`
|
||||||
|
File FileConfig `yaml:"file"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// MailConfig 邮件
|
||||||
|
type MailConfig struct {
|
||||||
|
// 服务地址
|
||||||
|
Host string `yaml:"host"`
|
||||||
|
// 服务端口
|
||||||
|
Port int `yaml:"port"`
|
||||||
|
// 用户名
|
||||||
|
Username string `yaml:"username"`
|
||||||
|
// 密码
|
||||||
|
Password string `yaml:"password"`
|
||||||
|
// 默认编码
|
||||||
|
DefaultEncoding string `yaml:"default-encoding"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TaskPoolConfig 线程池
|
||||||
|
type TaskPoolConfig struct {
|
||||||
|
// 核心线程池大小
|
||||||
|
CorePoolSize int `yaml:"core-pool-size"`
|
||||||
|
// 最大线程数(尽可能的大)
|
||||||
|
MaxPoolSize int `yaml:"max-pool-size"`
|
||||||
|
// 活跃时间(单位: s)
|
||||||
|
KeepAliveSeconds int `yaml:"keep-alive-seconds"`
|
||||||
|
// 队列容量
|
||||||
|
QueueCapacity int `yaml:"queue-capacity"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CaptchaConfig 验证码有效时间(单位: s)
|
||||||
|
type CaptchaConfig struct {
|
||||||
|
// 邮箱
|
||||||
|
Email int `yaml:"email"`
|
||||||
|
// 手机短信
|
||||||
|
Sms int `yaml:"sms"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FileConfig 文件上传
|
||||||
|
type FileConfig struct {
|
||||||
|
// 文件大小(单位: mb)
|
||||||
|
FileMaxSize int `yaml:"file-max-size"`
|
||||||
|
// 头像大小(单位: mb)
|
||||||
|
AvatarMaxSize int `yaml:"avatar-max-size"`
|
||||||
|
Mac FilePath `yaml:"mac"`
|
||||||
|
Linux FilePath `yaml:"linux"`
|
||||||
|
Windows FilePath `yaml:"windows"`
|
||||||
|
}
|
||||||
|
type FilePath struct {
|
||||||
|
Path string `yaml:"path"`
|
||||||
|
Avatar string `yaml:"avatar"`
|
||||||
|
Logs string `yaml:"logs"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type ApplicationEnvStruct struct {
|
||||||
|
Server ServerConfig `yaml:"server"`
|
||||||
|
DataSource DataSourceConfig `yaml:"datasource"`
|
||||||
|
Redis RedisConfig `yaml:"redis"`
|
||||||
|
MongoDb MongoDbConfig `yaml:"mongodb"`
|
||||||
|
Login LoginConfig `yaml:"login"`
|
||||||
|
Jwt JwtConfig `yaml:"jwt"`
|
||||||
|
Logger LoggerConfig `yaml:"logger"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServerConfig web服务
|
||||||
|
type ServerConfig struct {
|
||||||
|
// Running in "debug" mode. Switch to "release" mode in production
|
||||||
|
RunMode string `yaml:"run-mode"`
|
||||||
|
// web服务监听端口(生产的端口有可能不一样,所以根据环境隔离开)
|
||||||
|
Port int `yaml:"port"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// DataSourceConfig 数据源
|
||||||
|
type DataSourceConfig struct {
|
||||||
|
// 数据库类型
|
||||||
|
DbType string `yaml:"db-type" default:"mysql"`
|
||||||
|
// 服务地址
|
||||||
|
Host string `yaml:"host"`
|
||||||
|
// 服务端口
|
||||||
|
Port int `yaml:"port"`
|
||||||
|
// 用户名称
|
||||||
|
Username string `yaml:"username"`
|
||||||
|
// 用户密码
|
||||||
|
Password string `yaml:"password"`
|
||||||
|
// 数据库名称
|
||||||
|
Database string `yaml:"database"`
|
||||||
|
// 编码
|
||||||
|
Charset string `yaml:"charset"`
|
||||||
|
// 空闲时的最大连接数
|
||||||
|
MaxIdleSize int `yaml:"max-idle-size"`
|
||||||
|
// 数据库的最大打开连接数
|
||||||
|
MaxOpenSize int `yaml:"max-open-size"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RedisConfig 缓存
|
||||||
|
type RedisConfig struct {
|
||||||
|
// 数据库索引
|
||||||
|
Database int `yaml:"database"`
|
||||||
|
// 服务地址
|
||||||
|
Host string `yaml:"host"`
|
||||||
|
// 服务端口
|
||||||
|
Port int `yaml:"port"`
|
||||||
|
// 服务密码
|
||||||
|
Password string `yaml:"password"`
|
||||||
|
// 连接超时时间
|
||||||
|
Timeout int `yaml:"timeout"`
|
||||||
|
Pool RedisPoolConfig `yaml:"pool"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RedisPoolConfig redis连接池配置
|
||||||
|
type RedisPoolConfig struct {
|
||||||
|
// 连接池最大连接数(使用负值表示没有限制, 最佳配置为cpu核数+1)
|
||||||
|
MaxActive int `yaml:"max-active"`
|
||||||
|
// 连接池中的最大空闲连接
|
||||||
|
MaxIdle int `yaml:"max-idle"`
|
||||||
|
// 连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||||
|
MaxWait int `yaml:"max-wait"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// MongoDbConfig MongoDB
|
||||||
|
type MongoDbConfig struct {
|
||||||
|
Url string `yaml:"url"`
|
||||||
|
Port string `yaml:"port"`
|
||||||
|
DB string `yaml:"db"`
|
||||||
|
Username string `yaml:"username"`
|
||||||
|
Password string `yaml:"password"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoginConfig 登录相关
|
||||||
|
type LoginConfig struct {
|
||||||
|
// 是否限制单用户登录
|
||||||
|
Single bool `yaml:"single"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// JwtConfig jwt参数
|
||||||
|
type JwtConfig struct {
|
||||||
|
// 请求头前缀
|
||||||
|
Header string `yaml:"header" json:"header,omitempty"`
|
||||||
|
// 令牌前缀
|
||||||
|
TokenStartWith string `yaml:"token-start-with" json:"token_start_with,omitempty"`
|
||||||
|
// 加密密钥
|
||||||
|
TokenSecret string `yaml:"token-secret" json:"token_secret,omitempty"`
|
||||||
|
// 令牌过期时间 此处单位: h , 默认1小时
|
||||||
|
TokenExpired int `yaml:"token-expired" json:"token_expired,omitempty"`
|
||||||
|
// token在cookie中的别称
|
||||||
|
CookieKey string `yaml:"cookie-key"`
|
||||||
|
// 在线用户key
|
||||||
|
OnlineKey string `yaml:"online-key" json:"online_key,omitempty"`
|
||||||
|
// token 续期检查时间范围(默认30分钟, 单位毫秒), 在token即将过期的一段时间内用户操作了, 则给用户的token续期
|
||||||
|
Detect int `yaml:"detect" json:"detect,omitempty"`
|
||||||
|
// 续期时间范围, 默认1小时, 单位毫秒
|
||||||
|
Renew int `yaml:"renew" json:"renew,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoggerConfig 日志文件
|
||||||
|
type LoggerConfig struct {
|
||||||
|
// 最大保存时间(单位: d)
|
||||||
|
MaxSaveAge int `yaml:"max-save-age"`
|
||||||
|
// 日志切割时间间隔(单位: d)
|
||||||
|
RotationTime int `yaml:"rotation-time"`
|
||||||
|
// 日志级别
|
||||||
|
Level string `yaml:"level"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package constant
|
||||||
|
|
||||||
|
const (
|
||||||
|
RedisOnlineUserKey = "online:"
|
||||||
|
)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package constant
|
||||||
|
|
||||||
|
const (
|
||||||
|
mysqlErrorMsg = "调用MySQL发生异常, %s"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MysqlConst struct{}
|
||||||
|
|
||||||
|
// GetMysqlError Mysql异常拼接常量
|
||||||
|
func (c MysqlConst) GetMysqlError() string {
|
||||||
|
return mysqlErrorMsg
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package constant
|
||||||
|
|
||||||
|
const (
|
||||||
|
redisErrorMsg = "调用Redis发生异常, %s"
|
||||||
|
redisDictKey = "dict:"
|
||||||
|
redisConfigKey = "config:"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RedisConst Redis相关操作常量
|
||||||
|
type RedisConst struct{}
|
||||||
|
|
||||||
|
// GetRedisError Redis异常拼接常量
|
||||||
|
func (c RedisConst) GetRedisError() string {
|
||||||
|
return redisErrorMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRedisDictKey 获取Redis的Dict的key
|
||||||
|
func (c RedisConst) GetRedisDictKey() string {
|
||||||
|
return redisDictKey
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRedisConfigKey 获取redis的config的key
|
||||||
|
func (c RedisConst) GetRedisConfigKey() string {
|
||||||
|
return redisConfigKey
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package cronjob
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cutego/core/api/v1/request"
|
||||||
|
"cutego/core/job"
|
||||||
|
"cutego/core/service"
|
||||||
|
"cutego/pkg/common"
|
||||||
|
"github.com/robfig/cron"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Cron表达式参考
|
||||||
|
// 每隔5秒执行一次:*/5 * * * * ?
|
||||||
|
// 每隔1分钟执行一次:0 */1 * * * ?
|
||||||
|
// 每天23点执行一次:0 0 23 * * ?
|
||||||
|
// 每天凌晨1点执行一次:0 0 1 * * ?
|
||||||
|
// 每月1号凌晨1点执行一次:0 0 1 1 * ?
|
||||||
|
// 每月最后一天23点执行一次:0 0 23 L * ?
|
||||||
|
// 每周星期天凌晨1点实行一次:0 0 1 ? * L
|
||||||
|
// 在26分、29分、33分执行一次:0 26,29,33 * * * ?
|
||||||
|
// 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
|
||||||
|
|
||||||
|
// 定时任务: 别名与调度器的映射
|
||||||
|
var AliasCronMap = make(map[string]*cron.Cron)
|
||||||
|
|
||||||
|
// 停止任务, 不会停止已开始的任务
|
||||||
|
func StopCronFunc(aliasName string) {
|
||||||
|
common.InfoLogf("停止任务 %s ---> Start", aliasName)
|
||||||
|
AliasCronMap[aliasName].Stop()
|
||||||
|
common.InfoLogf("停止任务 %s ---> Finish", aliasName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始任务
|
||||||
|
func StartCronFunc(aliasName string) {
|
||||||
|
common.InfoLogf("唤起任务 %s ---> Start", aliasName)
|
||||||
|
AliasCronMap[aliasName].Start()
|
||||||
|
common.InfoLogf("唤起任务 %s ---> Finish", aliasName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if len(job.AliasFuncMap) > 0 {
|
||||||
|
//go test()
|
||||||
|
index := 1
|
||||||
|
for true {
|
||||||
|
q := request.CronJobQuery{}
|
||||||
|
q.PageNum = index
|
||||||
|
data, _ := service.CronJobService{}.FindPage(q)
|
||||||
|
if len(data) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
for _, datum := range data {
|
||||||
|
c := cron.New()
|
||||||
|
c.AddFunc(datum.JobCron, job.AliasFuncMap[datum.FuncAlias])
|
||||||
|
c.Start()
|
||||||
|
|
||||||
|
AliasCronMap[datum.FuncAlias] = c
|
||||||
|
common.InfoLogf("调度定时任务 --- %s ---> Success", datum.JobName)
|
||||||
|
}
|
||||||
|
index += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试通过
|
||||||
|
func test() {
|
||||||
|
time.Sleep(time.Second * 10)
|
||||||
|
StopCronFunc("test1")
|
||||||
|
time.Sleep(time.Second * 10)
|
||||||
|
StartCronFunc("test1")
|
||||||
|
}
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
package excels
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/druidcaesa/gotool"
|
||||||
|
"github.com/xuri/excelize/v2"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 获取title头list
|
||||||
|
func getTitle(list []map[string]string) []string {
|
||||||
|
titleList := make([]string, 0)
|
||||||
|
for _, item := range list {
|
||||||
|
for _, s := range item {
|
||||||
|
titleList = append(titleList, s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return titleList
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExportExcel 导出excel
|
||||||
|
func ExportExcel(list []interface{}, title string) (error, *excelize.File) {
|
||||||
|
// 获取标题
|
||||||
|
headerList, expList := ExcelCreate(list[0])
|
||||||
|
headers := getTitle(headerList)
|
||||||
|
// 默认存在第一个工作簿是 Sheet1 首字母要大写, 否则会报错。
|
||||||
|
// 如果想额外的创建工作簿, 可以使用, sheet2 := file.NewSheet("Sheet2"), 工作簿的名称不区分大小写。
|
||||||
|
// 如果有多个工作簿, 可以使用 file.SetActiveSheet(index) 来指定打开文件时focus到哪个工作簿
|
||||||
|
sheet1 := "Sheet1"
|
||||||
|
files := excelize.NewFile()
|
||||||
|
character := string(65 + len(headers) - 1)
|
||||||
|
/* -------------------- 第一行大标题 -------------------- */
|
||||||
|
// 设置行高
|
||||||
|
err := files.SetRowHeight(sheet1, 1, 25)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
// 合并单元格
|
||||||
|
err = files.MergeCell(sheet1, "A1", character+"1")
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
// 设置单元格样式:对齐;字体, 大小;单元格边框
|
||||||
|
styleTitle, _ := files.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"},"font":{"bold":true,"italic":false,"family":"Calibri","size":16,"color":"#000000"},"border":[{"type":"left","color":"#3FAD08","style":0},{"type":"top","color":"#3FAD08","style":0},{"type":"bottom","color":"#3FAD08","style":2},{"type":"right","color":"#3FAD08","style":0}]}`)
|
||||||
|
err = files.SetCellStyle(sheet1, "A1", character+"1", styleTitle)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err = files.SetCellValue(sheet1, "A1", title)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------- 字段标题 -------------------- */
|
||||||
|
styleHeader, _ := files.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"},"font":{"bold":false,"italic":false,"family":"Calibri","size":10,"color":"#000000"}}`)
|
||||||
|
err = files.SetCellStyle(sheet1, "A2", character+"2", styleHeader)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
for k, v := range headers {
|
||||||
|
err = files.SetCellValue(sheet1, string(65+k)+"2", v)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 设置最后一列宽度
|
||||||
|
err = files.SetColWidth(sheet1, "C", character, 20)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
// 冻结窗口:冻结第一行和第二行
|
||||||
|
err = files.SetPanes(sheet1, `{"freeze":true,"split":false,"x_split":0,"y_split":2}`)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
///* -------------------- 填充行数据 -------------------- */
|
||||||
|
line := 3
|
||||||
|
for _, v := range list {
|
||||||
|
var num = 0
|
||||||
|
lineChr := strconv.Itoa(line)
|
||||||
|
// 设置样式
|
||||||
|
err = files.SetCellStyle(sheet1, "A"+lineChr, character+lineChr, styleHeader)
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
// 反射获取数据和类型
|
||||||
|
getValue := reflect.ValueOf(v)
|
||||||
|
getType := reflect.TypeOf(v)
|
||||||
|
n := getValue.NumField()
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
val := getValue.Field(i)
|
||||||
|
name := getType.Field(i).Name
|
||||||
|
if !getIsTitle(name, headerList) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
err = files.SetCellValue(sheet1, string(65+num)+lineChr, getExp(name, expList, val.Interface()))
|
||||||
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
num++
|
||||||
|
}
|
||||||
|
line++
|
||||||
|
}
|
||||||
|
return nil, files
|
||||||
|
}
|
||||||
|
|
||||||
|
func getIsTitle(name string, headerList []map[string]string) bool {
|
||||||
|
flag := false
|
||||||
|
for _, m := range headerList {
|
||||||
|
if gotool.StrUtils.HasNotEmpty(m[name]) {
|
||||||
|
flag = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return flag
|
||||||
|
}
|
||||||
|
|
||||||
|
func getExp(name string, expList []map[string][]map[string]string, value interface{}) interface{} {
|
||||||
|
for _, m := range expList {
|
||||||
|
if len(m[name]) > 0 {
|
||||||
|
maps := m[name]
|
||||||
|
for _, m2 := range maps {
|
||||||
|
if gotool.StrUtils.HasNotEmpty(m2[interfaceToString(value)]) {
|
||||||
|
value = m2[interfaceToString(value)]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func interfaceToString(inter interface{}) string {
|
||||||
|
switch inter.(type) {
|
||||||
|
case string:
|
||||||
|
return inter.(string)
|
||||||
|
case int:
|
||||||
|
return strconv.Itoa(inter.(int))
|
||||||
|
case int64:
|
||||||
|
return strconv.FormatInt(inter.(int64), 10)
|
||||||
|
default:
|
||||||
|
return inter.(string)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package excels
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 定义tagName名称
|
||||||
|
const tagName = "excel"
|
||||||
|
|
||||||
|
// Excels 定义Excel接口
|
||||||
|
type Excels interface {
|
||||||
|
Excels(interface{}) (bool, string)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DefaultExcels 默认Excel配置
|
||||||
|
type DefaultExcels struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Excels 实现接口
|
||||||
|
func (e DefaultExcels) Excels(val interface{}) (bool, string) {
|
||||||
|
return true, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// `excel:"name='',readConverterExp=''"`
|
||||||
|
// 获取标题头
|
||||||
|
func getExcelFromTagTitle(proName string, tag string) map[string]string {
|
||||||
|
args := strings.SplitN(tag, ",", 2)
|
||||||
|
m := make(map[string]string)
|
||||||
|
for i := 0; i < len(args); i++ {
|
||||||
|
contains := strings.Contains(args[i], "name")
|
||||||
|
if contains {
|
||||||
|
m[proName] = strings.Split(args[i], "=")[1]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// `excel:"name='',readConverterExp='Y=1,N=2'"`
|
||||||
|
func getReadConverterExp(proName string, tag string) map[string][]map[string]string {
|
||||||
|
list := make(map[string][]map[string]string, 0)
|
||||||
|
args := strings.SplitN(tag, ",", 2)
|
||||||
|
for i := 0; i < len(args); i++ {
|
||||||
|
if strings.Contains(args[i], "format") {
|
||||||
|
maps := make([]map[string]string, 0)
|
||||||
|
converter := strings.SplitN(args[i], "=", 2)[1]
|
||||||
|
values := strings.Split(converter, ",")
|
||||||
|
for j := 0; j < len(values); j++ {
|
||||||
|
split := strings.Split(values[j], "=")
|
||||||
|
m := make(map[string]string)
|
||||||
|
m[split[0]] = split[1]
|
||||||
|
maps = append(maps, m)
|
||||||
|
}
|
||||||
|
list[proName] = maps
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExcelCreate 获取name名称和readConverterExp集合
|
||||||
|
func ExcelCreate(s interface{}) ([]map[string]string, []map[string][]map[string]string) {
|
||||||
|
titleList := make([]map[string]string, 0)
|
||||||
|
expList := make([]map[string][]map[string]string, 0)
|
||||||
|
// 获取值域
|
||||||
|
v := reflect.ValueOf(s)
|
||||||
|
t := reflect.TypeOf(s)
|
||||||
|
var title map[string]string
|
||||||
|
var exp map[string][]map[string]string
|
||||||
|
// 遍历反射树形
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
tag := v.Type().Field(i).Tag.Get(tagName)
|
||||||
|
if tag == "" || tag == "-" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
name := t.Field(i).Name
|
||||||
|
title = getExcelFromTagTitle(name, tag)
|
||||||
|
exp = getReadConverterExp(name, tag)
|
||||||
|
titleList = append(titleList, title)
|
||||||
|
expList = append(expList, exp)
|
||||||
|
}
|
||||||
|
return titleList, expList
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user