提交 3c024340 authored 作者: hzh's avatar hzh

代码优化

上级 06f1feda
...@@ -9,7 +9,6 @@ import java.io.Serializable; ...@@ -9,7 +9,6 @@ import java.io.Serializable;
/** /**
* @author hzh * @author hzh
* @date 2025-06-13 * @date 2025-06-13
* @desc TODO
**/ **/
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
......
...@@ -12,6 +12,7 @@ import org.apache.dubbo.config.annotation.DubboReference; ...@@ -12,6 +12,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.enums.UserType; import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.encrypt.annotation.ApiEncrypt;
...@@ -27,10 +28,7 @@ import org.dromara.common.web.core.BaseController; ...@@ -27,10 +28,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.server.api.RemoteDeptOrderApproveService; import org.dromara.server.api.RemoteDeptOrderApproveService;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.bo.*;
import org.dromara.system.domain.bo.SysPostBo;
import org.dromara.system.domain.bo.SysRoleBo;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.*; import org.dromara.system.domain.vo.*;
import org.dromara.system.listener.SysProjectUserImportListener; import org.dromara.system.listener.SysProjectUserImportListener;
import org.dromara.system.listener.SysUserImportListener; import org.dromara.system.listener.SysUserImportListener;
...@@ -60,6 +58,7 @@ public class SysUserController extends BaseController { ...@@ -60,6 +58,7 @@ public class SysUserController extends BaseController {
private final ISysPostService postService; private final ISysPostService postService;
private final ISysDeptService deptService; private final ISysDeptService deptService;
private final ISysTenantService tenantService; private final ISysTenantService tenantService;
private final ISysUserProjectService userProjectService;
@DubboReference @DubboReference
private RemoteDeptOrderApproveService remoteDeptOrderApproveService; private RemoteDeptOrderApproveService remoteDeptOrderApproveService;
...@@ -165,19 +164,31 @@ public class SysUserController extends BaseController { ...@@ -165,19 +164,31 @@ public class SysUserController extends BaseController {
/** /**
* 获取用户信息 * 获取用户信息
* *
* @param projectId 项目id
* @return 用户信息 * @return 用户信息
*/ */
@GetMapping("/getInfoOrderApprove") @GetMapping("/getInfoOrderApprove")
public R<UserOrderApproveVo> getInfoOrderApprove() { public R<UserOrderApproveVo> getInfoOrderApprove(@RequestParam Long projectId) {
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
UserOrderApproveVo uoa = new UserOrderApproveVo(); UserOrderApproveVo uoa = new UserOrderApproveVo();
uoa.setUserId(loginUser.getUserId()); uoa.setUserId(loginUser.getUserId());
uoa.setUserType(loginUser.getUserType()); uoa.setUserType(loginUser.getUserType());
uoa.setStaffId(loginUser.getUserId()); uoa.setStaffId(loginUser.getUserId());
uoa.setProjectId(projectId);
SysUserVo su = userService.selectUserById(uoa.getUserId()); SysUserVo su = userService.selectUserById(uoa.getUserId());
if (su.getUserType().contains(SysUser.PROJECT_USER_TYPE)) { if (su.getUserType().contains(SysUser.PROJECT_USER_TYPE)) {
uoa.setStaffId(su.getCreateBy()); uoa.setStaffId(su.getCreateBy());
su = userService.selectUserById(uoa.getStaffId()); su = userService.selectUserById(uoa.getStaffId());
} else if (StringUtils.equals(su.getUserType(), UserType.SYS_USER.getUserType()) && projectId != null) {
SysUserProjectBo sup = new SysUserProjectBo();
sup.setUserId(LoginHelper.getUserId());
sup.setProjectId(projectId);
SysUserProjectVo supVo = userProjectService.getOne(sup);
if (supVo == null) {
throw new ServiceException("项目人员不存在!");
}
uoa.setStaffId(supVo.getCreateBy());
su = userService.selectUserById(uoa.getStaffId());
} }
//获取部门负责人id //获取部门负责人id
if (su.getDeptId() != null) { if (su.getDeptId() != null) {
......
package org.dromara.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.validation.constraints.NotEmpty;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
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.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysUserProjectBo;
import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.system.domain.vo.UserProjectVo;
import org.dromara.system.service.ISysUserProjectService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 用户项目
* 前端访问路由地址为:/system/userProject
*
* @author hzh
* @date 2025-06-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/userProject")
public class SysUserProjectController extends BaseController {
private final ISysUserProjectService sysUserProjectService;
/**
* 查询用户项目列表
*/
@SaCheckPermission("system:userProject:list")
@GetMapping("/list")
public TableDataInfo<SysUserProjectVo> list(SysUserProjectBo bo, PageQuery pageQuery) {
bo.setProcessData(true);
return sysUserProjectService.queryPageList(bo, pageQuery);
}
/**
* 获取用户的项目列表
*
* @return 项目列表
*/
@GetMapping("/projectList")
public R<List<UserProjectVo>> projectList() {
return R.ok(sysUserProjectService.selectListByUserId(LoginHelper.getUserId()));
}
/**
* 新增用户项目
*/
@SaCheckPermission("system:userProject:add")
@Log(title = "用户项目", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysUserProjectBo bo) {
return toAjax(sysUserProjectService.insertByBo(bo));
}
/**
* 删除用户项目
*
* @param ids 主键串
*/
@SaCheckPermission("system:userProject:remove")
@Log(title = "用户项目", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysUserProjectService.deleteWithValidByIds(List.of(ids), true));
}
}
package org.dromara.system.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 用户项目对象 sys_user_project
*
* @author hzh
* @date 2025-06-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_user_project")
public class SysUserProject extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 项目id
*/
private Long projectId;
/**
* 角色id
*/
private Long roleId;
/**
* 删除标志(0代表存在 2代表删除)
*/
@TableLogic
private String delFlag;
}
package org.dromara.system.domain.bo;
import org.dromara.system.domain.SysUserProject;
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_user_project
*
* @author hzh
* @date 2025-06-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysUserProject.class, reverseConvertGenerate = false)
public class SysUserProjectBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 用户id
*/
@NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 角色id
*/
@NotNull(message = "角色id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long roleId;
}
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.SysUserProject;
import java.io.Serial;
import java.io.Serializable;
/**
* 用户项目视图对象 sys_user_project
*
* @author hzh
* @date 2025-06-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SysUserProject.class)
public class SysUserProjectVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "id")
private Long id;
/**
* 用户id
*/
@ExcelProperty(value = "用户id")
private Long userId;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/**
* 角色id
*/
@ExcelProperty(value = "角色id")
private Long roleId;
/**
* 创建人
*/
@Translation(type = TransConstant.USER_ID_TO_NAME)
private Long createBy;
/**
* 账号名称
*/
private String userName;
/**
* 昵称
*/
private String nickName;
/**
* 手机号
*/
private String phonenumber;
/**
* 邮箱
*/
private String email;
}
...@@ -27,6 +27,11 @@ public class UserOrderApproveVo implements Serializable { ...@@ -27,6 +27,11 @@ public class UserOrderApproveVo implements Serializable {
*/ */
private String userType; private String userType;
/**
* 项目id
*/
private Long projectId;
/** /**
* 员工id * 员工id
*/ */
......
package org.dromara.system.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 系统项目视图对象 sys_project
*
* @author hzh
* @date 2025-06-11
*/
@Data
public class UserProjectVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long projectId;
/**
* 项目名称
*/
private String projectName;
}
package org.dromara.system.mapper;
import org.dromara.system.domain.SysUserProject;
import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 用户项目Mapper接口
*
* @author hzh
* @date 2025-06-19
*/
public interface SysUserProjectMapper extends BaseMapperPlus<SysUserProject, SysUserProjectVo> {
}
package org.dromara.system.service;
import org.dromara.common.mybatis.service.IBaseService;
import org.dromara.system.domain.SysUserProject;
import org.dromara.system.domain.bo.SysUserProjectBo;
import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.system.domain.vo.UserProjectVo;
import java.util.List;
/**
* 用户项目Service接口
*
* @author hzh
* @date 2025-06-19
*/
public interface ISysUserProjectService extends IBaseService<SysUserProjectVo, SysUserProjectBo, SysUserProject> {
/**
* 根据用户id获取项目列表
*
* @param userId 用户列表
* @return 项目列表
*/
List<UserProjectVo> selectListByUserId(Long userId);
}
package org.dromara.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
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.utils.StreamUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.service.AbstractBaseService;
import org.dromara.system.constant.Constant;
import org.dromara.system.domain.SysProject;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUserProject;
import org.dromara.system.domain.SysUserRole;
import org.dromara.system.domain.bo.SysUserProjectBo;
import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.system.domain.vo.UserProjectVo;
import org.dromara.system.mapper.SysProjectMapper;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.mapper.SysUserProjectMapper;
import org.dromara.system.mapper.SysUserRoleMapper;
import org.dromara.system.service.ISysUserProjectService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* 用户项目Service业务层处理
*
* @author hzh
* @date 2025-06-19
*/
@RequiredArgsConstructor
@Service
public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjectVo, SysUserProjectBo, SysUserProject> implements ISysUserProjectService {
private final SysUserProjectMapper baseMapper;
private final SysUserRoleMapper userRoleMapper;
private final SysUserMapper sysUserMapper;
private final SysProjectMapper sysProjectMapper;
@Override
public BaseMapperPlus<SysUserProject, SysUserProjectVo> mapper() {
return baseMapper;
}
@Override
public LambdaQueryWrapper<SysUserProject> buildQueryWrapper(SysUserProjectBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysUserProject> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getUserId() != null, SysUserProject::getUserId, bo.getUserId());
lqw.eq(bo.getProjectId() != null, SysUserProject::getProjectId, bo.getProjectId());
lqw.eq(bo.getRoleId() != null, SysUserProject::getRoleId, bo.getRoleId());
return lqw;
}
@Override
public void processData(List<SysUserProjectVo> list) {
super.processData(list);
List<Long> userIds = StreamUtils.toList(list, sup -> sup.getUserId());
List<SysUser> userList = sysUserMapper.selectByIds(userIds);
for (SysUserProjectVo sup : list) {
SysUser user = StreamUtils.findFirst(userList, u -> Objects.equal(u.getUserId(), sup.getUserId()));
Optional.ofNullable(user).ifPresent(u -> {
sup.setUserName(u.getUserName());
sup.setNickName(u.getNickName());
sup.setPhonenumber(u.getNickName());
sup.setEmail(u.getEmail());
});
}
}
@Override
public Boolean insertByBo(SysUserProjectBo bo) {
Boolean result = super.insertByBo(bo);
if (result) {
SysUserRole sur = userRoleMapper.selectOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, bo.getUserId()).eq(SysUserRole::getRoleId, bo.getRoleId()));
if (sur == null) {
SysUserRole entity = new SysUserRole();
entity.setUserId(bo.getUserId());
entity.setRoleId(bo.getRoleId());
userRoleMapper.insert(entity);
}
}
return result;
}
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
ids.forEach(id -> {
SysUserProject sup = baseMapper.selectById(id);
if (sup == null) {
throw new SecurityException("项目人员不存在");
}
baseMapper.deleteById(sup.getId());
//查询是否有其他项目
List<SysUserProject> supList = baseMapper.selectList(SysUserProject::getUserId, sup.getUserId());
if (!existProjectUser(supList)) {
userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, sup.getUserId()).eq(SysUserRole::getRoleId, sup.getRoleId()));
}
});
return true;
}
private boolean existProjectUser(List<SysUserProject> supList) {
return supList.size() > 0 ||
sysProjectMapper.selectList(new LambdaQueryWrapper<SysProject>()
.in(SysProject::getProjectId, StreamUtils.toList(supList, SysUserProject::getProjectId))
.eq(SysProject::getStatus, Constant.PROJECT_NORMAL)).size() > 0;
}
@Override
public List<UserProjectVo> selectListByUserId(Long userId) {
List<SysUserProject> supList = baseMapper.selectList(SysUserProject::getUserId, userId);
List<Long> projectIds = StreamUtils.toList(supList, SysUserProject::getProjectId);
if (CollectionUtil.isEmpty(projectIds)) {
return List.of();
}
List<SysProject> projectList = sysProjectMapper.selectList(new LambdaQueryWrapper<SysProject>()
.in(SysProject::getProjectId, projectIds)
.eq(SysProject::getStatus, Constant.PROJECT_NORMAL));
return BeanUtil.copyToList(projectList, UserProjectVo.class);
}
}
<?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.SysUserProjectMapper">
</mapper>
...@@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission; ...@@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
...@@ -60,6 +62,9 @@ public class OrderApproveController extends BaseController { ...@@ -60,6 +62,9 @@ public class OrderApproveController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping()
public R<OrderApproveVo> add(@Validated(AddGroup.class) @RequestBody OrderApproveBo bo) { public R<OrderApproveVo> add(@Validated(AddGroup.class) @RequestBody OrderApproveBo bo) {
if (StringUtils.contains(bo.getApplyType(), UserType.PROJECT_USER.getUserType()) && bo.getProjectId() == null) {
bo.setProjectId(Long.parseLong(bo.getApplyType().split(":")[1]));
}
return R.ok(orderApproveService.insert(bo)); return R.ok(orderApproveService.insert(bo));
} }
......
...@@ -34,6 +34,11 @@ public class OrderApprove extends TenantEntity { ...@@ -34,6 +34,11 @@ public class OrderApprove extends TenantEntity {
*/ */
private Long staffId; private Long staffId;
/**
* 项目id
*/
private Long projectId;
/** /**
* 申请人类型 * 申请人类型
*/ */
......
...@@ -38,15 +38,20 @@ public class OrderApproveBo extends BaseEntity { ...@@ -38,15 +38,20 @@ public class OrderApproveBo extends BaseEntity {
/** /**
* 申请人类型 * 申请人类型
*/ */
@NotBlank(message = "申请人类型不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "申请人类型不能为空", groups = {AddGroup.class, EditGroup.class})
private String applyType; private String applyType;
/** /**
* 是否需要审批 * 是否需要审批
*/ */
@NotNull(message = "是否需要审批不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "是否需要审批不能为空", groups = {AddGroup.class, EditGroup.class})
private Boolean deptApprove; private Boolean deptApprove;
/**
* 项目id
*/
private Long projectId;
/** /**
* 授权人用户id * 授权人用户id
*/ */
...@@ -55,7 +60,7 @@ public class OrderApproveBo extends BaseEntity { ...@@ -55,7 +60,7 @@ public class OrderApproveBo extends BaseEntity {
/** /**
* 订单编码 * 订单编码
*/ */
@NotBlank(message = "订单编码不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "订单编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String orderNo; private String orderNo;
/** /**
......
...@@ -38,6 +38,12 @@ public class OrderApproveVo implements Serializable { ...@@ -38,6 +38,12 @@ public class OrderApproveVo implements Serializable {
@ExcelProperty(value = "职工id") @ExcelProperty(value = "职工id")
private Long staffId; private Long staffId;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/** /**
* 申请人类型 * 申请人类型
*/ */
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论