diff --git a/src/main/java/digital/laboratory/platform/imr/controller/ReviewApprovalController.java b/src/main/java/digital/laboratory/platform/imr/controller/ReviewApprovalController.java index 3faec1d..7be1b94 100644 --- a/src/main/java/digital/laboratory/platform/imr/controller/ReviewApprovalController.java +++ b/src/main/java/digital/laboratory/platform/imr/controller/ReviewApprovalController.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 page = new Page<>(dto.getCurrent(),dto.getSize()); - QueryWrapper queryWrapper = new QueryWrapper<>(); - ArrayList list = new ArrayList<>(); - - Set 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 applyVOPage = sampleApplyService.getApplyPage(page, queryWrapper); - return R.ok(applyVOPage,"查询成功"); + IPage 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 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,"审核成功"); } } diff --git a/src/main/java/digital/laboratory/platform/imr/enums/ApplyStatus.java b/src/main/java/digital/laboratory/platform/imr/enums/ApplyStatus.java index 6ff5537..9beb2ea 100644 --- a/src/main/java/digital/laboratory/platform/imr/enums/ApplyStatus.java +++ b/src/main/java/digital/laboratory/platform/imr/enums/ApplyStatus.java @@ -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 getPendingApprovalStatuses() { + return Arrays.stream(ApplyStatus.values()) + .filter(status -> status == ApplyStatus.FIRST_LEVEL || + status == ApplyStatus.SECOND_LEVEL || + status == ApplyStatus.PENDING_APPROVAL) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/digital/laboratory/platform/imr/service/ReviewApprovalService.java b/src/main/java/digital/laboratory/platform/imr/service/ReviewApprovalService.java index 548d4d4..f2d78d1 100644 --- a/src/main/java/digital/laboratory/platform/imr/service/ReviewApprovalService.java +++ b/src/main/java/digital/laboratory/platform/imr/service/ReviewApprovalService.java @@ -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 getAuditPage(Page page, QueryWrapper qw); + SampleApplyVO approval(ReviewApprovalDTO dto, SampleApply sampleApply, DLPUser dlpUser); - //List getAuditList(QueryWrapper qw); + /** + * 获取审核分页列表 + * + * 根据查询参数和当前用户的权限,返回对应的审核分页列表。 + * + * @param dto 查询申请DTO对象,包含分页和查询条件参数 + * @param dlpUser 当前用户信息,用于判断权限 + * @return 审核分页列表对象,包含查询结果和分页信息 + */ + IPage auditPage(QueryApplyDTO dto, DLPUser dlpUser); } diff --git a/src/main/java/digital/laboratory/platform/imr/service/impl/ReviewApprovalServiceImpl.java b/src/main/java/digital/laboratory/platform/imr/service/impl/ReviewApprovalServiceImpl.java index 6f46d04..06ce23c 100644 --- a/src/main/java/digital/laboratory/platform/imr/service/impl/ReviewApprovalServiceImpl.java +++ b/src/main/java/digital/laboratory/platform/imr/service/impl/ReviewApprovalServiceImpl.java @@ -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 queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("apply_id",dto.getApplyId()); + queryWrapper.eq("apply_id", dto.getApplyId()); List applyDetailed = detailedMapper.selectList(queryWrapper); ArrayList idList = new ArrayList<>(); List 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 not = queryWrapper.notIn("id", idList); List 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 not = queryWrapper.notIn("id", idList); List 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 queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("apply_id",dto.getApplyId()); + queryWrapper.eq("apply_id", dto.getApplyId()); List applyDetailed = detailedMapper.selectList(queryWrapper); ArrayList idList = new ArrayList<>(); List 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 not = queryWrapper.notIn("id", idList); List 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 not = queryWrapper.notIn("id", idList); List 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 queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("apply_id",dto.getApplyId()); + queryWrapper.eq("apply_id", dto.getApplyId()); List applyDetailed = detailedMapper.selectList(queryWrapper); ArrayList idList = new ArrayList<>(); List 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 not = queryWrapper.notIn("id", idList); List 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 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 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 not = queryWrapper.notIn("id", idList); List 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 auditPage(QueryApplyDTO dto, DLPUser dlpUser) { + Page page = new Page<>(dto.getCurrent(), dto.getSize()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + + Set permissions = dlpUser.getPermissions();//判断权限 + /** 20241219 因为当一个用户同时拥有三个权限时,查询条件会发生冲突 + * 目前想通过一个list 收集要查询的状态,最后in查询 + */ + List statusList = new ArrayList<>(); + List geStatusList = new ArrayList<>(); + List 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 applyVOPage = sampleApplyService.getApplyPage( + page, + queryWrapper + ); + return applyVOPage; + } + + /** + * 处理审批状态的逻辑 + * + * @param dto 查询申请DTO对象,包含状态查询参数 + * @param statusList 待审批状态的列表,用于构造查询条件 + * @param geStatus 大于等于状态的列表,用于构造查询条件 + * @param leStatus 小于等于状态的列表,用于构造查询条件 + */ + private void handleApproval(QueryApplyDTO dto, List statusList, List geStatus, List 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 statusList, List geStatus, List 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 statusList, List geStatus, List 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()); + } + } + } + } + }