ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java
@@ -1,8 +1,28 @@ package com.ruoyi.web.controller.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.dto.AddDeptDTO; import com.ruoyi.system.dto.SetDeptDTO; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.OaApprovalService; import com.ruoyi.system.service.TDeptService; import com.ruoyi.system.vo.system.ApprovalVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /** * <p> @@ -14,7 +34,61 @@ */ @RestController @RequestMapping("/oa-approval") @Api("审批流程设计") public class OaApprovalController { @Resource private OaApprovalService oaApprovalService; /** * 获取部门树列表 */ @ApiOperation("流程设计分页列表") @PostMapping("/pageList") public R<PageInfo<ApprovalVO>> pageList(@RequestBody ApprovalListQuery query) { return R.ok( oaApprovalService.pageList(query)); } @ApiOperation(value = "启用禁用") @GetMapping(value = "/updateStatus") public R updateStatus(Integer id ) { OaApproval approval = oaApprovalService.getById(id); approval.setStatus(!approval.getStatus()); oaApprovalService.updateById(approval); return R.ok(); } @ApiOperation(value = "设置使用部门") @PostMapping(value = "/setDept") public R setDept(@RequestBody SetDeptDTO dto) { OaApproval approval = oaApprovalService.getById(dto.getId()); approval.setDeptIds(dto.getDeptIds()); oaApprovalService.updateById(approval); return R.ok(); } // @Log(title = "编辑部门", businessType = BusinessType.UPDATE) // @ApiOperation(value = "编辑部门") // @PostMapping(value = "/edit") // public R edit(@RequestBody AddDeptDTO dto) { // deptService.updateById(dto); // return R.ok(); // } // @ApiOperation(value = "部门详情") // @GetMapping(value = "/detail") // public R<TDept> edit(@RequestParam String id) { // return R.ok(deptService.getById(id)); // } // @ApiOperation(value = "部门删除") // @DeleteMapping(value = "/delete") // @Log(title = "删除部门", businessType = BusinessType.DELETE) // public R<Boolean> delete(@RequestParam String id) { // Long count = deptService.lambdaQuery().eq(TDept::getParentId, id).count(); // if (count>0){ // return R.fail("当前部门存在下级部门,不可删除!"); // } // List<SysUser> users = sysUserMapper.selectAllList().stream().filter(e -> e.getDelFlag().equals("0") && e.getDeptId().equals(id)).collect(Collectors.toList()); // if (!users.isEmpty()){ // return R.fail("当前部门存在用户,不可删除!"); // } // deptService.removeById(Integer.valueOf(id)); // return R.ok(); // } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java
@@ -1,8 +1,23 @@ package com.ruoyi.web.controller.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.dto.SetApprovalDTO; import com.ruoyi.system.dto.SetDeptDTO; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.service.OaApprovalFlowNodeService; import com.ruoyi.system.service.OaApprovalService; import com.ruoyi.system.vo.system.ApprovalFlowNodeVO; import com.ruoyi.system.vo.system.ApprovalVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> @@ -13,8 +28,43 @@ * @since 2025-09-15 */ @RestController @Api("审批流程") @RequestMapping("/oa-approval-flow-node") public class OaApprovalFlowNodeController { @Resource private OaApprovalFlowNodeService oaApprovalFlowNodeService; /** * 获取部门树列表 */ @ApiOperation("审批流程设计列表") @PostMapping("/pageList") public R<List<OaApprovalFlowNode>> pageList(@RequestBody ApprovalListQuery query) { return R.ok( oaApprovalFlowNodeService.pageList(query)); } @ApiOperation(value = "启用禁用") @GetMapping(value = "/updateStatus") public R updateStatus(Integer id ) { OaApprovalFlowNode approval = oaApprovalFlowNodeService.getById(id); approval.setStatus(!approval.getStatus()); oaApprovalFlowNodeService.updateById(approval); return R.ok(); } @ApiOperation(value = "是否需要签名") @GetMapping(value = "/updateSign") public R updateSign(Integer id ) { OaApprovalFlowNode approval = oaApprovalFlowNodeService.getById(id); approval.setSignFlag(!approval.getSignFlag()); oaApprovalFlowNodeService.updateById(approval); return R.ok(); } @ApiOperation(value = "设置审批人") @PostMapping(value = "/setApproval") public R setDept(@RequestBody SetApprovalDTO dto) { OaApprovalFlowNode approval = oaApprovalFlowNodeService.getById(dto.getId()); approval.setApprovalIds(dto.getApprovalIds()); oaApprovalFlowNodeService.updateById(approval); return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -160,6 +160,7 @@ } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); } user.setUserName(user.getPhonenumber()); user.setCreateBy(getUsername()); user.setPassword(SecurityUtils.encryptPassword("123456")); userService.insertUser(user); @@ -257,7 +258,7 @@ } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); } user.setUserName(user.getPhonenumber()); user.setUpdateBy(getUsername()); if (StringUtils.isNotEmpty(user.getPassword())) { user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TDeptController.java
@@ -78,7 +78,7 @@ if (!users.isEmpty()){ return R.fail("当前部门存在用户,不可删除!"); } deptService.removeById(id); deptService.removeById(Integer.valueOf(id)); return R.ok(); } } ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.system.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @Data @ApiModel(value = "审批流程设置审批人员DTO") public class SetApprovalDTO implements Serializable { @ApiModelProperty(value = "审批流程id") private Integer id; @ApiModelProperty(value = "人员ids") private String approvalIds; } ruoyi-system/src/main/java/com/ruoyi/system/dto/SetDeptDTO.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.system.dto; import com.ruoyi.common.core.domain.entity.TDept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @Data @ApiModel(value = "审批流程设计设置使用部门DTO") public class SetDeptDTO implements Serializable { @ApiModelProperty(value = "审批流程id") private Integer id; @ApiModelProperty(value = "部门ids") private String deptIds; } ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalFlowNodeMapper.java
@@ -1,7 +1,13 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.vo.system.ApprovalFlowNodeVO; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -13,4 +19,5 @@ */ public interface OaApprovalFlowNodeMapper extends BaseMapper<OaApprovalFlowNode> { } ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalMapper.java
@@ -1,7 +1,13 @@ package com.ruoyi.system.mapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.vo.system.ApprovalVO; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -13,4 +19,6 @@ */ public interface OaApprovalMapper extends BaseMapper<OaApproval> { List<ApprovalVO> pageList(@Param("query")ApprovalListQuery query, @Param("pageInfo")PageInfo<ApprovalVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalFlowNode.java
@@ -84,5 +84,7 @@ @TableField("disabled") private Boolean disabled; @ApiModelProperty(value = "审批人名称") @TableField(exist = false) private String approvalName; } ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalListQuery.java
New file @@ -0,0 +1,14 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "审批流程分页列表query") public class ApprovalListQuery extends BasePage { @ApiModelProperty(value = "审批设计id") private Integer id; } ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalFlowNodeService.java
@@ -1,7 +1,13 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.vo.system.ApprovalFlowNodeVO; import com.ruoyi.system.vo.system.ApprovalVO; import java.util.List; /** * <p> @@ -13,4 +19,5 @@ */ public interface OaApprovalFlowNodeService extends IService<OaApprovalFlowNode> { List<OaApprovalFlowNode> pageList(ApprovalListQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalService.java
@@ -1,7 +1,10 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.vo.system.ApprovalVO; /** * <p> @@ -13,4 +16,6 @@ */ public interface OaApprovalService extends IService<OaApproval> { PageInfo<ApprovalVO> pageList(ApprovalListQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalFlowNodeServiceImpl.java
@@ -1,10 +1,23 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.system.mapper.OaApprovalFlowNodeMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.service.OaApprovalFlowNodeService; import com.ruoyi.system.vo.system.ApprovalFlowNodeVO; import com.ruoyi.system.vo.system.ApprovalVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -17,4 +30,22 @@ @Service public class OaApprovalFlowNodeServiceImpl extends ServiceImpl<OaApprovalFlowNodeMapper, OaApprovalFlowNode> implements OaApprovalFlowNodeService { @Autowired private SysUserMapper sysUserMapper; @Override public List<OaApprovalFlowNode> pageList(ApprovalListQuery query) { List<SysUser> sysUsers = sysUserMapper.selectList(); Map<Long, String> deptMaps = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName)); List<OaApprovalFlowNode> oaApprovalFlowNodes = this.baseMapper.selectList(new LambdaQueryWrapper<OaApprovalFlowNode>() .eq(OaApprovalFlowNode::getApprovalId, query.getId())); for (OaApprovalFlowNode approvalVO : oaApprovalFlowNodes) { StringBuilder approvalName = new StringBuilder(); for (String approvalId : approvalVO.getApprovalIds().split(",")) { String orDefault = deptMaps.getOrDefault(Long.valueOf(approvalId), ""); approvalName.append(orDefault).append(","); } approvalVO.setApprovalName(approvalName.substring(0,approvalName.length()-1)); } return oaApprovalFlowNodes; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalServiceImpl.java
@@ -1,10 +1,23 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.system.mapper.OaApprovalMapper; import com.ruoyi.system.mapper.TDeptMapper; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.service.OaApprovalService; import com.ruoyi.system.vo.system.ApprovalVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -17,4 +30,23 @@ @Service public class OaApprovalServiceImpl extends ServiceImpl<OaApprovalMapper, OaApproval> implements OaApprovalService { @Autowired private TDeptMapper deptMapper; @Override public PageInfo<ApprovalVO> pageList(ApprovalListQuery query) { List<TDept> tDepts = deptMapper.selectList(null); Map<Integer, String> deptMaps = tDepts.stream().collect(Collectors.toMap(TDept::getId, TDept::getDeptName)); PageInfo<ApprovalVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<ApprovalVO> list = this.baseMapper.pageList(query,pageInfo); for (ApprovalVO approvalVO : list) { StringBuilder deptName = new StringBuilder(); for (String deptId : approvalVO.getDeptIds().split(",")) { String orDefault = deptMaps.getOrDefault(Integer.parseInt(deptId), ""); deptName.append(orDefault).append(","); } approvalVO.setDeptName(deptName.substring(0,deptName.length()-1)); } pageInfo.setRecords(list); return pageInfo; } } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/ApprovalFlowNodeVO.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.model.OaApprovalFlowNode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "审批流程分页返回VO") public class ApprovalFlowNodeVO extends OaApprovalFlowNode { @ApiModelProperty(value = "审批人名称") private String approvalName; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/ApprovalVO.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.OaApproval; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; @Data @ApiModel(value = "审批流程设计分页返回VO") public class ApprovalVO extends OaApproval { @ApiModelProperty(value = "使用部门名称") private String deptName; } ruoyi-system/src/main/resources/mapper/system/OaApprovalMapper.xml
@@ -20,5 +20,15 @@ <sql id="Base_Column_List"> id, approval_name, approval_category, status, dept_ids, create_time, create_by, update_time, update_by, disabled </sql> <select id="pageList" resultType="com.ruoyi.system.vo.system.ApprovalVO"> select * from oa_approval where 1=1 <if test="query.approvalName != null and query.approvalName != ''"> and approval_name like concat('%',#{query.approvalName},'%') </if> AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} ORDER BY update_time DESC </select> </mapper> ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -234,7 +234,7 @@ <select id="pageList" resultType="com.ruoyi.system.vo.system.SysUserVO"> select u.*, r.role_id AS roleId, r.role_name AS roleName, r.role_key AS roleKey, r.role_sort AS roleSort, r.data_scope AS dataScope, r.status as role_status ,t1.dept_name as deptName from sys_user u 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