20241219 更新
1.处理审核审批分页接口中由于当一个用户拥有一级审核、二级审核、审批的权限导致的权限冲突,使分页列表数据返回错误
2.处理审核审批接口权限冲突,导致只能进行一级审核
3.配置文件添加sql日志打印,便于追踪错误
master
陈江保 2 months ago
parent cba06f7b36
commit b6494cccb9
  1. 124
      src/main/java/digital/laboratory/platform/imr/controller/ReviewApprovalController.java
  2. 12
      src/main/java/digital/laboratory/platform/imr/enums/ApplyStatus.java
  3. 30
      src/main/java/digital/laboratory/platform/imr/service/ReviewApprovalService.java
  4. 357
      src/main/java/digital/laboratory/platform/imr/service/impl/ReviewApprovalServiceImpl.java

@ -1,15 +1,14 @@
package digital.laboratory.platform.imr.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.log.annotation.SysLog;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.imr.dto.QueryApplyDTO;
import digital.laboratory.platform.imr.dto.ReviewApprovalDTO;
import digital.laboratory.platform.imr.entity.SampleApply;
import digital.laboratory.platform.imr.enums.ApplyStatus;
import digital.laboratory.platform.imr.service.ReviewApprovalService;
import digital.laboratory.platform.imr.service.SampleApplyService;
import digital.laboratory.platform.imr.vo.SampleApplyVO;
@ -22,7 +21,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Set;
/**
@ -81,88 +79,8 @@ public class ReviewApprovalController {
Principal principal = theHttpServletRequest.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
Page<SampleApply> page = new Page<>(dto.getCurrent(),dto.getSize());
QueryWrapper<SampleApply> queryWrapper = new QueryWrapper<>();
ArrayList<Integer> list = new ArrayList<>();
Set<String> permissions = dlpUser.getPermissions();//判断权限
//System.out.println(permissions);
for (String permission : permissions) {
if ("imr_sample_apply_first_audit".equals(permission)) {
//
queryWrapper.eq("apply_type",1);
if(dto.getStatus()==null){//审核初页面(不应该有销毁申请)
queryWrapper.eq("application_status",1);
}else {//点击通过页面时
if(dto.getStatus()==0){
//返回全部
queryWrapper.and(Wrapper->Wrapper.le("application_status",-2)
.or().ge("application_status",2)
);
}else {
//通过status==1/不通过status==-1
if(dto.getStatus()==1){
queryWrapper.ge("application_status",2);
}
if(dto.getStatus()==-1){
queryWrapper.le("application_status",-2);
}
}
}
break;
} else if ("imr_sample_apply_secondary_audit".equals(permission)) {
//二级审核员(不应该有销毁申请)
queryWrapper.eq("apply_type",1);
if(dto.getStatus()==null){
queryWrapper.eq("application_status",2);
}else {
if(dto.getStatus()==0){
//返回全部
queryWrapper.and(Wrapper->Wrapper.le("application_status",-3)
.or().ge("application_status",3)
);
/*queryWrapper.le("application_status",-3).or()
.ge("application_status",3);//大于=3的后面所有*/
}else {
//通过status==1/不通过status==-1
if(dto.getStatus()==1){
queryWrapper.ge("application_status",3);
}
if(dto.getStatus()==-1){
queryWrapper.le("application_status",-3);
}
}
}
break;
}else if ("imr_sample_apply_approval".equals(permission)) {
//审批人
if(dto.getStatus()==null){
queryWrapper.eq("application_status",3);
}else {
if(dto.getStatus()==0){
list.add(-4);//二级不通过
list.add(4);//通过/不通过
queryWrapper.in("application_status",list);
}else {
//通过status==1/不通过status==-1
if(dto.getStatus()==1){
queryWrapper.eq("application_status",4);
}
if(dto.getStatus()==-1){
queryWrapper.eq("application_status",-4);
}
}
}
break;
}
}
//判断权限查询条件设置完毕
queryWrapper.between(dto.getBeginDate()!=null && dto.getFinishDate()!=null,"application_date",dto.getBeginDate(),dto.getFinishDate());
queryWrapper.orderByDesc("application_date");
IPage<SampleApplyVO> applyVOPage = sampleApplyService.getApplyPage(page, queryWrapper);
return R.ok(applyVOPage,"查询成功");
IPage<SampleApplyVO> page = reviewApprovalService.auditPage(dto, dlpUser);
return R.ok(page,"查询成功");
}
/**
@ -179,25 +97,41 @@ public class ReviewApprovalController {
Principal principal = theHttpServletRequest.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
//查找对应的申请
SampleApply sampleApply = sampleApplyService.getById(dto.getApplyId());
ApplyStatus applicationStatus = null;
if(sampleApply == null){
return R.failed("当前申请数据不存在!");
}
applicationStatus = sampleApply.getApplicationStatus();
if(applicationStatus == ApplyStatus.TO_BE_SUBMITTED || applicationStatus == ApplyStatus.WITHDRAWN){
return R.failed("该申请并未提交审核或已撤回申请,请提交申请后在审核!");
}
if (!ApplyStatus.getPendingApprovalStatuses().contains(applicationStatus)) {
return R.failed("该申请已经审核过,请勿重复操作!");
}
Set<String> permissions = dlpUser.getPermissions();//判断权限
SampleApplyVO sampleApplyVO = null;
for (String permission : permissions) {
if ("imr_sample_apply_first_audit".equals(permission)) {
//一级审核员
sampleApplyVO = reviewApprovalService.firstAudit(dto, dlpUser);
if ("imr_sample_apply_first_audit".equals(permission) && applicationStatus.equals(ApplyStatus.FIRST_LEVEL)) {
//一级审核员权限和当前申请状态为待一级审核
sampleApplyVO = reviewApprovalService.firstAudit(dto, sampleApply, dlpUser);
break;
} else if ("imr_sample_apply_secondary_audit".equals(permission)) {
//二级审核员
reviewApprovalService.secondaryAudit(dto, dlpUser);
} else if ("imr_sample_apply_secondary_audit".equals(permission) && applicationStatus.equals(ApplyStatus.SECOND_LEVEL)) {
//二级审核员权限和当前申请状态为待二级审核
reviewApprovalService.secondaryAudit(dto, sampleApply, dlpUser);
break;
}else if ("imr_sample_apply_approval".equals(permission)) {
//审批人
reviewApprovalService.approval(dto,dlpUser);
}else if ("imr_sample_apply_approval".equals(permission) && applicationStatus.equals(ApplyStatus.PENDING_APPROVAL)) {
//审批人权限和当前申请状态为待审批
reviewApprovalService.approval(dto, sampleApply, dlpUser);
break;
}
}
}
return R.ok(sampleApplyVO,"审核成功");
}
}

@ -6,6 +6,10 @@ import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 申请的状态
*/
@ -28,4 +32,12 @@ public enum ApplyStatus {
@JsonValue//标记返回前端字段
private final String description;
// 返回待审核审批的状态
public static List<ApplyStatus> getPendingApprovalStatuses() {
return Arrays.stream(ApplyStatus.values())
.filter(status -> status == ApplyStatus.FIRST_LEVEL ||
status == ApplyStatus.SECOND_LEVEL ||
status == ApplyStatus.PENDING_APPROVAL)
.collect(Collectors.toList());
}
}

@ -1,42 +1,52 @@
package digital.laboratory.platform.imr.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.imr.dto.QueryApplyDTO;
import digital.laboratory.platform.imr.dto.ReviewApprovalDTO;
import digital.laboratory.platform.imr.entity.SampleApply;
import digital.laboratory.platform.imr.vo.SampleApplyVO;
import java.util.List;
public interface ReviewApprovalService {
/**
* 一级审核
*
* @param dto
* @param sampleApply
* @param dlpUser
* @return
*/
SampleApplyVO firstAudit(ReviewApprovalDTO dto, DLPUser dlpUser);
SampleApplyVO firstAudit(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser);
/**
* 二级审核
*
* @param dto
* @param sampleApply
* @param dlpUser
* @return
*/
SampleApplyVO secondaryAudit(ReviewApprovalDTO dto, DLPUser dlpUser);
SampleApplyVO secondaryAudit(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser);
/**
* 审批
*
* @param dto
* @param sampleApply
* @param dlpUser
* @return
*/
SampleApplyVO approval(ReviewApprovalDTO dto, DLPUser dlpUser);
//IPage<SampleApplyVO> getAuditPage(Page<SampleApply> page, QueryWrapper<SampleApply> qw);
SampleApplyVO approval(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser);
//List<SampleApplyVO> getAuditList(QueryWrapper<SampleApply> qw);
/**
* 获取审核分页列表
*
* 根据查询参数和当前用户的权限返回对应的审核分页列表
*
* @param dto 查询申请DTO对象包含分页和查询条件参数
* @param dlpUser 当前用户信息用于判断权限
* @return 审核分页列表对象包含查询结果和分页信息
*/
IPage<SampleApplyVO> auditPage(QueryApplyDTO dto, DLPUser dlpUser);
}

@ -1,19 +1,21 @@
package digital.laboratory.platform.imr.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.imr.dto.QueryApplyDTO;
import digital.laboratory.platform.imr.dto.ReviewApprovalDTO;
import digital.laboratory.platform.imr.dto.ReviewSampleDetail;
import digital.laboratory.platform.imr.entity.SampleApply;
import digital.laboratory.platform.imr.entity.SampleApplyDetailed;
import digital.laboratory.platform.imr.entity.SampleStorage;
import digital.laboratory.platform.imr.enums.ApplyStatus;
//import digital.laboratory.platform.imr.entity.enums.SampleStatus;
import digital.laboratory.platform.imr.feign.TransferFeignService;
import digital.laboratory.platform.imr.mapper.SampleApplyDetailedMapper;
import digital.laboratory.platform.imr.mapper.SampleApplyMapper;
import digital.laboratory.platform.imr.mapper.SampleStorageMapper;
import digital.laboratory.platform.imr.service.ReviewApprovalService;
import digital.laboratory.platform.imr.service.SampleApplyService;
@ -24,7 +26,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@Service
@RequiredArgsConstructor
@ -32,7 +36,7 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
private final SampleApplyMapper sampleApplyMapper;
private final SampleApplyService sampleApplyService;
private final SampleApplyDetailedMapper detailedMapper;
@ -48,38 +52,40 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
/**
* 一级审核员审核
*
* @param dto
* @param sampleApply
* @param dlpUser
* @return
*/
@Override
@Transactional
public SampleApplyVO firstAudit(ReviewApprovalDTO dto, DLPUser dlpUser) {
public SampleApplyVO firstAudit(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser) {
//查找对应的申请
SampleApply sampleApply = sampleApplyMapper.selectById(dto.getApplyId());
if(sampleApply == null){
throw new RuntimeException("当前数据不存在");
} else if (sampleApply.getApplyType()==1) {//外带申请
if(sampleApply.getApplicationStatus()!=ApplyStatus.FIRST_LEVEL){
throw new RuntimeException("当前数据不是待一级审核状态");
}
}
// SampleApply sampleApply = sampleApplyMapper.selectById(dto.getApplyId());
// if(sampleApply == null){
// throw new RuntimeException("当前数据不存在");
// } else if (sampleApply.getApplyType()==1) {//外带申请
// if(sampleApply.getApplicationStatus()!=ApplyStatus.FIRST_LEVEL){
// throw new RuntimeException("当前数据不是待一级审核状态");
// }
// }
//判断无误
sampleApply.setFirstAuditDate(LocalDateTime.now());//时间
sampleApply.setFirstAuditOpinion(dto.getOpinion());//意见
sampleApply.setFirstAuditorId(dlpUser.getId());//一级审核员
QueryWrapper<SampleApplyDetailed> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("apply_id",dto.getApplyId());
queryWrapper.eq("apply_id", dto.getApplyId());
List<SampleApplyDetailed> applyDetailed = detailedMapper.selectList(queryWrapper);
ArrayList<String> idList = new ArrayList<>();
List<ReviewSampleDetail> sampleDetails = dto.getReviewSampleDetails();
if(dto.getStatus()==-1){//点击不通过按钮;勾选的数据为不通过
if (dto.getStatus() == -1) {//点击不通过按钮;勾选的数据为不通过
//循环有的
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//传值为不通过样本
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
sampleApplyDetailed.setStatus(-1);
@ -89,27 +95,27 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
//循环没有的
QueryWrapper<SampleApplyDetailed> not = queryWrapper.notIn("id", idList);
List<SampleApplyDetailed> detaileds = detailedMapper.selectList(not);
if(!detaileds.isEmpty()) {
if (!detaileds.isEmpty()) {
for (SampleApplyDetailed detail : detaileds) {
detail.setStatus(1);//没有传值的为不通过
detailedMapper.updateById(detail);
}
sampleApply.setApplicationStatus(ApplyStatus.SECOND_LEVEL);
}else {
} else {
sampleApply.setApplicationStatus(ApplyStatus.FIRST_LEVEL_FAIL);
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//申请不通过的要恢复状态
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
if(sampleApply.getApplyType()==2){
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),2);
}else {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),1);
if (sampleApply.getApplyType() == 2) {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 2);
} else {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 1);
}
}
}
}else {
} else {
//循环有的
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//传值为通过样本
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
sampleApplyDetailed.setStatus(1);
@ -119,7 +125,7 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
//循环没有的
QueryWrapper<SampleApplyDetailed> not = queryWrapper.notIn("id", idList);
List<SampleApplyDetailed> detaileds = detailedMapper.selectList(not);
if(!detaileds.isEmpty()) {
if (!detaileds.isEmpty()) {
for (SampleApplyDetailed detail : detaileds) {
detail.setStatus(-1);//没有传值的为不通过
detailedMapper.updateById(detail);
@ -160,28 +166,30 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
}
}
}*/
sampleApplyMapper.updateById(sampleApply);
sampleApplyService.updateById(sampleApply);
return sampleApprovalService.getDetail(dto.getApplyId());
}
/**
* 二级审核
*
* @param dto
* @param sampleApply
* @param dlpUser
* @return
* @returnge
*/
@Override
public SampleApplyVO secondaryAudit(ReviewApprovalDTO dto, DLPUser dlpUser) {
public SampleApplyVO secondaryAudit(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser) {
//查找对应的申请
SampleApply sampleApply = sampleApplyMapper.selectById(dto.getApplyId());
if(sampleApply == null){
throw new RuntimeException(String.format("当前数据不存在"));
} else if (sampleApply.getApplyType()==1) {//外带申请
if(sampleApply.getApplicationStatus()!=ApplyStatus.SECOND_LEVEL){
throw new RuntimeException(String.format("当前数据不是待二级审核状态"));
}
}
// SampleApply sampleApply = sampleApplyMapper.selectById(dto.getApplyId());
// if(sampleApply == null){
// throw new RuntimeException(String.format("当前数据不存在"));
// } else if (sampleApply.getApplyType()==1) {//外带申请
// if(sampleApply.getApplicationStatus()!=ApplyStatus.SECOND_LEVEL){
// throw new RuntimeException(String.format("当前数据不是待二级审核状态"));
// }
// }
//判断无误
sampleApply.setSecondaryAuditDate(LocalDateTime.now());//时间
sampleApply.setSecondaryAuditOpinion(dto.getOpinion());//意见
@ -189,15 +197,15 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
QueryWrapper<SampleApplyDetailed> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("apply_id",dto.getApplyId());
queryWrapper.eq("apply_id", dto.getApplyId());
List<SampleApplyDetailed> applyDetailed = detailedMapper.selectList(queryWrapper);
ArrayList<String> idList = new ArrayList<>();
List<ReviewSampleDetail> sampleDetails = dto.getReviewSampleDetails();
if(dto.getStatus()==-1){//点击不通过按钮;勾选的数据为不通过
if (dto.getStatus() == -1) {//点击不通过按钮;勾选的数据为不通过
//循环有的
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//传值为不通过样本
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
sampleApplyDetailed.setStatus(-1);
@ -207,28 +215,28 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
//循环没有的
QueryWrapper<SampleApplyDetailed> not = queryWrapper.notIn("id", idList);
List<SampleApplyDetailed> detaileds = detailedMapper.selectList(not);
if(!detaileds.isEmpty()) {
if (!detaileds.isEmpty()) {
for (SampleApplyDetailed detail : detaileds) {
detail.setStatus(1);//没有传值的为不通过
detailedMapper.updateById(detail);
}
sampleApply.setApplicationStatus(ApplyStatus.PENDING_APPROVAL);
}else {
} else {
sampleApply.setApplicationStatus(ApplyStatus.SECOND_LEVEL_FAIL);
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//申请不通过的要恢复状态
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
if(sampleApply.getApplyType()==2){
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),2);
}else {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),1);
if (sampleApply.getApplyType() == 2) {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 2);
} else {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 1);
}
}
}
}else {
} else {
//循环有的
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//传值为通过样本
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
sampleApplyDetailed.setStatus(1);
@ -238,7 +246,7 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
//循环没有的
QueryWrapper<SampleApplyDetailed> not = queryWrapper.notIn("id", idList);
List<SampleApplyDetailed> detaileds = detailedMapper.selectList(not);
if(detaileds!=null) {
if (detaileds != null) {
for (SampleApplyDetailed detail : detaileds) {
detail.setStatus(-1);//没有传值的为不通过
detailedMapper.updateById(detail);
@ -246,22 +254,30 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
}
sampleApply.setApplicationStatus(ApplyStatus.PENDING_APPROVAL);
}
sampleApplyMapper.updateById(sampleApply);
sampleApplyService.updateById(sampleApply);
return sampleApprovalService.getDetail(dto.getApplyId());
}
/**
* 审批样本申请
*
* @param dto 审批信息DTO
* @param sampleApply 样本申请信息
* @param dlpUser 审批人用户信息
* @return 审批后的样本申请视图对象
* @throws RuntimeException 如果数据不存在或不是待审批状态则抛出异常
*/
@Override
@Transactional
public SampleApplyVO approval(ReviewApprovalDTO dto, DLPUser dlpUser) {
public SampleApplyVO approval(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser) {
//查找对应的申请
SampleApply sampleApply = sampleApplyMapper.selectById(dto.getApplyId());
if(sampleApply == null){
throw new RuntimeException(String.format("当前数据不存在"));
}else if(sampleApply.getApplicationStatus()!=ApplyStatus.PENDING_APPROVAL){
throw new RuntimeException(String.format("当前数据不是待审批状态"));
}
// SampleApply sampleApply = sampleApplyMapper.selectById(dto.getApplyId());
// if(sampleApply == null){
// throw new RuntimeException(String.format("当前数据不存在"));
// }else if(sampleApply.getApplicationStatus()!=ApplyStatus.PENDING_APPROVAL){
// throw new RuntimeException(String.format("当前数据不是待审批状态"));
// }
//判断无误
sampleApply.setApprovalDate(LocalDateTime.now());//时间
sampleApply.setApproverOpinion(dto.getOpinion());//意见
@ -269,22 +285,22 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
QueryWrapper<SampleApplyDetailed> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("apply_id",dto.getApplyId());
queryWrapper.eq("apply_id", dto.getApplyId());
List<SampleApplyDetailed> applyDetailed = detailedMapper.selectList(queryWrapper);
ArrayList<String> idList = new ArrayList<>();
List<ReviewSampleDetail> sampleDetails = dto.getReviewSampleDetails();
if(dto.getStatus()==-1){//点击不通过按钮;勾选的数据为不通过
if (dto.getStatus() == -1) {//点击不通过按钮;勾选的数据为不通过
//循环有的
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//传值为不通过样本
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
sampleApplyDetailed.setStatus(-1);
if(sampleApply.getApplyType()==2){
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),2);
}else {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),1);
if (sampleApply.getApplyType() == 2) {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 2);
} else {
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 1);
}
detailedMapper.updateById(sampleApplyDetailed);
idList.add(detail.getId());
@ -292,63 +308,226 @@ public class ReviewApprovalServiceImpl implements ReviewApprovalService {
//循环没有的
QueryWrapper<SampleApplyDetailed> not = queryWrapper.notIn("id", idList);
List<SampleApplyDetailed> detaileds = detailedMapper.selectList(not);
if(!detaileds.isEmpty()) {
if (!detaileds.isEmpty()) {
for (SampleApplyDetailed detail : detaileds) {
detail.setStatus(1);//没有传值的为不通过
detailedMapper.updateById(detail);
if(sampleApply.getApplyType()==2){//如果是销毁申请需要改变预警状态
if (sampleApply.getApplyType() == 2) {//如果是销毁申请需要改变预警状态
UpdateWrapper<SampleStorage> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("sample_id",detail.getSampleId());
updateWrapper.set("early_warning",2);//销毁预警状态修改为2--通过审核审批
sampleStorageMapper.update(null,updateWrapper);
transferFeignService.updateStatus(detail.getSampleId(),7);//样本状态为待销毁
}else {
updateWrapper.eq("sample_id", detail.getSampleId());
updateWrapper.set("early_warning", 2);//销毁预警状态修改为2--通过审核审批
sampleStorageMapper.update(null, updateWrapper);
transferFeignService.updateStatus(detail.getSampleId(), 7);//样本状态为待销毁
} else {
//外带申请需要恢复状态
transferFeignService.updateStatus(detail.getSampleId(),1);
transferFeignService.updateStatus(detail.getSampleId(), 1);
}
}
sampleApply.setApplicationStatus(ApplyStatus.APPROVED);
}else {
} else {
sampleApply.setApplicationStatus(ApplyStatus.APPROVAL_FAILED);
}
}else {//点击通过按钮
} else {//点击通过按钮
//循环有的
for (ReviewSampleDetail detail:sampleDetails) {
for (ReviewSampleDetail detail : sampleDetails) {
//传值为通过样本
SampleApplyDetailed sampleApplyDetailed = detailedMapper.selectById(detail.getId());
sampleApplyDetailed.setStatus(1);
detailedMapper.updateById(sampleApplyDetailed);
idList.add(detail.getId());
if(sampleApply.getApplyType()==2){//如果是销毁申请需要改变预警状态
if (sampleApply.getApplyType() == 2) {//如果是销毁申请需要改变预警状态
UpdateWrapper<SampleStorage> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("sample_id",sampleApplyDetailed.getSampleId());
updateWrapper.set("early_warning",2);//销毁预警状态修改为2--通过审核审批
sampleStorageMapper.update(null,updateWrapper);
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),7);//样本状态为待销毁
}else {
updateWrapper.eq("sample_id", sampleApplyDetailed.getSampleId());
updateWrapper.set("early_warning", 2);//销毁预警状态修改为2--通过审核审批
sampleStorageMapper.update(null, updateWrapper);
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 7);//样本状态为待销毁
} else {
//外带申请需要恢复状态
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(),1);
transferFeignService.updateStatus(sampleApplyDetailed.getSampleId(), 1);
}
}
//循环没有的
QueryWrapper<SampleApplyDetailed> not = queryWrapper.notIn("id", idList);
List<SampleApplyDetailed> detaileds = detailedMapper.selectList(not);
if(!detaileds.isEmpty()) {
if (!detaileds.isEmpty()) {
for (SampleApplyDetailed detail : detaileds) {
detail.setStatus(-1);//没有传值的为不通过
detailedMapper.updateById(detail);
if(sampleApply.getApplyType()==2){
transferFeignService.updateStatus(detail.getSampleId(),2);
}else {
transferFeignService.updateStatus(detail.getSampleId(),1);
if (sampleApply.getApplyType() == 2) {
transferFeignService.updateStatus(detail.getSampleId(), 2);
} else {
transferFeignService.updateStatus(detail.getSampleId(), 1);
}
}
}
sampleApply.setApplicationStatus(ApplyStatus.APPROVED);
}
sampleApplyMapper.updateById(sampleApply);
sampleApplyService.updateById(sampleApply);
return sampleApprovalService.getDetail(dto.getApplyId());
}
/**
* 获取审核分页列表
*
* 根据查询参数和当前用户的权限返回对应的审核分页列表
*
* @param dto 查询申请DTO对象包含分页和查询条件参数
* @param dlpUser 当前用户信息用于判断权限
* @return 审核分页列表对象包含查询结果和分页信息
*/
@Override
public IPage<SampleApplyVO> auditPage(QueryApplyDTO dto, DLPUser dlpUser) {
Page<SampleApply> page = new Page<>(dto.getCurrent(), dto.getSize());
QueryWrapper<SampleApply> queryWrapper = new QueryWrapper<>();
Set<String> permissions = dlpUser.getPermissions();//判断权限
/** 20241219 因为当一个用户同时拥有三个权限时查询条件会发生冲突
* 目前想通过一个list 收集要查询的状态最后in查询
*/
List<Integer> statusList = new ArrayList<>();
List<Integer> geStatusList = new ArrayList<>();
List<Integer> leStatusList = new ArrayList<>();
Boolean isApproved = false;
//System.out.println(permissions);
for (String permission : permissions) {
switch (permission) {
case "imr_sample_apply_first_audit":
handleFirstAudit(dto, statusList, geStatusList, leStatusList);
break;
case "imr_sample_apply_secondary_audit":
handleSecondaryAudit(dto, statusList, geStatusList, leStatusList);
break;
case "imr_sample_apply_approval":
handleApproval(dto, statusList, geStatusList, leStatusList);
isApproved = true;
break;
default:
// 其他权限的处理,如果有需要
break;
}
}
if (dto.getStatus() != null) {
switch (dto.getStatus()) {
case 0:
queryWrapper.le("application_status", Collections.min(leStatusList))
.or()
.ge("application_status", Collections.max(geStatusList));
break;
case 1:
queryWrapper.ge("application_status", Collections.max(geStatusList));
break;
case 2:
queryWrapper.le("application_status", Collections.min(leStatusList));
break;
}
}
queryWrapper.in(CollUtil.isNotEmpty(statusList), "application_status", statusList)
.eq(!isApproved, "apply_type", 1) // 没有审批权限则只查询外出申请的
.between(dto.getBeginDate() != null && dto.getFinishDate() != null, "application_date", dto.getBeginDate(), dto.getFinishDate())
.orderByDesc("application_date");
IPage<SampleApplyVO> applyVOPage = sampleApplyService.getApplyPage(
page,
queryWrapper
);
return applyVOPage;
}
/**
* 处理审批状态的逻辑
*
* @param dto 查询申请DTO对象包含状态查询参数
* @param statusList 待审批状态的列表用于构造查询条件
* @param geStatus 大于等于状态的列表用于构造查询条件
* @param leStatus 小于等于状态的列表用于构造查询条件
*/
private void handleApproval(QueryApplyDTO dto, List<Integer> statusList, List<Integer> geStatus, List<Integer> leStatus) {
if(dto.getStatus()==null){
statusList.add(ApplyStatus.PENDING_APPROVAL.getStatus());
}else {
if(dto.getStatus()==0){
leStatus.add(ApplyStatus.APPROVAL_FAILED.getStatus());
geStatus.add(ApplyStatus.APPROVED.getStatus());
}else {
//通过status==1/不通过status==-1
if(dto.getStatus()==1){
geStatus.add(ApplyStatus.APPROVED.getStatus());
}
if(dto.getStatus()==-1){
leStatus.add(ApplyStatus.APPROVAL_FAILED.getStatus());
}
}
}
}
/**
* 处理二级审核的逻辑
*
* @param dto 查询申请DTO对象包含状态查询参数
* @param statusList 待二级审核状态的列表用于构造查询条件
* @param geStatus 大于等于状态的列表用于构造查询条件
* @param leStatus 小于等于状态的列表用于构造查询条件
*
* 此方法用于处理二级审核员的查询逻辑如果dto中的状态为null则表示查询所有待二级审核的申请
* 如果dto中的状态为0则表示查询所有二级审核状态的申请包括通过和未通过的情况
* 如果dto中的状态为1则表示查询所有已通过二级审核的申请
* 如果dto中的状态为-1则表示查询所有未通过二级审核的申请
* 注意二级审核员不应处理销毁申请
*/
private void handleSecondaryAudit(QueryApplyDTO dto, List<Integer> statusList, List<Integer> geStatus, List<Integer> leStatus) {
//二级审核员(不应该有销毁申请)
if(dto.getStatus()==null){
statusList.add(ApplyStatus.SECOND_LEVEL.getStatus());
}else {
if(dto.getStatus()==0){
//返回全部
leStatus.add(ApplyStatus.SECOND_LEVEL_FAIL.getStatus());
geStatus.add(ApplyStatus.PENDING_APPROVAL.getStatus());
}else {
//通过status==1/不通过status==-1
if(dto.getStatus()==1){
geStatus.add(ApplyStatus.PENDING_APPROVAL.getStatus());
}
if(dto.getStatus()==-1){
leStatus.add(ApplyStatus.SECOND_LEVEL_FAIL.getStatus());
}
}
}
}
/**
* 处理一级审核的逻辑
*
* @param dto 查询申请DTO对象包含状态查询参数
* @param statusList 待一级审核状态的列表用于构造查询条件
* @param geStatus 大于等于状态的列表用于构造查询条件
* @param leStatus 小于等于状态的列表用于构造查询条件
*
* 如果dto中的状态为null则表示查询所有待一级审核的申请不包含销毁申请
* 如果dto中的状态不为null则表示查询特定状态的申请
* - 如果状态为0表示查询所有一级审核状态的申请包括通过和未通过的情况
* - 如果状态为1表示查询所有已通过一级审核的申请
* - 如果状态为-1表示查询所有未通过一级审核的申请
*/
private void handleFirstAudit(QueryApplyDTO dto, List<Integer> statusList, List<Integer> geStatus, List<Integer> leStatus) {
if(dto.getStatus() == null){//审核初页面(不应该有销毁申请)
statusList.add(ApplyStatus.FIRST_LEVEL.getStatus());
}else {//点击通过页面时
if(dto.getStatus()==0){
//返回全部
leStatus.add(ApplyStatus.FIRST_LEVEL_FAIL.getStatus());
geStatus.add(ApplyStatus.SECOND_LEVEL.getStatus());
} else {
//通过status==1/不通过status==-1
if(dto.getStatus()==1){
geStatus.add(ApplyStatus.SECOND_LEVEL.getStatus());
}
if(dto.getStatus()==-1){
leStatus.add(ApplyStatus.FIRST_LEVEL_FAIL.getStatus());
}
}
}
}
}

Loading…
Cancel
Save