无关风月
2025-06-26 a0e9fac251df54e5ed6159ce1fdb77d463ebdc48
菌种库所有代码
30个文件已修改
864 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BaseController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/TPedigreeChartParentTwoCountDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TBreedingAndPreservation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TCulturePreservation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChartDetail.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TStrainValidationData.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TTrainLibrary.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TBreedingAndPreservationQuery.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TPedigreeChartQuery.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainReportProjectQuery.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TPedigreeChartServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TBreedingAndPreservationMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TStrainReportMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BaseController.java
@@ -31,8 +31,8 @@
    @Resource
    private TSeparationOfCultureDishesService separationOfCultureDishesService;
//    @Resource
//    private TStrainReportService strainReportService;
    @Resource
    private TStrainReportService strainReportService;
    @Resource
    private TStrainValidationDataService strainValidationDataService;
    @Resource
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java
@@ -71,12 +71,33 @@
    @ApiOperation(value = "菌种选育保藏记录-获取菌种选育保藏记录分页列表",response = TBreedingAndPreservationQuery.class)
    @PostMapping(value = "/api/t-breeding-and-preservation/pageList")
    public R<PageInfo<TBreedingAndPreservationVO>> pageList(@RequestBody String param) {
        LoginUser loginUser = tokenService.getLoginUser();
        if (loginUser==null){
            return R.fail(401,"登录失效");
        }
        SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId());
        TBreedingAndPreservationQuery query = JSON.parseObject(param, TBreedingAndPreservationQuery.class);
        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
        if (sysUser.getRoleType().equals("2")){
            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)
                        .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
                if (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }
        }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 (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }
        }
        return R.ok(breedingAndPreservationService.pageList(query));
    }
    /**
@@ -91,8 +112,20 @@
            return R.fail(401,"登陆失效");
        }
        TBreedingAndPreservationDTO dto = JSON.parseObject(param,TBreedingAndPreservationDTO.class);
        if (dto.getStatus()==1){
            return R.fail("有菌种待确认,无法提交");
        }
        if (dto.getStatus()==3){
            dto.setIsDraft(1);
        }
        List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
        if (!projectIds.isEmpty()){
            TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
                    .eq(TProjectTeam::getStatus, 1)
                    .orderByDesc(BaseModel::getCreateTime)
                    .last("limit 1").one();
            dto.setProjectId(projectTeam.getId());
        }
        breedingAndPreservationService.save(dto);
        List<TSeparationOfCultureDishes> separationOfCultureDishesList = dto.getSeparationOfCultureDishesList();
@@ -107,27 +140,31 @@
        observationOfPetriDishesService.saveBatch(observationOfPetriDishes);
        List<TVaccinationSlope> vaccinationSlopes = dto.getVaccinationSlopes();
        for (TVaccinationSlope tSeparationOfCultureDishes : vaccinationSlopes) {
            tSeparationOfCultureDishes.setHandleId(tokenService.getLoginUser().getUserId()+"");
            tSeparationOfCultureDishes.setHandleTime(LocalDateTime.now());
            tSeparationOfCultureDishes.setBreedingPreserveId(dto.getId());
        }
        vaccinationSlopeService.saveBatch(vaccinationSlopes);
        List<TCulturePreservation> culturePreservations = dto.getCulturePreservations();
        for (TCulturePreservation tSeparationOfCultureDishes : culturePreservations) {
            tSeparationOfCultureDishes.setHandleId(tokenService.getLoginUser().getUserId()+"");
            tSeparationOfCultureDishes.setHandleTime(LocalDateTime.now());
            tSeparationOfCultureDishes.setBreedingPreserveId(dto.getId());
        }
        culturePreservationService.saveBatch(culturePreservations);
        if (dto.getStatus()!=null&&dto.getStatus()==2){
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 2)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!collect.isEmpty()){
                TProjectTeam one = projectTeamService.lambdaQuery().in(TProjectTeam::getId, collect)
            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, one.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
                tNotice.setUserId(one1.getUserId());
                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);
@@ -146,7 +183,6 @@
    private TProjectTeamStaffService projectTeamStaffService;
    @Resource
    private TNoticeService noticeService;
    //@PreAuthorize("@ss.hasPermi('system:breedingAndPreservation:update')")
    @Log(title = "菌种选育保藏记录-编辑选育保藏记录", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "菌种选育保藏记录-编辑选育保藏记录",response = TBreedingAndPreservationDTO.class)
    @PostMapping(value = "/api/t-breeding-and-preservation/update")
@@ -188,14 +224,14 @@
        if (dto.getStatus()==2){
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 2)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            TProjectTeam one = projectTeamService.lambdaQuery().in(TProjectTeam::getId, collect)
            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, one.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
            tNotice.setUserId(one1.getUserId());
            tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
@@ -214,11 +250,11 @@
        Long userId = tokenService.getLoginUser().getUserId();
        TConfirmBreedingAndPreservationDTO dto = JSON.parseObject(param,TConfirmBreedingAndPreservationDTO.class);
        TVaccinationSlope byId = vaccinationSlopeService.getById(dto.getId());
        byId.setPreserveId(userId+"");
        byId.setPreserveTime(LocalDateTime.now());
        byId.setPreserveSignature(dto.getPreserveSignature());
        vaccinationSlopeService.updateById(byId);
        TVaccinationSlope vaccinationSlope = vaccinationSlopeService.getById(dto.getId());
        vaccinationSlope.setPreserveId(userId+"");
        vaccinationSlope.setPreserveTime(LocalDateTime.now());
        vaccinationSlope.setPreserveSignature(dto.getPreserveSignature());
        vaccinationSlopeService.updateById(vaccinationSlope);
        return R.ok();
    }
    @Log(title = "菌种保藏记录确认入库", businessType = BusinessType.UPDATE)
@@ -227,17 +263,18 @@
    public R<Boolean> culturePreservationsConfirm(@RequestBody String param) {
        Long userId = tokenService.getLoginUser().getUserId();
        TConfirmBreedingAndPreservationDTO dto = JSON.parseObject(param,TConfirmBreedingAndPreservationDTO.class);
        TCulturePreservation byId = culturePreservationService.getById(dto.getId());
        byId.setPreserveId(userId+"");
        byId.setPreserveTime(LocalDateTime.now());
        byId.setPreserveSignature(dto.getPreserveSignature());
        culturePreservationService.updateById(byId);
        TCulturePreservation culturePreservation = culturePreservationService.getById(dto.getId());
        culturePreservation.setPreserveId(userId+"");
        culturePreservation.setPreserveTime(LocalDateTime.now());
        culturePreservation.setPreserveSignature(dto.getPreserveSignature());
        culturePreservationService.updateById(culturePreservation);
        return R.ok();
    }
    //@PreAuthorize("@ss.hasPermi('system:breedingAndPreservation:detail')")
    @ApiOperation(value = "选育保藏记录详情")
    @GetMapping(value = "/open/t-breeding-and-preservation/getDetailById")
    public R<TBreedingAndPreservationDetailVO> getDetailById(@RequestParam String id) {
        List<SysUser> sysUsers = sysUserService.selectAllList();
        TBreedingAndPreservationDetailVO res = new TBreedingAndPreservationDetailVO();
        TBreedingAndPreservation breedingAndPreservation = breedingAndPreservationService.getById(id);
        BeanUtils.copyProperties(breedingAndPreservation, res);
@@ -245,6 +282,13 @@
        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);
            if (sysUser!=null){
                culturePreservation.setHandleName(sysUser.getNickName());
            }
        }
        res.setSeparationOfCultureDishesList(separationOfCultureDishesList);
        res.setObservationOfPetriDishes(observationOfPetriDishes);
        res.setVaccinationSlopes(vaccinationSlopes);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java
@@ -8,6 +8,7 @@
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.BaseModel;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
@@ -52,7 +53,8 @@
    @Resource
    private TokenService tokenService;
    @Resource
    private ISysUserService sysUserService;
@@ -64,6 +66,30 @@
    @PostMapping(value = "/api/t-pedigree-chart/pageList")
    public R<PageInfo<TPedigreeChartVO>> pageList(@RequestBody String param) {
        TPedigreeChartQuery query = JSON.parseObject(param, TPedigreeChartQuery.class);
        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
        if (sysUser.getRoleType().equals("2")){
            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)
                        .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
                if (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }
        }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 (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }
        }
        return R.ok(pedigreeChartService.pageList(query));
    }
@@ -83,27 +109,36 @@
        TPedigreeChartParentAllDTO dto = JSON.parseObject(param, TPedigreeChartParentAllDTO.class);
        TPedigreeChart parent = dto.getParent();
        if (!dto.getOne().isEmpty()){
            String one1Json = JSON.toJSONString(dto.getOne().get(0));
            parent.setJson(one1Json);
            String child = JSON.toJSONString(dto.getOne().get(0));
            parent.setJson(child);
        }
        List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
        if (!projectIds.isEmpty()){
            TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
                    .eq(TProjectTeam::getStatus, 1)
                    .orderByDesc(BaseModel::getCreateTime)
                    .last("limit 1").one();
            parent.setProjectId(projectTeam.getId());
        }
        pedigreeChartService.save(parent);
        if (!dto.getOne().isEmpty()){
            TPedigreeChartParentOneDTO one = dto.getOne().get(0);
            one.setParentId("0");
            one.setType(1);
            one.setStatus(one.getStatus());
            one.setStorageTime(LocalDateTime.now());
            one.setPedigreeChartId(parent.getId());
            one.setVaccinateId(loginUser.getUserId()+"");
            one.setVaccinateSignature(one.getVaccinateSignature());
            one.setVaccinateTime(LocalDateTime.now());
            one.setId(null);
            pedigreeChartDetailService.save(one);
            List<TPedigreeChartParentOneCountDTO> countList = one.getChildren();
            TPedigreeChartParentOneDTO oneLevel = dto.getOne().get(0);
            oneLevel.setParentId("0");
            oneLevel.setType(1);
            oneLevel.setStatus(oneLevel.getStatus());
            oneLevel.setStorageTime(LocalDateTime.now());
            oneLevel.setPedigreeChartId(parent.getId());
            oneLevel.setVaccinateId(loginUser.getUserId()+"");
            oneLevel.setVaccinateSignature(oneLevel.getVaccinateSignature());
            oneLevel.setVaccinateTime(LocalDateTime.now());
            oneLevel.setId(null);
            pedigreeChartDetailService.save(oneLevel);
            List<TPedigreeChartParentOneCountDTO> countList = oneLevel.getChildren();
            if (!countList.isEmpty()){
                TPedigreeChartParentOneCountDTO count = countList.get(0);
                count.setParentId(one.getId());
                count.setParentId(oneLevel.getId());
                count.setType(2);
                    count.setStatus(1);
                count.setPedigreeChartId(parent.getId());
@@ -112,7 +147,7 @@
                pedigreeChartDetailService.save(count);
                if (count.getChildren()!=null){
                    for (TPedigreeChartParentTwoDTO tPedigreeChartParentTwoDTO : count.getChildren()) {
                        tPedigreeChartParentTwoDTO.setParentId(one.getId());
                        tPedigreeChartParentTwoDTO.setParentId(oneLevel.getId());
                        tPedigreeChartParentTwoDTO.setPedigreeChartId(parent.getId());
                        tPedigreeChartParentTwoDTO.setType(1);
                        if (tPedigreeChartParentTwoDTO.getStatus()==null){
@@ -130,16 +165,16 @@
                        List<TPedigreeChartParentTwoCountDTO> count1List = tPedigreeChartParentTwoDTO.getChildren();
                        if (!count1List.isEmpty()){
                            // 传代数
                            TPedigreeChartParentTwoCountDTO count1 = count1List.get(0);
                            count1.setType(2);
                            count1.setParentId(tPedigreeChartParentTwoDTO.getId());
                            count1.setPedigreeChartId(parent.getId());
                            count1.setStatus(1);
                            count1.setId(null);
                            pedigreeChartDetailService.save(count1);
                            if (count1.getChildren()!=null){
                                for (TPedigreeChartParentThreeDTO tPedigreeChartParentThreeDTO : count1.getChildren()) {
                                    tPedigreeChartParentThreeDTO.setParentId(count1.getId());
                            TPedigreeChartParentTwoCountDTO childCount = count1List.get(0);
                            childCount.setType(2);
                            childCount.setParentId(tPedigreeChartParentTwoDTO.getId());
                            childCount.setPedigreeChartId(parent.getId());
                            childCount.setStatus(1);
                            childCount.setId(null);
                            pedigreeChartDetailService.save(childCount);
                            if (childCount.getChildren()!=null){
                                for (TPedigreeChartParentThreeDTO tPedigreeChartParentThreeDTO : childCount.getChildren()) {
                                    tPedigreeChartParentThreeDTO.setParentId(childCount.getId());
                                    tPedigreeChartParentThreeDTO.setPedigreeChartId(parent.getId());
                                    tPedigreeChartParentThreeDTO.setType(1);
                                    if (tPedigreeChartParentThreeDTO.getStatus()==null){
@@ -158,22 +193,22 @@
                    }
                }
            }
            String one1Json = JSON.toJSONString(one);
            parent.setJson(one1Json);
            String child = JSON.toJSONString(oneLevel);
            parent.setJson(child);
            pedigreeChartService.updateById(parent);
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 2)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!collect.isEmpty()){
                TProjectTeam team = projectTeamService.lambdaQuery().in(TProjectTeam::getId, collect)
            if (!allProjectIds.isEmpty()){
                TProjectTeam team = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                        .eq(TProjectTeam::getStatus, 1)
                        .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
                TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery()
                TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
                        .eq(TProjectTeamStaff::getTeamId, team.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
                tNotice.setUserId(one1.getUserId());
                tNotice.setUserId(projectTeamStaff.getUserId());
                tNotice.setStatus(1);
                tNotice.setNoticeContent("菌种实验员新增【1】条【菌种传代生产谱系图】操作,等待您签字确认;");
                tNotice.setDataId(parent.getId());
@@ -192,7 +227,6 @@
    private TNoticeService noticeService;
    /**
     */
    //@PreAuthorize("@ss.hasPermi('system:pedigreeChart:addProgenitor')")
    @Log(title = "谱系图-编辑谱系图-编辑谱系图", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "编辑谱系图-编辑谱系图",response = TPedigreeChartParentAllDTO.class)
    @PostMapping(value = "/api/t-pedigree-chart/editProgenitor")
@@ -204,8 +238,8 @@
        TPedigreeChartParentAllDTO dto = JSON.parseObject(param, TPedigreeChartParentAllDTO.class);
        TPedigreeChart parent = dto.getParent();
        if (!dto.getOne().isEmpty()){
            String one1Json = JSON.toJSONString(dto.getOne().get(0));
            parent.setJson(one1Json);
            String child = JSON.toJSONString(dto.getOne().get(0));
            parent.setJson(child);
        }
        pedigreeChartService.updateById(parent);
//        pedigreeChartDetailService.remove(new LambdaQueryWrapper<TPedigreeChartDetail>()
@@ -362,36 +396,36 @@
            // 祖代/母代
            TPedigreeChartParentOneDTO tPedigreeChartParentOneDTO = new TPedigreeChartParentOneDTO();
            BeanUtils.copyProperties(pedigreeChartDetail,tPedigreeChartParentOneDTO);
            TPedigreeChartDetail pedigreeChartDetail1 = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentOneDTO.getId())
            TPedigreeChartDetail childCount = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentOneDTO.getId())
                    && e.getType() == 2).findFirst().orElse(null);
            // 传代计划数
            if (pedigreeChartDetail1!=null){
            if (childCount!=null){
                TPedigreeChartParentOneCountDTO tPedigreeChartParentOneCountDTO = new TPedigreeChartParentOneCountDTO();
                List<TPedigreeChartParentOneCountDTO> tPedigreeChartParentOneCountDTOS = new ArrayList<>();
                BeanUtils.copyProperties(pedigreeChartDetail1,tPedigreeChartParentOneCountDTO);
                BeanUtils.copyProperties(childCount,tPedigreeChartParentOneCountDTO);
                tPedigreeChartParentOneCountDTO.setParent(pedigreeChartDetail);
                // 祖代母代传代数
                List<TPedigreeChartDetail> collect = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentOneCountDTO.getId())
                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 : collect) {
                for (TPedigreeChartDetail tPedigreeChartDetail : childs) {
                    TPedigreeChartParentTwoDTO tPedigreeChartParentTwoDTO = new TPedigreeChartParentTwoDTO();
                    BeanUtils.copyProperties(tPedigreeChartDetail,tPedigreeChartParentTwoDTO);
                    tPedigreeChartParentTwoDTO.setParent(pedigreeChartDetail1);
                    TPedigreeChartDetail pedigreeChartDetail2 = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentTwoDTO.getId())
                    tPedigreeChartParentTwoDTO.setParent(childCount);
                    TPedigreeChartDetail childCountChild = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentTwoDTO.getId())
                            && e.getType() == 2).findFirst().orElse(null);
                    if (pedigreeChartDetail2!=null){
                    if (childCountChild!=null){
                        ArrayList<TPedigreeChartParentTwoCountDTO> tPedigreeChartParentTwoCountDTOS = new ArrayList<>();
                        TPedigreeChartParentTwoCountDTO tPedigreeChartParentTwoCountDTO = new TPedigreeChartParentTwoCountDTO();
                        BeanUtils.copyProperties(pedigreeChartDetail2,tPedigreeChartParentTwoCountDTO);
                        List<TPedigreeChartDetail> collect1 = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentTwoCountDTO.getId())
                        BeanUtils.copyProperties(childCountChild,tPedigreeChartParentTwoCountDTO);
                        List<TPedigreeChartDetail> childChilds = details.stream().filter(e -> e.getParentId().equals(tPedigreeChartParentTwoCountDTO.getId())
                                && e.getType() == 1).collect(Collectors.toList());
                        for (TPedigreeChartDetail chartDetail : collect1) {
                        for (TPedigreeChartDetail chartDetail : childChilds) {
                            TPedigreeChartParentThreeDTO tPedigreeChartParentThreeDTO = new TPedigreeChartParentThreeDTO();
                            BeanUtils.copyProperties(chartDetail,tPedigreeChartParentThreeDTO);
                            tPedigreeChartParentThreeDTO.setParent(pedigreeChartDetail2);
                            tPedigreeChartParentThreeDTO.setParent(childCountChild);
                            tPedigreeChartParentThreeDTOS.add(tPedigreeChartParentThreeDTO);
                        }
                        tPedigreeChartParentTwoCountDTO.setChildren(tPedigreeChartParentThreeDTOS);
@@ -413,7 +447,6 @@
    /**
     * 谱系图-菌种传代生产谱系图详情-菌种详情
     */
    //@PreAuthorize("@ss.hasPermi('system:pedigreeChart:strainInfo')")
    @ApiOperation(value = "谱系图-菌种传代生产谱系图详情-菌种详情")
    @GetMapping(value = "/api/t-pedigree-chart/strainInfo")
    public R strainInfo(@RequestParam String id) {
@@ -437,9 +470,9 @@
        pedigreeChartDetail1.setVaccinateId(tokenService.getLoginUser().getUserId()+"");
        pedigreeChartDetail1.setVaccinateTime(LocalDateTime.now());
        pedigreeChartDetail1.setVaccinateSignature(dto.getVaccinateSignature());
        TPedigreeChartDetail byId = pedigreeChartDetailService.getById(dto.getParentId());
        TPedigreeChartDetail tPedigreeChartDetail = pedigreeChartDetailService.getById(dto.getParentId());
        pedigreeChartDetail1.setGenerationCount(dto.getGenerationCount());
        pedigreeChartDetail1.setPedigreeChartId(byId.getPedigreeChartId());
        pedigreeChartDetail1.setPedigreeChartId(tPedigreeChartDetail.getPedigreeChartId());
        pedigreeChartDetail1.setType(2);
        pedigreeChartDetailService.save(pedigreeChartDetail1);
        return R.ok();
@@ -464,15 +497,6 @@
        pedigreeChartDetailService.updateById(pedigreeChartDetail);
        return R.ok();
    }
    /**
     * 谱系图-代确认入库菌种列表
     */
    //@PreAuthorize("@ss.hasPermi('system:pedigreeChart:listConfirm')")
//    @ApiOperation(value = "谱系图-代确认入库菌种列表",response = TPedigreeChartConfirmQuery.class)
//    @GetMapping(value = "/api/t-pedigree-chart/listConfirm")
//    public R<PageInfo<TPedigreeChartConfirmVO>> listConfirm(@RequestBody String param) {
//        TPedigreeChartConfirmQuery query = JSON.parseObject(param, TPedigreeChartConfirmQuery.class);
//        return R.ok(pedigreeChartService.listConfirm(query));
//    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java
@@ -60,6 +60,12 @@
        TProjectTeamQuery query = JSON.parseObject(param, TProjectTeamQuery.class);
        return R.ok(projectTeamService.pageList(query));
    }
    @ApiOperation(value = "新增报告-获取项目组分页列表")
    @PostMapping(value = "/api/t_project_team/pageList1")
    public R<PageInfo<TProjectTeamVO>> pageList1(@RequestBody String param) {
        TProjectTeamQuery query = JSON.parseObject(param, TProjectTeamQuery.class);
        return R.ok(projectTeamService.pageList(query));
    }
    /**
     * 添加项目组管理
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java
@@ -81,7 +81,6 @@
        query.setProjectIds(projectIds);
        return R.ok(strainReportService.pageListAll(query));
    }
    //@PreAuthorize("@ss.hasPermi('system:strainReport:list')")
    @ApiOperation(value = "获取菌种报告库操作评定分页列表",tags = "菌种报告库操作评定-菌种实验员",response = TStrainReportQuery.class)
    @PostMapping(value = "/api/t-strain-report/pageList")
    public R<PageInfo<TStrainReportVO>> pageList(@RequestBody String param) {
@@ -99,6 +98,8 @@
            List<SysUser> sysUser1 = sysUserService.selectUserByUserNameLike(query.getEvaluateName());
            if (sysUser1.isEmpty()){
                strings.add("0");
                query.setEvaluateId(strings);
            }else{
                strings = sysUser1.stream().map(SysUser::getUserId).map(String::valueOf).collect(Collectors.toList());
                query.setEvaluateId(strings);
@@ -114,20 +115,21 @@
    public R<TStrainReportDetailVO> getDetailById(@RequestParam String id) {
        TStrainReportDetailVO tStrainReportDetailVO = new TStrainReportDetailVO();
        TStrainReport strainReport = strainReportService.getById(id);
        TStrainReportDetail one = strainReportDetailService.getOne(new LambdaQueryWrapper<TStrainReportDetail>()
        TStrainReportDetail strainReportDetail = strainReportDetailService.getOne(new LambdaQueryWrapper<TStrainReportDetail>()
                .eq(TStrainReportDetail::getReportId, strainReport.getId())
                .eq(TStrainReportDetail::getEvaluateHumanType, 1)
                .eq(TStrainReportDetail::getExperimentId, tokenService.getLoginUser().getUserId()));
        if (one!=null){
            tStrainReportDetailVO.setEvaluate(one.getEvaluate());
        }
        BeanUtils.copyProperties(strainReport, tStrainReportDetailVO);
        if (strainReport.getEvaluateId() != null){
            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(strainReport.getEvaluateId()));
        if (strainReportDetail!=null){
            tStrainReportDetailVO.setEvaluate(strainReportDetail.getEvaluate());
            if (StringUtils.hasLength(strainReportDetail.getEvaluateId())){
                SysUser sysUser = sysUserService.selectUserById(Long.valueOf(strainReportDetail.getEvaluateId()));
            if (sysUser != null){
                tStrainReportDetailVO.setEvaluateName(sysUser.getNickName());
            }
        }
        }
        BeanUtils.copyProperties(strainReport, tStrainReportDetailVO);
        return R.ok(tStrainReportDetailVO);
    }
    //@PreAuthorize("@ss.hasPermi('system:strainReportProject:pageListProject')")
@@ -139,19 +141,30 @@
            query.setStartTime(query.getTime().split(" - ")[0]);
            query.setEndTime(query.getTime().split(" - ")[1]);
        }
        LoginUser loginUser = tokenService.getLoginUser();
        SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId());
        List<String> projectIds = new ArrayList<>();
        if (!sysUser.getRoleType().equals("1")){
            // 查询和自己相关的项目组id
            List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, sysUser.getUserId()).list()
                    .stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (collect.isEmpty()){
                collect.add("0");
            }
            projectIds = collect;
        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
        if (sysUser.getRoleType().equals("2")){
            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)
                        .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
                if (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
        }
        query.setProjectIds(projectIds);
            }
        }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 (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }
        }
        return R.ok(strainReportService.pageListProject(query));
    }
@@ -166,10 +179,10 @@
        SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId());
        List<TStrainReport> tStrainReports = strainReportService.list(new LambdaQueryWrapper<TStrainReport>()
                .eq(TStrainReport::getStatus,3).eq(TStrainReport::getProjectId,id));
        List<String> collect7 = tStrainReports.stream().map(TStrainReport::getId).collect(Collectors.toList());
        if (collect7.isEmpty())collect7.add("0");
        List<String> strainReportIds = tStrainReports.stream().map(TStrainReport::getId).collect(Collectors.toList());
        if (strainReportIds.isEmpty())strainReportIds.add("0");
        List<TStrainReportDetail> tStrainReportDetails = strainReportDetailService
                .list(new LambdaQueryWrapper<TStrainReportDetail>().in(TStrainReportDetail::getReportId,collect7)
                .list(new LambdaQueryWrapper<TStrainReportDetail>().in(TStrainReportDetail::getReportId,strainReportIds)
                        .orderByDesc(TStrainReportDetail::getCreateTime));
        BigDecimal sum = new BigDecimal("0");
        BigDecimal sum1 = new BigDecimal("0");
@@ -177,26 +190,26 @@
        Integer temp = 0;
        for (TStrainReport tStrainReport : tStrainReports) {
            List<TStrainReportDetail> collect1 = tStrainReportDetails.stream()
            List<TStrainReportDetail> tStrainReportDetails1 = tStrainReportDetails.stream()
                    .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                            e.getEvaluateHumanType()==1).collect(Collectors.toList());
            List<TStrainReportDetail> collect2 = tStrainReportDetails.stream()
            List<TStrainReportDetail> tStrainReportDetails2 = tStrainReportDetails.stream()
                    .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                            e.getEvaluateHumanType()==2).collect(Collectors.toList());
            // 菌种工程积分
            sum1 = collect2.stream()
            sum1 = tStrainReportDetails2.stream()
                    .filter(e -> e.getEvaluateHumanType().equals(1))
                    .map(TStrainReportDetail::getEvaluateTotal)
                    .reduce(BigDecimal::add)
                    .orElse(BigDecimal.ZERO);
            // 菌种实验员积分
            sum2 = collect1.stream()
            sum2 = tStrainReportDetails1.stream()
                    .filter(e -> e.getEvaluateHumanType().equals(2))
                    .map(TStrainReportDetail::getEvaluateTotal)
                    .reduce(BigDecimal::add)
                    .orElse(BigDecimal.ZERO);
            List<TStrainReportDetail> collect3 = tStrainReportDetails.stream().filter(e -> e.getReportType() == 1).collect(Collectors.toList());
            for (TStrainReportDetail tStrainReportDetail : collect3) {
            List<TStrainReportDetail> tStrainReportDetails3 = tStrainReportDetails.stream().filter(e -> e.getReportType() == 1).collect(Collectors.toList());
            for (TStrainReportDetail tStrainReportDetail : tStrainReportDetails3) {
                // 根据评定等级统计失败次数
                if (StringUtils.hasLength(tStrainReportDetail.getEvaluate())&&  tStrainReportDetail.getEvaluate().split(",").length>=5){
                    if (tStrainReportDetail.getEvaluate().split(",")[4].equals("2")){
@@ -211,18 +224,14 @@
        tStrainReportDetailVO.setFailCount(temp);
        List<TStrainReport> collect1 = tStrainReports.stream().filter(e -> e.getProjectId().equals(byId.getId())).collect(Collectors.toList());
        if (!collect1.isEmpty()){
            tStrainReportDetailVO.setEndTime(collect1.get(0).getEvaluateTime());
        List<TStrainReport> strainReportIdsByProjectId = tStrainReports.stream().filter(e -> e.getProjectId().equals(byId.getId())).collect(Collectors.toList());
        if (!strainReportIdsByProjectId.isEmpty()){
            tStrainReportDetailVO.setEndTime(strainReportIdsByProjectId.get(0).getEvaluateTime());
        }
        tStrainReportDetailVO.setStartTime(byId.getCreateTime());
        TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, byId.getId())
        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, byId.getId())
                .eq(TProjectTeamStaff::getRoleType, 2).one();
        List<String> strings = new ArrayList<>();
        List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS = new ArrayList<>();
        if (sysUser.getRoleType().equals("4")){
            TStrainReportDetailExperimentVO tStrainReportDetailExperimentVO = new TStrainReportDetailExperimentVO();
            tStrainReportDetailExperimentVO.setUserName(sysUser.getNickName());
@@ -234,17 +243,17 @@
                    .orElse(BigDecimal.ZERO);
            tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral);
            List<TStrainReportDetail> collect = tStrainReportDetails.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId() + "")).collect(Collectors.toList());
            if (!collect.isEmpty()){
                tStrainReportDetailExperimentVO.setHandleStartTime(collect.get(0).getCreateTime());
            List<TStrainReportDetail> strainReportDetails = tStrainReportDetails.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId() + "")).collect(Collectors.toList());
            if (!strainReportDetails.isEmpty()){
                tStrainReportDetailExperimentVO.setHandleStartTime(strainReportDetails.get(0).getCreateTime());
            }
            tStrainReportDetailExperimentVOS.add(tStrainReportDetailExperimentVO);
            tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS);
        }else{
            List<TStrainReportDetail> collect6 = tStrainReportDetails.stream()
            List<TStrainReportDetail> strainReportDetails = tStrainReportDetails.stream()
                    .filter(e -> e.getEvaluateHumanType() == 2&&
                            e.getExperimentId().equals(one1.getUserId())).collect(Collectors.toList());
            if (collect6.isEmpty()){
                            e.getExperimentId().equals(projectTeamStaff.getUserId())).collect(Collectors.toList());
            if (strainReportDetails.isEmpty()){
                TStrainReportDetailEngineerVO tStrainReportDetailEngineerVO = new TStrainReportDetailEngineerVO();
                tStrainReportDetailEngineerVO.setInnovateCount(0);
                tStrainReportDetailEngineerVO.setInnovateIntegral(BigDecimal.ZERO);
@@ -280,31 +289,31 @@
                tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS1);
            }else{
                List<TStrainReportDetail> collect2 = collect6.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(2) && e.getExperimentId().equals(one1.getUserId())).collect(Collectors.toList());
                List<TStrainReportDetail> reportDetails = strainReportDetails.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(2) && e.getExperimentId().equals(projectTeamStaff.getUserId())).collect(Collectors.toList());
                TStrainReportDetailEngineerVO tStrainReportDetailEngineerVO = new TStrainReportDetailEngineerVO();
                tStrainReportDetailEngineerVO.setInnovateCount((int)collect2.stream().filter(e->e.getEvaluateType().equals(1)).count());
                tStrainReportDetailEngineerVO.setInnovateIntegral(collect2.stream().filter(e->e.getEvaluateType().equals(1)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
                List<TStrainReportDetail> collect3 = collect2.stream().filter(e -> e.getEvaluateType().equals(1)).collect(Collectors.toList());
                tStrainReportDetailEngineerVO.setInnovateCount((int)reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(1)).count());
                tStrainReportDetailEngineerVO.setInnovateIntegral(reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(1)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
                List<TStrainReportDetail> collect3 = reportDetails.stream().filter(e ->e.getEvaluateType()!=null&& e.getEvaluateType().equals(1)).collect(Collectors.toList());
                if (!collect3.isEmpty()){
                    tStrainReportDetailEngineerVO.setInnovateStartTime(collect3.get(collect3.size()-1).getCreateTime());
                }
                tStrainReportDetailEngineerVO.setInnovateEndTime(byId.getCreateTime());
                tStrainReportDetailEngineerVO.setRegulationCount((int)collect2.stream().filter(e->e.getEvaluateType().equals(2)).count());
                tStrainReportDetailEngineerVO.setRegulationIntegral(collect2.stream().filter(e->e.getEvaluateType().equals(2)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
                List<TStrainReportDetail> collect4 = collect2.stream().filter(e -> e.getEvaluateType().equals(2)).collect(Collectors.toList());
                tStrainReportDetailEngineerVO.setRegulationCount((int)reportDetails.stream().filter(e->e.getEvaluateType()!=null&&e.getEvaluateType().equals(2)).count());
                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.setRegulationStartTime(collect4.get(collect4.size()-1).getCreateTime());
                }
                tStrainReportDetailEngineerVO.setRegulationEndTime(byId.getCreateTime());
                tStrainReportDetailEngineerVO.setHandleCount((int)collect2.stream().filter(e->e.getReportType().equals(1)).count());
                tStrainReportDetailEngineerVO.setHandleIntegral(collect2.stream().filter(e->e.getReportType().equals(1)).map(TStrainReportDetail::getEvaluateTotal).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
                List<TStrainReportDetail> collect5 = collect2.stream().filter(e->e.getReportType().equals(1)).collect(Collectors.toList());
                if (!collect5.isEmpty()){
                    tStrainReportDetailEngineerVO.setHandleStartTime(collect5.get(collect5.size()-1).getCreateTime());
                tStrainReportDetailEngineerVO.setHandleCount((int)reportDetails.stream().filter(e->e.getReportType().equals(1)).count());
                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.setHandleStartTime(reportDetailList.get(reportDetailList.size()-1).getCreateTime());
                }
                tStrainReportDetailEngineerVO.setHandleEndTime(byId.getCreateTime());
@@ -369,10 +378,10 @@
        if (dto.getIsDraft()==0){
            // 新增消息
            TNotice tNotice = new TNotice();
            TProjectTeamStaff one = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
            TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
            tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice.setUserId(one.getUserId());
            tNotice.setUserId(projectTeamStaff.getUserId());
            tNotice.setStatus(1);
            tNotice.setNoticeContent("您有【1】条【菌种报告】【报告库"+dto.getReportType()+"】等待审核");
            tNotice.setDataId(dto.getId());
@@ -380,11 +389,11 @@
            noticeService.save(tNotice);
            // 新增消息
            TNotice tNotice1 = new TNotice();
            TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
            TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 3).last("limit 1").one();
            tNotice1.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice1.setUserId(one1.getUserId());
            tNotice1.setUserId(tProjectTeamStaff.getUserId());
            tNotice1.setStatus(1);
            tNotice1.setNoticeContent("您有【1】条菌种库操作菌种工程师已评定;");
            tNotice1.setDataId(dto.getId());
@@ -416,11 +425,11 @@
        if (dto.getIsDraft()==0){
            // 新增消息
            TNotice tNotice = new TNotice();
            TProjectTeamStaff one = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
            TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
            tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice.setUserId(one.getUserId());
            tNotice.setUserId(projectTeamStaff.getUserId());
            tNotice.setStatus(1);
            tNotice.setNoticeContent("您有【1】条【菌种报告】【报告库"+dto.getReportType()+"】等待审核");
            tNotice.setDataId(dto.getId());
@@ -435,8 +444,8 @@
    //@PreAuthorize("@ss.hasPermi('system:strainReport:cancelReport')")
    @Log(title = "菌种库报告管理-菌种工程师撤销审批", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "菌种工程师撤销审批",tags = "菌种报告库")
    @PostMapping(value = "/api/t-strain-report/cancelReport")
    public R<Boolean> cancelReport(@RequestBody String id) {
    @GetMapping(value = "/open/t-strain-report/cancelReport")
    public R<Boolean> cancelReport(@RequestParam String id) {
        TStrainReport strainReport = strainReportService.getById(id);
        strainReport.setIsDraft(1);
        strainReport.setStatus(1);
@@ -464,9 +473,6 @@
        strainReportService.updateById(strainReport);
        // 新增消息
        TNotice tNotice = new TNotice();
        TProjectTeamStaff one = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
                .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
        tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
        tNotice.setUserId(tokenService.getLoginUser().getUserId()+"");
        tNotice.setStatus(1);
@@ -476,18 +482,18 @@
        noticeService.save(tNotice);
            // 新增消息
            TNotice tNotice1 = new TNotice();
            TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
            TNotice notice = new TNotice();
            TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
            tNotice1.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice1.setUserId(one1.getUserId());
            tNotice1.setStatus(1);
            notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
            notice.setUserId(tProjectTeamStaff.getUserId());
            notice.setStatus(1);
            String temp=dto.getStatus()==2?"通过":"驳回";
            tNotice1.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已操作【" +temp+"】");
            tNotice1.setDataId(dto.getId());
            tNotice1.setNoticeType(7);
            noticeService.save(tNotice1);
            notice.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已操作【" +temp+"】");
            notice.setDataId(dto.getId());
            notice.setNoticeType(7);
            noticeService.save(notice);
        return R.ok();
    }
    /**
@@ -520,16 +526,16 @@
        tStrainReportDetail.setEvaluateType(dto.getEvaluateType());
        strainReportDetailService.save(tStrainReportDetail);
        // 新增消息
        TNotice tNotice1 = new TNotice();
        TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
        TNotice notice = new TNotice();
        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
                .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
        tNotice1.setCommitId(tokenService.getLoginUser().getUserId()+"");
        tNotice1.setUserId(one1.getUserId());
        tNotice1.setStatus(1);
        tNotice1.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已评定");
        tNotice1.setDataId(dto.getId());
        tNotice1.setNoticeType(8);
        noticeService.save(tNotice1);
        notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
        notice.setUserId(projectTeamStaff.getUserId());
        notice.setStatus(1);
        notice.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已评定");
        notice.setDataId(dto.getId());
        notice.setNoticeType(8);
        noticeService.save(notice);
        return R.ok();
    }
    /**
@@ -558,31 +564,31 @@
            }
        }
        BeanUtils.copyProperties(strainReport, tStrainReportDetailVO);
        TProjectTeam byId = projectTeamService.getById(strainReport.getProjectId());
        List<TProjectTeamStaff> list = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, byId.getId()).list();
        StringBuilder stringBuilder = new StringBuilder();
        TProjectTeam projectTeam = projectTeamService.getById(strainReport.getProjectId());
        List<TProjectTeamStaff> list = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).list();
        StringBuilder staffNames = new StringBuilder();
        for (TProjectTeamStaff tProjectTeamStaff : list) {
            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(tProjectTeamStaff.getUserId()));
            if (sysUser!=null){
                stringBuilder.append(sysUser.getNickName()).append(",");
                staffNames.append(sysUser.getNickName()).append(",");
            }
        }
        if (StringUtils.hasLength(stringBuilder.toString())){
            byId.setStaff(stringBuilder.substring(0, stringBuilder.toString().length() - 1));
        if (StringUtils.hasLength(staffNames.toString())){
            projectTeam.setStaff(staffNames.substring(0, staffNames.toString().length() - 1));
        }
        tStrainReportDetailVO.setProjectTeam(byId);
        TStrainReportDetail one = strainReportDetailService.lambdaQuery().eq(TStrainReportDetail::getReportId, id)
        tStrainReportDetailVO.setProjectTeam(projectTeam);
        TStrainReportDetail strainReportDetail = strainReportDetailService.lambdaQuery().eq(TStrainReportDetail::getReportId, id)
                .eq(TStrainReportDetail::getEvaluateHumanType, 1).one();
        tStrainReportDetailVO.setEvaluate(one.getEvaluate());
        tStrainReportDetailVO.setEvaluateTotal(one.getEvaluateTotal());
        tStrainReportDetailVO.setEvaluate(strainReportDetail.getEvaluate());
        tStrainReportDetailVO.setEvaluateTotal(strainReportDetail.getEvaluateTotal());
        if (strainReport.getEvaluateId()!=null){
            tStrainReportDetailVO.setEvaluateName(sysUserService.selectUserById(Long.valueOf(strainReport.getEvaluateId())).getNickName());
        }
        if (one.getExperimentId()!=null){
            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(one.getExperimentId()));
        if (strainReportDetail.getExperimentId()!=null){
            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(strainReportDetail.getExperimentId()));
            tStrainReportDetailVO.setExperimentName(sysUser.getNickName());
            tStrainReportDetailVO.setExperimentAvatar(sysUser.getAvatar());
            tStrainReportDetailVO.setExperimentId(one.getExperimentId());
            tStrainReportDetailVO.setExperimentId(strainReportDetail.getExperimentId());
        }
        tStrainReportDetailVO.setReportType(strainReport.getReportType());
        if (strainReport.getCommitId()!=null){
@@ -599,15 +605,15 @@
        TStrainReportDetailVO tStrainReportDetailVO = new TStrainReportDetailVO();
        TStrainReport strainReport = strainReportService.getById(id);
        BeanUtils.copyProperties(strainReport, tStrainReportDetailVO);
        TProjectTeam byId = projectTeamService.getById(strainReport.getProjectId());
        tStrainReportDetailVO.setProjectTeam(byId);
        TStrainReportDetail one = strainReportDetailService.lambdaQuery().eq(TStrainReportDetail::getReportId, id)
        TProjectTeam projectTeam = projectTeamService.getById(strainReport.getProjectId());
        tStrainReportDetailVO.setProjectTeam(projectTeam);
        TStrainReportDetail strainReportDetail = strainReportDetailService.lambdaQuery().eq(TStrainReportDetail::getReportId, id)
                .eq(TStrainReportDetail::getEvaluateHumanType, 2).one();
        tStrainReportDetailVO.setEvaluate(one.getEvaluate());
        tStrainReportDetailVO.setEvaluateTotal(one.getEvaluateTotal());
        tStrainReportDetailVO.setEvaluate(strainReportDetail.getEvaluate());
        tStrainReportDetailVO.setEvaluateTotal(strainReportDetail.getEvaluateTotal());
        tStrainReportDetailVO.setEvaluateName(sysUserService.selectUserById(Long.valueOf(strainReport.getEvaluateId())).getNickName());
        tStrainReportDetailVO.setExperimentName(sysUserService.selectUserById(Long.valueOf(one.getExperimentId())).getNickName());
        tStrainReportDetailVO.setExperimentId(one.getExperimentId());
        tStrainReportDetailVO.setExperimentName(sysUserService.selectUserById(Long.valueOf(strainReportDetail.getExperimentId())).getNickName());
        tStrainReportDetailVO.setExperimentId(strainReportDetail.getExperimentId());
        tStrainReportDetailVO.setReportType(strainReport.getReportType());
        tStrainReportDetailVO.setCommitName(sysUserService.selectUserById(Long.valueOf(strainReport.getCommitId())).getNickName());
        return R.ok(tStrainReportDetailVO);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java
@@ -72,35 +72,46 @@
        if (StringUtils.hasLength(dto.getHandleSignature())){
            dto.setHandleTime(LocalDateTime.now());
        }
        List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
        if (!projectIds.isEmpty()){
            TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
                    .eq(TProjectTeam::getStatus, 1)
                    .orderByDesc(BaseModel::getCreateTime)
                    .last("limit 1").one();
            dto.setProjectId(projectTeam.getId());
        }
        strainValidationDataService.save(dto);
        if (dto.getIsDraft()==0){
            dto.setStatus(1);
        }else{
            dto.setStatus(3);
        }
        if (dto.getStatus()==1){
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 3)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            TProjectTeam one = projectTeamService.lambdaQuery().in(TProjectTeam::getId, collect)
            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, one.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
            tNotice.setUserId(one1.getUserId());
            TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery()
                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
            tNotice.setUserId(tProjectTeamStaff.getUserId());
            tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice.setStatus(1);
            StringBuilder stringBuilder = new StringBuilder();
            StringBuilder content = new StringBuilder();
            switch (dto.getStrainType()){
                case 1:
                    stringBuilder.append( "【原始细胞库验证资料】");
                    content.append( "【原始细胞库验证资料】");
                    break;
                case 2:
                     stringBuilder.append("【主细胞库验证资料】");
                     content.append("【主细胞库验证资料】");
                    break;
            }
            tNotice.setNoticeContent("您有【1】条"+stringBuilder+"等待确认;");
            tNotice.setNoticeContent("您有【1】条"+content+"等待确认;");
            tNotice.setDataId(dto.getId());
            tNotice.setNoticeType(6);
            noticeService.save(tNotice);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java
@@ -61,6 +61,12 @@
    @PostMapping(value = "/api/t-train-library/choiceUserList")
    public R<PageInfo<ChoiceUserVO>> choiceUserList(@RequestBody String param) {
        ChoiceStrainDTO query = JSON.parseObject(param, ChoiceStrainDTO.class);
        if (query.getRoleType()==2){
            query.setRoleType(3);
        }
        if (query.getRoleType()==1){
            query.setRoleType(2);
        }
        List<String> userIds = projectTeamStaffService.lambdaQuery()
                .eq(TProjectTeamStaff::getRoleType,  query.getRoleType())
                .eq(TProjectTeamStaff::getTeamId, query.getProjectId()).list().stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
@@ -68,7 +74,6 @@
            userIds.add("0");
        }
        query.setUserIds(userIds);
        return R.ok(sysUserService.choiceUserList(query));
    }
    /**
@@ -79,20 +84,18 @@
    public R<PageInfo<TProjectTeamVO>> choiceProjectList(@RequestBody String param) {
        LoginUser loginUser = tokenService.getLoginUser();
        SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId());
        List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, sysUser.getUserId()).list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
        if (collect.isEmpty()){
            collect.add("0");
        List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, sysUser.getUserId()).list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
        if (projectIds.isEmpty()){
            projectIds.add("0");
        }
        ChoiceProjectDTO query = JSON.parseObject(param, ChoiceProjectDTO.class);
        query.setProjectIds(collect);
        query.setProjectIds(projectIds);
        return R.ok(projectTeamService.choiceProjectList(query));
    }
    // 提取为独立方法以提高可读性和复用性
    /**
     * 获取菌种库分页列表
     */
    //@PreAuthorize("@ss.hasPermi('system:trainLibrary:list')")
    @ApiOperation(value = "获取菌种库分页列表",tags = "菌种库管理",response = TTrainLibraryQuery.class)
    @PostMapping(value = "/api/t-train-library/pageList")
    public R<PageInfo<TTrainLibraryVO>> pageList(@RequestBody String param) {
@@ -106,10 +109,10 @@
    @ApiOperation(value = "获取菌种库出入库时间轴列表",tags = "菌种库管理")
    @PostMapping(value = "/api/t-train-library/timeList")
    public R<List<TTrainLibraryWarehousing>> timeList(@RequestParam String id) {
        List<TTrainLibraryWarehousing> list = tTrainLibraryWarehousingService.lambdaQuery().eq(TTrainLibraryWarehousing::getTrainLibraryId,id)
        List<TTrainLibraryWarehousing> tTrainLibraryWarehousings = tTrainLibraryWarehousingService.lambdaQuery().eq(TTrainLibraryWarehousing::getTrainLibraryId,id)
                .orderByDesc(TTrainLibraryWarehousing::getCreateTime).list();
        List<SysUser> sysUsers = sysUserService.selectList();
        for (TTrainLibraryWarehousing tTrainLibraryWarehousing : list) {
        for (TTrainLibraryWarehousing tTrainLibraryWarehousing : tTrainLibraryWarehousings) {
            if (tTrainLibraryWarehousing.getHandleId()!=null){
                SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(tTrainLibraryWarehousing.getHandleId())).findFirst().orElse(null);
                if (sysUser!=null){
@@ -123,7 +126,7 @@
                }
            }
        }
        return R.ok(list);
        return R.ok(tTrainLibraryWarehousings);
    }
    @Resource
    private TNoticeService noticeService;
@@ -139,6 +142,15 @@
            return R.fail(401,"登陆失效");
        }
        TTrainLibraryDTO dto = JSON.parseObject(param,TTrainLibraryDTO.class);
        List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
        if (!projectIds.isEmpty()){
            TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
                    .eq(TProjectTeam::getStatus, 1)
                    .orderByDesc(BaseModel::getCreateTime)
                    .last("limit 1").one();
            dto.setProjectId(projectTeam.getId());
        }
        tTrainLibraryService.save(dto);
        if (dto.getIsDraft()==0){
            // 新增入库记录
@@ -147,34 +159,34 @@
            tTrainLibraryWarehousing.setType(2);
            tTrainLibraryWarehousing.setBoundTime(LocalDateTime.now());
            tTrainLibraryWarehousing.setHandleId(tokenService.getLoginUser().getUserId());
            tTrainLibraryWarehousing.setHandleSignature(dto.getHandleSignature());
            tTrainLibraryWarehousing.setHandleSignature(dto.getSignature());
            tTrainLibraryWarehousingService.save(tTrainLibraryWarehousing);
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 2)
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 3)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            TProjectTeam one = projectTeamService.lambdaQuery().in(TProjectTeam::getId, collect).eq(TProjectTeam::getStatus, 1)
            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, one.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
            tNotice.setUserId(one1.getUserId());
            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);
            StringBuilder stringBuilder = new StringBuilder();
            StringBuilder content = new StringBuilder();
            switch (dto.getType()){
                case 1:
                    stringBuilder.append("【原始细胞库】");
                    content.append("【原始细胞库】");
                    break;
                case 2:
                    stringBuilder.append("【主细胞库】");
                    content.append("【主细胞库】");
                    break;
                case 3:
                    stringBuilder.append("【生产细胞库】");
                    content.append("【生产细胞库】");
                    break;
            }
            tNotice.setNoticeContent("您有【1】条"+stringBuilder+"入库记录等待签字确认;");
            tNotice.setNoticeContent("您有【1】条"+content+"入库记录等待签字确认;");
            tNotice.setDataId(dto.getId());
            tNotice.setNoticeType(3);
            noticeService.save(tNotice);
@@ -195,10 +207,10 @@
            TTrainLibrary tTrainLibrary = new TTrainLibrary();
            BeanUtils.copyProperties(dto,tTrainLibrary);
            if (i==0){
                List<String> collect = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                        .eq(TProjectTeamStaff::getRoleType, 3)
                        .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
                if (collect.isEmpty()){
                if (projectIds.isEmpty()){
                    return R.fail("请先加入项目组");
                }
                tTrainLibrary.setStatus(4);
@@ -213,29 +225,29 @@
                // 新增消息
                TNotice tNotice = new TNotice();
                TProjectTeam one = projectTeamService.lambdaQuery().in(TProjectTeam::getId, collect)
                TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
                        .eq(TProjectTeam::getStatus, 1)
                        .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
                TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery()
                        .eq(TProjectTeamStaff::getTeamId, one.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
                tNotice.setUserId(one1.getUserId());
                TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery()
                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
                tNotice.setUserId(tProjectTeamStaff.getUserId());
                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
                tNotice.setStatus(1);
                StringBuilder stringBuilder = new StringBuilder();
                StringBuilder content = new StringBuilder();
                switch (dto.getType()){
                    case 1:
                        stringBuilder.append("【原始细胞库】");
                        content.append("【原始细胞库】");
                        break;
                    case 2:
                        stringBuilder.append("【主细胞库】");
                        content.append("【主细胞库】");
                        break;
                    case 3:
                        stringBuilder.append("【生产细胞库】");
                        content.append("【生产细胞库】");
                        break;
                }
                tNotice.setNoticeContent("您有【1】条"+stringBuilder+"入库记录等待签字确认;");
                tNotice.setNoticeContent("您有【1】条"+content+"入库记录等待签字确认;");
                tNotice.setDataId(dto.getId());
                tNotice.setNoticeType(3);
                noticeService.save(tNotice);
@@ -289,15 +301,15 @@
        }
        TTrainLibraryDetailConfirmDto query = JSON.parseObject(param, TTrainLibraryDetailConfirmDto.class);
        TTrainLibraryWarehousing tTrainLibraryWarehousing = tTrainLibraryWarehousingService.getById(query.getId());
        TTrainLibrary byId = tTrainLibraryService.getById(tTrainLibraryWarehousing.getTrainLibraryId());
        TTrainLibrary tTrainLibrary = tTrainLibraryService.getById(tTrainLibraryWarehousing.getTrainLibraryId());
        if (tTrainLibraryWarehousing.getType()==1){
            byId.setStock(0);
            byId.setStatus(1);
            tTrainLibrary.setStock(0);
            tTrainLibrary.setStatus(1);
        }else{
            byId.setStock(1);
            byId.setStatus(3);
            tTrainLibrary.setStock(1);
            tTrainLibrary.setStatus(3);
        }
        tTrainLibraryService.updateById(byId);
        tTrainLibraryService.updateById(tTrainLibrary);
        tTrainLibraryWarehousing.setPreserveSignature(query.getPreserveSignature());
        tTrainLibraryWarehousing.setPreserveId(tokenService.getLoginUser().getUserId());
        tTrainLibraryWarehousing.setConfirmTime(LocalDateTime.now());
@@ -312,9 +324,9 @@
    @ApiOperation(value = "编辑获取菌种库详情",tags = "菌种库管理",response = TTrainLibraryDetailVO.class)
    @GetMapping(value = "/open/t-train-library/getDetailEditById")
    public R<TTrainLibraryDetailVO> getDetailEditById(@RequestParam String id) {
        TTrainLibrary byId = tTrainLibraryService.getById(id);
        TTrainLibrary trainLibrary = tTrainLibraryService.getById(id);
        TTrainLibraryDetailVO tTrainLibraryDetailVO = new TTrainLibraryDetailVO();
        BeanUtils.copyProperties(byId,tTrainLibraryDetailVO);
        BeanUtils.copyProperties(trainLibrary,tTrainLibraryDetailVO);
        return R.ok(tTrainLibraryDetailVO);
    }
    /**
@@ -325,8 +337,8 @@
    @PostMapping(value = "/open/t-train-library/getDetailById")
    public R<TTrainLibraryDetailVO> getDetailById(@RequestBody String param) {
        TTrainLibraryDetailQuery query = JSON.parseObject(param, TTrainLibraryDetailQuery.class);
        TTrainLibraryDetailVO detailById = tTrainLibraryService.getDetailById(query);
        PageInfo<TTrainLibraryWarehousingVO> warehousingList = detailById.getWarehousingList();
        TTrainLibraryDetailVO libraryDetailVO = tTrainLibraryService.getDetailById(query);
        PageInfo<TTrainLibraryWarehousingVO> warehousingList = libraryDetailVO.getWarehousingList();
        List<TTrainLibraryWarehousingVO> records = warehousingList.getRecords();
        List<SysUser> sysUsers = sysUserService.selectList();
        for (TTrainLibraryWarehousingVO record : records) {
@@ -360,8 +372,8 @@
                }
            }
        }
        detailById.setList(list);
        return R.ok(detailById);
        libraryDetailVO.setList(list);
        return R.ok(libraryDetailVO);
    }
    /**
     * 删除项目组
@@ -397,28 +409,36 @@
        AddTrainLibraryWarehousingDTO query = JSON.parseObject(param, AddTrainLibraryWarehousingDTO.class);
        TTrainLibrary tTrainLibrary = tTrainLibraryService.getById(query.getTrainLibraryId());
        if (query.getType()==1){
            if (tTrainLibrary.getStatus()==1||tTrainLibrary.getStatus()==2){
            if (tTrainLibrary.getStatus()==1||tTrainLibrary.getStatus()==2||tTrainLibrary.getStatus()==4){
                if(tTrainLibrary.getStatus()==2){
                    return R.fail("当前菌种为出库待确认状态,不可重复出库");
                }else{
                }else if (tTrainLibrary.getStatus()==1){
                    return R.fail("当前菌种为已出库状态,不可重复出库");
                }else{
                    return R.fail("当前菌种为入库待确认状态,不可出库");
                }
            }
            tTrainLibrary.setStatus(2);
        }
        if (query.getType()==2){
            if (tTrainLibrary.getStatus()==3||tTrainLibrary.getStatus()==4){
            if (tTrainLibrary.getStatus()==2||tTrainLibrary.getStatus()==3||tTrainLibrary.getStatus()==4){
                if(tTrainLibrary.getStatus()==4){
                    return R.fail("当前菌种为入库待确认状态,不可重复入库");
                }else{
                }else if (tTrainLibrary.getStatus()==3){
                    return R.fail("当前菌种为已入库状态,不可重复入库");
                }else{
                    return R.fail("当前菌种为出库待确认状态,不可入库");
                }
            }
            tTrainLibrary.setStatus(4);
        }
        query.setHandleId(tokenService.getLoginUser().getUserId());
        query.setBoundTime(LocalDateTime.now());
        tTrainLibraryWarehousingService.save(query);
        tTrainLibraryService.updateById(tTrainLibrary);
        return R.ok();
    }
    /**
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -81,7 +81,6 @@
        }
        List<SysMenu> menus = roleService.roleInfoFromUserId(loginUser.getUserId());
        ajax.put("menus",menus);
        ajax.put("roleName",roles.get(0).getRoleName());
        ajax.put("userInfo",loginUser);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -13,6 +13,7 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.*;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.SysUserQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.SysUserVO;
@@ -24,6 +25,7 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -48,6 +50,35 @@
    private ISysDeptService deptService;
    @Autowired
    private TokenService tokenService;
    @Resource
    private TBreedingAndPreservationService breedingAndPreservationService;
    @Resource
    private TCulturePreservationService culturePreservationService;
    @Resource
    private TNoticeService noticeService;
    @Resource
    private TObservationOfPetriDishesService observationOfPetriDishesService;
    @Resource
    private TPedigreeChartDetailService pedigreeChartDetailService;
    @Resource
    private TPedigreeChartService pedigreeChartService;
    @Resource
    private TSeparationOfCultureDishesService separationOfCultureDishesService;
    @Resource
    private TStrainReportService strainReportService;
    @Resource
    private TStrainReportDetailService strainReportDetailService;
    @Resource
    private TStrainValidationDataService strainValidationDataService;
    @Resource
    private TTrainLibraryService tTrainLibraryService;
    @Resource
    private TTrainLibraryWarehousingService tTrainLibraryWarehousingService;
    @Resource
    private TVaccinationSlopeService vaccinationSlopeService;
    @Resource
    private TProjectTeamStaffService projectTeamStaffService;
    /**
     * 获取用户列表
@@ -233,18 +264,81 @@
        }
        return AjaxResult.success(userService.updateUser(sysUser));
    }
    @ApiOperation(value = "账号继承")
    @ApiOperation(value = "账号继承",response = SysUserInheritDTO.class)
    @Log(title = "用户信息-账号继承", businessType = BusinessType.UPDATE)
    @PostMapping("/api/system/user/inherit")
    public AjaxResult inherit(@RequestBody String param)
    {
        SysUserInheritDTO dto = JSON.parseObject(param,SysUserInheritDTO.class);
        Long currentUserId = dto.getCurrentUserId();
        Long userId = dto.getUserId();
        SysUser currentUser = userService.selectUserById(dto.getCurrentUserId());
        SysUser user = userService.selectUserById(dto.getUserId());
        user.setUserId(currentUser.getUserId());
        userService.deleteUserById(dto.getCurrentUserId());
        // 将user的userId换成currentUser的userId
        userService.inherit(user);
        // 将user所有数据 替换为当前账号id
        List<TCulturePreservation> culturePreservationsHandle = culturePreservationService.lambdaQuery().eq(TCulturePreservation::getHandleId, userId).list();
        for (TCulturePreservation tCulturePreservation : culturePreservationsHandle) {
            tCulturePreservation.setHandleId(currentUserId+"");
        }
        culturePreservationService.updateBatchById( culturePreservationsHandle);
        List<TCulturePreservation> culturePreservationsPreserve = culturePreservationService.lambdaQuery().eq(TCulturePreservation::getPreserveId, userId).list();
        for (TCulturePreservation tCulturePreservation : culturePreservationsPreserve) {
            tCulturePreservation.setPreserveId(currentUserId+"");
        }
        culturePreservationService.updateBatchById( culturePreservationsPreserve);
        List<TNotice> notices = noticeService.lambdaQuery().eq(TNotice::getUserId, userId).list();
        for (TNotice tNotice : notices) {
            tNotice.setUserId(currentUserId+"");
        }
        noticeService.updateBatchById( notices);
        List<TPedigreeChartDetail> pedigreeChartDetailsVaccinate = pedigreeChartDetailService.lambdaQuery().eq(TPedigreeChartDetail::getVaccinateId, userId).list();
        for (TPedigreeChartDetail tPedigreeChartDetail : pedigreeChartDetailsVaccinate) {
            tPedigreeChartDetail.setVaccinateId(currentUserId+"");
        }
        pedigreeChartDetailService.updateBatchById( pedigreeChartDetailsVaccinate);
        List<TPedigreeChartDetail> pedigreeChartDetailsPreserve = pedigreeChartDetailService.lambdaQuery().eq(TPedigreeChartDetail::getPreserveId, userId).list();
        for (TPedigreeChartDetail tPedigreeChartDetail : pedigreeChartDetailsPreserve) {
            tPedigreeChartDetail.setPreserveId(currentUserId+"");
        }
        pedigreeChartDetailService.updateBatchById(pedigreeChartDetailsPreserve);
        List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, userId).list();
        for (TProjectTeamStaff tProjectTeamStaff : projectTeamStaffs) {
            tProjectTeamStaff.setUserId(currentUserId+"");
        }
        projectTeamStaffService.updateBatchById(projectTeamStaffs);
        List<TStrainReport> strainReports = strainReportService.lambdaQuery().eq(TStrainReport::getCommitId, userId).list();
        for (TStrainReport tStrainReport : strainReports) {
            tStrainReport.setCommitId(currentUserId+"");
        }
        strainReportService.updateBatchById(strainReports);
        List<TStrainReportDetail> strainReportDetailsExperiment = strainReportDetailService.lambdaQuery().eq(TStrainReportDetail::getExperimentId, userId).list();
        for (TStrainReportDetail tStrainReportDetail : strainReportDetailsExperiment) {
            tStrainReportDetail.setExperimentId(currentUserId+"");
        }
        strainReportDetailService.updateBatchById(strainReportDetailsExperiment);
        List<TStrainReportDetail> strainReportDetailsEvaluate = strainReportDetailService.lambdaQuery().eq(TStrainReportDetail::getEvaluateId, userId).list();
        for (TStrainReportDetail tStrainReportDetail : strainReportDetailsEvaluate) {
            tStrainReportDetail.setEvaluateId(currentUserId+"");
        }
        strainReportDetailService.updateBatchById(strainReportDetailsEvaluate);
        List<TTrainLibraryWarehousing> tTrainLibraryWarehousingsHandle = tTrainLibraryWarehousingService.lambdaQuery().eq(TTrainLibraryWarehousing::getHandleId, userId).list();
        for (TTrainLibraryWarehousing tTrainLibraryWarehousing : tTrainLibraryWarehousingsHandle) {
            tTrainLibraryWarehousing.setHandleId(currentUserId);
        }
        tTrainLibraryWarehousingService.updateBatchById(tTrainLibraryWarehousingsHandle);
        List<TTrainLibraryWarehousing> tTrainLibraryWarehousingsPreserve = tTrainLibraryWarehousingService.lambdaQuery().eq(TTrainLibraryWarehousing::getPreserveId, userId).list();
        for (TTrainLibraryWarehousing tTrainLibraryWarehousing : tTrainLibraryWarehousingsPreserve) {
            tTrainLibraryWarehousing.setPreserveId(currentUserId);
        }
        tTrainLibraryWarehousingService.updateBatchById(tTrainLibraryWarehousingsPreserve);
        List<TVaccinationSlope> vaccinationSlopesHandle = vaccinationSlopeService.lambdaQuery().eq(TVaccinationSlope::getHandleId, userId).list();
        for (TVaccinationSlope tVaccinationSlope : vaccinationSlopesHandle) {
            tVaccinationSlope.setHandleId(currentUserId+"");
        }
        vaccinationSlopeService.updateBatchById(vaccinationSlopesHandle);
        List<TVaccinationSlope> vaccinationSlopesPreserve = vaccinationSlopeService.lambdaQuery().eq(TVaccinationSlope::getPreserveId, userId).list();
        for (TVaccinationSlope tVaccinationSlope : vaccinationSlopesPreserve) {
            tVaccinationSlope.setPreserveId(currentUserId+"");
        }
        return AjaxResult.success();
    }
    @ApiOperation(value = "启用/禁用")
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java
@@ -55,7 +55,6 @@
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId());
        if (sysUser!=null) {
            this.setFieldValByName("createBy", sysUser.getNickName(), metaObject);
            this.setFieldValByName("updateBy", sysUser.getNickName(), metaObject);
        }
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
@@ -23,7 +23,7 @@
@Api(tags = "服务器文件上传")
@RestController
@CrossOrigin
@RequestMapping("/file/")
@RequestMapping("/open/file/")
public class FileController {
    @Autowired
@@ -39,7 +39,7 @@
        }
        String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//        String realPath = fileUploadConfig.getLocation() + TimeDir;
        String realPath = "C:\\Users\\Admin\\Desktop\\qrcode\\" + TimeDir;
        String realPath = "D:\\upload\\image\\" + TimeDir;
        File file = new File(realPath);
        // 没有目录就创建
        if (!file.exists()) {
@@ -92,7 +92,7 @@
            return "请传入文件!";
        }
        String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String realPath = "C:\\Users\\Admin\\Desktop\\qrcode\\" + TimeDir;
        String realPath = "D:\\upload\\image" + TimeDir;
        File file = new File(realPath);
        // 没有目录就创建
        if (!file.exists()) {
ruoyi-system/src/main/java/com/ruoyi/system/dto/TPedigreeChartParentTwoCountDTO.java
@@ -8,7 +8,7 @@
import java.util.List;
@Data
@ApiModel(value = "添加谱系图一级设置穿戴书")
@ApiModel(value = "添加谱系图一级设置传代书")
public class TPedigreeChartParentTwoCountDTO extends TPedigreeChartDetail {
    @ApiModelProperty(value = "后代")
    private List<TPedigreeChartParentThreeDTO> children;
ruoyi-system/src/main/java/com/ruoyi/system/model/TBreedingAndPreservation.java
@@ -72,6 +72,9 @@
    @ApiModelProperty(value = "培养温度")
    @TableField("temperature")
    private String temperature;
    @ApiModelProperty(value = "项目组id")
    @TableField("project_id")
    private String projectId;
    @ApiModelProperty(value = "需氧类型1专性需氧 2专性厌氧 3兼性厌氧 4耐氧厌氧")
    @TableField("aerobic_type")
ruoyi-system/src/main/java/com/ruoyi/system/model/TCulturePreservation.java
@@ -54,6 +54,9 @@
    @ApiModelProperty(value = "操作人id")
    @TableField("handle_id")
    private String handleId;
    @ApiModelProperty(value = "操作人名称")
    @TableField(exist = false)
    private String handleName;
    @ApiModelProperty(value = "操作人签名")
    @TableField("handle_signature")
ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java
@@ -63,6 +63,8 @@
    @ApiModelProperty(value = "菌种传代生产谱系图 回显使用")
    @TableField(exist = false)
    private TPedigreeChartParentAllDetailDTO pedigreeChartParentAllDetailDTO;
    @ApiModelProperty(value = "项目组id")
    @TableField("project_id")
    private String projectId;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChartDetail.java
@@ -71,6 +71,9 @@
    @ApiModelProperty(value = "接种操作人id")
    @TableField("vaccinate_id")
    private String vaccinateId;
    @ApiModelProperty(value = "接种操作人名称")
    @TableField(exist = false)
    private String vaccinateName;
    @ApiModelProperty(value = "接种时间")
    @TableField("vaccinate_time")
ruoyi-system/src/main/java/com/ruoyi/system/model/TStrainValidationData.java
@@ -33,7 +33,9 @@
    @TableField("id")
    private String id;
    @ApiModelProperty(value = "项目组id")
    @TableField("project_id")
    private String projectId;
    @ApiModelProperty(value = "菌种来源")
    @TableField("strain_source")
ruoyi-system/src/main/java/com/ruoyi/system/model/TTrainLibrary.java
@@ -40,7 +40,9 @@
    @TableField("strain_name")
    private String strainName;
    @ApiModelProperty(value = "项目组id")
    @TableField("project_id")
    private String projectId;
    @ApiModelProperty(value = "菌种来源1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-0) 2 是斜面的源头菌种;接种入主细胞库(祖代-0)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)3 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)")
    @TableField("strain_source")
ruoyi-system/src/main/java/com/ruoyi/system/query/TBreedingAndPreservationQuery.java
@@ -5,6 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "菌种选育保藏记录分页列表query")
public class TBreedingAndPreservationQuery extends TimeRangeQueryBody {
@@ -19,6 +21,8 @@
    private Integer aerobicType;
    @ApiModelProperty(value = "是否草稿 0否1是")
    private Integer isDraft;
    @ApiModelProperty(value = "项目组ids")
    private List<String> projectIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/TPedigreeChartQuery.java
@@ -5,6 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "谱系图分页列表query")
public class TPedigreeChartQuery extends TimeRangeQueryBody {
@@ -18,5 +20,6 @@
    @ApiModelProperty(value = "起传类型1母代 2祖代")
    private Integer generationType;
    @ApiModelProperty(value = "项目组ids")
    private List<String> projectIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainReportProjectQuery.java
@@ -12,7 +12,7 @@
public class TStrainReportProjectQuery extends TimeRangeQueryBody {
    @ApiModelProperty(value = "所属项目组")
    private String teamName;
    @ApiModelProperty(value = "评定开始时间段 创建日期 例:2020-11-11 20:20:20 - 2020-12-12 20:20:20")
    @ApiModelProperty(value = "创建日期 例:2020-11-11 20:20:20 - 2020-12-12 20:20:20")
    private String time;
    @ApiModelProperty(value = "开始时间 前端忽略")
    private String startTime;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -517,19 +517,23 @@
    public List<SysMenu> getMenuLevelList(List<Long> menusId) {
        //获取当前的权限菜单
        List<SysMenu> all = menuMapper.getAllInIds(menusId);
        // 第三级
        List<SysMenu> s3 = all.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList());
        // 第二级
        List<SysMenu> s2 = all.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList());
        List<SysMenu> collect4 = all.stream().filter(e -> e.getParentId() != null).collect(Collectors.toList());
        // 第一级
        List<SysMenu> s1 = all.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList());
        for (SysMenu menu : s2) {
            List<SysMenu> collect = s3.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
            menu.setChildren(collect);
        }
        for (SysMenu menu : s1) {
            List<SysMenu> collect = s2.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
            List<SysMenu> collect = collect4.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
            for (SysMenu sysMenu : collect) {
                List<SysMenu> collect1 = collect4.stream().filter(e -> e.getParentId().equals(sysMenu.getMenuId())).collect(Collectors.toList());
                for (SysMenu sysMenu1 : collect1) {
                    List<SysMenu> collect2 = collect4.stream().filter(e -> e.getParentId().equals(sysMenu1.getMenuId())).collect(Collectors.toList());
                    for (SysMenu sysMenu2 : collect2) {
                        List<SysMenu> collect3 = collect4.stream().filter(e -> e.getParentId().equals(sysMenu2.getMenuId())).collect(Collectors.toList());
                        sysMenu2.setChildren(collect3);
                    }
                    sysMenu1.setChildren(collect2);
                }
                sysMenu.setChildren(collect1);
            }
            menu.setChildren(collect);
        }
        return s1;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TPedigreeChartServiceImpl.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.TPedigreeChartMapper;
import com.ruoyi.system.model.TPedigreeChart;
import com.ruoyi.system.model.TProjectTeamStaff;
@@ -14,6 +16,7 @@
import com.ruoyi.system.vo.TPedigreeChartDetailVO;
import com.ruoyi.system.vo.TPedigreeChartVO;
import com.ruoyi.system.vo.TProjectTeamVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -31,6 +34,8 @@
@Service
public class TPedigreeChartServiceImpl extends ServiceImpl<TPedigreeChartMapper, TPedigreeChart> implements TPedigreeChartService {
    @Autowired
    private SysUserMapper sysUserMapper;
    @Override
    public PageInfo<TPedigreeChartVO> pageList(TPedigreeChartQuery query) {
        PageInfo<TPedigreeChartVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
@@ -51,6 +56,19 @@
    public PageInfo<TPedigreeChartDetailVO> pageListDetail(TPedigreeChartDetailQuery query) {
        PageInfo<TPedigreeChartDetailVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TPedigreeChartDetailVO> list = 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())))
                    .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());
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java
@@ -41,7 +41,8 @@
        List<String> teamIds = list.stream().map(TProjectTeamVO::getId).collect(Collectors.toList());
        List<SysUser> sysUsers = sysUserMapper.selectList();
        if(!CollectionUtils.isEmpty(teamIds)){
            List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffMapper.selectList(Wrappers.lambdaQuery(TProjectTeamStaff.class).in(TProjectTeamStaff::getTeamId, teamIds));
            List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffMapper.selectList(Wrappers.lambdaQuery(TProjectTeamStaff.class)
                    .eq(TProjectTeamStaff::getRoleType,3).in(TProjectTeamStaff::getTeamId, teamIds));
            list.forEach(item->{
                List<TProjectTeamStaff> projectTeamStaffList = projectTeamStaffs.stream().filter(staff -> staff.getTeamId().equals(item.getId())).collect(Collectors.toList());
                if(!CollectionUtils.isEmpty(projectTeamStaffList)){
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java
@@ -58,30 +58,33 @@
    public PageInfo<TStrainReportProjectVO> pageListProject(TStrainReportProjectQuery query) {
        PageInfo<TStrainReportProjectVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TStrainReportProjectVO> list = this.baseMapper.pageListProject(query,pageInfo);
        List<TStrainReport> tStrainReports = this.baseMapper.selectList(new LambdaQueryWrapper<TStrainReport>().eq(TStrainReport::getStatus,3));
        LambdaQueryWrapper<TStrainReport> queryWrapper = new LambdaQueryWrapper<TStrainReport>().eq(TStrainReport::getStatus, 3);
        List<TStrainReport> tStrainReports = this.baseMapper.selectList(
                queryWrapper);
        List<TStrainReportDetail> tStrainReportDetails = strainReportDetailMapper.selectList(new LambdaQueryWrapper<TStrainReportDetail>());
        for (TStrainReportProjectVO tStrainReportProjectVO : list) {
            List<TStrainReport> collect = tStrainReports.stream().filter(e -> e.getProjectId().equals(tStrainReportProjectVO.getProjectId())).collect(Collectors.toList());
            List<TStrainReport> strainReports = tStrainReports.stream().filter(e -> e.getProjectId().equals(tStrainReportProjectVO.getProjectId())).collect(Collectors.toList());
            BigDecimal sum = new BigDecimal("0");
            BigDecimal sum1 = new BigDecimal("0");
            BigDecimal sum2 = new BigDecimal("0");
            Integer temp = 0;
            for (TStrainReport tStrainReport : collect) {
                List<TStrainReportDetail> collect1 = tStrainReportDetails.stream()
            for (TStrainReport tStrainReport : strainReports) {
                List<TStrainReportDetail> tStrainReportDetails1 = tStrainReportDetails.stream()
                        .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                                e.getEvaluateHumanType()==1).collect(Collectors.toList());
                List<TStrainReportDetail> collect2 = tStrainReportDetails.stream()
                List<TStrainReportDetail> tStrainReportDetails2 = tStrainReportDetails.stream()
                        .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                                e.getEvaluateHumanType()==2).collect(Collectors.toList());
                // 菌种工程积分
                sum1 = collect2.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(1))
                sum1 = tStrainReportDetails2.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(2))
                        .map(TStrainReportDetail::getEvaluateTotal)
                        .reduce(BigDecimal::add)
                        .orElse(BigDecimal.ZERO);
                // 菌种实验员积分
                sum2 = collect1.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(2))
                sum2 = tStrainReportDetails1.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(1))
                        .map(TStrainReportDetail::getEvaluateTotal)
                        .reduce(BigDecimal::add)
                        .orElse(BigDecimal.ZERO);
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -265,9 +265,8 @@
    <select id="choiceUserList" resultType="com.ruoyi.system.vo.ChoiceUserVO">
        select * from sys_user
        where status =  0 and del_flag = 0
          and roleType = #{query.roleType}
        <if test="query.userIds != null and query.userIds()>0">
        where status =  '0' and del_flag = '0'
        <if test="query.userIds != null and query.userIds.size()>0">
            AND user_id IN
            <foreach collection="query.userIds" close=")" open="(" item="id" separator=",">
                #{id}
@@ -278,7 +277,7 @@
        select * from sys_user
        where 1=1
                <if test="userName != null and userName != ''">
                    OR nick_name LIKE concat('%', #{userName}, '%')
                    and nick_name LIKE concat('%', #{userName}, '%')
                </if>
    </select>
@@ -375,7 +374,7 @@
    </update>
    <delete id="deleteUserById" parameterType="Long">
         update sys_user set del_flag = '2' where user_id = #{userId}
         delete sys_user  where user_id = #{userId}
     </delete>
     
     <delete id="deleteUserByIds" parameterType="Long">
ruoyi-system/src/main/resources/mapper/system/TBreedingAndPreservationMapper.xml
@@ -46,6 +46,12 @@
            <if test="query.isDraft != null and query.isDraft == 0">
                and (status = 1 or status =2)
            </if>
        <if test="query.projectIds != null and query.projectIds.size() > 0">
            and project_id in
            <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
                #{item}
            </foreach>
        </if>
            AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        </where>
        ORDER BY create_time DESC
ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml
@@ -35,6 +35,12 @@
            <if test="query.generationType != null">
                and generation_type = #{query.generationType}
            </if>
        <if test="query.projectIds != null and query.projectIds.size() > 0">
            and project_id in
            <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
                #{item}
            </foreach>
        </if>
            AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        </where>
        ORDER BY create_time DESC
ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml
@@ -20,7 +20,6 @@
        id, team_name, person_charge, status, create_time, update_time, create_by, update_by, disabled
    </sql>
    <select id="pageList" resultType="com.ruoyi.system.vo.TProjectTeamVO">
        SELECT
        <include refid="Base_Column_List" />
        FROM t_project_team
@@ -32,8 +31,7 @@
                AND person_charge LIKE CONCAT('%', #{query.personCharge}, '%')
            </if>
            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                AND create_time &gt;= #{query.startTime}
                AND create_time &lt;= #{query.endTime}
                AND create_time BETWEEN #{query.startTime} AND #{query.endTime}
            </if>
            AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        </where>
ruoyi-system/src/main/resources/mapper/system/TStrainReportMapper.xml
@@ -37,7 +37,10 @@
        id, project_id, report_code, report_name, report_content, create_time, update_time, create_by, update_by, disabled, enclosure_name, enclosure_size, enclosure_url, status, experiment_id, evaluate, evaluate_total, audit_remark, audit_time, audit_id, evaluate_time, evaluate_id, is_draft, report_type, evaluate_human_type, evaluate_type
    </sql>
    <select id="pageList" resultType="com.ruoyi.system.vo.TStrainReportVO">
        select t1.*,t2.team_name as teamName,t3.nick_name as experimentName,t4.nick_name as evaluateName from t_strain_report t1
        select t1.*,t2.team_name as teamName,t3.nick_name as experimentName,t4.nick_name as evaluateName,
        t5.create_time as evaluateTime
        from t_strain_report t1
            left join t_strain_report_detail t5  on t5.report_id = t1.id
        left join t_project_team t2 on t1.project_id = t2.id
        left join sys_user t3 on t3.user_id = t5.experiment_id
@@ -66,7 +69,7 @@
            </if>
            <if test="query.evaluateId != null and query.evaluateId.size()>0">
                AND t1.evaluate_id IN
                AND t5.evaluate_id IN
                <foreach collection="query.evaluateId" close=")" open="(" item="id" separator=",">
                    #{id}
                </foreach>
@@ -84,8 +87,15 @@
                and t1.team_name like concat('%',#{query.teamName},'%')
            </if>
            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                and t1.evaluate_time between #{query.startTime} and #{query.endTime}
                and t1.create_time between #{query.startTime} and #{query.endTime}
            </if>
            <if test="query.projectIds != null and query.projectIds.size() > 0">
                and t1.id in
                <foreach item="item" collection="query.projectIds" separator="," open="(" close=")" index="">
                    #{item}
                </foreach>
            </if>
            AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        </where>