提交 9f521600 authored 作者: hzh's avatar hzh

项目以及项目用户增删改查功能实现

上级 d41fb221
......@@ -48,5 +48,10 @@ public class RemoteUser implements Serializable {
*/
private String phoneNumber;
/**
* 用户类型
*/
private String userType;
}
package org.dromara.common.core.enums;
import org.dromara.common.core.utils.StringUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.common.core.utils.StringUtils;
/**
* 设备类型
......@@ -22,7 +22,12 @@ public enum UserType {
/**
* app端
*/
APP_USER("app_user");
APP_USER("app_user"),
/**
* 项目人员
*/
PROJECT_USER("project_user");
private final String userType;
......
......@@ -103,7 +103,6 @@ public abstract class AbstractBaseService<V, B, T> implements IBaseService<V, B,
}
} catch (NoSuchFieldException | IllegalAccessException e) {
// 处理异常,可以打印日志或者抛出异常
e.printStackTrace();
}
}
......
......@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.ys.config.Config;
import org.dromara.common.ys.constant.Status;
......@@ -41,6 +42,9 @@ public class RemoteServerServiceImpl implements RemoteServerService {
@Override
public boolean saveOrUpdateUser(RemoteUser user) {
String userNo = user.getTenantId() + "-" + user.getPhoneNumber();
if (!StringUtils.equals(user.getUserType(), UserType.SYS_USER.getUserType())) {
userNo = user.getTenantId() + "-" + user.getUserType() + "-" + user.getPhoneNumber();
}
BizUser bz = userMapper.selectOne(new LambdaQueryWrapper<>(BizUser.class).eq(BizUser::getUserNo, userNo));
if (Objects.isNull(bz)) {
//新增
......
package org.dromara.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysProjectBo;
import org.dromara.system.domain.vo.SysProjectVo;
import org.dromara.system.service.ISysProjectService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 系统项目
* 前端访问路由地址为:/system/project
*
* @author hzh
* @date 2025-06-11
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/project")
public class SysProjectController extends BaseController {
private final ISysProjectService sysProjectService;
/**
* 查询系统项目列表
*/
@SaCheckPermission("system:project:list")
@GetMapping("/list")
public TableDataInfo<SysProjectVo> list(SysProjectBo bo, PageQuery pageQuery) {
return sysProjectService.queryPageList(bo, pageQuery);
}
/**
* 导出系统项目列表
*/
@SaCheckPermission("system:project:export")
@Log(title = "系统项目", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysProjectBo bo, HttpServletResponse response) {
List<SysProjectVo> list = sysProjectService.queryList(bo);
ExcelUtil.exportExcel(list, "系统项目", SysProjectVo.class, response);
}
/**
* 获取系统项目详细信息
*
* @param projectId 主键
*/
@SaCheckPermission("system:project:query")
@GetMapping("/{projectId}")
public R<SysProjectVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long projectId) {
return R.ok(sysProjectService.queryById(projectId));
}
/**
* 新增系统项目
*/
@SaCheckPermission("system:project:add")
@Log(title = "系统项目", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysProjectBo bo) {
return toAjax(sysProjectService.insertByBo(bo));
}
/**
* 修改系统项目
*/
@SaCheckPermission("system:project:edit")
@Log(title = "系统项目", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysProjectBo bo) {
return toAjax(sysProjectService.updateByBo(bo));
}
/**
* 删除系统项目
*
* @param projectIds 主键串
*/
@SaCheckPermission("system:project:remove")
@Log(title = "系统项目", businessType = BusinessType.DELETE)
@DeleteMapping("/{projectIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] projectIds) {
return toAjax(sysProjectService.deleteWithValidByIds(List.of(projectIds), true));
}
}
......@@ -69,6 +69,16 @@ public class SysUserController extends BaseController {
return userService.selectPageUserList(user, pageQuery);
}
/**
* 获取项目用户列表
*/
@SaCheckPermission("system:project:user:list")
@GetMapping("/project/list")
public TableDataInfo<SysUserVo> projectUserList(SysUserBo user, PageQuery pageQuery) {
user.setUserType(StringUtils.isEmpty(user.getUserType()) ? UserType.PROJECT_USER.getUserType() : user.getUserType());
return userService.selectPageUserList(user, pageQuery);
}
/**
* 导出用户列表
*/
......
package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 系统项目对象 sys_project
*
* @author hzh
* @date 2025-06-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_project")
public class SysProject extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "project_id", type = IdType.AUTO)
private Long projectId;
/**
* 项目名称
*/
private String projectName;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.system.domain.bo;
import org.dromara.system.domain.SysProject;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 系统项目业务对象 sys_project
*
* @author hzh
* @date 2025-06-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysProject.class, reverseConvertGenerate = false)
public class SysProjectBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long projectId;
/**
* 项目名称
*/
@NotBlank(message = "项目名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String projectName;
}
package org.dromara.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.system.domain.SysProject;
import java.io.Serial;
import java.io.Serializable;
/**
* 系统项目视图对象 sys_project
*
* @author hzh
* @date 2025-06-11
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysProject.class)
public class SysProjectVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "id")
private Long projectId;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 创建者
*/
@ExcelProperty(value = "创建者")
@Translation(type = TransConstant.USER_ID_TO_NAME)
private Long createBy;
}
package org.dromara.system.mapper;
import org.dromara.system.domain.SysProject;
import org.dromara.system.domain.vo.SysProjectVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 系统项目Mapper接口
*
* @author hzh
* @date 2025-06-11
*/
public interface SysProjectMapper extends BaseMapperPlus<SysProject, SysProjectVo> {
}
package org.dromara.system.service;
import org.dromara.common.mybatis.service.IBaseService;
import org.dromara.system.domain.SysProject;
import org.dromara.system.domain.bo.SysProjectBo;
import org.dromara.system.domain.vo.SysProjectVo;
/**
* 系统项目Service接口
*
* @author hzh
* @date 2025-06-11
*/
public interface ISysProjectService extends IBaseService<SysProjectVo, SysProjectBo, SysProject>{
}
package org.dromara.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.base.Objects;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.service.AbstractBaseService;
import org.dromara.system.domain.SysProject;
import org.dromara.system.domain.bo.SysProjectBo;
import org.dromara.system.domain.vo.SysProjectVo;
import org.dromara.system.mapper.SysProjectMapper;
import org.dromara.system.service.ISysProjectService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* 系统项目Service业务层处理
*
* @author hzh
* @date 2025-06-11
*/
@RequiredArgsConstructor
@Service
public class SysProjectServiceImpl extends AbstractBaseService<SysProjectVo, SysProjectBo, SysProject> implements ISysProjectService {
private final SysProjectMapper baseMapper;
@Override
public BaseMapperPlus<SysProject, SysProjectVo> mapper() {
return baseMapper;
}
@Override
public LambdaQueryWrapper<SysProject> buildQueryWrapper(SysProjectBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysProject> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), SysProject::getProjectName, bo.getProjectName());
return lqw;
}
@Override
public void validEntityBeforeSave(SysProject entity) {
super.validEntityBeforeSave(entity);
List<SysProject> list = baseMapper.selectList(SysProject::getProjectName, entity.getProjectName());
SysProject sp = StreamUtils.findFirst(list, p -> !Objects.equal(entity.getProjectId(), p.getProjectId()));
if (sp != null) {
throw new ServiceException("项目:" + entity.getProjectName() + "已存在,不能重复添加");
}
}
}
......@@ -159,7 +159,6 @@ public class SysUserServiceImpl implements ISysUserService {
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.eq(StringUtils.isNotBlank(user.getUserType()), "u.user_type", user.getUserType())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
......@@ -177,6 +176,14 @@ public class SysUserServiceImpl implements ISysUserService {
if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds()));
}
if (StringUtils.isNotBlank(user.getUserType())) {
boolean contains = user.getUserType().contains(":");
if (contains) {
wrapper.eq("u.user_type", user.getUserType());
} else {
wrapper.likeRight("u.user_type", user.getUserType());
}
}
return wrapper;
}
......@@ -318,7 +325,7 @@ public class SysUserServiceImpl implements ISysUserService {
public boolean checkUserNameUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUserName, user.getUserName())
.eq(SysUser::getUserType, UserType.SYS_USER.getUserType())
.eq(SysUser::getUserType, StringUtils.isEmpty(user.getUserType()) ? UserType.SYS_USER.getUserType() : user.getUserType())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
......@@ -332,7 +339,7 @@ public class SysUserServiceImpl implements ISysUserService {
public boolean checkPhoneUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getPhonenumber, user.getPhonenumber())
.eq(SysUser::getUserType, UserType.SYS_USER.getUserType())
.eq(SysUser::getUserType, StringUtils.isEmpty(user.getUserType()) ? UserType.SYS_USER.getUserType() : user.getUserType())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
......@@ -346,7 +353,7 @@ public class SysUserServiceImpl implements ISysUserService {
public boolean checkEmailUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getEmail, user.getEmail())
.eq(SysUser::getUserType, UserType.SYS_USER.getUserType())
.eq(SysUser::getUserType, StringUtils.isEmpty(user.getUserType()) ? UserType.SYS_USER.getUserType() : user.getUserType())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
......@@ -390,6 +397,7 @@ public class SysUserServiceImpl implements ISysUserService {
@Override
@Transactional(rollbackFor = Exception.class)
public int insertUser(SysUserBo user) {
user.setUserType(StringUtils.isEmpty(user.getUserType()) ? UserType.SYS_USER.getUserType() : user.getUserType());
SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
sysUser.setTenantId(LoginHelper.getTenantId());
// 新增用户信息
......@@ -437,6 +445,7 @@ public class SysUserServiceImpl implements ISysUserService {
.setUserName(sysUser.getUserName())
.setPhoneNumber(sysUser.getPhonenumber())
.setIdCard(sysUser.getIdCard())
.setUserType(sysUser.getUserType())
.setTenantId(sysUser.getTenantId())
);
}
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.mapper.SysProjectMapper">
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论