| | |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.model.LoginUser; |
| | | import com.ruoyi.system.dto.TConfirmBreedingAndPreservationDTO; |
| | | import com.ruoyi.system.mapper.TProjectTeamMapper; |
| | | import com.ruoyi.system.model.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | |
| | |
| | | return R.ok(new PageInfo<>()); |
| | | } |
| | | }else if (!sysUser.getRoleType().equals("1")){ |
| | | 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 (query.getProjectIds() == null || query.getProjectIds().isEmpty()){ |
| | | 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 (projectIds.isEmpty()){ |
| | | return R.ok(new PageInfo<>()); |
| | | } |
| | | query.setProjectIds(projectIds); |
| | | }else { |
| | | return R.ok(new PageInfo<>()); |
| | | } |
| | | query.setProjectIds(projectIds); |
| | | }else { |
| | | return R.ok(new PageInfo<>()); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | 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(); |
| | | } |
| | |
| | | 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(); |
| | |
| | | } |
| | | 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()); |
| | |
| | | @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()); |
| | | culturePreservationService.updateById(culturePreservation); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @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()); |
| | | } |
| | | } |
| | | |
| | | if (com.ruoyi.common.utils.StringUtils.isNotEmpty(breedingAndPreservation.getProjectId())) { |
| | | TProjectTeam tProjectTeam = tProjectTeamMapper.selectById(breedingAndPreservation.getProjectId()); |
| | | if (tProjectTeam != null) { |
| | | List<TProjectTeamStaff> list = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, tProjectTeam.getId()).list(); |
| | | StringBuilder staffNames = new StringBuilder(); |
| | | for (TProjectTeamStaff tProjectTeamStaff : list) { |
| | | SysUser sysUser = sysUserService.selectUserById(Long.valueOf(tProjectTeamStaff.getUserId())); |
| | | if (sysUser!=null){ |
| | | staffNames.append(sysUser.getNickName()).append(","); |
| | | } |
| | | } |
| | | if (StringUtils.hasLength(staffNames.toString())){ |
| | | tProjectTeam.setStaff(staffNames.substring(0, staffNames.toString().length() - 1)); |
| | | } |
| | | |
| | | List<TProjectTeam> tProjectTeamList = new ArrayList<>(); |
| | | tProjectTeamList.add(tProjectTeam); |
| | | res.setTProjectTeamList(tProjectTeamList); |
| | | } |
| | | } |
| | | |
| | | res.setSeparationOfCultureDishesList(separationOfCultureDishesList); |
| | | res.setObservationOfPetriDishes(observationOfPetriDishes); |
| | | 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) |
| | |
| | | @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)); |
| | | } |
| | | } |