更新
20241219 更新 1.处理审核审批分页接口中由于当一个用户拥有一级审核、二级审核、审批的权限导致的权限冲突,使分页列表数据返回错误 2.处理审核审批接口权限冲突,导致只能进行一级审核 3.配置文件添加sql日志打印,便于追踪错误
This commit is contained in:
@@ -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,22 +97,38 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
SampleApplyVO approval(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser);
|
||||
|
||||
//IPage<SampleApplyVO> getAuditPage(Page<SampleApply> page, QueryWrapper<SampleApply> qw);
|
||||
|
||||
//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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user