提交 361e9d03 authored 作者: hzh's avatar hzh

功能优化

上级 f72fc5e4
...@@ -12,8 +12,9 @@ public enum ApplyStatus { ...@@ -12,8 +12,9 @@ public enum ApplyStatus {
//待审核,已完成,已拒绝 //待审核,已完成,已拒绝
WAIT_AUDIT("0", "待审核"), WAIT_AUDIT("0", "待审核"),
FINISH("1", "已完成"), AUDITING("1", "审批中"),
REFUSE("2", "已拒绝"); FINISH("2", "已完成"),
REFUSE("3", "已拒绝");
private final String code; private final String code;
private final String desc; private final String desc;
......
...@@ -16,10 +16,12 @@ import org.dromara.common.mybatis.core.page.PageQuery; ...@@ -16,10 +16,12 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.server.constant.ProcessKey;
import org.dromara.server.domain.bo.ApplyApproveBo; import org.dromara.server.domain.bo.ApplyApproveBo;
import org.dromara.server.domain.bo.ApplyBo; import org.dromara.server.domain.bo.ApplyBo;
import org.dromara.server.domain.vo.ApplyVo; import org.dromara.server.domain.vo.ApplyVo;
import org.dromara.server.service.IApplyService; import org.dromara.server.service.IApplyService;
import org.dromara.server.service.IProcessProgressService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -39,11 +41,11 @@ import java.util.List; ...@@ -39,11 +41,11 @@ import java.util.List;
public class ApplyController extends BaseController { public class ApplyController extends BaseController {
private final IApplyService applyService; private final IApplyService applyService;
private final IProcessProgressService processProgressService;
/** /**
* 查询出差申请列表 * 查询出差申请列表
*/ */
@SaCheckPermission("server:apply:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<ApplyVo> list(ApplyBo bo, PageQuery pageQuery) { public TableDataInfo<ApplyVo> list(ApplyBo bo, PageQuery pageQuery) {
return applyService.queryPageList(bo, pageQuery); return applyService.queryPageList(bo, pageQuery);
...@@ -109,6 +111,11 @@ public class ApplyController extends BaseController { ...@@ -109,6 +111,11 @@ public class ApplyController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/approve") @PostMapping("/approve")
public R<Void> approve(@Validated(AddGroup.class) @RequestBody ApplyApproveBo bo) { public R<Void> approve(@Validated(AddGroup.class) @RequestBody ApplyApproveBo bo) {
List<Long> userIdList = processProgressService.getApproveUserList(ProcessKey.PROCESS_KEY_TRAVEL.getKey());
Long userId = LoginHelper.getUserId();
if (!userIdList.contains(userId)) {
throw new RuntimeException("您没有审批权限!");
}
return toAjax(applyService.approve(bo)); return toAjax(applyService.approve(bo));
} }
...@@ -124,4 +131,14 @@ public class ApplyController extends BaseController { ...@@ -124,4 +131,14 @@ public class ApplyController extends BaseController {
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(applyService.deleteWithValidByIds(List.of(ids), true)); return toAjax(applyService.deleteWithValidByIds(List.of(ids), true));
} }
/**
* 判断是否有权限审批
*/
@GetMapping("/isPermission")
public R<Boolean> isPermission() {
List<Long> userIdList = processProgressService.getApproveUserList(ProcessKey.PROCESS_KEY_TRAVEL.getKey());
Long userId = LoginHelper.getUserId();
return R.ok(userIdList.contains(userId));
}
} }
...@@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotBlank; ...@@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
...@@ -19,6 +20,7 @@ import java.util.Date; ...@@ -19,6 +20,7 @@ import java.util.Date;
* @date 2024-12-11 * @date 2024-12-11
*/ */
@Data @Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ProcessApprove.class, reverseConvertGenerate = false) @AutoMapper(target = ProcessApprove.class, reverseConvertGenerate = false)
public class ProcessApproveBo extends BaseEntity { public class ProcessApproveBo extends BaseEntity {
......
...@@ -103,5 +103,10 @@ public class ApplyVo implements Serializable { ...@@ -103,5 +103,10 @@ public class ApplyVo implements Serializable {
/** /**
* 审批记录 * 审批记录
*/ */
private List<ApplyApproveVo> approveList; private List<ProcessApproveVo> approveList;
/**
* 当前审批人
*/
private List<Long> currentUserList;
} }
...@@ -5,6 +5,7 @@ import org.dromara.server.constant.ProcessApproveStatus; ...@@ -5,6 +5,7 @@ import org.dromara.server.constant.ProcessApproveStatus;
import org.dromara.server.domain.ProcessProgress; import org.dromara.server.domain.ProcessProgress;
import org.dromara.server.domain.bo.ProcessApproveBo; import org.dromara.server.domain.bo.ProcessApproveBo;
import org.dromara.server.domain.bo.ProcessProgressBo; import org.dromara.server.domain.bo.ProcessProgressBo;
import org.dromara.server.domain.vo.ProcessApproveVo;
import org.dromara.server.domain.vo.ProcessProgressVo; import org.dromara.server.domain.vo.ProcessProgressVo;
import java.util.List; import java.util.List;
...@@ -60,4 +61,13 @@ public interface IProcessProgressService extends IBaseService<ProcessProgressVo, ...@@ -60,4 +61,13 @@ public interface IProcessProgressService extends IBaseService<ProcessProgressVo,
*/ */
List<List<Long>> getCurrentApproveUserList(String processKey, List<Long> relatedIds); List<List<Long>> getCurrentApproveUserList(String processKey, List<Long> relatedIds);
/**
* 获取审批列表
*
* @param processKey 审批key
* @param relatedIds 关联id
* @return 审批列表
*/
List<ProcessApproveVo> getApproveList(String processKey, List<Long> relatedIds);
} }
...@@ -2,6 +2,7 @@ package org.dromara.server.service.impl; ...@@ -2,6 +2,7 @@ package org.dromara.server.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
...@@ -13,19 +14,22 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; ...@@ -13,19 +14,22 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.service.AbstractBaseService; import org.dromara.common.mybatis.service.AbstractBaseService;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.server.constant.ApplyStatus; import org.dromara.server.constant.ApplyStatus;
import org.dromara.server.constant.ProcessApproveStatus;
import org.dromara.server.constant.ProcessKey;
import org.dromara.server.domain.Apply; import org.dromara.server.domain.Apply;
import org.dromara.server.domain.ApplyApprove;
import org.dromara.server.domain.ApplyPerson; import org.dromara.server.domain.ApplyPerson;
import org.dromara.server.domain.bo.ApplyApproveBo; import org.dromara.server.domain.bo.ApplyApproveBo;
import org.dromara.server.domain.bo.ApplyBo; import org.dromara.server.domain.bo.ApplyBo;
import org.dromara.server.domain.bo.ApplyPersonBo; import org.dromara.server.domain.bo.ApplyPersonBo;
import org.dromara.server.domain.vo.ApplyApproveVo; import org.dromara.server.domain.bo.ProcessApproveBo;
import org.dromara.server.domain.vo.ApplyPersonVo; import org.dromara.server.domain.vo.ApplyPersonVo;
import org.dromara.server.domain.vo.ApplyVo; import org.dromara.server.domain.vo.ApplyVo;
import org.dromara.server.domain.vo.ProcessApproveVo;
import org.dromara.server.mapper.ApplyApproveMapper; import org.dromara.server.mapper.ApplyApproveMapper;
import org.dromara.server.mapper.ApplyMapper; import org.dromara.server.mapper.ApplyMapper;
import org.dromara.server.mapper.ApplyPersonMapper; import org.dromara.server.mapper.ApplyPersonMapper;
import org.dromara.server.service.IApplyService; import org.dromara.server.service.IApplyService;
import org.dromara.server.service.IProcessProgressService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -45,10 +49,9 @@ import java.util.Objects; ...@@ -45,10 +49,9 @@ import java.util.Objects;
public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Apply> implements IApplyService { public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Apply> implements IApplyService {
private final ApplyMapper baseMapper; private final ApplyMapper baseMapper;
private final ApplyPersonMapper applyPersonMapper; private final ApplyPersonMapper applyPersonMapper;
private final ApplyApproveMapper applyApproveMapper; private final ApplyApproveMapper applyApproveMapper;
private final IProcessProgressService processProgressService;
@Override @Override
public BaseMapperPlus<Apply, ApplyVo> mapper() { public BaseMapperPlus<Apply, ApplyVo> mapper() {
...@@ -103,12 +106,24 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl ...@@ -103,12 +106,24 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl
if (!StringUtils.equals(apply.getStatus(), ApplyStatus.WAIT_AUDIT.getCode())) { if (!StringUtils.equals(apply.getStatus(), ApplyStatus.WAIT_AUDIT.getCode())) {
throw new RuntimeException("该申请不是待审批状态,不能进行审批!"); throw new RuntimeException("该申请不是待审批状态,不能进行审批!");
} }
bo.setApproveUserId(LoginHelper.getUserId());
bo.setApproveName(LoginHelper.getLoginUser().getNickname());
bo.setApproveTime(new Date());
applyApproveMapper.insert(MapstructUtils.convert(bo, ApplyApprove.class));
apply.setStatus(bo.getPass() ? ApplyStatus.FINISH.getCode() : ApplyStatus.REFUSE.getCode()); //审批
processProgressService.approve(new ProcessApproveBo()
.setRelatedId(bo.getApplyId())
.setProcessConfigKey(ProcessKey.PROCESS_KEY_TRAVEL.getKey())
.setPass(bo.getPass())
.setApproveDesc(bo.getApproveDesc()));
//更新状态
ProcessApproveStatus approveStatus = processProgressService.getApproveStatus(ProcessKey.PROCESS_KEY_TRAVEL.getKey(), bo.getApplyId());
if (StringUtils.equals(approveStatus.name(), ProcessApproveStatus.END.name())) {
apply.setStatus(ApplyStatus.FINISH.getCode());
} else if (StringUtils.equals(approveStatus.name(), ProcessApproveStatus.REJECT.name())) {
apply.setStatus(ApplyStatus.REFUSE.getCode());
} else {
apply.setStatus(ApplyStatus.AUDITING.getCode());
}
baseMapper.updateById(apply); baseMapper.updateById(apply);
return true; return true;
} }
...@@ -120,12 +135,18 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl ...@@ -120,12 +135,18 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl
List<Long> applyIds = StreamUtils.toList(list, ApplyVo::getId); List<Long> applyIds = StreamUtils.toList(list, ApplyVo::getId);
applyIds = CollectionUtil.isEmpty(applyIds) ? List.of(-1L) : applyIds; applyIds = CollectionUtil.isEmpty(applyIds) ? List.of(-1L) : applyIds;
//查询审批记录 //查询审批记录
List<ApplyApproveVo> approveList = applyApproveMapper.selectVoList(new LambdaQueryWrapper<ApplyApprove>().in(ApplyApprove::getApplyId, applyIds)); List<ProcessApproveVo> approveList = processProgressService.getApproveList(ProcessKey.PROCESS_KEY_TRAVEL.getKey(), applyIds);
//获取当前审批人信息
List<List<Long>> currentApproveUserList = processProgressService.getCurrentApproveUserList(ProcessKey.PROCESS_KEY_TRAVEL.getKey(), applyIds);
//查询出行人 //查询出行人
List<ApplyPersonVo> personList = applyPersonMapper.selectVoList(new LambdaQueryWrapper<ApplyPerson>().in(ApplyPerson::getApplyId, applyIds)); List<ApplyPersonVo> personList = applyPersonMapper.selectVoList(new LambdaQueryWrapper<ApplyPerson>().in(ApplyPerson::getApplyId, applyIds));
List<Long> finalApplyIds = applyIds;
list.forEach(vo -> { list.forEach(vo -> {
vo.setPersonList(StreamUtils.filter(personList, p -> Objects.equals(p.getApplyId(), vo.getId()))); vo.setPersonList(StreamUtils.filter(personList, p -> Objects.equals(p.getApplyId(), vo.getId())));
vo.setApproveList(StreamUtils.filter(approveList, a -> Objects.equals(a.getApplyId(), vo.getId()))); vo.setApproveList(StreamUtils.filter(approveList, a -> Objects.equals(a.getRelatedId(), vo.getId())));
if (CollectionUtils.isNotEmpty(currentApproveUserList)) {
vo.setCurrentUserList(currentApproveUserList.get(finalApplyIds.indexOf(vo.getId())));
}
}); });
return page; return page;
} }
......
...@@ -21,6 +21,7 @@ import org.dromara.server.domain.ProcessProgress; ...@@ -21,6 +21,7 @@ import org.dromara.server.domain.ProcessProgress;
import org.dromara.server.domain.bo.ProcessApproveBo; import org.dromara.server.domain.bo.ProcessApproveBo;
import org.dromara.server.domain.bo.ProcessProgressBo; import org.dromara.server.domain.bo.ProcessProgressBo;
import org.dromara.server.domain.vo.Process; import org.dromara.server.domain.vo.Process;
import org.dromara.server.domain.vo.ProcessApproveVo;
import org.dromara.server.domain.vo.ProcessProgressVo; import org.dromara.server.domain.vo.ProcessProgressVo;
import org.dromara.server.mapper.ProcessApproveMapper; import org.dromara.server.mapper.ProcessApproveMapper;
import org.dromara.server.mapper.ProcessConfigMapper; import org.dromara.server.mapper.ProcessConfigMapper;
...@@ -231,4 +232,18 @@ public class ProcessProgressServiceImpl extends AbstractBaseService<ProcessProgr ...@@ -231,4 +232,18 @@ public class ProcessProgressServiceImpl extends AbstractBaseService<ProcessProgr
progressList.stream().filter(p -> Objects.equals(p.getRelatedId(), relatedId)).map(ProcessProgress::getApproveUserId).collect(Collectors.toList()) progressList.stream().filter(p -> Objects.equals(p.getRelatedId(), relatedId)).map(ProcessProgress::getApproveUserId).collect(Collectors.toList())
); );
} }
@Override
public List<ProcessApproveVo> getApproveList(String processKey, List<Long> relatedIds) {
if (StringUtils.isEmpty(processKey)) {
throw new RuntimeException("流程配置不存在!");
}
if (CollectionUtils.isEmpty(relatedIds)) {
return List.of();
}
return processApproveMapper.selectVoList(
new LambdaQueryWrapper<>(ProcessApprove.class)
.eq(ProcessApprove::getProcessConfigKey, processKey)
.in(ProcessApprove::getRelatedId, relatedIds));
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论