maven
2 天以前 91c0906bda26d3718b2fa450eed27419388b24a5
yys  修改协同审批bug
已修改16个文件
已添加1个文件
334 ■■■■ 文件已修改
src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/pojo/ApproveNode.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/IApproveNodeService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/IApproveProcessService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/framework/security/service/TokenService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/approve/ApproveProcessMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysUserMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java
@@ -17,7 +17,7 @@
     * @param id æµç¨‹å®¡æ‰¹id approve_id
     * @return
     */
    @GetMapping("/details")
    @GetMapping("/details/{id}")
    public AjaxResult details(@PathVariable String id) {
        return AjaxResult.success(approveNodeService.details(id));
    }
@@ -40,7 +40,7 @@
     */
    @PostMapping("/init")
    public AjaxResult init(String id) {
        approveNodeService.initApproveNodes(id);
        approveNodeService.initApproveNodes("",id,1L);
        return AjaxResult.success();
    }
src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
@@ -1,5 +1,7 @@
package com.ruoyi.approve.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
import com.ruoyi.approve.vo.ApproveProcessVO;
@@ -8,8 +10,10 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.domain.SysDept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.text.ParseException;
import java.util.List;
@RestController
@@ -45,7 +49,8 @@
     * @return
     */
    @PostMapping("/add")
    public AjaxResult add(@RequestBody ApproveProcessVO approveProcessVO) {
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult add(@RequestBody ApproveProcessVO approveProcessVO) throws ParseException {
        if (approveProcessVO == null) {
            return AjaxResult.warn("参数不能为空");
        }
@@ -73,6 +78,7 @@
     * @return
     */
    @PostMapping("/update")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult update(@RequestBody ApproveGetAndUpdateVo approveGetAndUpdateVo) {
        if (approveGetAndUpdateVo == null) {
            return AjaxResult.warn("参数不能为空");
@@ -85,8 +91,8 @@
     * @return
     */
    @GetMapping("/list")
    public AjaxResult list() {
        return AjaxResult.success(approveProcessService.listAll());
    public AjaxResult list(Page page, ApproveProcess approveProcess) {
        return AjaxResult.success(approveProcessService.listAll(page, approveProcess));
    }
    /**
@@ -94,7 +100,8 @@
     * @param ids
     * @return
     */
    @PostMapping("/deleteIds")
    @DeleteMapping("/deleteIds")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult deleteIds(@RequestBody Long[] ids) {
        if (ids == null || ids.length == 0) {
            return AjaxResult.warn("参数不能为空");
src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java
@@ -1,7 +1,10 @@
package com.ruoyi.approve.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.approve.pojo.ApproveProcess;
import org.apache.ibatis.annotations.Param;
/**
* @author Administrator
@@ -11,6 +14,7 @@
*/
public interface ApproveProcessMapper extends BaseMapper<ApproveProcess> {
    IPage<ApproveProcess> listPage(Page page,@Param("req") ApproveProcess approveProcess);
}
src/main/java/com/ruoyi/approve/pojo/ApproveNode.java
@@ -1,6 +1,7 @@
package com.ruoyi.approve.pojo;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -20,9 +21,9 @@
    private Long id;
    /**
     * å®¡æ‰¹id
     * å®¡æ‰¹ç¼–号
     */
    private Long approveProcessId;
    private String approveProcessId;
    /**
     * å®¡æ‰¹èŠ‚ç‚¹é¡ºåº
@@ -33,6 +34,11 @@
     * å®¡æ‰¹èŠ‚ç‚¹ç”¨æˆ·åå­—
     */
    private String approveNodeUser;
    /**
     * å®¡æ‰¹èŠ‚ç‚¹ç”¨æˆ·id
     */
    private Long approveNodeUserId;
    /**
     * å®¡æ‰¹èŠ‚ç‚¹æ—¶é—´
@@ -63,6 +69,26 @@
    private Integer deleteFlag;
    /**
     * å…¥åº“用户id
     */
    private Long createUser;
    /**
     * å…¥åº“æ—¶é—´
     */
    private LocalDateTime createTime;
    /**
     * ä¿®æ”¹è€…
     */
    private Long updateUser;
    /**
     * ä¿®æ”¹æ—¶é—´
     */
    private LocalDateTime updateTime;
    /**
     * å®¡æ‰¹èŠ‚ç‚¹æ‹’ç»åŽŸå› 
     */
    private String approveNodeReason;
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -1,6 +1,7 @@
package com.ruoyi.approve.pojo;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.*;
@@ -21,7 +22,7 @@
    private Long id;
    /**
     * å®¡æ‰¹id
     * æµç¨‹ç¼–号
     */
    private String approveId;
@@ -29,6 +30,11 @@
     * ç”³è¯·äººid
     */
    private Long approveUser;
    /**
     * ç”³è¯·äººåç§°
     */
    private String approveUserName;
    /**
     * ç”³è¯·éƒ¨é—¨id
@@ -41,12 +47,12 @@
    private String approveDeptName;
    /**
     * ç”³è¯·ç”¨æˆ·ids
     * å®¡æ‰¹ç”¨æˆ·ids
     */
    private String approveUserIds;
    /**
     * ç”³è¯·ç”¨æˆ·åç§°
     * å®¡æ‰¹ç”¨æˆ·åç§°
     */
    private String approveUserNames;
@@ -54,6 +60,16 @@
     * ç”³è¯·åŽŸå› 
     */
    private String approveReason;
    /**
     * å½“前审批用户ID
     */
    private Long approveUserCurrentId;
    /**
     * å½“前审批用户名称
     */
    private String approveUserCurrentName;
    /**
     * ç”³è¯·æ—¥æœŸ
@@ -93,6 +109,11 @@
     */
    private String approveRemark;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private LocalDateTime createTime;
    private static final long serialVersionUID = 1L;
src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
@@ -7,7 +7,7 @@
public interface IApproveNodeService extends IService<ApproveNode> {
    void initApproveNodes(String id);
    void initApproveNodes(String approveUserIds,String approveID,Long tenantId);
    /**
     * è¯¦æƒ…
     * @param id
@@ -15,4 +15,6 @@
    List<ApproveNode> details(String id);
    void updateApproveNode(ApproveNode approveNode);
    void delApproveNodeByApproveId(Long id);
}
src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
@@ -1,5 +1,7 @@
package com.ruoyi.approve.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.approve.pojo.ApproveNode;
import com.ruoyi.approve.pojo.ApproveProcess;
@@ -7,6 +9,7 @@
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.project.system.domain.SysDept;
import java.text.ParseException;
import java.util.List;
public interface IApproveProcessService extends IService<ApproveProcess> {
@@ -14,14 +17,14 @@
     * æ·»åŠ å®¡æ‰¹æµç¨‹
     * @param approveProcessVO å®¡æ‰¹æµç¨‹VO对象
     */
    void addApprove(ApproveProcessVO approveProcessVO);
    void addApprove(ApproveProcessVO approveProcessVO) throws ParseException;
    /**
     * æ ¹æ®éƒ¨é—¨id查询部门信息
     * @param deptIds éƒ¨é—¨ID数组
     */
    List<SysDept> selectDeptListByDeptIds(Long[] deptIds);
    List<ApproveProcess> listAll();
    IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess);
    void delApprove(Long[] ids);
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.approve.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.mapper.ApproveNodeMapper;
import com.ruoyi.approve.pojo.ApproveNode;
@@ -8,12 +9,15 @@
import com.ruoyi.approve.service.IApproveNodeService;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
@@ -26,36 +30,40 @@
    private  ApproveNodeMapper approveNodeMapper;
    @Autowired
    private  IApproveProcessService approveProcessService;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Override
    public void initApproveNodes(String id) {
        //租户id
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        ApproveProcess approve = approveProcessService.getApproveById(id);
        String[] names = approve.getApproveUserNames().split(",");
        Long approveId = approve.getId();
    public void initApproveNodes(String approveUserIds,String approveID,Long tenantId) {
        Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
        ApproveProcess approve = approveProcessService.getApproveById(approveID);
        String[] names = approveUserIds.split(",");
        String approveId = approve.getApproveId();
        for (int i = 0; i < names.length; i++) {
            SysUser sysUser = sysUserMapper.selectUserById(Long.parseLong(names[i]));
            if (sysUser == null) continue;
            ApproveNode approveNode = new ApproveNode();
            approveNode.setApproveProcessId(approveId);
            approveNode.setApproveNodeOrder(i +1);
            approveNode.setApproveNodeUser(names[i]);
            approveNode.setApproveNodeUser(sysUser.getNickName());
            approveNode.setApproveNodeUserId(sysUser.getUserId());
            approveNode.setApproveNodeTime(new Date());
            approveNode.setApproveNodeStatus(0);
            approveNode.setTenantId(tenantId);
            approveNode.setDeleteFlag(0);
            approveNode.setCreateUser(userId);
            approveNode.setUpdateUser(userId);
            approveNode.setCreateTime(LocalDateTime.now());
            approveNode.setUpdateTime(LocalDateTime.now());
            approveNodeMapper.insert(approveNode);
        }
    }
    @Override
    public List<ApproveNode> details(String id) {
        ApproveProcess approve = approveProcessService.getApproveById(id);
        Long approveId = approve.getId();
        LambdaQueryWrapper<ApproveNode> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ApproveNode::getApproveProcessId, approveId);
        queryWrapper.eq(ApproveNode::getApproveProcessId, id);
        List<ApproveNode> list = list(queryWrapper);
        // æŒ‰ç…§ approveNodeOrder å­—段升序排序
        list.sort(Comparator.comparingInt(ApproveNode::getApproveNodeOrder));
@@ -71,4 +79,12 @@
        approveNodeMapper.updateById(approveNode);
    }
    @Override
    public void delApproveNodeByApproveId(Long id) {
        UpdateWrapper<ApproveNode> queryWrapper = new UpdateWrapper<>();
        queryWrapper.lambda().set(ApproveNode::getDeleteFlag, 1)
                .eq(ApproveNode::getApproveProcessId, id);
        update(queryWrapper);
    }
}
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -1,6 +1,9 @@
package com.ruoyi.approve.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
import com.ruoyi.approve.pojo.ApproveNode;
@@ -12,19 +15,28 @@
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.project.system.mapper.SysUserMapper;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@@ -37,34 +49,52 @@
    private final SysDeptMapper sysDeptMapper;
    private final IApproveNodeService approveNodeService;
    private final SysUserMapper sysUserMapper;
    private final ApproveProcessMapper approveProcessMapper;
    @Override
    public void addApprove(ApproveProcessVO approveProcessVO) {
        Long userId = SecurityUtils.getUserId();
        //租户id
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
    public void addApprove(ApproveProcessVO approveProcessVO) throws ParseException {
        SysUser sysUser = sysUserMapper.selectUserById(approveProcessVO.getApproveUser());
        SysDept sysDept = sysDeptMapper.selectDeptById(approveProcessVO.getApproveDeptId());
        String[] split = approveProcessVO.getApproveUserIds().split(",");
        List<Long> longList = Arrays.stream(split)
                .map(Long::valueOf)  // å°†æ¯ä¸ª String è½¬æ¢ä¸º Long
                .collect(Collectors.toList());
        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(longList);
        if(CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("审核用户不存在");
        if(sysDept == null) throw new RuntimeException("部门不存在");
        if(sysUser == null) throw new RuntimeException("申请人不存在");
        String today = LocalDate.now().format(DATE_FORMAT);
        Long approveId = dailyRedisCounter.incrementAndGet("approveId");
        Long approveId = dailyRedisCounter.incrementAndGetByDb();
        String formattedCount = String.format("%03d", approveId);
        //流程 ID
        String approveID = today + formattedCount;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        ApproveProcess approveProcess = new ApproveProcess();
        approveProcess.setApproveId(approveID);
        approveProcess.setApproveUser(userId);
        approveProcess.setApproveDeptName(approveProcessVO.getDeptName());
        approveProcess.setApproveUserNames(approveProcessVO.getApproverNames());
        approveProcess.setApproveTime(new Date());
        approveProcess.setApproveUser(approveProcessVO.getApproveUser());
        approveProcess.setApproveUserName(sysUser.getNickName());
        approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId());
        approveProcess.setApproveDeptName(sysDept.getDeptName());
        approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
        approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? null : dateFormat.parse(approveProcessVO.getApproveTime()));
        approveProcess.setApproveReason(approveProcessVO.getApproveReason());
        approveProcess.setApproveOverTime(null);
        approveProcess.setApproveStatus(0);
        approveProcess.setApproveDelete(0);
        approveProcess.setTenantId(tenantId);
        approveProcess.setCreateTime(LocalDateTime.now());
        approveProcess.setTenantId(approveProcessVO.getApproveDeptId());
        approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds());
        approveProcess.setApproveUserCurrentId(longList.get(0));
        approveProcess.setApproveUserCurrentName(sysUsers
                .stream()
                .filter(SysUser -> SysUser.getUserId().equals(longList.get(0)))
                .collect(Collectors.toList())
                .get(0)
                .getNickName());
        save(approveProcess);
        //初始化审批节点
        approveNodeService.initApproveNodes(approveID);
        approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(),approveID,approveProcessVO.getApproveDeptId());
    }
    @Override
@@ -78,19 +108,23 @@
    }
    @Override
    public List<ApproveProcess> listAll() {
        LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ApproveProcess::getApproveDelete, 0);
        return list(queryWrapper);
    public IPage<ApproveProcess> listAll(Page page,ApproveProcess approveProcess) {
        IPage<ApproveProcess> approveProcessIPage = approveProcessMapper.listPage(page,approveProcess);
        return approveProcessIPage;
    }
    @Override
    public void delApprove(Long[] ids) {
        for (Long id : ids) {
            LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(ApproveProcess::getApproveId, id);
            UpdateWrapper<ApproveProcess> queryWrapper = new UpdateWrapper<>();
            queryWrapper.lambda().set(ApproveProcess::getApproveDelete, 1)
                    .eq(ApproveProcess::getApproveId, id);
            update(queryWrapper);
            // åˆ é™¤å…³è”的审批节点
            approveNodeService.delApproveNodeByApproveId(id);
        }
    }
    @Override
src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java
@@ -1,12 +1,18 @@
package com.ruoyi.approve.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
import com.ruoyi.approve.pojo.ApproveProcess;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@@ -21,7 +27,7 @@
        this.redisTemplate = redisTemplate;
    }
    /**
    /**查缓存
     * èŽ·å–æŒ‡å®šè®¡æ•°å™¨åœ¨ä»Šæ—¥çš„æ•°å€¼ï¼Œå¹¶è‡ªå¢ž1
     * @param counterName è®¡æ•°å™¨åç§°ï¼ˆä¾‹å¦‚:login_count、order_count)
     * @return ä»Šæ—¥è‡ªå¢žåŽçš„计数值
@@ -39,6 +45,43 @@
        return count;
    }
    @Autowired
    private ApproveProcessMapper approveProcessMapper;
    /**
     * èŽ·å–å½“å‰æ—¶é—´çš„  å¼€å§‹æ—¥æœŸ  ï¼Œç»“束日期
     * @return
     */
    public static StartAndEndDateDto getDateTime(){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE,1);
        String startDateTime = simpleDateFormat.format(date);
        String endDateTime = simpleDateFormat.format(cal.getTime());
        StartAndEndDateDto startAndEndDateDto = new StartAndEndDateDto();
        startAndEndDateDto.setStartDate(startDateTime);
        startAndEndDateDto.setEndDate(endDateTime);
        return startAndEndDateDto;
    }
    /**查数据库
     * èŽ·å–æŒ‡å®šè®¡æ•°å™¨åœ¨ä»Šæ—¥çš„æ•°å€¼ï¼Œå¹¶è‡ªå¢ž1
     * @return ä»Šæ—¥è‡ªå¢žåŽçš„计数值
     */
    public long incrementAndGetByDb() {
        StartAndEndDateDto dateTime = getDateTime();
        LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
        approveProcessLambdaQueryWrapper
                .eq(ApproveProcess::getApproveDelete,0)
                .gt(ApproveProcess::getCreateTime,dateTime.getStartDate())
        .lt(ApproveProcess::getCreateTime,dateTime.getEndDate());
        Long aLong = approveProcessMapper.selectCount(approveProcessLambdaQueryWrapper);
        return aLong == null ? 1 : aLong + 1;
    }
    /**
     * èŽ·å–æŒ‡å®šè®¡æ•°å™¨åœ¨ä»Šæ—¥çš„å½“å‰æ•°å€¼
     * @param counterName è®¡æ•°å™¨åç§°
src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.approve.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author :yys
 * @date : 2023/9/19 10:58
 */
@Data
@ApiModel
public class StartAndEndDateDto {
    @ApiModelProperty("开始时间")
    private String startDate;
    @ApiModelProperty("结束时间")
    private String endDate;
}
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
@@ -7,17 +7,16 @@
@Data
public class ApproveProcessVO {
    //部门id
  //  private Long deptId;
    //部门名称
    @NotBlank(message = "部门名称不能为空")
    private String deptName;
    //审批人 ids
 //   private String approverIds;
    //审批人名称
    @NotBlank(message = "审批人不能为空")
    private String approverNames;
    //审批事由
    @NotBlank(message = "11")
    private Long approveDeptId;
    private String approveTime;
    // ç”³è¯·äºº
    private Long approveUser;
    // å®¡æ‰¹äºº
    private String approveUserIds;
    private String approveReason;
}
src/main/java/com/ruoyi/framework/security/service/TokenService.java
@@ -1,9 +1,15 @@
package com.ruoyi.framework.security.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.project.system.domain.SysUserDept;
import com.ruoyi.project.system.mapper.SysUserDeptMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +28,7 @@
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.util.CollectionUtils;
/**
 * token验证处理
@@ -140,6 +147,9 @@
        }
    }
    @Autowired
    private SysUserDeptMapper sysUserDeptMapper;
    /**
     * åˆ·æ–°ä»¤ç‰Œæœ‰æ•ˆæœŸ
     * 
@@ -149,6 +159,13 @@
    {
        loginUser.setLoginTime(System.currentTimeMillis());
        loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
        LambdaQueryWrapper<SysUserDept> sysUserDeptLambdaQueryWrapper = new LambdaQueryWrapper<>();
        sysUserDeptLambdaQueryWrapper.eq(SysUserDept::getUserId, loginUser.getUserId());
        List<SysUserDept> sysUserDept = sysUserDeptMapper.selectList(sysUserDeptLambdaQueryWrapper);
        if(!CollectionUtils.isEmpty(sysUserDept)){
            List<Long> collect = sysUserDept.stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
            loginUser.setDeptId(collect.toArray(new Long[0]));
        }
        // æ ¹æ®uuid将loginUser缓存
        String userKey = getTokenKey(loginUser.getToken());
        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java
@@ -41,6 +41,7 @@
        if(originalFilename == null) throw new IOException("文件名不能为空");
        URLEncoder urlEncoder = new URLEncoder();
        String encodedFilename = urlEncoder.encode(originalFilename, StandardCharsets.UTF_8);
        encodedFilename = encodedFilename.replaceAll("%2E",".");
        Path tempFilePath = Paths.get(tempDir, tempId + "_" + encodedFilename);
//        Path tempFilePath = Paths.get(tempDir, tempId + "_" + file.getOriginalFilename());
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -54,6 +54,14 @@
    public SysUser selectUserById(Long userId);
    /**
     * é€šè¿‡ç”¨æˆ·ID查询用户
     *
     * @param userId ç”¨æˆ·ID
     * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯
     */
    public List<SysUser> selectUserByIds(@Param("userIds") List<Long> userId);
    /**
     * æ–°å¢žç”¨æˆ·ä¿¡æ¯
     * 
     * @param user ç”¨æˆ·ä¿¡æ¯
src/main/resources/mapper/approve/ApproveProcessMapper.xml
@@ -27,4 +27,10 @@
        approve_user_names,approve_reason,approve_time,approve_over_time,approve_status,
        approve_delete,tenant_id,approve_type,approve_remark
    </sql>
    <select id="listPage" resultType="com.ruoyi.approve.pojo.ApproveProcess">
        select * from approve_process where approve_delete = 0
        <if test="req.approveId != null and req.approveId != ''">
            and approve_id like concat('%',#{req.approveId},'%')
        </if>
    </select>
</mapper>
src/main/resources/mapper/system/SysUserMapper.xml
@@ -150,7 +150,13 @@
    <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
        select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
    </select>
    <select id="selectUserByIds" resultType="com.ruoyi.project.system.domain.SysUser">
        <include refid="selectUserVo"/>
        where u.user_id in <foreach collection="userIds" item="item" open="(" separator="," close=")">
             #{item}
        </foreach>
    </select>
    <insert id="insertUser" parameterType="com.ruoyi.project.system.domain.SysUser" useGeneratedKeys="true" keyProperty="userId">
         insert into sys_user(
             <if test="userId != null and userId != 0">user_id,</if>