ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java
@@ -164,28 +164,7 @@ } culturePreservationService.saveBatch(culturePreservations); if (dto.getStatus()!=null&&dto.getStatus()==2){ // 新增消息 TNotice tNotice = new TNotice(); List<String> allProjectIds = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getTeamId,dto.getProjectId()) .eq(TProjectTeamStaff::getRoleType, 2) .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList()); if (!allProjectIds.isEmpty()){ TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds) .eq(TProjectTeam::getStatus, 1) .orderByDesc(BaseModel::getCreateTime).last("limit 1").one(); TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one(); tNotice.setUserId(projectTeamStaff.getUserId()); tNotice.setCommitId(tokenService.getLoginUser().getUserId()+""); tNotice.setStatus(1); tNotice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;"); tNotice.setDataId(dto.getId()); tNotice.setNoticeType(5); noticeService.save(tNotice); } notifyProjectEngineers(dto.getProjectId(), dto.getId(), 5); } return R.ok(); } @@ -209,8 +188,33 @@ dto.setIsDraft(0); } TBreedingAndPreservation breedingAndPreservationServiceById = breedingAndPreservationService.getById(dto.getId()); if (breedingAndPreservationServiceById == null) { return R.fail("记录不存在"); } if (breedingAndPreservationServiceById.getStatus()==1){ return R.fail("该记录已提交,不可编辑!"); } SysUser currentUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId()); if ("3".equals(currentUser.getRoleType())) { return R.fail("菌种工程师只能进行入库确认,不能编辑记录"); } List<TVaccinationSlope> vaccinationSlopes = dto.getVaccinationSlopes(); List<TCulturePreservation> culturePreservations = dto.getCulturePreservations(); if (vaccinationSlopes == null || culturePreservations == null) { return R.fail("接种斜面记录和菌种保藏记录不能为空"); } if (dto.getStatus() != null && dto.getStatus() == 1) { if (breedingAndPreservationServiceById.getStatus() == null || breedingAndPreservationServiceById.getStatus() != 2) { return R.fail("请先同步给保藏人并完成入库确认"); } boolean slopeUnconfirmed = vaccinationSlopes.stream().anyMatch(item -> !StringUtils.hasLength(item.getPreserveId()) || !StringUtils.hasLength(item.getPreserveSignature())); boolean preservationUnconfirmed = culturePreservations.stream().anyMatch(item -> !StringUtils.hasLength(item.getPreserveId()) || !StringUtils.hasLength(item.getPreserveSignature())); if (slopeUnconfirmed || preservationUnconfirmed) { return R.fail("存在未确认的接种斜面或菌种保藏记录,不能提交"); } } breedingAndPreservationService.updateById(dto); List<TSeparationOfCultureDishes> separationOfCultureDishesList = dto.getSeparationOfCultureDishesList(); @@ -225,60 +229,62 @@ } observationOfPetriDishesService.remove(new LambdaQueryWrapper<TObservationOfPetriDishes>().eq(TObservationOfPetriDishes::getBreedingPreserveId, dto.getId())); observationOfPetriDishesService.saveBatch(observationOfPetriDishes); List<TVaccinationSlope> vaccinationSlopes = dto.getVaccinationSlopes(); for (TVaccinationSlope vaccinationSlope : vaccinationSlopes) { if (dto.getStatus()==1&&!StringUtils.hasLength(vaccinationSlope.getPreserveId())){ return R.fail("接种斜面记录未确认,不能提交"); } vaccinationSlope.setBreedingPreserveId(dto.getId()); } vaccinationSlopeService.remove(new LambdaQueryWrapper<TVaccinationSlope>().eq(TVaccinationSlope::getBreedingPreserveId, dto.getId())); vaccinationSlopeService.saveBatch(vaccinationSlopes); List<TCulturePreservation> culturePreservations = dto.getCulturePreservations(); for (TCulturePreservation tSeparationOfCultureDishes : culturePreservations) { tSeparationOfCultureDishes.setBreedingPreserveId(dto.getId()); } culturePreservationService.remove(new LambdaQueryWrapper<TCulturePreservation>().eq(TCulturePreservation::getBreedingPreserveId, dto.getId())); for (TCulturePreservation culturePreservation : culturePreservations) { if (dto.getStatus()==1&&!StringUtils.hasLength(culturePreservation.getPreserveId())){ return R.fail("菌种保藏记录未确认,不能提交"); } culturePreservation.setBreedingPreserveId(dto.getId()); } culturePreservationService.saveBatch(culturePreservations); if (dto.getStatus()==2){ // 新增消息 TNotice tNotice = new TNotice(); List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId()) .eq(TProjectTeamStaff::getRoleType, 3) .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList()); if (!allProjectIds.isEmpty()){ TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds) .eq(TProjectTeam::getStatus, 1) .orderByDesc(BaseModel::getCreateTime).last("limit 1").one(); TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one(); tNotice.setUserId(one1.getUserId()); tNotice.setCommitId(tokenService.getLoginUser().getUserId()+""); tNotice.setStatus(1); tNotice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;"); tNotice.setDataId(dto.getId()); tNotice.setNoticeType(6); noticeService.save(tNotice); } notifyProjectEngineers(dto.getProjectId(), dto.getId(), 6); } return R.ok(); } private void notifyProjectEngineers(String projectId, String dataId, int noticeType) { List<TProjectTeamStaff> engineers = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getTeamId, projectId) .eq(TProjectTeamStaff::getRoleType, 3) .list(); for (TProjectTeamStaff engineer : engineers) { TNotice notice = new TNotice(); notice.setUserId(engineer.getUserId()); notice.setCommitId(tokenService.getLoginUser().getUserId() + ""); notice.setStatus(1); notice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;"); notice.setDataId(dataId); notice.setNoticeType(noticeType); noticeService.save(notice); } } @Log(title = "接种斜面记录确认入库", businessType = BusinessType.UPDATE) @ApiOperation(value = "接种斜面记录确认入库",response = TConfirmBreedingAndPreservationDTO.class) @PostMapping(value = "/api/t-breeding-and-preservation/vaccinationSlopesConfirm") public R<Boolean> vaccinationSlopesConfirm(@RequestBody String param) { if (tokenService.getLoginUser() == null) { return R.fail(401, "登陆失效"); } Long userId = tokenService.getLoginUser().getUserId(); TConfirmBreedingAndPreservationDTO dto = JSON.parseObject(param,TConfirmBreedingAndPreservationDTO.class); TVaccinationSlope vaccinationSlope = vaccinationSlopeService.getById(dto.getId()); if (vaccinationSlope == null) { return R.fail("接种斜面记录不存在"); } R<Boolean> validation = validatePreservationConfirmation(vaccinationSlope.getBreedingPreserveId(), userId, vaccinationSlope.getPreserveSignature()); if (validation != null) { return validation; } vaccinationSlope.setPreserveId(userId+""); vaccinationSlope.setPreserveTime(LocalDateTime.now()); vaccinationSlope.setPreserveSignature(dto.getPreserveSignature()); @@ -289,9 +295,20 @@ @ApiOperation(value = "菌种保藏记录确认入库",response = TConfirmBreedingAndPreservationDTO.class) @PostMapping(value = "/api/t-breeding-and-preservation/culturePreservationsConfirm") public R<Boolean> culturePreservationsConfirm(@RequestBody String param) { if (tokenService.getLoginUser() == null) { return R.fail(401, "登陆失效"); } Long userId = tokenService.getLoginUser().getUserId(); TConfirmBreedingAndPreservationDTO dto = JSON.parseObject(param,TConfirmBreedingAndPreservationDTO.class); TCulturePreservation culturePreservation = culturePreservationService.getById(dto.getId()); if (culturePreservation == null) { return R.fail("菌种保藏记录不存在"); } R<Boolean> validation = validatePreservationConfirmation(culturePreservation.getBreedingPreserveId(), userId, culturePreservation.getPreserveSignature()); if (validation != null) { return validation; } culturePreservation.setPreserveId(userId+""); culturePreservation.setPreserveTime(LocalDateTime.now()); culturePreservation.setPreserveSignature(dto.getPreserveSignature()); @@ -302,28 +319,56 @@ @Resource private TProjectTeamMapper tProjectTeamMapper; private R<Boolean> validatePreservationConfirmation(String breedingPreserveId, Long userId, String existingSignature) { if (StringUtils.hasLength(existingSignature)) { return R.fail("该记录已经确认,不能重复签字"); } TBreedingAndPreservation record = breedingAndPreservationService.getById(breedingPreserveId); if (record == null || record.getStatus() == null || record.getStatus() != 2) { return R.fail("仅已同步且未提交的记录可以确认入库"); } boolean isProjectEngineer = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getTeamId, record.getProjectId()) .eq(TProjectTeamStaff::getUserId, userId) .count() > 0; SysUser sysUser = sysUserService.selectUserById(userId); if (isProjectEngineer) { if (!sysUser.getRoleType().equals("3")) { return R.fail("仅当前项目的菌种工程师可以确认入库"); } } return null; } //@PreAuthorize("@ss.hasPermi('system:breedingAndPreservation:detail')") @ApiOperation(value = "选育保藏记录详情") @GetMapping(value = "/open/t-breeding-and-preservation/getDetailById") public R<TBreedingAndPreservationDetailVO> getDetailById(@RequestParam String id) { if (!StringUtils.hasText(id)) { return R.fail("记录ID不能为空"); } TBreedingAndPreservation breedingAndPreservation = breedingAndPreservationService.getById(id); if (breedingAndPreservation == null) { return R.fail("菌种选育保藏记录不存在或已删除"); } List<SysUser> sysUsers = sysUserService.selectAllList(); TBreedingAndPreservationDetailVO res = new TBreedingAndPreservationDetailVO(); TBreedingAndPreservation breedingAndPreservation = breedingAndPreservationService.getById(id); BeanUtils.copyProperties(breedingAndPreservation, res); List<TSeparationOfCultureDishes> separationOfCultureDishesList = separationOfCultureDishesService.lambdaQuery().eq(TSeparationOfCultureDishes::getBreedingPreserveId, id).list(); List<TObservationOfPetriDishes> observationOfPetriDishes = observationOfPetriDishesService.lambdaQuery().eq(TObservationOfPetriDishes::getBreedingPreserveId, id).list(); List<TVaccinationSlope> vaccinationSlopes = vaccinationSlopeService.lambdaQuery().eq(TVaccinationSlope::getBreedingPreserveId, id).list(); List<TCulturePreservation> culturePreservations = culturePreservationService.lambdaQuery().eq(TCulturePreservation::getBreedingPreserveId, id).list(); for (TCulturePreservation culturePreservation : culturePreservations) { SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(culturePreservation.getHandleId()))).findFirst() .orElse(null); SysUser sysUser = findUserById(sysUsers, culturePreservation.getHandleId()); if (sysUser!=null){ culturePreservation.setHandleName(sysUser.getNickName()); } } for (TVaccinationSlope vaccinationSlope : vaccinationSlopes) { SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(vaccinationSlope.getHandleId()))).findFirst() .orElse(null); SysUser sysUser = findUserById(sysUsers, vaccinationSlope.getHandleId()); if (sysUser!=null){ vaccinationSlope.setHandleName(sysUser.getNickName()); } @@ -355,6 +400,21 @@ res.setVaccinationSlopes(vaccinationSlopes); res.setCulturePreservations(culturePreservations); return R.ok(res); } private SysUser findUserById(List<SysUser> sysUsers, String userId) { if (!StringUtils.hasText(userId)) { return null; } try { Long parsedUserId = Long.valueOf(userId); return sysUsers.stream() .filter(user -> user.getUserId() != null && user.getUserId().equals(parsedUserId)) .findFirst() .orElse(null); } catch (NumberFormatException exception) { return null; } } // // @Log(title = "培养皿分离记录删除", businessType = BusinessType.DELETE) @@ -394,6 +454,13 @@ @ApiOperation(value = "菌种保藏记录删除") @DeleteMapping(value = "/open/t_project_team/deleteBreedingAndPreservation") public R<Boolean> deleteCulturePreservation(@RequestParam String id) { TBreedingAndPreservation record = breedingAndPreservationService.getById(id); if (record == null) { return R.fail("记录不存在"); } if (record.getStatus() != null && record.getStatus() == 1) { return R.fail("该记录已提交,不可删除"); } return R.ok(breedingAndPreservationService.removeById(id)); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java
@@ -171,7 +171,7 @@ count.setPedigreeChartId(parent.getId()); count.setId(null); if (parent.getStatus()==1){ count.setAuditStatus(0); count.setAuditStatus(1); }else{ count.setAuditStatus(1); } @@ -206,12 +206,12 @@ TPedigreeChartParentTwoCountDTO childCount = count1List.get(0); childCount.setType(2); if (parent.getStatus()==1){ count.setAuditStatus(0); childCount.setAuditStatus(1); }else{ count.setAuditStatus(1); childCount.setAuditStatus(1); } count.setVaccinateId(loginUser.getUserId()+""); count.setVaccinateTime(LocalDateTime.now()); childCount.setVaccinateId(loginUser.getUserId()+""); childCount.setVaccinateTime(LocalDateTime.now()); childCount.setParentId(tPedigreeChartParentTwoDTO.getId()); childCount.setPedigreeChartId(parent.getId()); childCount.setStatus(1); @@ -317,7 +317,7 @@ Integer status = parent.getStatus(); TPedigreeChart pedigreeChart = pedigreeChartService.getById(parent.getId()); if (pedigreeChart.getStatus() == 2){ parent.setStatus(2); return R.fail("谱系图已提交,不可编辑"); } pedigreeChartService.updateById(parent); parent.setStatus( status); @@ -371,7 +371,7 @@ count.setStatus(1); if (count.getId()==null){ if (parent.getStatus()==1){ count.setAuditStatus(0); count.setAuditStatus(1); count.setCodeStatus(parent.getStatus()); }else{ count.setAuditStatus(1); @@ -447,7 +447,7 @@ childCount.setType(2); if (childCount.getId()==null){ if (parent.getStatus()==1){ childCount.setAuditStatus(0); childCount.setAuditStatus(1); childCount.setCodeStatus(parent.getStatus()); }else{ childCount.setAuditStatus(1); @@ -543,7 +543,7 @@ .eq(TProjectTeam::getStatus, 1) .orderByDesc(BaseModel::getCreateTime).last("limit 1").one(); TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getTeamId, team.getId()).eq(TProjectTeamStaff::getRoleType, 1).one(); .eq(TProjectTeamStaff::getTeamId, team.getId()).eq(TProjectTeamStaff::getRoleType, 2).one(); tNotice.setCommitId(tokenService.getLoginUser().getUserId()+""); tNotice.setUserId(projectTeamStaff.getUserId()); tNotice.setStatus(1); @@ -692,7 +692,21 @@ public R<TPedigreeChart> getDetailInfoById(@RequestParam String id) { List<TPedigreeChartParentOneDTO> tPedigreeChartParentOneDTOS = new ArrayList<>(); TPedigreeChart pedigreeChart = pedigreeChartService.getById(id); List<TPedigreeChartDetail> details = pedigreeChartDetailService.lambdaQuery().eq(TPedigreeChartDetail::getPedigreeChartId, id).list(); if (pedigreeChart == null) { return R.fail("谱系图不存在或已删除"); } List<TPedigreeChartDetail> details = new ArrayList<>(pedigreeChartDetailService.lambdaQuery() .eq(TPedigreeChartDetail::getPedigreeChartId, id) .orderByDesc(TPedigreeChartDetail::getUpdateTime) .orderByDesc(TPedigreeChartDetail::getCreateTime) .list().stream() .filter(detail -> StringUtils.isNotEmpty(detail.getId())) .collect(Collectors.toMap( TPedigreeChartDetail::getId, detail -> detail, (first, duplicate) -> first, LinkedHashMap::new )).values()); TPedigreeChartParentAllDetailDTO tPedigreeChartParentAllDetailDTO = new TPedigreeChartParentAllDetailDTO(); // 祖代 TPedigreeChartDetail pedigreeChartDetail = details.stream().filter(e -> e.getParentId().equals("0") @@ -714,7 +728,6 @@ List<TPedigreeChartDetail> childs = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentOneCountDTO.getId()) && e.getType() == 1).collect(Collectors.toList()); List<TPedigreeChartParentTwoDTO> tPedigreeChartParentTwoDTOS = new ArrayList<>(); List<TPedigreeChartParentThreeDTO> tPedigreeChartParentThreeDTOS = new ArrayList<>(); for (TPedigreeChartDetail tPedigreeChartDetail : childs) { TPedigreeChartParentTwoDTO tPedigreeChartParentTwoDTO = new TPedigreeChartParentTwoDTO(); BeanUtils.copyProperties(tPedigreeChartDetail,tPedigreeChartParentTwoDTO); @@ -725,6 +738,7 @@ ArrayList<TPedigreeChartParentTwoCountDTO> tPedigreeChartParentTwoCountDTOS = new ArrayList<>(); TPedigreeChartParentTwoCountDTO tPedigreeChartParentTwoCountDTO = new TPedigreeChartParentTwoCountDTO(); BeanUtils.copyProperties(childCountChild,tPedigreeChartParentTwoCountDTO); List<TPedigreeChartParentThreeDTO> tPedigreeChartParentThreeDTOS = new ArrayList<>(); List<TPedigreeChartDetail> childChilds = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentTwoCountDTO.getId()) && e.getType() == 1).collect(Collectors.toList()); for (TPedigreeChartDetail chartDetail : childChilds) { @@ -818,11 +832,7 @@ pedigreeChartDetail1.setType(2); pedigreeChartDetail1.setCodeStatus(dto.getCodeStatus()); if (dto.getCodeStatus()==1){ pedigreeChartDetail1.setAuditStatus(0); }else{ pedigreeChartDetail1.setAuditStatus(1); } pedigreeChartDetailService.save(pedigreeChartDetail1); return R.ok(); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java
@@ -16,20 +16,14 @@ import com.ruoyi.system.model.*; import com.ruoyi.system.query.TStrainReportProjectQuery; import com.ruoyi.system.query.TStrainReportQuery; import com.ruoyi.system.query.TTrainLibraryDetailQuery; import com.ruoyi.system.query.TTrainLibraryQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.*; import com.tencentcloudapi.tcaplusdb.v20190823.models.IdlFileInfo; import io.swagger.annotations.ApiOperation; import jdk.nashorn.internal.parser.Token; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.sql.Array; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -202,7 +196,8 @@ LoginUser loginUser = tokenService.getLoginUser(); SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId()); List<TStrainReport> tStrainReports = strainReportService.list(new LambdaQueryWrapper<TStrainReport>() .eq(TStrainReport::getStatus,3).eq(TStrainReport::getProjectId,id)); .eq(TStrainReport::getStatus,3).eq(TStrainReport::getProjectId,id) .orderByDesc(TStrainReport::getEvaluateTime)); List<String> strainReportIds = tStrainReports.stream().map(TStrainReport::getId).collect(Collectors.toList()); if (strainReportIds.isEmpty())strainReportIds.add("0"); List<TStrainReportDetail> tStrainReportDetails = strainReportDetailService @@ -258,12 +253,15 @@ } tStrainReportDetailVO.setStartTime(project.getCreateTime()); TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, project.getId()) .eq(TProjectTeamStaff::getRoleType, 2).one(); .eq(TProjectTeamStaff::getRoleType, 2).last("limit 1").one(); List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS = new ArrayList<>(); if (sysUser.getRoleType().equals("4")){ TStrainReportDetailExperimentVO tStrainReportDetailExperimentVO = new TStrainReportDetailExperimentVO(); tStrainReportDetailExperimentVO.setUserName(sysUser.getNickName()); tStrainReportDetailExperimentVO.setHandleCount((int) tStrainReportDetails.stream().filter(e -> e.getExperimentId()!=null&&e.getExperimentId().equals(sysUser.getUserId() + "")).count()); tStrainReportDetailExperimentVO.setHandleCount((int) tStrainReportDetails.stream() .filter(e -> e.getEvaluateHumanType().equals(1) && e.getReportType() == 1 && e.getExperimentId()!=null && e.getExperimentId().equals(sysUser.getUserId() + "")) .count()); BigDecimal handleIntegral = tStrainReportDetails.stream() .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+"") &&e.getReportType()==1) @@ -272,9 +270,12 @@ .orElse(BigDecimal.ZERO); tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral); List<TStrainReportDetail> strainReportDetails = tStrainReportDetails.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId() + "")).collect(Collectors.toList()); List<TStrainReportDetail> strainReportDetails = tStrainReportDetails.stream() .filter(e -> e.getEvaluateHumanType().equals(1) && e.getReportType() == 1 && e.getExperimentId().equals(sysUser.getUserId() + "")) .collect(Collectors.toList()); if (!strainReportDetails.isEmpty()){ tStrainReportDetailExperimentVO.setHandleEndTime(strainReportDetails.get(strainReportDetails.size()-1).getCreateTime()); tStrainReportDetailExperimentVO.setHandleEndTime(strainReportDetails.get(0).getCreateTime()); } tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime()); tStrainReportDetailExperimentVOS.add(tStrainReportDetailExperimentVO); @@ -305,14 +306,18 @@ tStrainReportDetailExperimentVO.setUserName(sysUserService.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId())).getNickName()); tStrainReportDetailExperimentVO.setHandleCount((int) collect.stream().filter(e -> e.getExperimentId().equals(tStrainReportDetail.getExperimentId())).count()); BigDecimal handleIntegral = collect.stream() .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+"") &&e.getReportType()==1) .filter(e -> e.getEvaluateHumanType().equals(1) && e.getExperimentId().equals(tStrainReportDetail.getExperimentId()) && e.getReportType()==1) .map(TStrainReportDetail::getEvaluateTotal) .reduce(BigDecimal::add) .orElse(BigDecimal.ZERO); tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral); List<TStrainReportDetail> reportDetails = collect.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId()+"")).collect(Collectors.toList()); List<TStrainReportDetail> reportDetails = collect.stream() .filter(e -> e.getExperimentId().equals(tStrainReportDetail.getExperimentId())) .collect(Collectors.toList()); if (!reportDetails.isEmpty()){ tStrainReportDetailExperimentVO.setHandleEndTime(reportDetails.get(reportDetails.size()-1).getCreateTime()); tStrainReportDetailExperimentVO.setHandleEndTime(reportDetails.get(0).getCreateTime()); } tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime()); tStrainReportDetailExperimentVOS1.add(tStrainReportDetailExperimentVO); @@ -327,7 +332,7 @@ tStrainReportDetailEngineerVO.setInnovateIntegral(reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(1)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); List<TStrainReportDetail> tStrainReportDetails1 = reportDetails.stream().filter(e ->e.getEvaluateType()!=null&& e.getEvaluateType().equals(1)).collect(Collectors.toList()); if (!tStrainReportDetails1.isEmpty()){ tStrainReportDetailEngineerVO.setInnovateEndTime(tStrainReportDetails1.get(tStrainReportDetails1.size()-1).getCreateTime()); tStrainReportDetailEngineerVO.setInnovateEndTime(tStrainReportDetails1.get(0).getCreateTime()); } tStrainReportDetailEngineerVO.setInnovateStartTime(project.getCreateTime()); @@ -335,7 +340,7 @@ tStrainReportDetailEngineerVO.setRegulationIntegral(reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(2)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); List<TStrainReportDetail> collect4 = reportDetails.stream().filter(e -> e.getEvaluateType()!=null&&e.getEvaluateType().equals(2)).collect(Collectors.toList()); if (!collect4.isEmpty()){ tStrainReportDetailEngineerVO.setRegulationEndTime(collect4.get(collect4.size()-1).getCreateTime()); tStrainReportDetailEngineerVO.setRegulationEndTime(collect4.get(0).getCreateTime()); } tStrainReportDetailEngineerVO.setRegulationStartTime(project.getCreateTime()); @@ -343,7 +348,7 @@ tStrainReportDetailEngineerVO.setHandleIntegral(reportDetails.stream().filter(e->e.getReportType().equals(1)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); List<TStrainReportDetail> reportDetailList = reportDetails.stream().filter(e->e.getReportType().equals(1)).collect(Collectors.toList()); if (!reportDetailList.isEmpty()){ tStrainReportDetailEngineerVO.setHandleEndTime(reportDetailList.get(reportDetailList.size()-1).getCreateTime()); tStrainReportDetailEngineerVO.setHandleEndTime(reportDetailList.get(0).getCreateTime()); } tStrainReportDetailEngineerVO.setHandleStartTime(project.getCreateTime()); @@ -356,7 +361,9 @@ .map(TStrainReportDetail::getExperimentId) .distinct() .collect(Collectors.toList()); List<TStrainReportDetail> tStrainReportDetails2 = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)).collect(Collectors.toList()); List<TStrainReportDetail> tStrainReportDetails2 = tStrainReportDetails.stream() .filter(e -> e.getEvaluateHumanType().equals(1) && e.getReportType() == 1) .collect(Collectors.toList()); for (String experimentId : experimentIds) { List<TStrainReportDetail> details = tStrainReportDetails2.stream().filter(e -> e.getExperimentId().equals(experimentId)).collect(Collectors.toList()); @@ -371,8 +378,8 @@ .reduce(BigDecimal::add) .orElse(BigDecimal.ZERO); tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral); if (!tStrainReportDetails2.isEmpty()){ tStrainReportDetailExperimentVO.setHandleEndTime(details.get(details.size()-1).getCreateTime()); if (!details.isEmpty()){ tStrainReportDetailExperimentVO.setHandleEndTime(details.get(0).getCreateTime()); } tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime()); tStrainReportDetailExperimentVOS1.add(tStrainReportDetailExperimentVO); @@ -590,6 +597,9 @@ public R<TStrainReportDetailVO> detail(@RequestParam String id) { TStrainReportDetailVO tStrainReportDetailVO = new TStrainReportDetailVO(); TStrainReport strainReport = strainReportService.getById(id); if (strainReport == null) { return R.fail("报告不存在或已删除"); } if (strainReport.getAuditId()!=null){ SysUser sysUser = sysUserService.selectUserById(Long.valueOf(strainReport.getAuditId())); if (sysUser!=null){ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java
@@ -242,6 +242,9 @@ @GetMapping(value = "/open/t-strain-validation-data/getDetailById") public R<AddStrainValidationDataDetailVO> getDetailMainById(@RequestParam String id) { TStrainValidationData strainValidationData = strainValidationDataService.getById(id); if (strainValidationData == null) { return R.fail("菌种验证资料不存在或已删除"); } AddStrainValidationDataDetailVO res = new AddStrainValidationDataDetailVO(); BeanUtils.copyProperties(strainValidationData,res); List<TStrainValidationDataDetail> list = strainValidationDataDetailService.lambdaQuery().eq(TStrainValidationDataDetail::getDataId, id).list(); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java
@@ -98,12 +98,14 @@ public R<PageInfo<TProjectTeamVO>> choiceProjectList(@RequestBody String param) { LoginUser loginUser = tokenService.getLoginUser(); SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId()); List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, sysUser.getUserId()).list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList()); ChoiceProjectDTO query = JSON.parseObject(param, ChoiceProjectDTO.class); if (!"1".equals(sysUser.getRoleType())) { List<String> projectIds = getAccessibleProjectIds(sysUser.getUserId()); if (projectIds.isEmpty()){ projectIds.add("0"); } ChoiceProjectDTO query = JSON.parseObject(param, ChoiceProjectDTO.class); query.setProjectIds(projectIds); } return R.ok(projectTeamService.choiceProjectList(query)); } @@ -116,31 +118,41 @@ Long userId = tokenService.getLoginUser().getUserId(); SysUser sysUser = sysUserService.selectUserById(userId); TTrainLibraryQuery query = JSON.parseObject(param, TTrainLibraryQuery.class); if (sysUser.getRoleType().equals("2")){ if (CollectionUtils.isNotEmpty(query.getProjectIds())) { query.setProjectIds(query.getProjectIds()); } }else if (!sysUser.getRoleType().equals("1")){ if (CollectionUtils.isNotEmpty(query.getProjectIds())) { query.setProjectIds(query.getProjectIds()); }else { // 没有根据项目组查询 List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId()) .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList()); if (!allProjectIds.isEmpty()){ List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds) .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList()); if (projectIds.isEmpty()){ if (!sysUser.getRoleType().equals("1")){ List<String> accessibleProjectIds = getAccessibleProjectIds(userId); if (accessibleProjectIds.isEmpty()) { return R.ok(new PageInfo<>()); } query.setProjectIds(projectIds); }else { if (CollectionUtils.isNotEmpty(query.getProjectIds())) { List<String> requestedProjectIds = new ArrayList<>(query.getProjectIds()); requestedProjectIds.retainAll(accessibleProjectIds); if (requestedProjectIds.isEmpty()) { return R.ok(new PageInfo<>()); } query.setProjectIds(requestedProjectIds); } else { query.setProjectIds(accessibleProjectIds); } } return R.ok(tTrainLibraryService.pageList(query, sysUser.getRoleType())); } private List<String> getAccessibleProjectIds(Long userId) { List<String> teamIds = projectTeamStaffService.lambdaQuery() .eq(TProjectTeamStaff::getUserId, userId) .list().stream() .map(TProjectTeamStaff::getTeamId) .distinct() .collect(Collectors.toList()); if (teamIds.isEmpty()) { return new ArrayList<>(); } return projectTeamService.lambdaQuery() .in(TProjectTeam::getId, teamIds) .eq(TProjectTeam::getStatus, 1) .list().stream() .map(TProjectTeam::getId) .collect(Collectors.toList()); } /** @@ -395,6 +407,9 @@ @GetMapping(value = "/open/t-train-library/getDetailEditById") public R<TTrainLibraryDetailVO> getDetailEditById(@RequestParam String id) { TTrainLibrary trainLibrary = tTrainLibraryService.getById(id); if (trainLibrary == null) { return R.fail("菌种库记录不存在或已删除"); } TTrainLibraryDetailVO tTrainLibraryDetailVO = new TTrainLibraryDetailVO(); BeanUtils.copyProperties(trainLibrary,tTrainLibraryDetailVO); return R.ok(tTrainLibraryDetailVO); ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -51,6 +51,16 @@ @Autowired private ISysRoleService roleService; // @PostMapping("/login") // public AjaxResult login(@RequestBody LoginBody loginBody) // { // AjaxResult ajax = AjaxResult.success(); // // 生成令牌 // String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), // loginBody.getUuid()); // ajax.put(Constants.TOKEN, token); // return ajax; // } /** * 账号密码登录 ruoyi-admin/src/main/resources/application-prod.yml
@@ -190,7 +190,7 @@ location: /file/ qrLocation: /file/qrCode/ accessPath: /file/ allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar|.ppt|.pptx allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.mp4|.pdf|.xls|.xlsx|.rar|.zip|.ppt|.pptx|.caj url: # prefix: http://localhost:${server.port}${server.servlet.context-path} prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path} ruoyi-admin/src/main/resources/application-test.yml
@@ -75,7 +75,7 @@ # 数据库索引 database: 0 # 密码 password: 123456 password: # 连接超时时间 timeout: 10s lettuce: @@ -95,9 +95,9 @@ druid: # 主库数据源 master: url: jdbc:mysql://192.168.110.34:3306/strain_library?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai url: jdbc:mysql://localhost:3399/strain_library?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 password: qwe123 # 从库数据源 slave: # 从数据源开关/默认关闭 @@ -155,7 +155,7 @@ # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 120 expireTime: 720 mybatis-plus: # 此处在多数据源中生效 @@ -190,7 +190,7 @@ location: /file/ qrLocation: /file/qrCode/ accessPath: /file/ allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.caj|.ppt|.pptx url: # prefix: http://localhost:${server.port}${server.servlet.context-path} prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path} ruoyi-admin/src/main/resources/application.yml
@@ -1,4 +1,5 @@ # 项目相关配置 spring: profiles: active: test # active: test active: prod ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
@@ -13,6 +13,7 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; /** * 文件上传控制类 @@ -48,6 +49,10 @@ } // 获取文件名称 String filename = mf.getOriginalFilename(); if (filename == null || !filename.contains(".")) { return AjaxResult.error("上传文件缺少扩展名!"); } filename = new File(filename).getName(); // 生成随机5位英文字母 String rename = ""; for (int i = 0; i < 5; i++) { @@ -56,9 +61,10 @@ long l = System.currentTimeMillis(); // 获取文件后缀 String temp = rename+l+filename; String ext = temp.substring(temp.lastIndexOf("."), temp.length()); String ext = temp.substring(temp.lastIndexOf(".")).toLowerCase(Locale.ROOT); // 检查文件类型 if (!fileUploadConfig.getAllowExt().contains(ext)) { String allowExt = fileUploadConfig.getAllowExt().toLowerCase(Locale.ROOT); if (!allowExt.contains(ext)) { return AjaxResult.error("上传文件格式不正确,仅支持" + fileUploadConfig.getAllowExt()); } File targetFile = new File(realPath, temp);//目标文件 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java
@@ -1,8 +1,6 @@ package com.ruoyi.common.utils.poi; import javafx.scene.control.Cell; /** * Excel数据格式处理适配器 * ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -112,7 +112,7 @@ .authorizeRequests() // 对于登录login 注册register 验证码captchaImage 允许匿名访问 .antMatchers("/getPrivacyAgreement/{agreementType}", "/applet/queryProtocolConfigByType","/applet/login", "/applet/queryProtocolConfigByType","/applet/login","/login", "/api/login","/applet/queryProtocolConfigByType", "/register","/applet/getCode","/applet/loginCode", "/applet/changepwd", "/captchaImage","/getCode","/loginCode", ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -62,6 +62,45 @@ @Autowired private SysPermissionService permissionService; public String login(String username, String password, String code, String uuid) { // 验证码校验 validateCaptcha(username, code, uuid); // 登录前置校验 loginPreCheck(username, password); // 用户验证 Authentication authentication = null; try { UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); AuthenticationContextHolder.setContext(authenticationToken); // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername authentication = authenticationManager.authenticate(authenticationToken); } catch (Exception e) { if (e instanceof BadCredentialsException) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); throw new UserPasswordNotMatchException(); } else { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); throw new ServiceException(e.getMessage()); } } finally { AuthenticationContextHolder.clearContext(); } AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); recordLoginInfo(loginUser.getUserId()); // 生成token return tokenService.createToken(loginUser); } /** * 登录验证 * ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TPedigreeChartServiceImpl.java
@@ -26,7 +26,10 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** @@ -74,7 +77,7 @@ @Override public PageInfo<TPedigreeChartDetailVO> pageListDetail(TPedigreeChartDetailQuery query) { PageInfo<TPedigreeChartDetailVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TPedigreeChartDetailVO> list = this.baseMapper.pageListDetail(query,pageInfo); List<TPedigreeChartDetailVO> list = distinctById(this.baseMapper.pageListDetail(query,pageInfo)); List<SysUser> sysUsers = sysUserMapper.selectAllList(); for (TPedigreeChartDetailVO tPedigreeChartDetailVO : list) { SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tPedigreeChartDetailVO.getVaccinateId()))) @@ -96,24 +99,50 @@ public PageInfo<TPedigreeChartDetailVO> pageListCountDetail(TPedigreeChartDetailQuery query) { TPedigreeChart tPedigreeChart = this.baseMapper.selectById(query.getId()); PageInfo<TPedigreeChartDetailVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TPedigreeChartDetailVO> list = this.baseMapper.pageListCountDetail(query,pageInfo); List<TPedigreeChartDetailVO> list = distinctById(this.baseMapper.pageListCountDetail(query,pageInfo)); List<SysUser> sysUsers = sysUserMapper.selectAllList(); for (TPedigreeChartDetailVO tPedigreeChartDetailVO : list) { SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tPedigreeChartDetailVO.getVaccinateId()))) SysUser sysUser = StringUtils.isEmpty(tPedigreeChartDetailVO.getVaccinateId()) ? null : sysUsers.stream() .filter(e -> e.getUserId().equals(Long.valueOf(tPedigreeChartDetailVO.getVaccinateId()))) .findFirst().orElse(null); if (sysUser!=null){ tPedigreeChartDetailVO.setExperimenter(sysUser.getNickName()); } SysUser sysUser1 = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tPedigreeChartDetailVO.getVaccinateId()))) .findFirst().orElse(null); if (sysUser1!=null){ tPedigreeChartDetailVO.setVaccinateName(sysUser.getNickName()); } TPedigreeChartDetail parent = pedigreeChartDetailMapper.selectList( Wrappers.<TPedigreeChartDetail>lambdaQuery() .eq(TPedigreeChartDetail::getId, tPedigreeChartDetailVO.getParentId()) .eq(TPedigreeChartDetail::getPedigreeChartId, query.getId()) .eq(TPedigreeChartDetail::getType, 1) .orderByDesc(TPedigreeChartDetail::getUpdateTime) .orderByDesc(TPedigreeChartDetail::getCreateTime) .last("limit 1") ).stream().findFirst().orElse(null); if (parent != null) { tPedigreeChartDetailVO.setStrainType(parent.getStrainType()); tPedigreeChartDetailVO.setSource(parent.getSource()); tPedigreeChartDetailVO.setColonyNumber(parent.getColonyNumber()); tPedigreeChartDetailVO.setStrainCode(StringUtils.isNotEmpty(parent.getStrainCode()) ? parent.getStrainCode() : tPedigreeChart.getStrainCode()); tPedigreeChartDetailVO.setStrainName(StringUtils.isNotEmpty(parent.getStrainName()) ? parent.getStrainName() : tPedigreeChart.getStrainName()); tPedigreeChartDetailVO.setConfirmTime(parent.getConfirmTime() != null ? parent.getConfirmTime() : parent.getStorageTime()); } else { tPedigreeChartDetailVO.setStrainCode(tPedigreeChart.getStrainCode()); tPedigreeChartDetailVO.setStrainName(tPedigreeChart.getStrainName()); tPedigreeChartDetailVO.setConfirmTime(tPedigreeChart.getCreateTime()); } } pageInfo.setRecords(list); return pageInfo; } private List<TPedigreeChartDetailVO> distinctById(List<TPedigreeChartDetailVO> list) { Map<String, TPedigreeChartDetailVO> uniqueRecords = new LinkedHashMap<>(); for (TPedigreeChartDetailVO detail : list) { uniqueRecords.putIfAbsent(detail.getId(), detail); } return new ArrayList<>(uniqueRecords.values()); } } ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml
@@ -39,7 +39,7 @@ and status = 2 </if> <if test="query.roleType == 2"> and status = 2 and (status = 1 or status = 2) </if> <if test="query.roleType == 3"> and (status = 2 or status = 1) ruoyi-ui/src/api/login.js
@@ -9,7 +9,7 @@ uuid } return request({ url: '/login', url: '/api/login', headers: { isToken: false }, ruoyi-ui/src/views/login.vue
@@ -72,8 +72,8 @@ return { codeUrl: "", loginForm: { username: "admin", password: "admin123", username: "", password: "", rememberMe: false, code: "", uuid: "" ruoyi-ui/vue.config.js
@@ -35,7 +35,7 @@ proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { target: `http://localhost:8081`, target: `http://localhost:8082`, changeOrigin: true, pathRewrite: { ['^' + process.env.VUE_APP_BASE_API]: '' sql/新的/strain_library.sql
New file Diff too large