puzhibing
6 天以前 082bddee7df8a05ca95f473ec2643701d41a5213
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java
@@ -5,8 +5,10 @@
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;
@@ -89,18 +91,20 @@
                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<>());
            }
        }
@@ -160,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();
    }
@@ -205,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();
@@ -221,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());
@@ -285,46 +295,126 @@
    @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)
@@ -364,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));
    }
}