feat: 更新多个模块以支持新的数据结构和日志格式
This commit is contained in:
@@ -1,30 +1,200 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
// ISysConfig 参数配置表 数据层接口
|
||||
type ISysConfig interface {
|
||||
// SelectDictDataPage 分页查询参数配置列表数据
|
||||
SelectConfigPage(query map[string]any) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectConfigList 查询参数配置列表
|
||||
SelectConfigList(sysConfig model.SysConfig) []model.SysConfig
|
||||
// NewSysConfig 实例化数据层
|
||||
var NewSysConfig = &SysConfig{}
|
||||
|
||||
// SelectConfigValueByKey 通过参数键名查询参数键值
|
||||
SelectConfigValueByKey(configKey string) string
|
||||
// SysConfig 参数配置表 数据层处理
|
||||
type SysConfig struct{}
|
||||
|
||||
// SelectConfigByIds 通过配置ID查询参数配置信息
|
||||
SelectConfigByIds(configIds []string) []model.SysConfig
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysConfig) SelectByPage(query map[string]string) ([]model.SysConfig, int64) {
|
||||
tx := db.DB("").Model(&model.SysConfig{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if v, ok := query["configName"]; ok && v != "" {
|
||||
tx = tx.Where("config_name like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["configType"]; ok && v != "" {
|
||||
tx = tx.Where("config_type = ?", v)
|
||||
}
|
||||
if v, ok := query["configKey"]; ok && v != "" {
|
||||
tx = tx.Where("config_key like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["beginTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s000", v)
|
||||
tx = tx.Where("create_time >= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("create_time >= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["endTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s999", v)
|
||||
tx = tx.Where("create_time <= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("create_time <= ?", v)
|
||||
}
|
||||
}
|
||||
|
||||
// CheckUniqueConfig 校验配置参数是否唯一
|
||||
CheckUniqueConfig(sysConfig model.SysConfig) string
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysConfig{}
|
||||
|
||||
// InsertConfig 新增参数配置
|
||||
InsertConfig(sysConfig model.SysConfig) string
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// UpdateConfig 修改参数配置
|
||||
UpdateConfig(sysConfig model.SysConfig) int64
|
||||
|
||||
// DeleteConfigByIds 批量删除参数配置信息
|
||||
DeleteConfigByIds(configIds []string) int64
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Select 查询集合
|
||||
func (r SysConfig) Select(sysConfig model.SysConfig) []model.SysConfig {
|
||||
tx := db.DB("").Model(&model.SysConfig{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysConfig.ConfigName != "" {
|
||||
tx = tx.Where("config_name like concat(?, '%')", sysConfig.ConfigName)
|
||||
}
|
||||
if sysConfig.ConfigType != "" {
|
||||
tx = tx.Where("config_type = ?", sysConfig.ConfigType)
|
||||
}
|
||||
if sysConfig.ConfigKey != "" {
|
||||
tx = tx.Where("config_key like concat(?, '%')", sysConfig.ConfigKey)
|
||||
}
|
||||
if sysConfig.CreateTime > 0 {
|
||||
tx = tx.Where("create_time >= ?", sysConfig.CreateTime)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysConfig{}
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysConfig) SelectByIds(configIds []int64) []model.SysConfig {
|
||||
rows := []model.SysConfig{}
|
||||
if len(configIds) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysConfig{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("config_id in ? and del_flag = '0'", configIds)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r SysConfig) Insert(sysConfig model.SysConfig) int64 {
|
||||
sysConfig.DelFlag = "0"
|
||||
if sysConfig.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysConfig.UpdateBy = sysConfig.CreateBy
|
||||
sysConfig.UpdateTime = ms
|
||||
sysConfig.CreateTime = ms
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysConfig).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysConfig.ConfigId
|
||||
}
|
||||
|
||||
// Update 修改信息 返回受影响行数
|
||||
func (r SysConfig) Update(sysConfig model.SysConfig) int64 {
|
||||
if sysConfig.ConfigId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysConfig.UpdateBy != "" {
|
||||
sysConfig.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysConfig{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("config_id = ?", sysConfig.ConfigId)
|
||||
tx = tx.Omit("config_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysConfig).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息 返回受影响行数
|
||||
func (r SysConfig) DeleteByIds(configIds []int64) int64 {
|
||||
if len(configIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysConfig{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("config_id in ?", configIds)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一 返回数据ID
|
||||
func (r SysConfig) CheckUnique(sysConfig model.SysConfig) int64 {
|
||||
tx := db.DB("").Model(&model.SysConfig{})
|
||||
tx = tx.Where("del_flag = 0")
|
||||
// 查询条件拼接
|
||||
if sysConfig.ConfigType != "" {
|
||||
tx = tx.Where("config_type = ?", sysConfig.ConfigType)
|
||||
}
|
||||
if sysConfig.ConfigKey != "" {
|
||||
tx = tx.Where("config_key = ?", sysConfig.ConfigKey)
|
||||
}
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("config_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// SelectValueByKey 通过Key查询Value
|
||||
func (r SysConfig) SelectValueByKey(configKey string) string {
|
||||
if configKey == "" {
|
||||
return ""
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysConfig{})
|
||||
tx.Where("config_key = ? and del_flag = '0'", configKey)
|
||||
// 查询数据
|
||||
var configValue string = ""
|
||||
if err := tx.Select("config_value").Limit(1).Find(&configValue).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return configValue
|
||||
}
|
||||
return configValue
|
||||
}
|
||||
|
||||
@@ -1,334 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysConfigImpl 结构体
|
||||
var NewSysConfigImpl = &SysConfigImpl{
|
||||
selectSql: `select
|
||||
config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark
|
||||
from sys_config`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"config_id": "ConfigID",
|
||||
"config_name": "ConfigName",
|
||||
"config_key": "ConfigKey",
|
||||
"config_value": "ConfigValue",
|
||||
"config_type": "ConfigType",
|
||||
"remark": "Remark",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
},
|
||||
}
|
||||
|
||||
// SysConfigImpl 参数配置表 数据层处理
|
||||
type SysConfigImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysConfigImpl) convertResultRows(rows []map[string]any) []model.SysConfig {
|
||||
arr := make([]model.SysConfig, 0)
|
||||
for _, row := range rows {
|
||||
sysConfig := model.SysConfig{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&sysConfig, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, sysConfig)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectDictDataPage 分页查询参数配置列表数据
|
||||
func (r *SysConfigImpl) SelectConfigPage(query map[string]any) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["configName"]; ok && v != "" {
|
||||
conditions = append(conditions, "config_name like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["configType"]; ok && v != "" {
|
||||
conditions = append(conditions, "config_type = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["configKey"]; ok && v != "" {
|
||||
conditions = append(conditions, "config_key like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
beginTime, ok := query["beginTime"]
|
||||
if !ok {
|
||||
beginTime, ok = query["params[beginTime]"]
|
||||
}
|
||||
if ok && beginTime != "" {
|
||||
conditions = append(conditions, "create_time >= ?")
|
||||
params = append(params, parse.Number(beginTime.(string)))
|
||||
}
|
||||
endTime, ok := query["endTime"]
|
||||
if !ok {
|
||||
endTime, ok = query["params[endTime]"]
|
||||
}
|
||||
if ok && endTime != "" {
|
||||
conditions = append(conditions, "create_time <= ?")
|
||||
params = append(params, parse.Number(endTime.(string)))
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysConfig{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalSql := "select count(1) as 'total' from sys_config"
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return result
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectConfigList 查询参数配置列表
|
||||
func (r *SysConfigImpl) SelectConfigList(sysConfig model.SysConfig) []model.SysConfig {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysConfig.ConfigName != "" {
|
||||
conditions = append(conditions, "config_name like concat(?, '%')")
|
||||
params = append(params, sysConfig.ConfigName)
|
||||
}
|
||||
if sysConfig.ConfigType != "" {
|
||||
conditions = append(conditions, "config_type = ?")
|
||||
params = append(params, sysConfig.ConfigType)
|
||||
}
|
||||
if sysConfig.ConfigKey != "" {
|
||||
conditions = append(conditions, "config_key like concat(?, '%')")
|
||||
params = append(params, sysConfig.ConfigKey)
|
||||
}
|
||||
if sysConfig.CreateTime > 0 {
|
||||
conditions = append(conditions, "create_time >= ?")
|
||||
params = append(params, sysConfig.CreateTime)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysConfig{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectConfigValueByKey 通过参数键名查询参数键值
|
||||
func (r *SysConfigImpl) SelectConfigValueByKey(configKey string) string {
|
||||
querySql := "select config_value as 'str' from sys_config where config_key = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{configKey})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// SelectConfigByIds 通过配置ID查询参数配置信息
|
||||
func (r *SysConfigImpl) SelectConfigByIds(configIds []string) []model.SysConfig {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(configIds))
|
||||
querySql := r.selectSql + " where config_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(configIds)
|
||||
results, err := datasource.RawDB("", querySql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysConfig{}
|
||||
}
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// CheckUniqueConfig 校验配置参数是否唯一
|
||||
func (r *SysConfigImpl) CheckUniqueConfig(sysConfig model.SysConfig) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysConfig.ConfigKey != "" {
|
||||
conditions = append(conditions, "config_key = ?")
|
||||
params = append(params, sysConfig.ConfigKey)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select config_id as 'str' from sys_config " + whereSql + " limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// InsertConfig 新增参数配置
|
||||
func (r *SysConfigImpl) InsertConfig(sysConfig model.SysConfig) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysConfig.ConfigName != "" {
|
||||
params["config_name"] = sysConfig.ConfigName
|
||||
}
|
||||
if sysConfig.ConfigKey != "" {
|
||||
params["config_key"] = sysConfig.ConfigKey
|
||||
}
|
||||
if sysConfig.ConfigValue != "" {
|
||||
params["config_value"] = sysConfig.ConfigValue
|
||||
}
|
||||
if sysConfig.ConfigType != "" {
|
||||
params["config_type"] = sysConfig.ConfigType
|
||||
}
|
||||
if sysConfig.Remark != "" {
|
||||
params["remark"] = sysConfig.Remark
|
||||
}
|
||||
if sysConfig.CreateBy != "" {
|
||||
params["create_by"] = sysConfig.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_config (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// UpdateConfig 修改参数配置
|
||||
func (r *SysConfigImpl) UpdateConfig(sysConfig model.SysConfig) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysConfig.ConfigName != "" {
|
||||
params["config_name"] = sysConfig.ConfigName
|
||||
}
|
||||
if sysConfig.ConfigKey != "" {
|
||||
params["config_key"] = sysConfig.ConfigKey
|
||||
}
|
||||
if sysConfig.ConfigValue != "" {
|
||||
params["config_value"] = sysConfig.ConfigValue
|
||||
}
|
||||
if sysConfig.ConfigType != "" {
|
||||
params["config_type"] = sysConfig.ConfigType
|
||||
}
|
||||
params["remark"] = sysConfig.Remark
|
||||
if sysConfig.UpdateBy != "" {
|
||||
params["update_by"] = sysConfig.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_config set " + strings.Join(keys, ",") + " where config_id = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysConfig.ConfigID)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// DeleteConfigByIds 批量删除参数配置信息
|
||||
func (r *SysConfigImpl) DeleteConfigByIds(configIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(configIds))
|
||||
sql := "delete from sys_config where config_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(configIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
@@ -1,42 +1,254 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
// ISysDept 部门表 数据层接口
|
||||
type ISysDept interface {
|
||||
// SelectDeptList 查询部门管理数据
|
||||
SelectDeptList(sysDept model.SysDept, dataScopeSQL string) []model.SysDept
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectDeptListByRoleId 根据角色ID查询部门树信息
|
||||
SelectDeptListByRoleId(roleId string, deptCheckStrictly bool) []string
|
||||
// NewSysDept 实例化数据层
|
||||
var NewSysDept = &SysDept{}
|
||||
|
||||
// SelectDeptById 根据部门ID查询信息
|
||||
SelectDeptById(deptId string) model.SysDept
|
||||
// SysDept 部门表 数据层处理
|
||||
type SysDept struct{}
|
||||
|
||||
// SelectChildrenDeptById 根据ID查询所有子部门
|
||||
SelectChildrenDeptById(deptId string) []model.SysDept
|
||||
// Select 查询集合
|
||||
func (r SysDept) Select(sysDept model.SysDept, dataScopeSQL string) []model.SysDept {
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysDept.DeptId > 0 {
|
||||
tx = tx.Where("dept_id = ?", sysDept.DeptId)
|
||||
}
|
||||
if sysDept.ParentId > 0 {
|
||||
tx = tx.Where("parent_id = ?", sysDept.ParentId)
|
||||
}
|
||||
if sysDept.DeptName != "" {
|
||||
tx = tx.Where("dept_name like concat(?, '%')", sysDept.DeptName)
|
||||
}
|
||||
if sysDept.StatusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", sysDept.StatusFlag)
|
||||
}
|
||||
if dataScopeSQL != "" {
|
||||
tx = tx.Where(dataScopeSQL)
|
||||
}
|
||||
|
||||
// HasChildByDeptId 是否存在子节点
|
||||
HasChildByDeptId(deptId string) int64
|
||||
|
||||
// CheckDeptExistUser 查询部门是否存在用户
|
||||
CheckDeptExistUser(deptId string) int64
|
||||
|
||||
// CheckUniqueDept 校验部门是否唯一
|
||||
CheckUniqueDept(sysDept model.SysDept) string
|
||||
|
||||
// InsertDept 新增部门信息
|
||||
InsertDept(sysDept model.SysDept) string
|
||||
|
||||
// UpdateDept 修改部门信息
|
||||
UpdateDept(sysDept model.SysDept) int64
|
||||
|
||||
// UpdateDeptStatusNormal 修改所在部门正常状态
|
||||
UpdateDeptStatusNormal(deptIds []string) int64
|
||||
|
||||
// UpdateDeptChildren 修改子元素关系
|
||||
UpdateDeptChildren(sysDepts []model.SysDept) int64
|
||||
|
||||
// DeleteDeptById 删除部门管理信息
|
||||
DeleteDeptById(deptId string) int64
|
||||
// 查询数据
|
||||
rows := []model.SysDept{}
|
||||
if err := tx.Order("parent_id, dept_sort asc").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectById 通过ID查询信息
|
||||
func (r SysDept) SelectById(deptId int64) model.SysDept {
|
||||
if deptId <= 0 {
|
||||
return model.SysDept{}
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dept_id = ? and del_flag = '0'", deptId)
|
||||
// 查询数据
|
||||
item := model.SysDept{}
|
||||
if err := tx.Limit(1).Find(&item).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return item
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r SysDept) Insert(sysDept model.SysDept) int64 {
|
||||
sysDept.DelFlag = "0"
|
||||
if sysDept.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysDept.UpdateBy = sysDept.CreateBy
|
||||
sysDept.UpdateTime = ms
|
||||
sysDept.CreateTime = ms
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysDept).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysDept.DeptId
|
||||
}
|
||||
|
||||
// Update 修改信息 返回受影响行数
|
||||
func (r SysDept) Update(sysDept model.SysDept) int64 {
|
||||
if sysDept.DeptId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysDept.UpdateBy != "" {
|
||||
sysDept.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dept_id = ?", sysDept.DeptId)
|
||||
tx = tx.Omit("dept_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysDept).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteById 删除信息 返回受影响行数
|
||||
func (r SysDept) DeleteById(deptId int64) int64 {
|
||||
if deptId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dept_id = ?", deptId)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一 返回数据ID
|
||||
func (r SysDept) CheckUnique(sysDept model.SysDept) int64 {
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
tx = tx.Where("del_flag = 0")
|
||||
// 查询条件拼接
|
||||
if sysDept.DeptName != "" {
|
||||
tx = tx.Where("dept_name = ?", sysDept.DeptName)
|
||||
}
|
||||
if sysDept.ParentId > 0 {
|
||||
tx = tx.Where("parent_id = ?", sysDept.ParentId)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("dept_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// ExistChildrenByDeptId 存在子节点数量
|
||||
func (r SysDept) ExistChildrenByDeptId(deptId int64) int64 {
|
||||
if deptId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
tx = tx.Where("del_flag = '0' and status_flag = '1' and parent_id = ?", deptId)
|
||||
// 查询数据
|
||||
var count int64 = 0
|
||||
if err := tx.Count(&count).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return count
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// ExistUserByDeptId 存在用户使用数量
|
||||
func (r SysDept) ExistUserByDeptId(deptId int64) int64 {
|
||||
if deptId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
tx = tx.Where("del_flag = '0' and dept_id = ?", deptId)
|
||||
// 查询数据
|
||||
var count int64 = 0
|
||||
if err := tx.Count(&count).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return count
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// SelectDeptIdsByRoleId 通过角色ID查询包含的部门ID
|
||||
func (r SysDept) SelectDeptIdsByRoleId(roleId int64, deptCheckStrictly bool) []int64 {
|
||||
if roleId <= 0 {
|
||||
return []int64{}
|
||||
}
|
||||
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
tx = tx.Where("dept_id in (SELECT DISTINCT dept_id FROM sys_role_dept WHERE role_id = ?)", roleId)
|
||||
// 父子互相关联显示,取所有子节点
|
||||
if deptCheckStrictly {
|
||||
tx = tx.Where(`dept_id not in (
|
||||
SELECT d.parent_id FROM sys_dept d
|
||||
INNER JOIN sys_role_dept rd ON rd.dept_id = d.dept_id
|
||||
AND rd.role_id = ?
|
||||
)`, roleId)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []int64{}
|
||||
if err := tx.Distinct("dept_id").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectChildrenDeptById 根据ID查询所有子部门
|
||||
func (r SysDept) SelectChildrenDeptById(deptId int64) []model.SysDept {
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
tx = tx.Where("del_flag = 0")
|
||||
tx = tx.Where("find_in_set(?, ancestors)", deptId)
|
||||
// 查询数据
|
||||
rows := []model.SysDept{}
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// UpdateDeptStatusNormal 修改所在部门正常状态
|
||||
func (r SysDept) UpdateDeptStatusNormal(deptIds []int64) int64 {
|
||||
if len(deptIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dept_id in ?", deptIds)
|
||||
// 执行更新状态标记
|
||||
if err := tx.Update("status_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// UpdateDeptChildren 修改子元素关系
|
||||
func (r SysDept) UpdateDeptChildren(arr []model.SysDept) int64 {
|
||||
if len(arr) == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// 构建查询条件
|
||||
var conditions []string
|
||||
var deptIds []any
|
||||
for _, dept := range arr {
|
||||
caseSql := fmt.Sprintf("WHEN dept_id = %d THEN '%s'", dept.DeptId, dept.Ancestors)
|
||||
conditions = append(conditions, caseSql)
|
||||
deptIds = append(deptIds, dept.DeptId)
|
||||
}
|
||||
cases := strings.Join(conditions, " ")
|
||||
casesVal := fmt.Sprintf("CASE %s END", cases)
|
||||
|
||||
// 执行更新操作
|
||||
tx := db.DB("").Model(&model.SysDept{})
|
||||
tx = tx.Update("ancestors", casesVal)
|
||||
if err := tx.Where("dept_id in ?", deptIds).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,393 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysDeptImpl 结构体
|
||||
var NewSysDeptImpl = &SysDeptImpl{
|
||||
selectSql: `select
|
||||
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time
|
||||
from sys_dept d`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"dept_id": "DeptID",
|
||||
"parent_id": "ParentID",
|
||||
"ancestors": "Ancestors",
|
||||
"dept_name": "DeptName",
|
||||
"order_num": "OrderNum",
|
||||
"leader": "Leader",
|
||||
"phone": "Phone",
|
||||
"email": "Email",
|
||||
"status": "Status",
|
||||
"del_flag": "DelFlag",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
"parent_name": "ParentName",
|
||||
},
|
||||
}
|
||||
|
||||
// SysDeptImpl 部门表 数据层处理
|
||||
type SysDeptImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysDeptImpl) convertResultRows(rows []map[string]any) []model.SysDept {
|
||||
arr := make([]model.SysDept, 0)
|
||||
for _, row := range rows {
|
||||
sysDept := model.SysDept{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&sysDept, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, sysDept)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectDeptList 查询部门管理数据
|
||||
func (r *SysDeptImpl) SelectDeptList(sysDept model.SysDept, dataScopeSQL string) []model.SysDept {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysDept.DeptID != "" {
|
||||
conditions = append(conditions, "dept_id = ?")
|
||||
params = append(params, sysDept.DeptID)
|
||||
}
|
||||
if sysDept.ParentID != "" {
|
||||
conditions = append(conditions, "parent_id = ?")
|
||||
params = append(params, sysDept.ParentID)
|
||||
}
|
||||
if sysDept.DeptName != "" {
|
||||
conditions = append(conditions, "dept_name like concat(?, '%')")
|
||||
params = append(params, sysDept.DeptName)
|
||||
}
|
||||
if sysDept.Status != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, sysDept.Status)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := " where d.del_flag = '0' "
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " and " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
orderSql := " order by d.parent_id, d.order_num asc "
|
||||
querySql := r.selectSql + whereSql + dataScopeSQL + orderSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysDept{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectDeptListByRoleId 根据角色ID查询部门树信息
|
||||
func (r *SysDeptImpl) SelectDeptListByRoleId(roleId string, deptCheckStrictly bool) []string {
|
||||
querySql := `select d.dept_id as 'str' from sys_dept d
|
||||
left join sys_role_dept rd on d.dept_id = rd.dept_id
|
||||
where rd.role_id = ? `
|
||||
var params []any
|
||||
params = append(params, roleId)
|
||||
// 展开
|
||||
if deptCheckStrictly {
|
||||
querySql += ` 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 = ?) `
|
||||
params = append(params, roleId)
|
||||
}
|
||||
querySql += "order by d.parent_id, d.order_num"
|
||||
|
||||
// 查询结果
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []string{}
|
||||
}
|
||||
|
||||
if len(results) > 0 {
|
||||
ids := make([]string, 0)
|
||||
for _, v := range results {
|
||||
ids = append(ids, fmt.Sprintf("%v", v["str"]))
|
||||
}
|
||||
return ids
|
||||
}
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// SelectDeptById 根据部门ID查询信息
|
||||
func (r *SysDeptImpl) SelectDeptById(deptId string) model.SysDept {
|
||||
querySql := `select d.dept_id, d.parent_id, d.ancestors,
|
||||
d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,
|
||||
(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
|
||||
from sys_dept d where d.dept_id = ?`
|
||||
results, err := datasource.RawDB("", querySql, []any{deptId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return model.SysDept{}
|
||||
}
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
if len(rows) > 0 {
|
||||
return rows[0]
|
||||
}
|
||||
return model.SysDept{}
|
||||
}
|
||||
|
||||
// SelectChildrenDeptById 根据ID查询所有子部门
|
||||
func (r *SysDeptImpl) SelectChildrenDeptById(deptId string) []model.SysDept {
|
||||
querySql := r.selectSql + " where find_in_set(?, d.ancestors)"
|
||||
results, err := datasource.RawDB("", querySql, []any{deptId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysDept{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// HasChildByDeptId 是否存在子节点
|
||||
func (r *SysDeptImpl) HasChildByDeptId(deptId string) int64 {
|
||||
querySql := "select count(1) as 'total' from sys_dept where status = '1' and parent_id = ? limit 1"
|
||||
results, err := datasource.RawDB("", querySql, []any{deptId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["total"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// CheckDeptExistUser 查询部门是否存在用户
|
||||
func (r *SysDeptImpl) CheckDeptExistUser(deptId string) int64 {
|
||||
querySql := "select count(1) as 'total' from sys_user where dept_id = ? and del_flag = '0'"
|
||||
results, err := datasource.RawDB("", querySql, []any{deptId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["total"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// CheckUniqueDept 校验部门是否唯一
|
||||
func (r *SysDeptImpl) CheckUniqueDept(sysDept model.SysDept) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysDept.DeptName != "" {
|
||||
conditions = append(conditions, "dept_name = ?")
|
||||
params = append(params, sysDept.DeptName)
|
||||
}
|
||||
if sysDept.ParentID != "" {
|
||||
conditions = append(conditions, "parent_id = ?")
|
||||
params = append(params, sysDept.ParentID)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
if whereSql == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select dept_id as 'str' from sys_dept " + whereSql + " and del_flag = '0' limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// InsertDept 新增部门信息
|
||||
func (r *SysDeptImpl) InsertDept(sysDept model.SysDept) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysDept.DeptID != "" {
|
||||
params["dept_id"] = sysDept.DeptID
|
||||
}
|
||||
if sysDept.ParentID != "" {
|
||||
params["parent_id"] = sysDept.ParentID
|
||||
}
|
||||
if sysDept.DeptName != "" {
|
||||
params["dept_name"] = sysDept.DeptName
|
||||
}
|
||||
if sysDept.Ancestors != "" {
|
||||
params["ancestors"] = sysDept.Ancestors
|
||||
}
|
||||
if sysDept.OrderNum > 0 {
|
||||
params["order_num"] = sysDept.OrderNum
|
||||
}
|
||||
if sysDept.Leader != "" {
|
||||
params["leader"] = sysDept.Leader
|
||||
}
|
||||
if sysDept.Phone != "" {
|
||||
params["phone"] = sysDept.Phone
|
||||
}
|
||||
if sysDept.Email != "" {
|
||||
params["email"] = sysDept.Email
|
||||
}
|
||||
if sysDept.Status != "" {
|
||||
params["status"] = sysDept.Status
|
||||
}
|
||||
if sysDept.CreateBy != "" {
|
||||
params["create_by"] = sysDept.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_dept (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// UpdateDept 修改部门信息
|
||||
func (r *SysDeptImpl) UpdateDept(sysDept model.SysDept) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysDept.ParentID != "" {
|
||||
params["parent_id"] = sysDept.ParentID
|
||||
}
|
||||
if sysDept.DeptName != "" {
|
||||
params["dept_name"] = sysDept.DeptName
|
||||
}
|
||||
if sysDept.Ancestors != "" {
|
||||
params["ancestors"] = sysDept.Ancestors
|
||||
}
|
||||
if sysDept.OrderNum > 0 {
|
||||
params["order_num"] = sysDept.OrderNum
|
||||
}
|
||||
if sysDept.Leader != "" {
|
||||
params["leader"] = sysDept.Leader
|
||||
}
|
||||
if sysDept.Phone != "" {
|
||||
params["phone"] = sysDept.Phone
|
||||
}
|
||||
if sysDept.Email != "" {
|
||||
params["email"] = sysDept.Email
|
||||
}
|
||||
if sysDept.Status != "" {
|
||||
params["status"] = sysDept.Status
|
||||
}
|
||||
if sysDept.UpdateBy != "" {
|
||||
params["update_by"] = sysDept.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_dept set " + strings.Join(keys, ",") + " where dept_id = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysDept.DeptID)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// UpdateDeptStatusNormal 修改所在部门正常状态
|
||||
func (r *SysDeptImpl) UpdateDeptStatusNormal(deptIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(deptIds))
|
||||
sql := "update sys_dept set status = '1' where dept_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(deptIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("update err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// UpdateDeptChildren 修改子元素关系
|
||||
func (r *SysDeptImpl) UpdateDeptChildren(sysDepts []model.SysDept) int64 {
|
||||
// 无参数
|
||||
if len(sysDepts) == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// 更新条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
for _, dept := range sysDepts {
|
||||
caseSql := fmt.Sprintf("WHEN dept_id = '%s' THEN '%s'", dept.DeptID, dept.Ancestors)
|
||||
conditions = append(conditions, caseSql)
|
||||
params = append(params, dept.DeptID)
|
||||
}
|
||||
|
||||
cases := strings.Join(conditions, " ")
|
||||
placeholders := repo.KeyPlaceholderByQuery(len(params))
|
||||
sql := "update sys_dept set ancestors = CASE " + cases + " END where dept_id in (" + placeholders + ")"
|
||||
results, err := datasource.ExecDB("", sql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// DeleteDeptById 删除部门管理信息
|
||||
func (r *SysDeptImpl) DeleteDeptById(deptId string) int64 {
|
||||
sql := "update sys_dept set status = '0', del_flag = '1' where dept_id = ?"
|
||||
results, err := datasource.ExecDB("", sql, []any{deptId})
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
@@ -1,33 +1,199 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"time"
|
||||
|
||||
// ISysDictData 字典类型数据表 数据层接口
|
||||
type ISysDictData interface {
|
||||
// SelectDictDataPage 根据条件分页查询字典数据
|
||||
SelectDictDataPage(query map[string]any) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectDictDataList 根据条件查询字典数据
|
||||
SelectDictDataList(sysDictData model.SysDictData) []model.SysDictData
|
||||
// NewSysDictData 实例化数据层
|
||||
var NewSysDictData = &SysDictData{}
|
||||
|
||||
// SelectDictDataByCodes 根据字典数据编码查询信息
|
||||
SelectDictDataByCodes(dictCodes []string) []model.SysDictData
|
||||
// SysDictData 字典类型数据表 数据层处理
|
||||
type SysDictData struct{}
|
||||
|
||||
// CountDictDataByType 查询字典数据
|
||||
CountDictDataByType(dictType string) int64
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysDictData) SelectByPage(query map[string]string) ([]model.SysDictData, int64) {
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if v, ok := query["dictType"]; ok && v != "" {
|
||||
tx = tx.Where("dict_type = ?", v)
|
||||
}
|
||||
if v, ok := query["dataLabel"]; ok && v != "" {
|
||||
tx = tx.Where("data_label like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
|
||||
// CheckUniqueDictData 校验字典数据是否唯一
|
||||
CheckUniqueDictData(sysDictData model.SysDictData) string
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysDictData{}
|
||||
|
||||
// DeleteDictDataByCodes 批量删除字典数据信息
|
||||
DeleteDictDataByCodes(dictCodes []string) int64
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// InsertDictData 新增字典数据信息
|
||||
InsertDictData(sysDictData model.SysDictData) string
|
||||
|
||||
// UpdateDictData 修改字典数据信息
|
||||
UpdateDictData(sysDictData model.SysDictData) int64
|
||||
|
||||
// UpdateDictDataType 同步修改字典类型
|
||||
UpdateDictDataType(oldDictType string, newDictType string) int64
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("data_sort asc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Select 查询集合
|
||||
func (r SysDictData) Select(sysDictData model.SysDictData) []model.SysDictData {
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysDictData.DataLabel != "" {
|
||||
tx = tx.Where("data_label like concat(?, '%')", sysDictData.DataLabel)
|
||||
}
|
||||
if sysDictData.DictType != "" {
|
||||
tx = tx.Where("dict_type = ?", sysDictData.DictType)
|
||||
}
|
||||
if sysDictData.StatusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", sysDictData.StatusFlag)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysDictData{}
|
||||
if err := tx.Order("data_sort asc").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysDictData) SelectByIds(dataIds []int64) []model.SysDictData {
|
||||
rows := []model.SysDictData{}
|
||||
if len(dataIds) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("data_id in ? and del_flag = '0'", dataIds)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r SysDictData) Insert(sysDictData model.SysDictData) int64 {
|
||||
sysDictData.DelFlag = "0"
|
||||
if sysDictData.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysDictData.UpdateBy = sysDictData.CreateBy
|
||||
sysDictData.UpdateTime = ms
|
||||
sysDictData.CreateTime = ms
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysDictData).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysDictData.DataId
|
||||
}
|
||||
|
||||
// Update 修改信息 返回受影响行数
|
||||
func (r SysDictData) Update(sysDictData model.SysDictData) int64 {
|
||||
if sysDictData.DataId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysDictData.UpdateBy != "" {
|
||||
sysDictData.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("data_id = ?", sysDictData.DataId)
|
||||
tx = tx.Omit("data_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysDictData).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息 返回受影响行数
|
||||
func (r SysDictData) DeleteByIds(dataIds []int64) int64 {
|
||||
if len(dataIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("data_id in ?", dataIds)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一 返回数据ID
|
||||
func (r SysDictData) CheckUnique(sysDictData model.SysDictData) int64 {
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
tx = tx.Where("del_flag = 0")
|
||||
// 查询条件拼接
|
||||
if sysDictData.DictType != "" {
|
||||
tx = tx.Where("dict_type = ?", sysDictData.DictType)
|
||||
}
|
||||
if sysDictData.DataLabel != "" {
|
||||
tx = tx.Where("data_label = ?", sysDictData.DataLabel)
|
||||
}
|
||||
if sysDictData.DataValue != "" {
|
||||
tx = tx.Where("data_value = ?", sysDictData.DataValue)
|
||||
}
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("data_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// ExistDataByDictType 存在数据数量
|
||||
func (r SysDictData) ExistDataByDictType(dictType string) int64 {
|
||||
if dictType == "" {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
tx = tx.Where("del_flag = '0' and dict_type = ?", dictType)
|
||||
// 查询数据
|
||||
var count int64 = 0
|
||||
if err := tx.Count(&count).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return count
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// UpdateDataByDictType 更新一组字典类型 返回受影响行数
|
||||
func (r SysDictData) UpdateDataByDictType(oldDictType string, newDictType string) int64 {
|
||||
if oldDictType == "" || newDictType == "" {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictData{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dict_type = ?", oldDictType)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("dict_type", newDictType).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,362 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysDictDataImpl 结构体
|
||||
var NewSysDictData = &SysDictDataImpl{
|
||||
selectSql: `select
|
||||
dict_code, dict_sort, dict_label, dict_value, dict_type, tag_class, tag_type, status, create_by, create_time, remark
|
||||
from sys_dict_data`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"dict_code": "DictCode",
|
||||
"dict_sort": "DictSort",
|
||||
"dict_label": "DictLabel",
|
||||
"dict_value": "DictValue",
|
||||
"dict_type": "DictType",
|
||||
"tag_class": "TagClass",
|
||||
"tag_type": "TagType",
|
||||
"status": "Status",
|
||||
"remark": "Remark",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
},
|
||||
}
|
||||
|
||||
// SysDictDataImpl 字典类型数据表 数据层处理
|
||||
type SysDictDataImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysDictDataImpl) convertResultRows(rows []map[string]any) []model.SysDictData {
|
||||
arr := make([]model.SysDictData, 0)
|
||||
for _, row := range rows {
|
||||
sysDictData := model.SysDictData{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&sysDictData, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, sysDictData)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectDictDataPage 根据条件分页查询字典数据
|
||||
func (r *SysDictDataImpl) SelectDictDataPage(query map[string]any) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["dictType"]; ok && v != "" {
|
||||
conditions = append(conditions, "dict_type = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["dictLabel"]; ok && v != "" {
|
||||
conditions = append(conditions, "dict_label like concat(?, '%')")
|
||||
params = append(params, strings.TrimSpace(v.(string)))
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysDictData{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalSql := "select count(1) as 'total' from sys_dict_data"
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " order by dict_sort asc limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return result
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectDictDataList 根据条件查询字典数据
|
||||
func (r *SysDictDataImpl) SelectDictDataList(sysDictData model.SysDictData) []model.SysDictData {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysDictData.DictLabel != "" {
|
||||
conditions = append(conditions, "dict_label like concat(?, '%')")
|
||||
params = append(params, sysDictData.DictLabel)
|
||||
}
|
||||
if sysDictData.DictType != "" {
|
||||
conditions = append(conditions, "dict_type = ?")
|
||||
params = append(params, sysDictData.DictType)
|
||||
}
|
||||
if sysDictData.Status != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, sysDictData.Status)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
orderSql := " order by dict_sort asc "
|
||||
querySql := r.selectSql + whereSql + orderSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysDictData{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectDictDataByCodes 根据字典数据编码查询信息
|
||||
func (r *SysDictDataImpl) SelectDictDataByCodes(dictCodes []string) []model.SysDictData {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(dictCodes))
|
||||
querySql := r.selectSql + " where dict_code in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(dictCodes)
|
||||
results, err := datasource.RawDB("", querySql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysDictData{}
|
||||
}
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// CountDictDataByType 查询字典数据
|
||||
func (r *SysDictDataImpl) CountDictDataByType(dictType string) int64 {
|
||||
querySql := "select count(1) as 'total' from sys_dict_data where dict_type = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{dictType})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["total"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// CheckUniqueDictData 校验字典数据是否唯一
|
||||
func (r *SysDictDataImpl) CheckUniqueDictData(sysDictData model.SysDictData) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysDictData.DictType != "" {
|
||||
conditions = append(conditions, "dict_type = ?")
|
||||
params = append(params, sysDictData.DictType)
|
||||
}
|
||||
if sysDictData.DictLabel != "" {
|
||||
conditions = append(conditions, "dict_label = ?")
|
||||
params = append(params, sysDictData.DictLabel)
|
||||
}
|
||||
if sysDictData.DictValue != "" {
|
||||
conditions = append(conditions, "dict_value = ?")
|
||||
params = append(params, sysDictData.DictValue)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select dict_code as 'str' from sys_dict_data " + whereSql + " limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// DeleteDictDataByCodes 批量删除字典数据信息
|
||||
func (r *SysDictDataImpl) DeleteDictDataByCodes(dictCodes []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(dictCodes))
|
||||
sql := "delete from sys_dict_data where dict_code in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(dictCodes)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// InsertDictData 新增字典数据信息
|
||||
func (r *SysDictDataImpl) InsertDictData(sysDictData model.SysDictData) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysDictData.DictSort > 0 {
|
||||
params["dict_sort"] = sysDictData.DictSort
|
||||
}
|
||||
if sysDictData.DictLabel != "" {
|
||||
params["dict_label"] = sysDictData.DictLabel
|
||||
}
|
||||
if sysDictData.DictValue != "" {
|
||||
params["dict_value"] = sysDictData.DictValue
|
||||
}
|
||||
if sysDictData.DictType != "" {
|
||||
params["dict_type"] = sysDictData.DictType
|
||||
}
|
||||
if sysDictData.TagClass != "" {
|
||||
params["tag_class"] = sysDictData.TagClass
|
||||
}
|
||||
if sysDictData.TagType != "" {
|
||||
params["tag_type"] = sysDictData.TagType
|
||||
}
|
||||
if sysDictData.Status != "" {
|
||||
params["status"] = sysDictData.Status
|
||||
}
|
||||
if sysDictData.Remark != "" {
|
||||
params["remark"] = sysDictData.Remark
|
||||
}
|
||||
if sysDictData.CreateBy != "" {
|
||||
params["create_by"] = sysDictData.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_dict_data (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// UpdateDictData 修改字典数据信息
|
||||
func (r *SysDictDataImpl) UpdateDictData(sysDictData model.SysDictData) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysDictData.DictSort > 0 {
|
||||
params["dict_sort"] = sysDictData.DictSort
|
||||
}
|
||||
if sysDictData.DictLabel != "" {
|
||||
params["dict_label"] = sysDictData.DictLabel
|
||||
}
|
||||
if sysDictData.DictValue != "" {
|
||||
params["dict_value"] = sysDictData.DictValue
|
||||
}
|
||||
if sysDictData.DictType != "" {
|
||||
params["dict_type"] = sysDictData.DictType
|
||||
}
|
||||
if sysDictData.Status != "" {
|
||||
params["status"] = sysDictData.Status
|
||||
}
|
||||
params["tag_class"] = sysDictData.TagClass
|
||||
params["tag_type"] = sysDictData.TagType
|
||||
params["remark"] = sysDictData.Remark
|
||||
if sysDictData.UpdateBy != "" {
|
||||
params["update_by"] = sysDictData.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_dict_data set " + strings.Join(keys, ",") + " where dict_code = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysDictData.DictCode)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// UpdateDictDataType 同步修改字典类型
|
||||
func (r *SysDictDataImpl) UpdateDictDataType(oldDictType string, newDictType string) int64 {
|
||||
// 参数拼接
|
||||
params := make([]any, 0)
|
||||
if oldDictType == "" || newDictType == "" {
|
||||
return 0
|
||||
}
|
||||
params = append(params, newDictType)
|
||||
params = append(params, oldDictType)
|
||||
|
||||
// 构建执行语句
|
||||
sql := "update sys_dict_data set dict_type = ? where dict_type = ?"
|
||||
|
||||
// 执行更新
|
||||
rows, err := datasource.ExecDB("", sql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
@@ -1,30 +1,197 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
// ISysDictType 字典类型表 数据层接口
|
||||
type ISysDictType interface {
|
||||
// SelectDictTypePage 根据条件分页查询字典类型
|
||||
SelectDictTypePage(query map[string]any) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectDictTypeList 根据条件查询字典类型
|
||||
SelectDictTypeList(sysDictType model.SysDictType) []model.SysDictType
|
||||
// NewSysDictType 实例化数据层
|
||||
var NewSysDictType = &SysDictType{}
|
||||
|
||||
// SelectDictTypeByIDs 根据字典类型ID查询信息
|
||||
SelectDictTypeByIDs(dictIDs []string) []model.SysDictType
|
||||
// SysDictType 字典类型表 数据层处理
|
||||
type SysDictType struct{}
|
||||
|
||||
// SelectDictTypeByType 根据字典类型查询信息
|
||||
SelectDictTypeByType(dictType string) model.SysDictType
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysDictType) SelectByPage(query map[string]string) ([]model.SysDictType, int64) {
|
||||
tx := db.DB("").Model(&model.SysDictType{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if v, ok := query["dictName"]; ok && v != "" {
|
||||
tx = tx.Where("dict_name like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["dictType"]; ok && v != "" {
|
||||
tx = tx.Where("dict_type like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
if v, ok := query["beginTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s000", v)
|
||||
tx = tx.Where("create_time >= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("create_time >= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["endTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s999", v)
|
||||
tx = tx.Where("create_time <= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("create_time <= ?", v)
|
||||
}
|
||||
}
|
||||
|
||||
// CheckUniqueDictType 校验字典类型是否唯一
|
||||
CheckUniqueDictType(sysDictType model.SysDictType) string
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysDictType{}
|
||||
|
||||
// InsertDictType 新增字典类型信息
|
||||
InsertDictType(sysDictType model.SysDictType) string
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// UpdateDictType 修改字典类型信息
|
||||
UpdateDictType(sysDictType model.SysDictType) int64
|
||||
|
||||
// DeleteDictTypeByIDs 批量删除字典类型信息
|
||||
DeleteDictTypeByIDs(dictIDs []string) int64
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Select 查询集合
|
||||
func (r SysDictType) Select(sysDictType model.SysDictType) []model.SysDictType {
|
||||
tx := db.DB("").Model(&model.SysDictType{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysDictType.DictName != "" {
|
||||
tx = tx.Where("dict_name like concat(?, '%')", sysDictType.DictName)
|
||||
}
|
||||
if sysDictType.DictType != "" {
|
||||
tx = tx.Where("dict_type like concat(?, '%')", sysDictType.DictType)
|
||||
}
|
||||
if sysDictType.StatusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", sysDictType.StatusFlag)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysDictType{}
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysDictType) SelectByIds(dictIds []int64) []model.SysDictType {
|
||||
rows := []model.SysDictType{}
|
||||
if len(dictIds) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictType{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dict_id in ? and del_flag = '0'", dictIds)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r SysDictType) Insert(sysDictType model.SysDictType) int64 {
|
||||
sysDictType.DelFlag = "0"
|
||||
if sysDictType.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysDictType.UpdateBy = sysDictType.CreateBy
|
||||
sysDictType.UpdateTime = ms
|
||||
sysDictType.CreateTime = ms
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysDictType).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysDictType.DictId
|
||||
}
|
||||
|
||||
// Update 修改信息 返回受影响的行数
|
||||
func (r SysDictType) Update(sysDictType model.SysDictType) int64 {
|
||||
if sysDictType.DictId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysDictType.UpdateBy != "" {
|
||||
sysDictType.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictType{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dict_id = ?", sysDictType.DictId)
|
||||
tx = tx.Omit("dict_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysDictType).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息 返回受影响的行数
|
||||
func (r SysDictType) DeleteByIds(dictIds []int64) int64 {
|
||||
if len(dictIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictType{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("dict_id in ?", dictIds)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一 返回数据ID
|
||||
func (r SysDictType) CheckUnique(sysDictType model.SysDictType) int64 {
|
||||
tx := db.DB("").Model(&model.SysDictType{})
|
||||
tx = tx.Where("del_flag = 0")
|
||||
// 查询条件拼接
|
||||
if sysDictType.DictName != "" {
|
||||
tx = tx.Where("dict_name = ?", sysDictType.DictName)
|
||||
}
|
||||
if sysDictType.DictType != "" {
|
||||
tx = tx.Where("dict_type = ?", sysDictType.DictType)
|
||||
}
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("dict_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// SelectByType 通过字典类型查询信息
|
||||
func (r SysDictType) SelectByType(dictType string) model.SysDictType {
|
||||
item := model.SysDictType{}
|
||||
if dictType == "" {
|
||||
return item
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysDictType{})
|
||||
tx.Where("dict_type = ? and del_flag = '0'", dictType)
|
||||
// 查询数据
|
||||
if err := tx.Limit(1).Find(&item).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return item
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
||||
@@ -1,329 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysDictTypeImpl 结构体
|
||||
var NewSysDictType = &SysDictTypeImpl{
|
||||
selectSql: `select
|
||||
dict_id, dict_name, dict_type, status, create_by, create_time, remark
|
||||
from sys_dict_type`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"dict_id": "DictID",
|
||||
"dict_name": "DictName",
|
||||
"dict_type": "DictType",
|
||||
"remark": "Remark",
|
||||
"status": "Status",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
},
|
||||
}
|
||||
|
||||
// SysDictTypeImpl 字典类型表 数据层处理
|
||||
type SysDictTypeImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysDictTypeImpl) convertResultRows(rows []map[string]any) []model.SysDictType {
|
||||
arr := make([]model.SysDictType, 0)
|
||||
for _, row := range rows {
|
||||
sysDictType := model.SysDictType{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&sysDictType, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, sysDictType)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectDictTypePage 根据条件分页查询字典类型
|
||||
func (r *SysDictTypeImpl) SelectDictTypePage(query map[string]any) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["dictName"]; ok && v != "" {
|
||||
conditions = append(conditions, "dict_name like concat(?, '%')")
|
||||
params = append(params, strings.TrimSpace(v.(string)))
|
||||
}
|
||||
if v, ok := query["dictType"]; ok && v != "" {
|
||||
conditions = append(conditions, "dict_type like concat(?, '%')")
|
||||
params = append(params, strings.TrimSpace(v.(string)))
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
beginTime, ok := query["beginTime"]
|
||||
if !ok {
|
||||
beginTime, ok = query["params[beginTime]"]
|
||||
}
|
||||
if ok && beginTime != "" {
|
||||
conditions = append(conditions, "create_time >= ?")
|
||||
params = append(params, parse.Number(beginTime.(string)))
|
||||
}
|
||||
endTime, ok := query["endTime"]
|
||||
if !ok {
|
||||
endTime, ok = query["params[endTime]"]
|
||||
}
|
||||
if ok && endTime != "" {
|
||||
conditions = append(conditions, "create_time <= ?")
|
||||
params = append(params, parse.Number(endTime.(string)))
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysDictType{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalSql := "select count(1) as 'total' from sys_dict_type"
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return result
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectDictTypeList 根据条件查询字典类型
|
||||
func (r *SysDictTypeImpl) SelectDictTypeList(sysDictType model.SysDictType) []model.SysDictType {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysDictType.DictName != "" {
|
||||
conditions = append(conditions, "dict_name like concat(?, '%')")
|
||||
params = append(params, sysDictType.DictName)
|
||||
}
|
||||
if sysDictType.DictType != "" {
|
||||
conditions = append(conditions, "dict_type like concat(?, '%')")
|
||||
params = append(params, sysDictType.DictType)
|
||||
}
|
||||
if sysDictType.Status != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, sysDictType.Status)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysDictType{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectDictTypeByIDs 根据字典类型ID查询信息
|
||||
func (r *SysDictTypeImpl) SelectDictTypeByIDs(dictIDs []string) []model.SysDictType {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(dictIDs))
|
||||
querySql := r.selectSql + " where dict_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(dictIDs)
|
||||
results, err := datasource.RawDB("", querySql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysDictType{}
|
||||
}
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectDictTypeByType 根据字典类型查询信息
|
||||
func (r *SysDictTypeImpl) SelectDictTypeByType(dictType string) model.SysDictType {
|
||||
querySql := r.selectSql + " where dict_type = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{dictType})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return model.SysDictType{}
|
||||
}
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
if len(rows) > 0 {
|
||||
return rows[0]
|
||||
}
|
||||
return model.SysDictType{}
|
||||
}
|
||||
|
||||
// CheckUniqueDictType 校验字典是否唯一
|
||||
func (r *SysDictTypeImpl) CheckUniqueDictType(sysDictType model.SysDictType) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysDictType.DictName != "" {
|
||||
conditions = append(conditions, "dict_name = ?")
|
||||
params = append(params, sysDictType.DictName)
|
||||
}
|
||||
if sysDictType.DictType != "" {
|
||||
conditions = append(conditions, "dict_type = ?")
|
||||
params = append(params, sysDictType.DictType)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select dict_id as 'str' from sys_dict_type " + whereSql + " limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// InsertDictType 新增字典类型信息
|
||||
func (r *SysDictTypeImpl) InsertDictType(sysDictType model.SysDictType) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysDictType.DictName != "" {
|
||||
params["dict_name"] = sysDictType.DictName
|
||||
}
|
||||
if sysDictType.DictType != "" {
|
||||
params["dict_type"] = sysDictType.DictType
|
||||
}
|
||||
if sysDictType.Status != "" {
|
||||
params["status"] = sysDictType.Status
|
||||
}
|
||||
if sysDictType.Remark != "" {
|
||||
params["remark"] = sysDictType.Remark
|
||||
}
|
||||
if sysDictType.CreateBy != "" {
|
||||
params["create_by"] = sysDictType.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_dict_type (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// UpdateDictType 修改字典类型信息
|
||||
func (r *SysDictTypeImpl) UpdateDictType(sysDictType model.SysDictType) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysDictType.DictName != "" {
|
||||
params["dict_name"] = sysDictType.DictName
|
||||
}
|
||||
if sysDictType.DictType != "" {
|
||||
params["dict_type"] = sysDictType.DictType
|
||||
}
|
||||
if sysDictType.Status != "" {
|
||||
params["status"] = sysDictType.Status
|
||||
}
|
||||
params["remark"] = sysDictType.Remark
|
||||
if sysDictType.UpdateBy != "" {
|
||||
params["update_by"] = sysDictType.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_dict_type set " + strings.Join(keys, ",") + " where dict_id = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysDictType.DictID)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// DeleteDictTypeByIDs 批量删除字典类型信息
|
||||
func (r *SysDictTypeImpl) DeleteDictTypeByIDs(dictIDs []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(dictIDs))
|
||||
sql := "delete from sys_dict_type where dict_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(dictIDs)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
122
src/modules/system/repository/sys_i18n.go
Normal file
122
src/modules/system/repository/sys_i18n.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// NewSysI18n 实例化数据层
|
||||
var NewSysI18n = &SysI18n{}
|
||||
|
||||
// SysI18nRepository 多语言 数据层处理
|
||||
type SysI18n struct{}
|
||||
|
||||
// Select 查询集合
|
||||
func (r SysI18n) Select(param model.SysI18n) []model.SysI18n {
|
||||
tx := db.DB("").Model(&model.SysI18n{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if param.Key != "" {
|
||||
tx = tx.Where("key = ?", param.Key)
|
||||
}
|
||||
if param.ValueZh != "" {
|
||||
tx = tx.Where("value_zh = ?", param.ValueZh)
|
||||
}
|
||||
if param.ValueEn != "" {
|
||||
tx = tx.Where("value_en = ?", param.ValueEn)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysI18n{}
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysI18n) SelectByIds(ids []int64) []model.SysI18n {
|
||||
rows := []model.SysI18n{}
|
||||
if len(ids) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysI18n{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("id in ? and del_flag = '0'", ids)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r SysI18n) Insert(param model.SysI18n) int64 {
|
||||
param.DelFlag = "0"
|
||||
if param.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
param.UpdateBy = param.CreateBy
|
||||
param.UpdateTime = ms
|
||||
param.CreateTime = ms
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(¶m).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return param.ID
|
||||
}
|
||||
|
||||
// Update 修改信息 返回受影响行数
|
||||
func (r SysI18n) Update(param model.SysI18n) int64 {
|
||||
if param.ID <= 0 {
|
||||
return 0
|
||||
}
|
||||
if param.UpdateBy != "" {
|
||||
param.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysI18n{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("id = ?", param.ID)
|
||||
tx = tx.Omit("id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(param).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息 返回受影响行数
|
||||
func (r SysI18n) DeleteByIds(ids []int64) int64 {
|
||||
if len(ids) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysI18n{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("id in ?", ids)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一 返回ID
|
||||
func (r SysI18n) CheckUnique(key string) int64 {
|
||||
tx := db.DB("").Model(&model.SysI18n{})
|
||||
tx = tx.Where("del_flag = 0 and key= ?", key)
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
@@ -1,21 +1,91 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
// ISysLogLogin 系统登录日志表 数据层接口
|
||||
type ISysLogLogin interface {
|
||||
// SelectSysLogLoginPage 分页查询系统登录日志集合
|
||||
SelectSysLogLoginPage(query map[string]any, dataScopeSQL string) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectSysLogLoginList 查询系统登录日志集合
|
||||
SelectSysLogLoginList(sysLogLogin model.SysLogLogin) []model.SysLogLogin
|
||||
// NewSysLogLogin 实例化数据层
|
||||
var NewSysLogLogin = &SysLogLogin{}
|
||||
|
||||
// InsertSysLogLogin 新增系统登录日志
|
||||
InsertSysLogLogin(sysLogLogin model.SysLogLogin) string
|
||||
// SysLogLoginRepository 系统登录访问表 数据层处理
|
||||
type SysLogLogin struct{}
|
||||
|
||||
// DeleteSysLogLoginByIds 批量删除系统登录日志
|
||||
DeleteSysLogLoginByIds(loginIds []string) int64
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysLogLogin) SelectByPage(query map[string]string, dataScopeSQL string) ([]model.SysLogLogin, int64) {
|
||||
tx := db.DB("").Model(&model.SysLogLogin{})
|
||||
// 查询条件拼接
|
||||
if v, ok := query["loginIp"]; ok && v != "" {
|
||||
tx = tx.Where("login_ip like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["userName"]; ok && v != "" {
|
||||
tx = tx.Where("user_name like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
if v, ok := query["beginTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s000", v)
|
||||
tx = tx.Where("login_time >= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("login_time >= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["endTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s999", v)
|
||||
tx = tx.Where("login_time <= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("login_time <= ?", v)
|
||||
}
|
||||
}
|
||||
if dataScopeSQL != "" {
|
||||
dataScopeSQL = fmt.Sprintf("select distinct user_name from sys_user where %s", dataScopeSQL)
|
||||
tx = tx.Where(fmt.Sprintf("user_name in ( %s )", dataScopeSQL))
|
||||
}
|
||||
|
||||
// CleanSysLogLogin 清空系统登录日志
|
||||
CleanSysLogLogin() error
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysLogLogin{}
|
||||
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("id desc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增的数据ID
|
||||
func (r SysLogLogin) Insert(sysLogLogin model.SysLogLogin) int64 {
|
||||
sysLogLogin.LoginTime = time.Now().UnixMilli()
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysLogLogin).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysLogLogin.ID
|
||||
}
|
||||
|
||||
// Clean 清空信息
|
||||
func (r SysLogLogin) Clean() int64 {
|
||||
tx := db.DB("").Delete(&model.SysLogLogin{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,255 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysLogLoginImpl 结构体
|
||||
var NewSysLogLoginImpl = &SysLogLoginImpl{
|
||||
selectSql: `select login_id, user_name, ipaddr, login_location,
|
||||
browser, os, status, msg, login_time from sys_log_login`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"login_id": "LoginID",
|
||||
"user_name": "UserName",
|
||||
"status": "Status",
|
||||
"ipaddr": "IPAddr",
|
||||
"login_location": "LoginLocation",
|
||||
"browser": "Browser",
|
||||
"os": "OS",
|
||||
"msg": "Msg",
|
||||
"login_time": "LoginTime",
|
||||
},
|
||||
}
|
||||
|
||||
// SysLogLoginImpl 系统登录访问表 数据层处理
|
||||
type SysLogLoginImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysLogLoginImpl) convertResultRows(rows []map[string]any) []model.SysLogLogin {
|
||||
arr := make([]model.SysLogLogin, 0)
|
||||
for _, row := range rows {
|
||||
SysLogLogin := model.SysLogLogin{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&SysLogLogin, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, SysLogLogin)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectSysLogLoginPage 分页查询系统登录日志集合
|
||||
func (r *SysLogLoginImpl) SelectSysLogLoginPage(query map[string]any, dataScopeSQL string) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["ipaddr"]; ok && v != "" {
|
||||
conditions = append(conditions, "ipaddr like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["userName"]; ok && v != "" {
|
||||
conditions = append(conditions, "user_name like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
beginTime, ok := query["beginTime"]
|
||||
if !ok {
|
||||
beginTime, ok = query["params[beginTime]"]
|
||||
}
|
||||
if ok && beginTime != "" {
|
||||
conditions = append(conditions, "login_time >= ?")
|
||||
params = append(params, parse.Number(beginTime.(string)))
|
||||
}
|
||||
endTime, ok := query["endTime"]
|
||||
if !ok {
|
||||
endTime, ok = query["params[endTime]"]
|
||||
}
|
||||
if ok && endTime != "" {
|
||||
conditions = append(conditions, "login_time <= ?")
|
||||
params = append(params, parse.Number(endTime.(string)))
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
selectSql := r.selectSql
|
||||
totalSql := "select count(login_id) as 'total' from sys_log_login"
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
whereSql += dataScopeSQL
|
||||
} else if dataScopeSQL != "" {
|
||||
totalSql = `select count(o.login_id) as 'total'
|
||||
from sys_log_login o
|
||||
left join sys_user u on u.user_name = o.user_name
|
||||
left join sys_dept d on u.dept_id = d.dept_id`
|
||||
selectSql = `select o.login_id, o.user_name, o.ipaddr, o.login_location,
|
||||
o.browser, o.os, o.status, o.msg, o.login_time
|
||||
from sys_log_login o
|
||||
left join sys_user u on u.user_name = o.user_name
|
||||
left join sys_dept d on u.dept_id = d.dept_id`
|
||||
whereSql += " where 1=1" + dataScopeSQL
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysLogLogin{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " order by login_id desc limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := selectSql + whereSql + dataScopeSQL + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return result
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectSysLogLoginList 查询系统登录日志集合
|
||||
func (r *SysLogLoginImpl) SelectSysLogLoginList(SysLogLogin model.SysLogLogin) []model.SysLogLogin {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if SysLogLogin.IPAddr != "" {
|
||||
conditions = append(conditions, "title like concat(?, '%')")
|
||||
params = append(params, SysLogLogin.IPAddr)
|
||||
}
|
||||
if SysLogLogin.UserName != "" {
|
||||
conditions = append(conditions, "user_name like concat(?, '%')")
|
||||
params = append(params, SysLogLogin.UserName)
|
||||
}
|
||||
if SysLogLogin.Status != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, SysLogLogin.Status)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysLogLogin{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// InsertSysLogLogin 新增系统登录日志
|
||||
func (r *SysLogLoginImpl) InsertSysLogLogin(SysLogLogin model.SysLogLogin) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
params["login_time"] = time.Now().UnixMilli()
|
||||
if SysLogLogin.UserName != "" {
|
||||
params["user_name"] = SysLogLogin.UserName
|
||||
}
|
||||
if SysLogLogin.Status != "" {
|
||||
params["status"] = SysLogLogin.Status
|
||||
}
|
||||
if SysLogLogin.IPAddr != "" {
|
||||
params["ipaddr"] = SysLogLogin.IPAddr
|
||||
}
|
||||
if SysLogLogin.LoginLocation != "" {
|
||||
params["login_location"] = SysLogLogin.LoginLocation
|
||||
}
|
||||
if SysLogLogin.Browser != "" {
|
||||
params["browser"] = SysLogLogin.Browser
|
||||
}
|
||||
if SysLogLogin.OS != "" {
|
||||
params["os"] = SysLogLogin.OS
|
||||
}
|
||||
if SysLogLogin.Msg != "" {
|
||||
params["msg"] = SysLogLogin.Msg
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_log_login (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// DeleteSysLogLoginByIds 批量删除系统登录日志
|
||||
func (r *SysLogLoginImpl) DeleteSysLogLoginByIds(loginIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(loginIds))
|
||||
sql := "delete from sys_log_login where login_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(loginIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// CleanSysLogLogin 清空系统登录日志
|
||||
func (r *SysLogLoginImpl) CleanSysLogLogin() error {
|
||||
sql := "truncate table sys_log_login"
|
||||
_, err := datasource.ExecDB("", sql, []any{})
|
||||
return err
|
||||
}
|
||||
@@ -1,24 +1,99 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
// ISysLogOperate 操作日志表 数据层接口
|
||||
type ISysLogOperate interface {
|
||||
// SelectSysLogOperatePage 分页查询系统操作日志集合
|
||||
SelectSysLogOperatePage(query map[string]any, dataScopeSQL string) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectSysLogOperateList 查询系统操作日志集合
|
||||
SelectSysLogOperateList(sysLogOperate model.SysLogOperate) []model.SysLogOperate
|
||||
// NewSysLogOperate 实例化数据层
|
||||
var NewSysLogOperate = &SysLogOperate{}
|
||||
|
||||
// SelectSysLogOperateById 查询操作日志详细
|
||||
SelectSysLogOperateById(operId string) model.SysLogOperate
|
||||
// SysLogOperateRepository 操作日志表 数据层处理
|
||||
type SysLogOperate struct{}
|
||||
|
||||
// InsertSysLogOperate 新增操作日志
|
||||
InsertSysLogOperate(sysLogOperate model.SysLogOperate) string
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysLogOperate) SelectByPage(query map[string]string, dataScopeSQL string) ([]model.SysLogOperate, int64) {
|
||||
tx := db.DB("").Model(&model.SysLogOperate{})
|
||||
// 查询条件拼接
|
||||
if v, ok := query["title"]; ok && v != "" {
|
||||
tx = tx.Where("title like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["businessType"]; ok && v != "" {
|
||||
tx = tx.Where("business_type = ?", v)
|
||||
}
|
||||
if v, ok := query["operaBy"]; ok && v != "" {
|
||||
tx = tx.Where("opera_by like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["operaIp"]; ok && v != "" {
|
||||
tx = tx.Where("opera_ip like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
if v, ok := query["beginTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s000", v)
|
||||
tx = tx.Where("opera_time >= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("opera_time >= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["endTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s999", v)
|
||||
tx = tx.Where("opera_time <= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("opera_time <= ?", v)
|
||||
}
|
||||
}
|
||||
if dataScopeSQL != "" {
|
||||
dataScopeSQL = fmt.Sprintf("select distinct user_name from sys_user where %s", dataScopeSQL)
|
||||
tx = tx.Where(fmt.Sprintf("opera_by in ( %s )", dataScopeSQL))
|
||||
}
|
||||
|
||||
// DeleteSysLogOperateByIds 批量删除系统操作日志
|
||||
DeleteSysLogOperateByIds(operIds []string) int64
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysLogOperate{}
|
||||
|
||||
// CleanSysLogOperate 清空操作日志
|
||||
CleanSysLogOperate() error
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("id desc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Insert 新增信息
|
||||
func (r SysLogOperate) Insert(sysLogOperate model.SysLogOperate) int64 {
|
||||
if sysLogOperate.OperaBy != "" {
|
||||
sysLogOperate.OperaTime = time.Now().UnixMilli()
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysLogOperate).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysLogOperate.ID
|
||||
}
|
||||
|
||||
// Clean 清空信息
|
||||
func (r SysLogOperate) Clean() int64 {
|
||||
tx := db.DB("").Delete(&model.SysLogOperate{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,310 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysLogOperateImpl 结构体
|
||||
var NewSysLogOperateImpl = &SysLogOperateImpl{
|
||||
selectSql: `select
|
||||
oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name,
|
||||
oper_url, oper_ip, oper_location, oper_param, oper_msg, status, oper_time, cost_time
|
||||
from sys_log_operate`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"oper_id": "OperID",
|
||||
"title": "Title",
|
||||
"business_type": "BusinessType",
|
||||
"method": "Method",
|
||||
"request_method": "RequestMethod",
|
||||
"operator_type": "OperatorType",
|
||||
"oper_name": "OperName",
|
||||
"dept_name": "DeptName",
|
||||
"oper_url": "OperURL",
|
||||
"oper_ip": "OperIP",
|
||||
"oper_location": "OperLocation",
|
||||
"oper_param": "OperParam",
|
||||
"oper_msg": "OperMsg",
|
||||
"status": "Status",
|
||||
"oper_time": "OperTime",
|
||||
"cost_time": "CostTime",
|
||||
},
|
||||
}
|
||||
|
||||
// SysLogOperateImpl 操作日志表 数据层处理
|
||||
type SysLogOperateImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysLogOperateImpl) convertResultRows(rows []map[string]any) []model.SysLogOperate {
|
||||
arr := make([]model.SysLogOperate, 0)
|
||||
for _, row := range rows {
|
||||
SysLogOperate := model.SysLogOperate{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&SysLogOperate, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, SysLogOperate)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectSysLogOperatePage 分页查询系统操作日志集合
|
||||
func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any, dataScopeSQL string) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["title"]; ok && v != "" {
|
||||
conditions = append(conditions, "title like concat(?, '%')")
|
||||
params = append(params, strings.TrimSpace(v.(string)))
|
||||
}
|
||||
if v, ok := query["businessType"]; ok && v != "" {
|
||||
conditions = append(conditions, "business_type = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["operName"]; ok && v != "" {
|
||||
conditions = append(conditions, "oper_name like concat(?, '%')")
|
||||
params = append(params, strings.TrimSpace(v.(string)))
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
beginTime, ok := query["beginTime"]
|
||||
if !ok {
|
||||
beginTime, ok = query["params[beginTime]"]
|
||||
}
|
||||
if ok && beginTime != "" {
|
||||
conditions = append(conditions, "oper_time >= ?")
|
||||
params = append(params, parse.Number(beginTime.(string)))
|
||||
}
|
||||
endTime, ok := query["endTime"]
|
||||
if !ok {
|
||||
endTime, ok = query["params[endTime]"]
|
||||
}
|
||||
if ok && endTime != "" {
|
||||
conditions = append(conditions, "oper_time <= ?")
|
||||
params = append(params, parse.Number(endTime.(string)))
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
selectSql := r.selectSql
|
||||
totalSql := "select count(oper_id) as 'total' from sys_log_operate"
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
whereSql += dataScopeSQL
|
||||
} else if dataScopeSQL != "" {
|
||||
totalSql = `select count(o.oper_id) as 'total'
|
||||
from sys_log_operate o
|
||||
left join sys_user u on u.user_name = o.oper_name
|
||||
left join sys_dept d on u.dept_id = d.dept_id`
|
||||
selectSql = `select
|
||||
o.oper_id, o.title, o.business_type, o.method, o.request_method, o.operator_type, o.oper_name, o.dept_name,
|
||||
o.oper_url, o.oper_ip, o.oper_location, o.oper_param, o.oper_msg, o.status, o.oper_time, o.cost_time
|
||||
from sys_log_operate o
|
||||
left join sys_user u on u.user_name = o.oper_name
|
||||
left join sys_dept d on u.dept_id = d.dept_id`
|
||||
whereSql += " where 1=1" + dataScopeSQL
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysLogOperate{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " order by oper_id desc limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := selectSql + whereSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return result
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectSysLogOperateList 查询系统操作日志集合
|
||||
func (r *SysLogOperateImpl) SelectSysLogOperateList(SysLogOperate model.SysLogOperate) []model.SysLogOperate {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if SysLogOperate.Title != "" {
|
||||
conditions = append(conditions, "title like concat(?, '%')")
|
||||
params = append(params, SysLogOperate.Title)
|
||||
}
|
||||
if SysLogOperate.BusinessType != "" {
|
||||
conditions = append(conditions, "business_type = ?")
|
||||
params = append(params, SysLogOperate.BusinessType)
|
||||
}
|
||||
if SysLogOperate.OperName != "" {
|
||||
conditions = append(conditions, "oper_name like concat(?, '%')")
|
||||
params = append(params, SysLogOperate.OperName)
|
||||
}
|
||||
if SysLogOperate.Status != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, SysLogOperate.Status)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysLogOperate{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectSysLogOperateById 查询操作日志详细
|
||||
func (r *SysLogOperateImpl) SelectSysLogOperateById(operId string) model.SysLogOperate {
|
||||
querySql := r.selectSql + " where oper_id = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{operId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return model.SysLogOperate{}
|
||||
}
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
if len(rows) > 0 {
|
||||
return rows[0]
|
||||
}
|
||||
return model.SysLogOperate{}
|
||||
}
|
||||
|
||||
// InsertSysLogOperate 新增操作日志
|
||||
func (r *SysLogOperateImpl) InsertSysLogOperate(SysLogOperate model.SysLogOperate) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
params["oper_time"] = time.Now().UnixMilli()
|
||||
if SysLogOperate.Title != "" {
|
||||
params["title"] = SysLogOperate.Title
|
||||
}
|
||||
if SysLogOperate.BusinessType != "" {
|
||||
params["business_type"] = SysLogOperate.BusinessType
|
||||
}
|
||||
if SysLogOperate.Method != "" {
|
||||
params["method"] = SysLogOperate.Method
|
||||
}
|
||||
if SysLogOperate.RequestMethod != "" {
|
||||
params["request_method"] = SysLogOperate.RequestMethod
|
||||
}
|
||||
if SysLogOperate.OperatorType != "" {
|
||||
params["operator_type"] = SysLogOperate.OperatorType
|
||||
}
|
||||
if SysLogOperate.DeptName != "" {
|
||||
params["dept_name"] = SysLogOperate.DeptName
|
||||
}
|
||||
if SysLogOperate.OperName != "" {
|
||||
params["oper_name"] = SysLogOperate.OperName
|
||||
}
|
||||
if SysLogOperate.OperURL != "" {
|
||||
params["oper_url"] = SysLogOperate.OperURL
|
||||
}
|
||||
if SysLogOperate.OperIP != "" {
|
||||
params["oper_ip"] = SysLogOperate.OperIP
|
||||
}
|
||||
if SysLogOperate.OperLocation != "" {
|
||||
params["oper_location"] = SysLogOperate.OperLocation
|
||||
}
|
||||
if SysLogOperate.OperParam != "" {
|
||||
params["oper_param"] = SysLogOperate.OperParam
|
||||
}
|
||||
if SysLogOperate.OperMsg != "" {
|
||||
params["oper_msg"] = SysLogOperate.OperMsg
|
||||
}
|
||||
if SysLogOperate.Status != "" {
|
||||
params["status"] = SysLogOperate.Status
|
||||
}
|
||||
if SysLogOperate.CostTime > 0 {
|
||||
params["cost_time"] = SysLogOperate.CostTime
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_log_operate (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// DeleteSysLogOperateByIds 批量删除系统操作日志
|
||||
func (r *SysLogOperateImpl) DeleteSysLogOperateByIds(operIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(operIds))
|
||||
sql := "delete from sys_log_operate where oper_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(operIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// CleanSysLogOperate 清空操作日志
|
||||
func (r *SysLogOperateImpl) CleanSysLogOperate() error {
|
||||
sql := "truncate table sys_log_operate"
|
||||
_, err := datasource.ExecDB("", sql, []any{})
|
||||
return err
|
||||
}
|
||||
@@ -1,36 +1,286 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"time"
|
||||
|
||||
// ISysMenu 菜单表 数据层接口
|
||||
type ISysMenu interface {
|
||||
// SelectMenuList 查询系统菜单列表
|
||||
SelectMenuList(sysMenu model.SysMenu, userId string) []model.SysMenu
|
||||
"be.ems/src/framework/constants"
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectMenuPermsByUserId 根据用户ID查询权限
|
||||
SelectMenuPermsByUserId(userId string) []string
|
||||
// NewSysMenu 实例化数据层
|
||||
var NewSysMenu = &SysMenu{}
|
||||
|
||||
// SelectMenuTreeByUserId 根据用户ID查询菜单
|
||||
SelectMenuTreeByUserId(userId string) []model.SysMenu
|
||||
// SysMenu 菜单表 数据层处理
|
||||
type SysMenu struct{}
|
||||
|
||||
// SelectMenuListByRoleId 根据角色ID查询菜单树信息
|
||||
SelectMenuListByRoleId(roleId string, menuCheckStrictly bool) []string
|
||||
// Select 查询集合 userId为0是系统管理员
|
||||
func (r SysMenu) Select(sysMenu model.SysMenu, userId int64) []model.SysMenu {
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysMenu.MenuName != "" {
|
||||
tx = tx.Where("menu_name like concat(?, '%')", sysMenu.MenuName)
|
||||
}
|
||||
if sysMenu.VisibleFlag != "" {
|
||||
tx = tx.Where("visible_flag = ?", sysMenu.VisibleFlag)
|
||||
}
|
||||
if sysMenu.StatusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", sysMenu.StatusFlag)
|
||||
}
|
||||
|
||||
// SelectMenuByIds 根据菜单ID查询信息
|
||||
SelectMenuByIds(menuIds []string) []model.SysMenu
|
||||
// 个人菜单
|
||||
if userId > 0 {
|
||||
tx = tx.Where(`menu_id in (
|
||||
select menu_id from sys_role_menu where role_id in (
|
||||
select role_id from sys_user_role where user_id = ?
|
||||
))`, userId)
|
||||
}
|
||||
|
||||
// HasChildByMenuIdAndStatus 存在菜单子节点数量与状态
|
||||
HasChildByMenuIdAndStatus(menuId, status string) int64
|
||||
|
||||
// InsertMenu 新增菜单信息
|
||||
InsertMenu(sysMenu model.SysMenu) string
|
||||
|
||||
// UpdateMenu 修改菜单信息
|
||||
UpdateMenu(sysMenu model.SysMenu) int64
|
||||
|
||||
// DeleteMenuById 删除菜单管理信息
|
||||
DeleteMenuById(menuId string) int64
|
||||
|
||||
// CheckUniqueMenu 校验菜单是否唯一
|
||||
CheckUniqueMenu(sysMenu model.SysMenu) string
|
||||
// 查询数据
|
||||
rows := []model.SysMenu{}
|
||||
tx.Order("parent_id, menu_sort")
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysMenu) SelectByIds(menuIds []int64) []model.SysMenu {
|
||||
rows := []model.SysMenu{}
|
||||
if len(menuIds) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("menu_id in ? and del_flag = '0'", menuIds)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息
|
||||
func (r SysMenu) Insert(sysMenu model.SysMenu) int64 {
|
||||
sysMenu.DelFlag = "0"
|
||||
if sysMenu.MenuId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysMenu.Icon == "" {
|
||||
sysMenu.Icon = "#"
|
||||
}
|
||||
if sysMenu.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysMenu.UpdateBy = sysMenu.CreateBy
|
||||
sysMenu.UpdateTime = ms
|
||||
sysMenu.CreateTime = ms
|
||||
}
|
||||
|
||||
// 根据菜单类型重置参数
|
||||
if sysMenu.MenuType == constants.MENU_TYPE_BUTTON {
|
||||
sysMenu.Component = ""
|
||||
sysMenu.FrameFlag = "1"
|
||||
sysMenu.CacheFlag = "1"
|
||||
sysMenu.VisibleFlag = "1"
|
||||
sysMenu.MenuPath = ""
|
||||
sysMenu.Icon = "#"
|
||||
} else if sysMenu.MenuType == constants.MENU_TYPE_DIR {
|
||||
sysMenu.Component = ""
|
||||
sysMenu.FrameFlag = "1"
|
||||
sysMenu.CacheFlag = "1"
|
||||
sysMenu.Perms = ""
|
||||
}
|
||||
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysMenu).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysMenu.MenuId
|
||||
}
|
||||
|
||||
// Update 修改信息
|
||||
func (r SysMenu) Update(sysMenu model.SysMenu) int64 {
|
||||
if sysMenu.MenuId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysMenu.Icon == "" {
|
||||
sysMenu.Icon = "#"
|
||||
}
|
||||
if sysMenu.UpdateBy != "" {
|
||||
sysMenu.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 根据菜单类型重置参数
|
||||
if sysMenu.MenuType == constants.MENU_TYPE_BUTTON {
|
||||
sysMenu.Component = ""
|
||||
sysMenu.FrameFlag = "1"
|
||||
sysMenu.CacheFlag = "1"
|
||||
sysMenu.VisibleFlag = "1"
|
||||
sysMenu.MenuPath = ""
|
||||
sysMenu.Icon = "#"
|
||||
} else if sysMenu.MenuType == constants.MENU_TYPE_DIR {
|
||||
sysMenu.Component = ""
|
||||
sysMenu.FrameFlag = "1"
|
||||
sysMenu.CacheFlag = "1"
|
||||
sysMenu.Perms = ""
|
||||
}
|
||||
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("menu_id = ?", sysMenu.MenuId)
|
||||
tx = tx.Omit("menu_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysMenu).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteById 删除信息 返回受影响行数
|
||||
func (r SysMenu) DeleteById(menuId int64) int64 {
|
||||
if menuId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("menu_id = ?", menuId)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一
|
||||
func (r SysMenu) CheckUnique(sysMenu model.SysMenu) int64 {
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysMenu.ParentId <= 0 {
|
||||
tx = tx.Where("parent_id = ?", sysMenu.ParentId)
|
||||
}
|
||||
if sysMenu.MenuName != "" {
|
||||
tx = tx.Where("menu_name = ?", sysMenu.MenuName)
|
||||
}
|
||||
if sysMenu.MenuPath != "" {
|
||||
tx = tx.Where("menu_path = ?", sysMenu.MenuPath)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("menu_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// ExistChildrenByMenuIdAndStatus 菜单下同状态存在子节点数量
|
||||
func (r SysMenu) ExistChildrenByMenuIdAndStatus(menuId int64, statusFlag string) int64 {
|
||||
if menuId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("parent_id = ? and del_flag = '0'", menuId)
|
||||
if statusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", statusFlag)
|
||||
tx = tx.Where("menu_type in ?", []string{constants.MENU_TYPE_DIR, constants.MENU_TYPE_MENU})
|
||||
}
|
||||
// 查询数据
|
||||
var count int64 = 0
|
||||
if err := tx.Count(&count).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return count
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// SelectPermsByUserId 根据用户ID查询权限标识
|
||||
func (r SysMenu) SelectPermsByUserId(userId int64) []string {
|
||||
rows := []string{}
|
||||
if userId <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Table("sys_menu m")
|
||||
// 构建查询条件
|
||||
tx = tx.Distinct("m.perms").
|
||||
Joins("left join sys_role_menu rm on m.menu_id = rm.menu_id").
|
||||
Joins("left join sys_user_role ur on rm.role_id = ur.role_id").
|
||||
Joins("left join sys_role r on r.role_id = ur.role_id").
|
||||
Where("m.status_flag = '1' and m.perms != '' and r.status_flag = '1' and r.del_flag = '0'").
|
||||
Where("ur.user_id = ?", userId)
|
||||
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByRoleId 根据角色ID查询菜单树信息
|
||||
func (r SysMenu) SelectByRoleId(roleId int64, menuCheckStrictly bool) []int64 {
|
||||
if roleId <= 0 {
|
||||
return []int64{}
|
||||
}
|
||||
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
tx = tx.Where("menu_id in (select menu_id from sys_role_menu where role_id = ?)", roleId)
|
||||
// 父子互相关联显示,取所有子节点
|
||||
if menuCheckStrictly {
|
||||
tx = tx.Where(`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 = ?
|
||||
)`, roleId)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []int64{}
|
||||
if err := tx.Distinct("menu_id").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectTreeByUserId 根据用户ID查询菜单 0为管理员查询全部菜单,其他为用户ID查询权限
|
||||
func (r SysMenu) SelectTreeByUserId(userId int64) []model.SysMenu {
|
||||
if userId < 0 {
|
||||
return []model.SysMenu{}
|
||||
}
|
||||
|
||||
tx := db.DB("").Model(&model.SysMenu{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 管理员全部菜单
|
||||
if userId == 0 {
|
||||
tx = tx.Where("menu_type in ? and status_flag = '1'", []string{constants.MENU_TYPE_DIR, constants.MENU_TYPE_MENU})
|
||||
tx.Order("parent_id, menu_sort")
|
||||
} else {
|
||||
// 用户ID权限
|
||||
tx = tx.Where(`menu_type in ? and status_flag = '1'
|
||||
and menu_id in (
|
||||
select menu_id from sys_role_menu where role_id in (
|
||||
select role_id from sys_user_role where user_id = ?
|
||||
))`, []string{constants.MENU_TYPE_DIR, constants.MENU_TYPE_MENU}, userId)
|
||||
tx.Order("parent_id, menu_sort")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysMenu{}
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
@@ -1,474 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/constants/menu"
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysMenuImpl 结构体
|
||||
var NewSysMenuImpl = &SysMenuImpl{
|
||||
selectSql: `select
|
||||
m.menu_id, m.menu_name, m.parent_id, m.menu_sort, m.path, m.component, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time, m.remark
|
||||
from sys_menu m`,
|
||||
|
||||
selectSqlByUser: `select distinct
|
||||
m.menu_id, m.menu_name, m.parent_id, m.menu_sort, m.path, m.component, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time, m.remark
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
left join sys_role ro on ur.role_id = ro.role_id`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"menu_id": "MenuID",
|
||||
"menu_name": "MenuName",
|
||||
"parent_name": "ParentName",
|
||||
"parent_id": "ParentID",
|
||||
"path": "Path",
|
||||
"menu_sort": "MenuSort",
|
||||
"component": "Component",
|
||||
"is_frame": "IsFrame",
|
||||
"is_cache": "IsCache",
|
||||
"menu_type": "MenuType",
|
||||
"visible": "Visible",
|
||||
"status": "Status",
|
||||
"perms": "Perms",
|
||||
"icon": "Icon",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
"remark": "Remark",
|
||||
},
|
||||
}
|
||||
|
||||
// SysMenuImpl 菜单表 数据层处理
|
||||
type SysMenuImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 查询视图用户对象SQL
|
||||
selectSqlByUser string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysMenuImpl) convertResultRows(rows []map[string]any) []model.SysMenu {
|
||||
arr := make([]model.SysMenu, 0)
|
||||
for _, row := range rows {
|
||||
sysMenu := model.SysMenu{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&sysMenu, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, sysMenu)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectMenuList 查询系统菜单列表
|
||||
func (r *SysMenuImpl) SelectMenuList(sysMenu model.SysMenu, userId string) []model.SysMenu {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysMenu.MenuName != "" {
|
||||
conditions = append(conditions, "m.menu_name like concat(?, '%')")
|
||||
params = append(params, sysMenu.MenuName)
|
||||
}
|
||||
if sysMenu.Visible != "" {
|
||||
conditions = append(conditions, "m.visible = ?")
|
||||
params = append(params, sysMenu.Visible)
|
||||
}
|
||||
if sysMenu.Status != "" {
|
||||
conditions = append(conditions, "m.status = ?")
|
||||
params = append(params, sysMenu.Status)
|
||||
}
|
||||
|
||||
fromSql := r.selectSql
|
||||
|
||||
// 个人菜单
|
||||
if userId != "*" {
|
||||
fromSql = r.selectSqlByUser
|
||||
conditions = append(conditions, "ur.user_id = ?")
|
||||
params = append(params, userId)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
orderSql := " order by m.parent_id, m.menu_sort"
|
||||
querySql := fromSql + whereSql + orderSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysMenu{}
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectMenuPermsByUserId 根据用户ID查询权限
|
||||
func (r *SysMenuImpl) SelectMenuPermsByUserId(userId string) []string {
|
||||
querySql := `select distinct m.perms as 'str' from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
left join sys_role r on r.role_id = ur.role_id
|
||||
where m.status = '1' and m.perms != '' and r.status = '1' and ur.user_id = ? `
|
||||
|
||||
// 查询结果
|
||||
results, err := datasource.RawDB("", querySql, []any{userId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// 读取结果
|
||||
rows := make([]string, 0)
|
||||
for _, m := range results {
|
||||
rows = append(rows, fmt.Sprintf("%v", m["str"]))
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectMenuTreeByUserId 根据用户ID查询菜单
|
||||
func (r *SysMenuImpl) SelectMenuTreeByUserId(userId string) []model.SysMenu {
|
||||
var params []any
|
||||
var querySql string
|
||||
|
||||
if userId == "*" {
|
||||
// 管理员全部菜单
|
||||
querySql = r.selectSql + ` where
|
||||
m.menu_type in (?,?) and m.status = '1'
|
||||
order by m.parent_id, m.menu_sort`
|
||||
params = append(params, menu.TYPE_DIR)
|
||||
params = append(params, menu.TYPE_MENU)
|
||||
} else {
|
||||
// 用户ID权限
|
||||
querySql = r.selectSqlByUser + ` where
|
||||
m.menu_type in (?, ?) and m.status = '1'
|
||||
and ur.user_id = ? and ro.status = '1'
|
||||
order by m.parent_id, m.menu_sort`
|
||||
params = append(params, menu.TYPE_DIR)
|
||||
params = append(params, menu.TYPE_MENU)
|
||||
params = append(params, userId)
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysMenu{}
|
||||
}
|
||||
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectMenuListByRoleId 根据角色ID查询菜单树信息
|
||||
func (r *SysMenuImpl) SelectMenuListByRoleId(roleId string, menuCheckStrictly bool) []string {
|
||||
querySql := `select m.menu_id as 'str' from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
where rm.role_id = ? `
|
||||
var params []any
|
||||
params = append(params, roleId)
|
||||
// 展开
|
||||
if menuCheckStrictly {
|
||||
querySql += ` 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 = ?) `
|
||||
params = append(params, roleId)
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []string{}
|
||||
}
|
||||
|
||||
if len(results) > 0 {
|
||||
ids := make([]string, 0)
|
||||
for _, v := range results {
|
||||
ids = append(ids, fmt.Sprintf("%v", v["str"]))
|
||||
}
|
||||
return ids
|
||||
}
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// SelectMenuByIds 根据菜单ID查询信息
|
||||
func (r *SysMenuImpl) SelectMenuByIds(menuIds []string) []model.SysMenu {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(menuIds))
|
||||
querySql := r.selectSql + " where m.menu_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(menuIds)
|
||||
results, err := datasource.RawDB("", querySql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysMenu{}
|
||||
}
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// HasChildByMenuIdAndStatus 存在菜单子节点数量与状态
|
||||
func (r *SysMenuImpl) HasChildByMenuIdAndStatus(menuId, status string) int64 {
|
||||
querySql := "select count(1) as 'total' from sys_menu where parent_id = ?"
|
||||
params := []any{menuId}
|
||||
|
||||
// 菜单状态
|
||||
if status != "" {
|
||||
querySql += " and status = ? and menu_type in (?, ?) "
|
||||
params = append(params, status)
|
||||
params = append(params, menu.TYPE_DIR)
|
||||
params = append(params, menu.TYPE_MENU)
|
||||
}
|
||||
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["total"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// InsertMenu 新增菜单信息
|
||||
func (r *SysMenuImpl) InsertMenu(sysMenu model.SysMenu) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysMenu.MenuID != "" {
|
||||
params["menu_id"] = sysMenu.MenuID
|
||||
}
|
||||
if sysMenu.ParentID != "" {
|
||||
params["parent_id"] = sysMenu.ParentID
|
||||
}
|
||||
if sysMenu.MenuName != "" {
|
||||
params["menu_name"] = sysMenu.MenuName
|
||||
}
|
||||
if sysMenu.MenuSort > 0 {
|
||||
params["menu_sort"] = sysMenu.MenuSort
|
||||
}
|
||||
if sysMenu.Path != "" {
|
||||
params["path"] = sysMenu.Path
|
||||
}
|
||||
if sysMenu.Component != "" {
|
||||
params["component"] = sysMenu.Component
|
||||
}
|
||||
if sysMenu.IsFrame != "" {
|
||||
params["is_frame"] = sysMenu.IsFrame
|
||||
}
|
||||
if sysMenu.IsCache != "" {
|
||||
params["is_cache"] = sysMenu.IsCache
|
||||
}
|
||||
if sysMenu.MenuType != "" {
|
||||
params["menu_type"] = sysMenu.MenuType
|
||||
}
|
||||
if sysMenu.Visible != "" {
|
||||
params["visible"] = sysMenu.Visible
|
||||
}
|
||||
if sysMenu.Status != "" {
|
||||
params["status"] = sysMenu.Status
|
||||
}
|
||||
if sysMenu.Perms != "" {
|
||||
params["perms"] = sysMenu.Perms
|
||||
}
|
||||
if sysMenu.Icon != "" {
|
||||
params["icon"] = sysMenu.Icon
|
||||
} else {
|
||||
params["icon"] = "#"
|
||||
}
|
||||
if sysMenu.Remark != "" {
|
||||
params["remark"] = sysMenu.Remark
|
||||
}
|
||||
if sysMenu.CreateBy != "" {
|
||||
params["create_by"] = sysMenu.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 根据菜单类型重置参数
|
||||
if sysMenu.MenuType == menu.TYPE_BUTTON {
|
||||
params["component"] = ""
|
||||
params["path"] = ""
|
||||
params["icon"] = "#"
|
||||
params["is_cache"] = "1"
|
||||
params["is_frame"] = "1"
|
||||
params["visible"] = "1"
|
||||
params["status"] = "1"
|
||||
}
|
||||
if sysMenu.MenuType == menu.TYPE_DIR {
|
||||
params["component"] = ""
|
||||
params["perms"] = ""
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_menu (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// UpdateMenu 修改菜单信息
|
||||
func (r *SysMenuImpl) UpdateMenu(sysMenu model.SysMenu) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysMenu.MenuID != "" {
|
||||
params["menu_id"] = sysMenu.MenuID
|
||||
}
|
||||
if sysMenu.ParentID != "" {
|
||||
params["parent_id"] = sysMenu.ParentID
|
||||
}
|
||||
if sysMenu.MenuName != "" {
|
||||
params["menu_name"] = sysMenu.MenuName
|
||||
}
|
||||
if sysMenu.MenuSort > 0 {
|
||||
params["menu_sort"] = sysMenu.MenuSort
|
||||
}
|
||||
if sysMenu.Path != "" {
|
||||
params["path"] = sysMenu.Path
|
||||
}
|
||||
if sysMenu.Component != "" {
|
||||
params["component"] = sysMenu.Component
|
||||
}
|
||||
if sysMenu.IsFrame != "" {
|
||||
params["is_frame"] = sysMenu.IsFrame
|
||||
}
|
||||
if sysMenu.IsCache != "" {
|
||||
params["is_cache"] = sysMenu.IsCache
|
||||
}
|
||||
if sysMenu.MenuType != "" {
|
||||
params["menu_type"] = sysMenu.MenuType
|
||||
}
|
||||
if sysMenu.Visible != "" {
|
||||
params["visible"] = sysMenu.Visible
|
||||
}
|
||||
if sysMenu.Status != "" {
|
||||
params["status"] = sysMenu.Status
|
||||
}
|
||||
if sysMenu.Perms != "" {
|
||||
params["perms"] = sysMenu.Perms
|
||||
}
|
||||
if sysMenu.Icon != "" {
|
||||
params["icon"] = sysMenu.Icon
|
||||
} else {
|
||||
params["icon"] = "#"
|
||||
}
|
||||
params["remark"] = sysMenu.Remark
|
||||
if sysMenu.UpdateBy != "" {
|
||||
params["update_by"] = sysMenu.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 根据菜单类型重置参数
|
||||
if sysMenu.MenuType == menu.TYPE_BUTTON {
|
||||
params["component"] = ""
|
||||
params["path"] = ""
|
||||
params["icon"] = "#"
|
||||
params["is_cache"] = "1"
|
||||
params["is_frame"] = "1"
|
||||
params["visible"] = "1"
|
||||
params["status"] = "1"
|
||||
}
|
||||
if sysMenu.MenuType == menu.TYPE_DIR {
|
||||
params["component"] = ""
|
||||
params["perms"] = ""
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_menu set " + strings.Join(keys, ",") + " where menu_id = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysMenu.MenuID)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// DeleteMenuById 删除菜单管理信息
|
||||
func (r *SysMenuImpl) DeleteMenuById(menuId string) int64 {
|
||||
sql := "delete from sys_menu where menu_id = ?"
|
||||
results, err := datasource.ExecDB("", sql, []any{menuId})
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// CheckUniqueMenu 校验菜单是否唯一
|
||||
func (r *SysMenuImpl) CheckUniqueMenu(sysMenu model.SysMenu) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysMenu.MenuName != "" {
|
||||
conditions = append(conditions, "menu_name = ?")
|
||||
params = append(params, sysMenu.MenuName)
|
||||
}
|
||||
if sysMenu.ParentID != "" {
|
||||
conditions = append(conditions, "parent_id = ?")
|
||||
params = append(params, sysMenu.ParentID)
|
||||
}
|
||||
if sysMenu.Path != "" {
|
||||
conditions = append(conditions, "path = ?")
|
||||
params = append(params, sysMenu.Path)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
if whereSql == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select menu_id as 'str' from sys_menu " + whereSql + " limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -1,30 +1,182 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"time"
|
||||
|
||||
// ISysPost 岗位表 数据层接口
|
||||
type ISysPost interface {
|
||||
// SelectPostPage 查询岗位分页数据集合
|
||||
SelectPostPage(query map[string]any) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectPostList 查询岗位数据集合
|
||||
SelectPostList(sysPost model.SysPost) []model.SysPost
|
||||
// NewSysPost 实例化数据层
|
||||
var NewSysPost = &SysPost{}
|
||||
|
||||
// SelectPostByIds 通过岗位ID查询岗位信息
|
||||
SelectPostByIds(postIds []string) []model.SysPost
|
||||
// SysPost 岗位表 数据层处理
|
||||
type SysPost struct{}
|
||||
|
||||
// SelectPostListByUserId 根据用户ID获取岗位选择框列表
|
||||
SelectPostListByUserId(userId string) []model.SysPost
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysPost) SelectByPage(query map[string]string) ([]model.SysPost, int64) {
|
||||
tx := db.DB("").Model(&model.SysPost{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if v, ok := query["postCode"]; ok && v != "" {
|
||||
tx = tx.Where("post_code like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["postName"]; ok && v != "" {
|
||||
tx = tx.Where("post_name like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
|
||||
// DeletePostByIds 批量删除岗位信息
|
||||
DeletePostByIds(postIds []string) int64
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysPost{}
|
||||
|
||||
// UpdatePost 修改岗位信息
|
||||
UpdatePost(sysPost model.SysPost) int64
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// InsertPost 新增岗位信息
|
||||
InsertPost(sysPost model.SysPost) string
|
||||
|
||||
// CheckUniquePost 校验岗位唯一
|
||||
CheckUniquePost(sysPost model.SysPost) string
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("post_sort asc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Select 查询集合
|
||||
func (r SysPost) Select(sysPost model.SysPost) []model.SysPost {
|
||||
tx := db.DB("").Model(&model.SysPost{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysPost.PostCode != "" {
|
||||
tx = tx.Where("post_code like concat(?, '%')", sysPost.PostCode)
|
||||
}
|
||||
if sysPost.PostName != "" {
|
||||
tx = tx.Where("post_name like concat(?, '%')", sysPost.PostName)
|
||||
}
|
||||
if sysPost.StatusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", sysPost.StatusFlag)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysPost{}
|
||||
if err := tx.Order("post_sort asc").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysPost) SelectByIds(postIds []int64) []model.SysPost {
|
||||
rows := []model.SysPost{}
|
||||
if len(postIds) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysPost{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("post_id in ? and del_flag = '0'", postIds)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r SysPost) Insert(sysPost model.SysPost) int64 {
|
||||
sysPost.DelFlag = "0"
|
||||
if sysPost.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysPost.UpdateBy = sysPost.CreateBy
|
||||
sysPost.UpdateTime = ms
|
||||
sysPost.CreateTime = ms
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysPost).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysPost.PostId
|
||||
}
|
||||
|
||||
// Update 修改信息 返回受影响行数
|
||||
func (r SysPost) Update(sysPost model.SysPost) int64 {
|
||||
if sysPost.PostId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysPost.UpdateBy != "" {
|
||||
sysPost.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysPost{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("post_id = ?", sysPost.PostId)
|
||||
tx = tx.Omit("post_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysPost).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息 返回受影响行数
|
||||
func (r SysPost) DeleteByIds(postIds []int64) int64 {
|
||||
if len(postIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysPost{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("post_id in ?", postIds)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一 返回ID
|
||||
func (r SysPost) CheckUnique(sysPost model.SysPost) int64 {
|
||||
tx := db.DB("").Model(&model.SysPost{})
|
||||
tx = tx.Where("del_flag = 0")
|
||||
// 查询条件拼接
|
||||
if sysPost.PostName != "" {
|
||||
tx = tx.Where("post_name= ?", sysPost.PostName)
|
||||
}
|
||||
if sysPost.PostCode != "" {
|
||||
tx = tx.Where("post_code = ?", sysPost.PostCode)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("post_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// SelectByUserId 根据用户ID获取岗位选择框列表
|
||||
func (r SysPost) SelectByUserId(userId int64) []model.SysPost {
|
||||
rows := []model.SysPost{}
|
||||
if userId <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysPost{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("post_id in (select post_id from sys_user_post where user_id = ?)", userId)
|
||||
// 查询数据
|
||||
if err := tx.Order("post_id").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
@@ -1,321 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysPostImpl 结构体
|
||||
var NewSysPostImpl = &SysPostImpl{
|
||||
selectSql: `select
|
||||
post_id, post_code, post_name, post_sort, status, create_by, create_time, remark
|
||||
from sys_post`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"post_id": "PostID",
|
||||
"post_code": "PostCode",
|
||||
"post_name": "PostName",
|
||||
"post_sort": "PostSort",
|
||||
"status": "Status",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
"remark": "Remark",
|
||||
},
|
||||
}
|
||||
|
||||
// SysPostImpl 岗位表 数据层处理
|
||||
type SysPostImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysPostImpl) convertResultRows(rows []map[string]any) []model.SysPost {
|
||||
arr := make([]model.SysPost, 0)
|
||||
for _, row := range rows {
|
||||
sysPost := model.SysPost{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&sysPost, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, sysPost)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectPostPage 查询岗位分页数据集合
|
||||
func (r *SysPostImpl) SelectPostPage(query map[string]any) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["postCode"]; ok && v != "" {
|
||||
conditions = append(conditions, "post_code like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["postName"]; ok && v != "" {
|
||||
conditions = append(conditions, "post_name like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysPost{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalSql := "select count(1) as 'total' from sys_post"
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " order by post_sort limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectPostList 查询岗位数据集合
|
||||
func (r *SysPostImpl) SelectPostList(sysPost model.SysPost) []model.SysPost {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysPost.PostCode != "" {
|
||||
conditions = append(conditions, "post_code like concat(?, '%')")
|
||||
params = append(params, sysPost.PostCode)
|
||||
}
|
||||
if sysPost.PostName != "" {
|
||||
conditions = append(conditions, "post_name like concat(?, '%')")
|
||||
params = append(params, sysPost.PostName)
|
||||
}
|
||||
if sysPost.Status != "" {
|
||||
conditions = append(conditions, "status = ?")
|
||||
params = append(params, sysPost.Status)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
orderSql := " order by post_sort"
|
||||
querySql := r.selectSql + whereSql + orderSql
|
||||
rows, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysPost{}
|
||||
}
|
||||
return r.convertResultRows(rows)
|
||||
}
|
||||
|
||||
// SelectPostByIds 通过岗位ID查询岗位信息
|
||||
func (r *SysPostImpl) SelectPostByIds(postIds []string) []model.SysPost {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(postIds))
|
||||
querySql := r.selectSql + " where post_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(postIds)
|
||||
results, err := datasource.RawDB("", querySql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysPost{}
|
||||
}
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectPostListByUserId 根据用户ID获取岗位选择框列表
|
||||
func (r *SysPostImpl) SelectPostListByUserId(userId string) []model.SysPost {
|
||||
// 查询数据
|
||||
querySql := `select distinct
|
||||
p.post_id, p.post_name, p.post_code
|
||||
from sys_post p
|
||||
left join sys_user_post up on up.post_id = p.post_id
|
||||
left join sys_user u on u.user_id = up.user_id
|
||||
where u.user_id = ? order by p.post_id`
|
||||
rows, err := datasource.RawDB("", querySql, []any{userId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysPost{}
|
||||
}
|
||||
return r.convertResultRows(rows)
|
||||
}
|
||||
|
||||
// DeletePostByIds 批量删除岗位信息
|
||||
func (r *SysPostImpl) DeletePostByIds(postIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(postIds))
|
||||
sql := "delete from sys_post where post_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(postIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// UpdatePost 修改岗位信息
|
||||
func (r *SysPostImpl) UpdatePost(sysPost model.SysPost) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysPost.PostCode != "" {
|
||||
params["post_code"] = sysPost.PostCode
|
||||
}
|
||||
if sysPost.PostName != "" {
|
||||
params["post_name"] = sysPost.PostName
|
||||
}
|
||||
if sysPost.PostSort > 0 {
|
||||
params["post_sort"] = sysPost.PostSort
|
||||
}
|
||||
if sysPost.Status != "" {
|
||||
params["status"] = sysPost.Status
|
||||
}
|
||||
params["remark"] = sysPost.Remark
|
||||
if sysPost.UpdateBy != "" {
|
||||
params["update_by"] = sysPost.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_post set " + strings.Join(keys, ",") + " where post_id = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysPost.PostID)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// InsertPost 新增岗位信息
|
||||
func (r *SysPostImpl) InsertPost(sysPost model.SysPost) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysPost.PostID != "" {
|
||||
params["post_id"] = sysPost.PostID
|
||||
}
|
||||
if sysPost.PostCode != "" {
|
||||
params["post_code"] = sysPost.PostCode
|
||||
}
|
||||
if sysPost.PostName != "" {
|
||||
params["post_name"] = sysPost.PostName
|
||||
}
|
||||
if sysPost.PostSort > 0 {
|
||||
params["post_sort"] = sysPost.PostSort
|
||||
}
|
||||
if sysPost.Status != "" {
|
||||
params["status"] = sysPost.Status
|
||||
}
|
||||
if sysPost.Remark != "" {
|
||||
params["remark"] = sysPost.Remark
|
||||
}
|
||||
if sysPost.CreateBy != "" {
|
||||
params["create_by"] = sysPost.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_post (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// CheckUniquePost 校验岗位唯一
|
||||
func (r *SysPostImpl) CheckUniquePost(sysPost model.SysPost) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysPost.PostName != "" {
|
||||
conditions = append(conditions, "post_name= ?")
|
||||
params = append(params, sysPost.PostName)
|
||||
}
|
||||
if sysPost.PostCode != "" {
|
||||
conditions = append(conditions, "post_code = ?")
|
||||
params = append(params, sysPost.PostCode)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select post_id as 'str' from sys_post " + whereSql + " limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -1,30 +1,209 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
// ISysRole 角色表 数据层接口
|
||||
type ISysRole interface {
|
||||
// SelectRolePage 根据条件分页查询角色数据
|
||||
SelectRolePage(query map[string]any, dataScopeSQL string) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectRoleList 根据条件查询角色数据
|
||||
SelectRoleList(sysRole model.SysRole, dataScopeSQL string) []model.SysRole
|
||||
// NewSysRole 实例化数据层
|
||||
var NewSysRole = &SysRole{}
|
||||
|
||||
// SelectRoleListByUserId 根据用户ID获取角色选择框列表
|
||||
SelectRoleListByUserId(userId string) []model.SysRole
|
||||
// SysRole 角色表 数据层处理
|
||||
type SysRole struct{}
|
||||
|
||||
// SelectRoleByIds 通过角色ID查询角色
|
||||
SelectRoleByIds(roleIds []string) []model.SysRole
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysRole) SelectByPage(query map[string]string) ([]model.SysRole, int64) {
|
||||
tx := db.DB("").Model(&model.SysRole{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if v, ok := query["roleName"]; ok && v != "" {
|
||||
tx = tx.Where("role_name like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["roleKey"]; ok && v != "" {
|
||||
tx = tx.Where("role_key like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
if v, ok := query["beginTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s000", v)
|
||||
tx = tx.Where("create_time >= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("create_time >= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["endTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s999", v)
|
||||
tx = tx.Where("create_time <= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("create_time <= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["deptId"]; ok && v != "" {
|
||||
tx = tx.Where(`role_id in (
|
||||
select distinct role_id from sys_role_dept where sys_role_dept.dept_id IN (
|
||||
SELECT dept_id FROM sys_dept WHERE dept_id = ? or find_in_set(? , ancestors )
|
||||
))`, v, v)
|
||||
}
|
||||
|
||||
// UpdateRole 修改角色信息
|
||||
UpdateRole(sysRole model.SysRole) int64
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysRole{}
|
||||
|
||||
// InsertRole 新增角色信息
|
||||
InsertRole(sysRole model.SysRole) string
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// DeleteRoleByIds 批量删除角色信息
|
||||
DeleteRoleByIds(roleIds []string) int64
|
||||
|
||||
// CheckUniqueRole 校验角色是否唯一
|
||||
CheckUniqueRole(sysRole model.SysRole) string
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("role_sort asc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Select 查询集合
|
||||
func (r SysRole) Select(sysRole model.SysRole) []model.SysRole {
|
||||
tx := db.DB("").Model(&model.SysRole{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysRole.RoleKey != "" {
|
||||
tx = tx.Where("role_key like concat(?, '%')", sysRole.RoleKey)
|
||||
}
|
||||
if sysRole.RoleName != "" {
|
||||
tx = tx.Where("role_name like concat(?, '%')", sysRole.RoleName)
|
||||
}
|
||||
if sysRole.StatusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", sysRole.StatusFlag)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysRole{}
|
||||
if err := tx.Order("role_sort asc").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysRole) SelectByIds(roleIds []int64) []model.SysRole {
|
||||
rows := []model.SysRole{}
|
||||
if len(roleIds) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysRole{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("role_id in ? and del_flag = '0'", roleIds)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r SysRole) Insert(sysRole model.SysRole) int64 {
|
||||
sysRole.DelFlag = "0"
|
||||
if sysRole.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysRole.UpdateBy = sysRole.CreateBy
|
||||
sysRole.UpdateTime = ms
|
||||
sysRole.CreateTime = ms
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysRole).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysRole.RoleId
|
||||
}
|
||||
|
||||
// Update 修改信息 返回受影响行数
|
||||
func (r SysRole) Update(sysRole model.SysRole) int64 {
|
||||
if sysRole.RoleId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysRole.UpdateBy != "" {
|
||||
sysRole.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysRole{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("role_id = ?", sysRole.RoleId)
|
||||
tx = tx.Omit("role_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysRole).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息 返回受影响行数
|
||||
func (r SysRole) DeleteByIds(roleIds []int64) int64 {
|
||||
if len(roleIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysRole{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("role_id in ?", roleIds)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一
|
||||
func (r SysRole) CheckUnique(sysRole model.SysRole) int64 {
|
||||
tx := db.DB("").Model(&model.SysRole{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysRole.RoleName != "" {
|
||||
tx = tx.Where("role_name = ?", sysRole.RoleName)
|
||||
}
|
||||
if sysRole.RoleKey != "" {
|
||||
tx = tx.Where("role_key = ?", sysRole.RoleKey)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("role_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// SelectByUserId 根据用户ID获取角色信息
|
||||
func (r SysRole) SelectByUserId(userId int64) []model.SysRole {
|
||||
rows := []model.SysRole{}
|
||||
if userId <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Table("sys_user_role ur")
|
||||
// 构建查询条件
|
||||
tx = tx.Distinct("r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status_flag, r.del_flag, r.create_time, r.remark").
|
||||
Joins("left join sys_user u on u.user_id = ur.user_id").
|
||||
Joins("left join sys_role r on r.role_id = ur.role_id").
|
||||
Where("u.del_flag = '0' AND ur.user_id = ?", userId)
|
||||
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
@@ -1,375 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysRoleImpl 结构体
|
||||
var NewSysRoleImpl = &SysRoleImpl{
|
||||
selectSql: `select distinct
|
||||
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly,
|
||||
r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark
|
||||
from sys_role r
|
||||
left join sys_user_role ur on ur.role_id = r.role_id
|
||||
left join sys_user u on u.user_id = ur.user_id
|
||||
left join sys_dept d on u.dept_id = d.dept_id`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"role_id": "RoleID",
|
||||
"role_name": "RoleName",
|
||||
"role_key": "RoleKey",
|
||||
"role_sort": "RoleSort",
|
||||
"data_scope": "DataScope",
|
||||
"menu_check_strictly": "MenuCheckStrictly",
|
||||
"dept_check_strictly": "DeptCheckStrictly",
|
||||
"status": "Status",
|
||||
"del_flag": "DelFlag",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
"remark": "Remark",
|
||||
},
|
||||
}
|
||||
|
||||
// SysRoleImpl 角色表 数据层处理
|
||||
type SysRoleImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysRoleImpl) convertResultRows(rows []map[string]any) []model.SysRole {
|
||||
arr := make([]model.SysRole, 0)
|
||||
for _, row := range rows {
|
||||
sysRole := model.SysRole{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
repo.SetFieldValue(&sysRole, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, sysRole)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectRolePage 根据条件分页查询角色数据
|
||||
func (r *SysRoleImpl) SelectRolePage(query map[string]any, dataScopeSQL string) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["roleId"]; ok && v != "" {
|
||||
conditions = append(conditions, "r.role_id = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["roleName"]; ok && v != "" {
|
||||
conditions = append(conditions, "r.role_name like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["roleKey"]; ok && v != "" {
|
||||
conditions = append(conditions, "r.role_key like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "r.status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
beginTime, ok := query["beginTime"]
|
||||
if !ok {
|
||||
beginTime, ok = query["params[beginTime]"]
|
||||
}
|
||||
if ok && beginTime != "" {
|
||||
conditions = append(conditions, "r.create_time >= ?")
|
||||
params = append(params, parse.Number(beginTime.(string)))
|
||||
}
|
||||
endTime, ok := query["endTime"]
|
||||
if !ok {
|
||||
endTime, ok = query["params[endTime]"]
|
||||
}
|
||||
if ok && endTime != "" {
|
||||
conditions = append(conditions, "r.create_time <= ?")
|
||||
params = append(params, parse.Number(endTime.(string)))
|
||||
}
|
||||
if v, ok := query["deptId"]; ok && v != "" {
|
||||
conditions = append(conditions, `(u.dept_id = ? or u.dept_id in (
|
||||
select t.dept_id from sys_dept t where find_in_set(?, ancestors)
|
||||
))`)
|
||||
params = append(params, v)
|
||||
params = append(params, v)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := " where r.del_flag = '0' and r.role_id != '1' "
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " and " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysRole{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalSql := `select count(distinct r.role_id) as 'total' from sys_role r
|
||||
left join sys_user_role ur on ur.role_id = r.role_id
|
||||
left join sys_user u on u.user_id = ur.user_id
|
||||
left join sys_dept d on u.dept_id = d.dept_id`
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql+dataScopeSQL, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " order by r.role_sort asc limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + dataScopeSQL + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return result
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectRoleList 根据条件查询角色数据
|
||||
func (r *SysRoleImpl) SelectRoleList(sysRole model.SysRole, dataScopeSQL string) []model.SysRole {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysRole.RoleID != "" {
|
||||
conditions = append(conditions, "r.role_id = ?")
|
||||
params = append(params, sysRole.RoleID)
|
||||
}
|
||||
if sysRole.RoleKey != "" {
|
||||
conditions = append(conditions, "r.role_key like concat(?, '%')")
|
||||
params = append(params, sysRole.RoleKey)
|
||||
}
|
||||
if sysRole.RoleName != "" {
|
||||
conditions = append(conditions, "r.role_name like concat(?, '%')")
|
||||
params = append(params, sysRole.RoleName)
|
||||
}
|
||||
if sysRole.Status != "" {
|
||||
conditions = append(conditions, "r.status = ?")
|
||||
params = append(params, sysRole.Status)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := " where r.del_flag = '0' "
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " and " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
orderSql := " order by r.role_sort"
|
||||
querySql := r.selectSql + whereSql + dataScopeSQL + orderSql
|
||||
rows, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysRole{}
|
||||
}
|
||||
return r.convertResultRows(rows)
|
||||
}
|
||||
|
||||
// SelectRoleListByUserId 根据用户ID获取角色选择框列表
|
||||
func (r *SysRoleImpl) SelectRoleListByUserId(userId string) []model.SysRole {
|
||||
querySql := r.selectSql + " where r.del_flag = '0' and ur.user_id = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{userId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysRole{}
|
||||
}
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectRoleByIds 通过角色ID查询角色
|
||||
func (r *SysRoleImpl) SelectRoleByIds(roleIds []string) []model.SysRole {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(roleIds))
|
||||
querySql := r.selectSql + " where r.role_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(roleIds)
|
||||
results, err := datasource.RawDB("", querySql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysRole{}
|
||||
}
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// UpdateRole 修改角色信息
|
||||
func (r *SysRoleImpl) UpdateRole(sysRole model.SysRole) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysRole.RoleName != "" {
|
||||
params["role_name"] = sysRole.RoleName
|
||||
}
|
||||
if sysRole.RoleKey != "" {
|
||||
params["role_key"] = sysRole.RoleKey
|
||||
}
|
||||
if sysRole.RoleSort > 0 {
|
||||
params["role_sort"] = sysRole.RoleSort
|
||||
}
|
||||
if sysRole.DataScope != "" {
|
||||
params["data_scope"] = sysRole.DataScope
|
||||
}
|
||||
if sysRole.MenuCheckStrictly != "" {
|
||||
params["menu_check_strictly"] = sysRole.MenuCheckStrictly
|
||||
}
|
||||
if sysRole.DeptCheckStrictly != "" {
|
||||
params["dept_check_strictly"] = sysRole.DeptCheckStrictly
|
||||
}
|
||||
if sysRole.Status != "" {
|
||||
params["status"] = sysRole.Status
|
||||
}
|
||||
params["remark"] = sysRole.Remark
|
||||
if sysRole.UpdateBy != "" {
|
||||
params["update_by"] = sysRole.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_role set " + strings.Join(keys, ",") + " where role_id = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysRole.RoleID)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// InsertRole 新增角色信息
|
||||
func (r *SysRoleImpl) InsertRole(sysRole model.SysRole) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysRole.RoleID != "" {
|
||||
params["role_id"] = sysRole.RoleID
|
||||
}
|
||||
if sysRole.RoleName != "" {
|
||||
params["role_name"] = sysRole.RoleName
|
||||
}
|
||||
if sysRole.RoleKey != "" {
|
||||
params["role_key"] = sysRole.RoleKey
|
||||
}
|
||||
if sysRole.RoleSort > 0 {
|
||||
params["role_sort"] = sysRole.RoleSort
|
||||
}
|
||||
if sysRole.DataScope != "" {
|
||||
params["data_scope"] = sysRole.DataScope
|
||||
}
|
||||
if sysRole.MenuCheckStrictly != "" {
|
||||
params["menu_check_strictly"] = sysRole.MenuCheckStrictly
|
||||
}
|
||||
if sysRole.DeptCheckStrictly != "" {
|
||||
params["dept_check_strictly"] = sysRole.DeptCheckStrictly
|
||||
}
|
||||
if sysRole.Status != "" {
|
||||
params["status"] = sysRole.Status
|
||||
}
|
||||
params["remark"] = sysRole.Remark
|
||||
if sysRole.CreateBy != "" {
|
||||
params["create_by"] = sysRole.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_role (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// DeleteRoleByIds 批量删除角色信息
|
||||
func (r *SysRoleImpl) DeleteRoleByIds(roleIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(roleIds))
|
||||
sql := "update sys_role set del_flag = '1' where role_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(roleIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// CheckUniqueRole 校验角色是否唯一
|
||||
func (r *SysRoleImpl) CheckUniqueRole(sysRole model.SysRole) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysRole.RoleName != "" {
|
||||
conditions = append(conditions, "r.role_name = ?")
|
||||
params = append(params, sysRole.RoleName)
|
||||
}
|
||||
if sysRole.RoleKey != "" {
|
||||
conditions = append(conditions, "r.role_key = ?")
|
||||
params = append(params, sysRole.RoleKey)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select role_id as 'str' from sys_role r " + whereSql + " and r.del_flag = '0' limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -1,15 +1,55 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// ISysRoleDept 角色与部门关联表 数据层接口
|
||||
type ISysRoleDept interface {
|
||||
// DeleteRoleDept 批量删除角色部门关联信息
|
||||
DeleteRoleDept(roleIds []string) int64
|
||||
// NewSysRoleDept 实例化数据层
|
||||
var NewSysRoleDept = &SysRoleDept{}
|
||||
|
||||
// DeleteDeptRole 批量删除部门角色关联信息
|
||||
DeleteDeptRole(deptIds []string) int64
|
||||
// SysRoleDept 角色与部门关联表 数据层处理
|
||||
type SysRoleDept struct{}
|
||||
|
||||
// BatchRoleDept 批量新增角色部门信息
|
||||
BatchRoleDept(sysRoleDepts []model.SysRoleDept) int64
|
||||
// DeleteByRoleIds 批量删除信息By角色
|
||||
func (r SysRoleDept) DeleteByRoleIds(roleIds []int64) int64 {
|
||||
if len(roleIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Where("role_id in ?", roleIds)
|
||||
// 执行删除
|
||||
if err := tx.Delete(&model.SysRoleDept{}).Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByDeptIds 批量删除信息By部门
|
||||
func (r SysRoleDept) DeleteByDeptIds(deptIds []int64) int64 {
|
||||
if len(deptIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Where("dept_id in ?", deptIds)
|
||||
// 执行删除
|
||||
if err := tx.Delete(&model.SysRoleDept{}).Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// BatchInsert 批量新增信息
|
||||
func (r SysRoleDept) BatchInsert(sysRoleDepts []model.SysRoleDept) int64 {
|
||||
if len(sysRoleDepts) <= 0 {
|
||||
return 0
|
||||
}
|
||||
// 执行批量删除
|
||||
tx := db.DB("").CreateInBatches(sysRoleDepts, 500)
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("delete batch err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysRoleDeptImpl 结构体
|
||||
var NewSysRoleDeptImpl = &SysRoleDeptImpl{}
|
||||
|
||||
// SysRoleDeptImpl 角色与部门关联表 数据层处理
|
||||
type SysRoleDeptImpl struct{}
|
||||
|
||||
// DeleteRoleDept 批量删除角色部门关联信息
|
||||
func (r *SysRoleDeptImpl) DeleteRoleDept(roleIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(roleIds))
|
||||
sql := "delete from sys_role_dept where role_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(roleIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// DeleteDeptRole 批量删除部门角色关联信息
|
||||
func (r *SysRoleDeptImpl) DeleteDeptRole(deptIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(deptIds))
|
||||
sql := "delete from sys_role_dept where dept_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(deptIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// BatchRoleDept 批量新增角色部门信息
|
||||
func (r *SysRoleDeptImpl) BatchRoleDept(sysRoleDepts []model.SysRoleDept) int64 {
|
||||
keyValues := make([]string, 0)
|
||||
for _, item := range sysRoleDepts {
|
||||
keyValues = append(keyValues, fmt.Sprintf("(%s,%s)", item.RoleID, item.DeptID))
|
||||
}
|
||||
sql := "insert into sys_role_dept(role_id, dept_id) values " + strings.Join(keyValues, ",")
|
||||
results, err := datasource.ExecDB("", sql, nil)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
@@ -1,18 +1,71 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// ISysRoleMenu 角色与菜单关联表 数据层接口
|
||||
type ISysRoleMenu interface {
|
||||
// CheckMenuExistRole 查询菜单分配给角色使用数量
|
||||
CheckMenuExistRole(menuId string) int64
|
||||
// NewSysRoleMenu 实例化数据层
|
||||
var NewSysRoleMenu = &SysRoleMenu{}
|
||||
|
||||
// DeleteRoleMenu 批量删除角色和菜单关联
|
||||
DeleteRoleMenu(roleIds []string) int64
|
||||
// SysRoleMenu 角色与菜单关联表 数据层处理
|
||||
type SysRoleMenu struct{}
|
||||
|
||||
// DeleteMenuRole 批量删除菜单和角色关联
|
||||
DeleteMenuRole(menuIds []string) int64
|
||||
|
||||
// BatchRoleMenu 批量新增角色菜单信息
|
||||
BatchRoleMenu(sysRoleMenus []model.SysRoleMenu) int64
|
||||
// ExistRoleByMenuId 存在角色使用数量By菜单
|
||||
func (r SysRoleMenu) ExistRoleByMenuId(menuId int64) int64 {
|
||||
if menuId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysRoleMenu{})
|
||||
tx = tx.Where("menu_id = ?", menuId)
|
||||
// 查询数据
|
||||
var count int64 = 0
|
||||
if err := tx.Count(&count).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return count
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// DeleteByRoleIds 批量删除关联By角色
|
||||
func (r SysRoleMenu) DeleteByRoleIds(roleIds []int64) int64 {
|
||||
if len(roleIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Where("role_id in ?", roleIds)
|
||||
// 执行删除
|
||||
if err := tx.Delete(&model.SysRoleMenu{}).Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByMenuIds 批量删除关联By菜单
|
||||
func (r SysRoleMenu) DeleteByMenuIds(menuIds []int64) int64 {
|
||||
if len(menuIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Where("menu_id in ?", menuIds)
|
||||
// 执行删除
|
||||
if err := tx.Delete(&model.SysRoleMenu{}).Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// BatchInsert 批量新增信息
|
||||
func (r SysRoleMenu) BatchInsert(sysRoleMenus []model.SysRoleMenu) int64 {
|
||||
if len(sysRoleMenus) <= 0 {
|
||||
return 0
|
||||
}
|
||||
// 执行批量删除
|
||||
tx := db.DB("").CreateInBatches(sysRoleMenus, 500)
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("delete batch err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysRoleMenuImpl 结构体
|
||||
var NewSysRoleMenuImpl = &SysRoleMenuImpl{}
|
||||
|
||||
// SysRoleMenuImpl 角色与菜单关联表 数据层处理
|
||||
type SysRoleMenuImpl struct{}
|
||||
|
||||
// CheckMenuExistRole 查询菜单分配给角色使用数量
|
||||
func (r *SysRoleMenuImpl) CheckMenuExistRole(menuId string) int64 {
|
||||
querySql := "select count(1) as 'total' from sys_role_menu where menu_id = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{menuId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["total"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// DeleteRoleMenu 批量删除角色和菜单关联
|
||||
func (r *SysRoleMenuImpl) DeleteRoleMenu(roleIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(roleIds))
|
||||
sql := "delete from sys_role_menu where role_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(roleIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// DeleteMenuRole 批量删除菜单和角色关联
|
||||
func (r *SysRoleMenuImpl) DeleteMenuRole(menuIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(menuIds))
|
||||
sql := "delete from sys_role_menu where menu_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(menuIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// BatchRoleMenu 批量新增角色菜单信息
|
||||
func (r *SysRoleMenuImpl) BatchRoleMenu(sysRoleMenus []model.SysRoleMenu) int64 {
|
||||
keyValues := make([]string, 0)
|
||||
for _, item := range sysRoleMenus {
|
||||
keyValues = append(keyValues, fmt.Sprintf("(%s,%s)", item.RoleID, item.MenuID))
|
||||
}
|
||||
sql := "insert into sys_role_menu(role_id, menu_id) values " + strings.Join(keyValues, ",")
|
||||
results, err := datasource.ExecDB("", sql, nil)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
@@ -1,33 +1,280 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
// ISysUser 用户表 数据层接口
|
||||
type ISysUser interface {
|
||||
// SelectUserPage 根据条件分页查询用户列表
|
||||
SelectUserPage(query map[string]any, dataScopeSQL string) map[string]any
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/crypto"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// SelectAllocatedPage 根据条件分页查询分配用户角色列表
|
||||
SelectAllocatedPage(query map[string]any, dataScopeSQL string) map[string]any
|
||||
// NewSysUser 实例化数据层
|
||||
var NewSysUser = &SysUser{}
|
||||
|
||||
// SelectUserList 根据条件查询用户列表
|
||||
SelectUserList(sysUser model.SysUser, dataScopeSQL string) []model.SysUser
|
||||
// SysUser 用户表 数据层处理
|
||||
type SysUser struct{}
|
||||
|
||||
// SelectUserByIds 通过用户ID查询用户
|
||||
SelectUserByIds(userIds []string) []model.SysUser
|
||||
// SelectByPage 分页查询集合
|
||||
func (r SysUser) SelectByPage(query map[string]string, dataScopeSQL string) ([]model.SysUser, int64) {
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if v, ok := query["userId"]; ok && v != "" {
|
||||
tx = tx.Where("user_id = ?", v)
|
||||
}
|
||||
if v, ok := query["userName"]; ok && v != "" {
|
||||
tx = tx.Where("user_name like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["phone"]; ok && v != "" {
|
||||
tx = tx.Where("phone like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
if v, ok := query["beginTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s000", v)
|
||||
tx = tx.Where("login_time >= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("login_time >= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["endTime"]; ok && v != "" {
|
||||
if len(v) == 10 {
|
||||
v = fmt.Sprintf("%s999", v)
|
||||
tx = tx.Where("login_time <= ?", v)
|
||||
} else if len(v) == 13 {
|
||||
tx = tx.Where("login_time <= ?", v)
|
||||
}
|
||||
}
|
||||
if v, ok := query["deptId"]; ok && v != "" {
|
||||
tx = tx.Where(`(dept_id = ? or dept_id in (
|
||||
select t.dept_id from sys_dept t where find_in_set(?, ancestors)
|
||||
))`, v, v)
|
||||
}
|
||||
if dataScopeSQL != "" {
|
||||
tx = tx.Where(dataScopeSQL)
|
||||
}
|
||||
|
||||
// SelectUserByUserName 通过用户登录账号查询用户
|
||||
SelectUserByUserName(userName string) model.SysUser
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysUser{}
|
||||
|
||||
// InsertUser 新增用户信息
|
||||
InsertUser(sysUser model.SysUser) string
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// UpdateUser 修改用户信息
|
||||
UpdateUser(sysUser model.SysUser) int64
|
||||
|
||||
// DeleteUserByIds 批量删除用户信息
|
||||
DeleteUserByIds(userIds []string) int64
|
||||
|
||||
// CheckUniqueUser 校验用户信息是否唯一
|
||||
CheckUniqueUser(sysUser model.SysUser) string
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("user_id desc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// Select 查询集合
|
||||
func (r SysUser) Select(sysUser model.SysUser) []model.SysUser {
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if sysUser.UserName != "" {
|
||||
tx = tx.Where("user_name like concat(?, '%')", sysUser.UserName)
|
||||
}
|
||||
if sysUser.Phone != "" {
|
||||
tx = tx.Where("phone like concat(?, '%')", sysUser.Phone)
|
||||
}
|
||||
if sysUser.StatusFlag != "" {
|
||||
tx = tx.Where("status_flag = ?", sysUser.StatusFlag)
|
||||
}
|
||||
if sysUser.UserId > 0 {
|
||||
tx = tx.Where("user_id = ?", sysUser.UserId)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.SysUser{}
|
||||
if err := tx.Order("login_time desc").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询信息
|
||||
func (r SysUser) SelectByIds(userIds []int64) []model.SysUser {
|
||||
rows := []model.SysUser{}
|
||||
if len(userIds) <= 0 {
|
||||
return rows
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("user_id in ? and del_flag = '0'", userIds)
|
||||
// 查询数据
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// Insert 新增信息
|
||||
func (r SysUser) Insert(sysUser model.SysUser) int64 {
|
||||
sysUser.DelFlag = "0"
|
||||
if sysUser.CreateBy != "" {
|
||||
ms := time.Now().UnixMilli()
|
||||
sysUser.UpdateBy = sysUser.CreateBy
|
||||
sysUser.UpdateTime = ms
|
||||
sysUser.CreateTime = ms
|
||||
}
|
||||
if sysUser.Password != "" {
|
||||
sysUser.Password = crypto.BcryptHash(sysUser.Password)
|
||||
}
|
||||
// 执行插入
|
||||
if err := db.DB("").Create(&sysUser).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return sysUser.UserId
|
||||
}
|
||||
|
||||
// Update 修改信息
|
||||
func (r SysUser) Update(sysUser model.SysUser) int64 {
|
||||
if sysUser.UserId <= 0 {
|
||||
return 0
|
||||
}
|
||||
if sysUser.UpdateBy != "" {
|
||||
sysUser.UpdateTime = time.Now().UnixMilli()
|
||||
}
|
||||
if sysUser.Password != "" {
|
||||
sysUser.Password = crypto.BcryptHash(sysUser.Password)
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("user_id = ?", sysUser.UserId)
|
||||
tx = tx.Omit("user_id", "del_flag", "create_by", "create_time")
|
||||
// 执行更新
|
||||
if err := tx.Updates(sysUser).Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息
|
||||
func (r SysUser) DeleteByIds(userIds []int64) int64 {
|
||||
if len(userIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("user_id in ?", userIds)
|
||||
// 执行更新删除标记
|
||||
if err := tx.Update("del_flag", "1").Error; err != nil {
|
||||
logger.Errorf("update err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// CheckUnique 检查信息是否唯一
|
||||
func (r SysUser) CheckUnique(sysUser model.SysUser) int64 {
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
tx = tx.Where("del_flag = 0")
|
||||
// 查询条件拼接
|
||||
if sysUser.UserName != "" {
|
||||
tx = tx.Where("user_name = ?", sysUser.UserName)
|
||||
}
|
||||
if sysUser.Phone != "" {
|
||||
tx = tx.Where("phone = ?", sysUser.Phone)
|
||||
}
|
||||
if sysUser.Email != "" {
|
||||
tx = tx.Where("email = ?", sysUser.Email)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
if err := tx.Select("user_id").Limit(1).Find(&id).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return id
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// SelectByUserName 通过登录账号查询信息
|
||||
func (r SysUser) SelectByUserName(userName string) model.SysUser {
|
||||
item := model.SysUser{}
|
||||
if userName == "" {
|
||||
return item
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("user_name = ? and del_flag = '0'", userName)
|
||||
// 查询数据
|
||||
if err := tx.Limit(1).Find(&item).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return item
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
||||
// SelectAuthUsersByPage 分页查询集合By分配用户角色
|
||||
func (r SysUser) SelectAuthUsersByPage(query map[string]string, dataScopeSQL string) ([]model.SysUser, int64) {
|
||||
tx := db.DB("").Model(&model.SysUser{})
|
||||
tx = tx.Where("del_flag = '0'")
|
||||
// 查询条件拼接
|
||||
if v, ok := query["userName"]; ok && v != "" {
|
||||
tx = tx.Where("user_name like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["phone"]; ok && v != "" {
|
||||
tx = tx.Where("phone like concat(?, '%')", v)
|
||||
}
|
||||
if v, ok := query["statusFlag"]; ok && v != "" {
|
||||
tx = tx.Where("status_flag = ?", v)
|
||||
}
|
||||
|
||||
// 分配角色的用户
|
||||
if roleId, ok := query["roleId"]; ok && roleId != "" {
|
||||
auth, ok := query["auth"]
|
||||
if ok && parse.Boolean(auth) {
|
||||
tx = tx.Where(`user_id in (
|
||||
select distinct u.user_id from sys_user u
|
||||
inner join sys_user_role ur on u.user_id = ur.user_id
|
||||
and ur.role_id = ?
|
||||
)`, roleId)
|
||||
} else {
|
||||
tx = tx.Where(`user_id not in (
|
||||
select distinct u.user_id from sys_user u
|
||||
inner join sys_user_role ur on u.user_id = ur.user_id
|
||||
and ur.role_id = ?
|
||||
)`, roleId)
|
||||
}
|
||||
}
|
||||
if dataScopeSQL != "" {
|
||||
tx = tx.Where(dataScopeSQL)
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
var total int64 = 0
|
||||
rows := []model.SysUser{}
|
||||
|
||||
// 查询数量为0直接返回
|
||||
if err := tx.Count(&total).Error; err != nil || total <= 0 {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("user_id desc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
@@ -1,564 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/crypto"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysUserImpl 结构体
|
||||
var NewSysUserImpl = &SysUserImpl{
|
||||
selectSql: `select
|
||||
u.user_id, u.dept_id, u.user_name, u.nick_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
|
||||
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
|
||||
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role ur on u.user_id = ur.user_id
|
||||
left join sys_role r on r.role_id = ur.role_id`,
|
||||
|
||||
sysUserMap: map[string]string{
|
||||
"user_id": "UserID",
|
||||
"dept_id": "DeptID",
|
||||
"user_name": "UserName",
|
||||
"nick_name": "NickName",
|
||||
"user_type": "UserType",
|
||||
"email": "Email",
|
||||
"phonenumber": "PhoneNumber",
|
||||
"sex": "Sex",
|
||||
"avatar": "Avatar",
|
||||
"password": "Password",
|
||||
"status": "Status",
|
||||
"del_flag": "DelFlag",
|
||||
"login_ip": "LoginIP",
|
||||
"login_date": "LoginDate",
|
||||
"create_by": "CreateBy",
|
||||
"create_time": "CreateTime",
|
||||
"update_by": "UpdateBy",
|
||||
"update_time": "UpdateTime",
|
||||
"remark": "Remark",
|
||||
},
|
||||
|
||||
sysDeptMap: map[string]string{
|
||||
"dept_id": "DeptID",
|
||||
"parent_id": "ParentID",
|
||||
"dept_name": "DeptName",
|
||||
"ancestors": "Ancestors",
|
||||
"order_num": "OrderNum",
|
||||
"leader": "Leader",
|
||||
"dept_status": "Status",
|
||||
},
|
||||
|
||||
sysRoleMap: map[string]string{
|
||||
"role_id": "RoleID",
|
||||
"role_name": "RoleName",
|
||||
"role_key": "RoleKey",
|
||||
"role_sort": "RoleSort",
|
||||
"data_scope": "DataScope",
|
||||
"role_status": "Status",
|
||||
},
|
||||
}
|
||||
|
||||
// SysUserImpl 用户表 数据层处理
|
||||
type SysUserImpl struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 用户信息实体映射
|
||||
sysUserMap map[string]string
|
||||
// 用户部门实体映射 一对一
|
||||
sysDeptMap map[string]string
|
||||
// 用户角色实体映射 一对多
|
||||
sysRoleMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *SysUserImpl) convertResultRows(rows []map[string]any) []model.SysUser {
|
||||
arr := make([]model.SysUser, 0)
|
||||
|
||||
for _, row := range rows {
|
||||
sysUser := model.SysUser{}
|
||||
sysDept := model.SysDept{}
|
||||
sysRole := model.SysRole{}
|
||||
sysUser.Roles = []model.SysRole{}
|
||||
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.sysUserMap[key]; ok {
|
||||
repo.SetFieldValue(&sysUser, keyMapper, value)
|
||||
}
|
||||
if keyMapper, ok := r.sysDeptMap[key]; ok {
|
||||
repo.SetFieldValue(&sysDept, keyMapper, value)
|
||||
}
|
||||
if keyMapper, ok := r.sysRoleMap[key]; ok {
|
||||
repo.SetFieldValue(&sysRole, keyMapper, value)
|
||||
}
|
||||
}
|
||||
|
||||
sysUser.Dept = sysDept
|
||||
if sysRole.RoleKey != "" {
|
||||
sysUser.Roles = append(sysUser.Roles, sysRole)
|
||||
}
|
||||
|
||||
one := true
|
||||
for i, a := range arr {
|
||||
if a.UserID == sysUser.UserID {
|
||||
arrUser := &arr[i]
|
||||
arrUser.Roles = append(arrUser.Roles, sysUser.Roles...)
|
||||
one = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if one {
|
||||
arr = append(arr, sysUser)
|
||||
}
|
||||
}
|
||||
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectUserPage 根据条件分页查询用户列表
|
||||
func (r *SysUserImpl) SelectUserPage(query map[string]any, dataScopeSQL string) map[string]any {
|
||||
selectUserTotalSql := `select count(distinct u.user_id) as 'total'
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role ur on u.user_id = ur.user_id
|
||||
left join sys_role r on r.role_id = ur.role_id`
|
||||
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["userId"]; ok && v != "" {
|
||||
conditions = append(conditions, "u.user_id = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["userName"]; ok && v != "" {
|
||||
conditions = append(conditions, "u.user_name like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "u.status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["phonenumber"]; ok && v != "" {
|
||||
conditions = append(conditions, "u.phonenumber like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
beginTime, ok := query["beginTime"]
|
||||
if !ok {
|
||||
beginTime, ok = query["params[beginTime]"]
|
||||
}
|
||||
if ok && beginTime != "" {
|
||||
conditions = append(conditions, "u.login_date >= ?")
|
||||
params = append(params, parse.Number(beginTime.(string)))
|
||||
}
|
||||
endTime, ok := query["endTime"]
|
||||
if !ok {
|
||||
endTime, ok = query["params[endTime]"]
|
||||
}
|
||||
if ok && endTime != "" {
|
||||
conditions = append(conditions, "u.login_date <= ?")
|
||||
params = append(params, parse.Number(endTime.(string)))
|
||||
}
|
||||
if v, ok := query["deptId"]; ok && v != "" {
|
||||
conditions = append(conditions, "(u.dept_id = ? or u.dept_id in ( select t.dept_id from sys_dept t where find_in_set(?, ancestors) ))")
|
||||
params = append(params, v)
|
||||
params = append(params, v)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := " where u.del_flag = '0' and u.user_id != '1' "
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " and " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysUser{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalSql := selectUserTotalSql + whereSql + dataScopeSQL
|
||||
totalRows, err := datasource.RawDB("", totalSql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + dataScopeSQL + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return result
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectAllocatedPage 根据条件分页查询分配用户角色列表
|
||||
func (r *SysUserImpl) SelectAllocatedPage(query map[string]any, dataScopeSQL string) map[string]any {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if v, ok := query["userName"]; ok && v != "" {
|
||||
conditions = append(conditions, "u.user_name like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["phonenumber"]; ok && v != "" {
|
||||
conditions = append(conditions, "u.phonenumber like concat(?, '%')")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["status"]; ok && v != "" {
|
||||
conditions = append(conditions, "u.status = ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
// 分配角色用户
|
||||
if allocated, ok := query["allocated"]; ok && allocated != "" {
|
||||
if roleId, ok := query["roleId"]; ok && roleId != "" {
|
||||
if parse.Boolean(allocated) {
|
||||
conditions = append(conditions, "r.role_id = ?")
|
||||
params = append(params, roleId)
|
||||
} else {
|
||||
conditions = append(conditions, `(r.role_id != ? or r.role_id IS NULL)
|
||||
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 = ?
|
||||
)`)
|
||||
params = append(params, roleId)
|
||||
params = append(params, roleId)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := " where u.del_flag = '0' and u.user_id != '1' "
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " and " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
result := map[string]any{
|
||||
"total": 0,
|
||||
"rows": []model.SysUser{},
|
||||
}
|
||||
|
||||
// 查询数量 长度为0直接返回
|
||||
totalSql := `select count(distinct u.user_id) as 'total' from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role ur on u.user_id = ur.user_id
|
||||
left join sys_role r on r.role_id = ur.role_id`
|
||||
totalRows, err := datasource.RawDB("", totalSql+whereSql+dataScopeSQL, params)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
return result
|
||||
}
|
||||
total := parse.Number(totalRows[0]["total"])
|
||||
if total == 0 {
|
||||
return result
|
||||
} else {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
pageSql := " limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := `select distinct
|
||||
u.user_id, u.dept_id, u.user_name, u.nick_name, u.email,
|
||||
u.phonenumber, u.status, u.create_time, d.dept_name
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role ur on u.user_id = ur.user_id
|
||||
left join sys_role r on r.role_id = ur.role_id`
|
||||
querySql = querySql + whereSql + dataScopeSQL + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
result["rows"] = r.convertResultRows(results)
|
||||
return result
|
||||
}
|
||||
|
||||
// SelectUserList 根据条件查询用户列表
|
||||
func (r *SysUserImpl) SelectUserList(sysUser model.SysUser, dataScopeSQL string) []model.SysUser {
|
||||
selectUserSql := `select
|
||||
u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id`
|
||||
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysUser.UserID != "" {
|
||||
conditions = append(conditions, "u.user_id = ?")
|
||||
params = append(params, sysUser.UserID)
|
||||
}
|
||||
if sysUser.UserName != "" {
|
||||
conditions = append(conditions, "u.user_name like concat(?, '%')")
|
||||
params = append(params, sysUser.UserName)
|
||||
}
|
||||
if sysUser.Status != "" {
|
||||
conditions = append(conditions, "u.status = ?")
|
||||
params = append(params, sysUser.Status)
|
||||
}
|
||||
if sysUser.PhoneNumber != "" {
|
||||
conditions = append(conditions, "u.phonenumber like concat(?, '%')")
|
||||
params = append(params, sysUser.PhoneNumber)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := " where u.del_flag = '0' "
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " and " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := selectUserSql + whereSql + dataScopeSQL
|
||||
rows, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysUser{}
|
||||
}
|
||||
return r.convertResultRows(rows)
|
||||
}
|
||||
|
||||
// SelectUserByIds 通过用户ID查询用户
|
||||
func (r *SysUserImpl) SelectUserByIds(userIds []string) []model.SysUser {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(userIds))
|
||||
querySql := r.selectSql + " where u.del_flag = '0' and u.user_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(userIds)
|
||||
results, err := datasource.RawDB("", querySql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return []model.SysUser{}
|
||||
}
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// SelectUserByUserName 通过用户登录账号查询用户
|
||||
func (r *SysUserImpl) SelectUserByUserName(userName string) model.SysUser {
|
||||
querySql := r.selectSql + " where u.del_flag = '0' and u.user_name = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{userName})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return model.SysUser{}
|
||||
}
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
if len(rows) > 0 {
|
||||
return rows[0]
|
||||
}
|
||||
return model.SysUser{}
|
||||
}
|
||||
|
||||
// InsertUser 新增用户信息
|
||||
func (r *SysUserImpl) InsertUser(sysUser model.SysUser) string {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysUser.UserID != "" {
|
||||
params["user_id"] = sysUser.UserID
|
||||
}
|
||||
if sysUser.DeptID != "" {
|
||||
params["dept_id"] = sysUser.DeptID
|
||||
}
|
||||
if sysUser.UserName != "" {
|
||||
params["user_name"] = sysUser.UserName
|
||||
}
|
||||
if sysUser.NickName != "" {
|
||||
params["nick_name"] = sysUser.NickName
|
||||
}
|
||||
if sysUser.UserType != "" {
|
||||
params["user_type"] = sysUser.UserType
|
||||
}
|
||||
if sysUser.Avatar != "" {
|
||||
params["avatar"] = sysUser.Avatar
|
||||
}
|
||||
if sysUser.Email != "" {
|
||||
params["email"] = sysUser.Email
|
||||
}
|
||||
if sysUser.PhoneNumber != "" {
|
||||
params["phonenumber"] = sysUser.PhoneNumber
|
||||
}
|
||||
if sysUser.Sex != "" {
|
||||
params["sex"] = sysUser.Sex
|
||||
}
|
||||
if sysUser.Password != "" {
|
||||
password := crypto.BcryptHash(sysUser.Password)
|
||||
params["password"] = password
|
||||
}
|
||||
if sysUser.Status != "" {
|
||||
params["status"] = sysUser.Status
|
||||
}
|
||||
if sysUser.Remark != "" {
|
||||
params["remark"] = sysUser.Remark
|
||||
}
|
||||
if sysUser.CreateBy != "" {
|
||||
params["create_by"] = sysUser.CreateBy
|
||||
params["create_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||
sql := "insert into sys_user (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||
|
||||
db := datasource.DefaultDB()
|
||||
// 开启事务
|
||||
tx := db.Begin()
|
||||
// 执行插入
|
||||
err := tx.Exec(sql, values...).Error
|
||||
if err != nil {
|
||||
logger.Errorf("insert row : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 获取生成的自增 ID
|
||||
var insertedID string
|
||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||
if err != nil {
|
||||
logger.Errorf("insert last id : %v", err.Error())
|
||||
tx.Rollback()
|
||||
return ""
|
||||
}
|
||||
// 提交事务
|
||||
tx.Commit()
|
||||
return insertedID
|
||||
}
|
||||
|
||||
// UpdateUser 修改用户信息
|
||||
func (r *SysUserImpl) UpdateUser(sysUser model.SysUser) int64 {
|
||||
// 参数拼接
|
||||
params := make(map[string]any)
|
||||
if sysUser.DeptID != "" {
|
||||
params["dept_id"] = sysUser.DeptID
|
||||
}
|
||||
if sysUser.UserName != "" {
|
||||
params["user_name"] = sysUser.UserName
|
||||
}
|
||||
if sysUser.NickName != "" {
|
||||
params["nick_name"] = sysUser.NickName
|
||||
}
|
||||
if sysUser.UserType != "" {
|
||||
params["user_type"] = sysUser.UserType
|
||||
}
|
||||
if sysUser.Avatar != "" {
|
||||
params["avatar"] = sysUser.Avatar
|
||||
}
|
||||
|
||||
params["email"] = sysUser.Email
|
||||
params["phonenumber"] = sysUser.PhoneNumber
|
||||
params["sex"] = sysUser.Sex
|
||||
if sysUser.Password != "" {
|
||||
password := crypto.BcryptHash(sysUser.Password)
|
||||
params["password"] = password
|
||||
}
|
||||
if sysUser.Status != "" {
|
||||
params["status"] = sysUser.Status
|
||||
}
|
||||
params["remark"] = sysUser.Remark
|
||||
if sysUser.UpdateBy != "" {
|
||||
params["update_by"] = sysUser.UpdateBy
|
||||
params["update_time"] = time.Now().UnixMilli()
|
||||
}
|
||||
if sysUser.LoginIP != "" {
|
||||
params["login_ip"] = sysUser.LoginIP
|
||||
}
|
||||
if sysUser.LoginDate > 0 {
|
||||
params["login_date"] = sysUser.LoginDate
|
||||
}
|
||||
|
||||
// 构建执行语句
|
||||
keys, values := repo.KeyValueByUpdate(params)
|
||||
sql := "update sys_user set " + strings.Join(keys, ",") + " where user_id = ?"
|
||||
|
||||
// 执行更新
|
||||
values = append(values, sysUser.UserID)
|
||||
rows, err := datasource.ExecDB("", sql, values)
|
||||
if err != nil {
|
||||
logger.Errorf("update row : %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
// DeleteUserByIds 批量删除用户信息
|
||||
func (r *SysUserImpl) DeleteUserByIds(userIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(userIds))
|
||||
username := "CASE WHEN user_name = '' THEN user_name WHEN LENGTH(user_name) >= 36 THEN CONCAT('del_', SUBSTRING(user_name, 5, 36)) ELSE CONCAT('del_', user_name) END"
|
||||
email := "CASE WHEN email = '' THEN email WHEN LENGTH(email) >= 64 THEN CONCAT('del_', SUBSTRING(email, 5, 64)) ELSE CONCAT('del_', email) END"
|
||||
phonenumber := "CASE WHEN phonenumber = '' THEN phonenumber WHEN LENGTH(phonenumber) >= 16 THEN CONCAT('del_', SUBSTRING(phonenumber, 5, 16)) ELSE CONCAT('del_', phonenumber) END"
|
||||
sql := fmt.Sprintf("update sys_user set del_flag = '1', user_name = %s, email = %s, phonenumber = %s where user_id in (%s)", username, email, phonenumber, placeholder)
|
||||
parameters := repo.ConvertIdsSlice(userIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("update err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// CheckUniqueUser 校验用户信息是否唯一
|
||||
func (r *SysUserImpl) CheckUniqueUser(sysUser model.SysUser) string {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if sysUser.UserName != "" {
|
||||
conditions = append(conditions, "user_name = ?")
|
||||
params = append(params, sysUser.UserName)
|
||||
}
|
||||
if sysUser.PhoneNumber != "" {
|
||||
conditions = append(conditions, "phonenumber = ?")
|
||||
params = append(params, sysUser.PhoneNumber)
|
||||
}
|
||||
if sysUser.Email != "" {
|
||||
conditions = append(conditions, "email = ?")
|
||||
params = append(params, sysUser.Email)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := "select user_id as 'str' from sys_user " + whereSql + " limit 1"
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -1,15 +1,57 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// ISysUserPost 用户与岗位关联表 数据层接口
|
||||
type ISysUserPost interface {
|
||||
// CountUserPostByPostId 通过岗位ID查询岗位使用数量
|
||||
CountUserPostByPostId(postId string) int64
|
||||
// NewSysUserPost 实例化数据层
|
||||
var NewSysUserPost = &SysUserPost{}
|
||||
|
||||
// BatchUserPost 批量新增用户岗位信息
|
||||
BatchUserPost(sysUserPosts []model.SysUserPost) int64
|
||||
// SysUserPost 用户与岗位关联表 数据层处理
|
||||
type SysUserPost struct{}
|
||||
|
||||
// DeleteUserPost 批量删除用户和岗位关联
|
||||
DeleteUserPost(userIds []string) int64
|
||||
// ExistUserByPostId 存在用户使用数量
|
||||
func (r SysUserPost) ExistUserByPostId(postId int64) int64 {
|
||||
if postId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysUserPost{})
|
||||
tx = tx.Where("post_id = ?", postId)
|
||||
// 查询数据
|
||||
var count int64 = 0
|
||||
if err := tx.Count(&count).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return count
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// DeleteByUserIds 批量删除关联By用户
|
||||
func (r SysUserPost) DeleteByUserIds(userIds []int64) int64 {
|
||||
if len(userIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Where("user_id in ?", userIds)
|
||||
// 执行删除
|
||||
if err := tx.Delete(&model.SysUserPost{}).Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// BatchInsert 批量新增信息
|
||||
func (r SysUserPost) BatchInsert(sysUserPosts []model.SysUserPost) int64 {
|
||||
if len(sysUserPosts) <= 0 {
|
||||
return 0
|
||||
}
|
||||
// 执行批量删除
|
||||
tx := db.DB("").CreateInBatches(sysUserPosts, 500)
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("delete batch err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysUserPostImpl 结构体
|
||||
var NewSysUserPostImpl = &SysUserPostImpl{}
|
||||
|
||||
// SysUserPostImpl 用户与岗位关联表 数据层处理
|
||||
type SysUserPostImpl struct{}
|
||||
|
||||
// CountUserPostByPostId 通过岗位ID查询岗位使用数量
|
||||
func (r *SysUserPostImpl) CountUserPostByPostId(postId string) int64 {
|
||||
querySql := "select count(1) as total from sys_user_role where role_id = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{postId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["total"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// DeleteUserPost 批量删除用户和岗位关联
|
||||
func (r *SysUserPostImpl) DeleteUserPost(userIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(userIds))
|
||||
sql := "delete from sys_user_post where user_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(userIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// BatchUserPost 批量新增用户岗位信息
|
||||
func (r *SysUserPostImpl) BatchUserPost(sysUserPosts []model.SysUserPost) int64 {
|
||||
keyValues := make([]string, 0)
|
||||
for _, item := range sysUserPosts {
|
||||
keyValues = append(keyValues, fmt.Sprintf("(%s,%s)", item.UserID, item.PostID))
|
||||
}
|
||||
sql := "insert into sys_user_post(user_id, post_id) values " + strings.Join(keyValues, ",")
|
||||
results, err := datasource.ExecDB("", sql, nil)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
@@ -1,18 +1,71 @@
|
||||
package repository
|
||||
|
||||
import "be.ems/src/modules/system/model"
|
||||
import (
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// ISysUserRole 用户与角色关联表 数据层接口
|
||||
type ISysUserRole interface {
|
||||
// CountUserRoleByRoleId 通过角色ID查询角色使用数量
|
||||
CountUserRoleByRoleId(roleId string) int64
|
||||
// NewSysUserRole 实例化数据层
|
||||
var NewSysUserRole = &SysUserRole{}
|
||||
|
||||
// BatchUserRole 批量新增用户角色信息
|
||||
BatchUserRole(sysUserRoles []model.SysUserRole) int64
|
||||
// SysUserRole 用户与角色关联表 数据层处理
|
||||
type SysUserRole struct{}
|
||||
|
||||
// DeleteUserRole 批量删除用户和角色关联
|
||||
DeleteUserRole(userIds []string) int64
|
||||
|
||||
// DeleteUserRoleByRoleId 批量取消授权用户角色
|
||||
DeleteUserRoleByRoleId(roleId string, userIds []string) int64
|
||||
// ExistUserByRoleId 存在用户使用数量
|
||||
func (r SysUserRole) ExistUserByRoleId(roleId int64) int64 {
|
||||
if roleId <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Model(&model.SysUserRole{})
|
||||
tx = tx.Where("role_id = ?", roleId)
|
||||
// 查询数据
|
||||
var count int64 = 0
|
||||
if err := tx.Count(&count).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return count
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// DeleteByUserIds 批量删除关联By用户
|
||||
func (r SysUserRole) DeleteByUserIds(userIds []int64) int64 {
|
||||
if len(userIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Where("user_id in ?", userIds)
|
||||
// 执行删除
|
||||
if err := tx.Delete(&model.SysUserRole{}).Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// DeleteByRoleId 批量删除关联By角色
|
||||
func (r SysUserRole) DeleteByRoleId(roleId int64, userIds []int64) int64 {
|
||||
if roleId <= 0 || len(userIds) <= 0 {
|
||||
return 0
|
||||
}
|
||||
tx := db.DB("").Where("role_id = ?", roleId).Where("user_id in ?", userIds)
|
||||
// 执行删除
|
||||
if err := tx.Delete(&model.SysUserRole{}).Error; err != nil {
|
||||
logger.Errorf("delete err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// BatchInsert 批量新增信息
|
||||
func (r SysUserRole) BatchInsert(sysUserRoles []model.SysUserRole) int64 {
|
||||
if len(sysUserRoles) <= 0 {
|
||||
return 0
|
||||
}
|
||||
// 执行批量删除
|
||||
tx := db.DB("").CreateInBatches(sysUserRoles, 500)
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("delete batch err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/utils/repo"
|
||||
"be.ems/src/modules/system/model"
|
||||
)
|
||||
|
||||
// 实例化数据层 SysUserRoleImpl 结构体
|
||||
var NewSysUserRoleImpl = &SysUserRoleImpl{}
|
||||
|
||||
// SysUserRoleImpl 用户与角色关联表 数据层处理
|
||||
type SysUserRoleImpl struct{}
|
||||
|
||||
// CountUserRoleByRoleId 通过角色ID查询角色使用数量
|
||||
func (r *SysUserRoleImpl) CountUserRoleByRoleId(roleId string) int64 {
|
||||
querySql := "select count(1) as total from sys_user_role where role_id = ?"
|
||||
results, err := datasource.RawDB("", querySql, []any{roleId})
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["total"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// BatchUserRole 批量新增用户角色信息
|
||||
func (r *SysUserRoleImpl) BatchUserRole(sysUserRoles []model.SysUserRole) int64 {
|
||||
keyValues := make([]string, 0)
|
||||
for _, item := range sysUserRoles {
|
||||
keyValues = append(keyValues, fmt.Sprintf("(%s,%s)", item.UserID, item.RoleID))
|
||||
}
|
||||
sql := "insert into sys_user_role(user_id, role_id) values " + strings.Join(keyValues, ",")
|
||||
results, err := datasource.ExecDB("", sql, nil)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// DeleteUserRole 批量删除用户和角色关联
|
||||
func (r *SysUserRoleImpl) DeleteUserRole(userIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(userIds))
|
||||
sql := "delete from sys_user_role where user_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(userIds)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// DeleteUserRoleByRoleId 批量取消授权用户角色
|
||||
func (r *SysUserRoleImpl) DeleteUserRoleByRoleId(roleId string, userIds []string) int64 {
|
||||
placeholder := repo.KeyPlaceholderByQuery(len(userIds))
|
||||
sql := "delete from sys_user_role where role_id= ? and user_id in (" + placeholder + ")"
|
||||
parameters := repo.ConvertIdsSlice(userIds)
|
||||
parameters = append([]any{roleId}, parameters...)
|
||||
results, err := datasource.ExecDB("", sql, parameters)
|
||||
if err != nil {
|
||||
logger.Errorf("delete err => %v", err)
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
Reference in New Issue
Block a user