feat: 更新多个模块以支持新的数据结构和日志格式

This commit is contained in:
TsMask
2025-02-20 10:08:27 +08:00
parent 045a2b6b01
commit f3c33b31ac
272 changed files with 13246 additions and 15885 deletions

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View 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(&param).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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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 ""
}

View File

@@ -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
}

View File

@@ -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 ""
}

View File

@@ -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
}

View File

@@ -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 ""
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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 ""
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}