无关风月
2025-08-06 053f6187b5f6cda1725ed63df8a8766b5976fb53
菌种库所有代码
40个文件已修改
711 ■■■■■ 已修改文件
.idea/encodings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-test.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/target/classes/application-prod.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/target/classes/application-test.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/ChoiceStrainDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TObservationOfPetriDishes.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TVaccinationSlope.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainValidationDataQuery.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TTrainLibraryQuery.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TStrainReportServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TStrainValidationDataMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TTrainLibraryMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/target/classes/mapper/system/SysUserMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/target/classes/mapper/system/TBreedingAndPreservationMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/target/classes/mapper/system/TPedigreeChartMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/target/classes/mapper/system/TProjectTeamMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/target/classes/mapper/system/TStrainReportMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/target/classes/mapper/system/TStrainValidationDataMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/target/classes/mapper/system/TTrainLibraryMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/encodings.xml
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding">
    <file url="file://$PROJECT_DIR$/generator/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/generator/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-applet/src/main/java" charset="UTF-8" />
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBreedingAndPreservationController.java
@@ -30,6 +30,7 @@
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -78,23 +79,28 @@
            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());
                    .list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
                if (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }else {
                return R.ok(new PageInfo<>());
            }
        }else if (!sysUser.getRoleType().equals("1")){
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!allProjectIds.isEmpty()){                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
            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);
            }else {
                return R.ok(new PageInfo<>());
            }
        }
@@ -115,6 +121,7 @@
        if (dto.getStatus()==1){
            return R.fail("有菌种待确认,无法提交");
        }
        if (dto.getStatus()==3){
            dto.setIsDraft(1);
        }
@@ -155,7 +162,8 @@
        if (dto.getStatus()!=null&&dto.getStatus()==2){
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery()
                    .eq(TProjectTeamStaff::getTeamId,dto.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 2)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!allProjectIds.isEmpty()){
@@ -196,6 +204,10 @@
        }else{
            dto.setIsDraft(0);
        }
        TBreedingAndPreservation breedingAndPreservationServiceById = breedingAndPreservationService.getById(dto.getId());
        if (breedingAndPreservationServiceById.getStatus()==1){
            return R.fail("该记录已提交,不可编辑!");
        }
        breedingAndPreservationService.updateById(dto);
        List<TSeparationOfCultureDishes> separationOfCultureDishesList = dto.getSeparationOfCultureDishesList();
        for (TSeparationOfCultureDishes tSeparationOfCultureDishes : separationOfCultureDishesList) {
@@ -211,35 +223,47 @@
        observationOfPetriDishesService.saveBatch(observationOfPetriDishes);
        List<TVaccinationSlope> vaccinationSlopes = dto.getVaccinationSlopes();
        for (TVaccinationSlope vaccinationSlope : vaccinationSlopes) {
            if (dto.getStatus()==1&&!StringUtils.hasLength(vaccinationSlope.getPreserveId())){
                return R.fail("接种斜面记录未确认,不能提交");
            }
            vaccinationSlope.setBreedingPreserveId(dto.getId());
        }
        vaccinationSlopeService.remove(new LambdaQueryWrapper<TVaccinationSlope>().eq(TVaccinationSlope::getBreedingPreserveId, dto.getId()));
        vaccinationSlopeService.saveBatch(vaccinationSlopes);
        List<TCulturePreservation> culturePreservations = dto.getCulturePreservations();
        for (TCulturePreservation tSeparationOfCultureDishes : culturePreservations) {
            tSeparationOfCultureDishes.setBreedingPreserveId(dto.getId());
        }
        culturePreservationService.remove(new LambdaQueryWrapper<TCulturePreservation>().eq(TCulturePreservation::getBreedingPreserveId, dto.getId()));
        for (TCulturePreservation culturePreservation : culturePreservations) {
            if (dto.getStatus()==1&&!StringUtils.hasLength(culturePreservation.getPreserveId())){
                return R.fail("菌种保藏记录未确认,不能提交");
            }
            culturePreservation.setBreedingPreserveId(dto.getId());
        }
        culturePreservationService.saveBatch(culturePreservations);
        if (dto.getStatus()==2){
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 2)
                    .eq(TProjectTeamStaff::getRoleType, 3)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                    .eq(TProjectTeam::getStatus, 1)
                    .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
            TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery()
                    .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
            tNotice.setUserId(one1.getUserId());
            if (!allProjectIds.isEmpty()){
                TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                        .eq(TProjectTeam::getStatus, 1)
                        .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
                TProjectTeamStaff one1 = projectTeamStaffService.lambdaQuery()
                        .eq(TProjectTeamStaff::getTeamId, projectTeam.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
                tNotice.setUserId(one1.getUserId());
            tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice.setStatus(1);
            tNotice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;");
            tNotice.setDataId(dto.getId());
            tNotice.setNoticeType(6);
            noticeService.save(tNotice);
                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
                tNotice.setStatus(1);
                tNotice.setNoticeContent("您有【1】条【菌种选育保藏记录】等待签字入库确认;");
                tNotice.setDataId(dto.getId());
                tNotice.setNoticeType(6);
                noticeService.save(tNotice);
            }
        }
        return R.ok();
    }
@@ -289,6 +313,13 @@
                culturePreservation.setHandleName(sysUser.getNickName());
            }
        }
        for (TVaccinationSlope vaccinationSlope : vaccinationSlopes) {
            SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(vaccinationSlope.getHandleId()))).findFirst()
                    .orElse(null);
            if (sysUser!=null){
                vaccinationSlope.setHandleName(sysUser.getNickName());
            }
        }
        res.setSeparationOfCultureDishesList(separationOfCultureDishesList);
        res.setObservationOfPetriDishes(observationOfPetriDishes);
        res.setVaccinationSlopes(vaccinationSlopes);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TNoticeController.java
@@ -53,10 +53,11 @@
     * 获取项目组管理列表
     */
    @ApiOperation(value = "中台消息列表")
    @PostMapping(value = "/notice/list")
    @GetMapping(value = "/notice/list")
    public R<List<TNotice>> list() {
        Long userId = tokenService.getLoginUser().getUserId();
        List<TNotice> list = noticeService.lambdaQuery().eq(TNotice::getUserId, userId + "").list();
        List<TNotice> list = noticeService.lambdaQuery()
                .eq(TNotice::getStatus, 1).orderByDesc(TNotice::getCreateTime).eq(TNotice::getUserId, userId + "").list();
        for (TNotice tNotice : list) {
            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(tNotice.getCommitId()));
            if (sysUser!=null){
@@ -65,6 +66,18 @@
        }
        return R.ok(list);
    }
    /**
     * 获取项目组管理列表
     */
    @ApiOperation(value = "点击跳转后")
    @GetMapping(value = "/open/notice/editStatus")
    public R editStatus(@RequestParam String id) {
        TNotice notice = noticeService.getById(id);
        notice.setStatus(2);
        noticeService.updateById(notice);
        return R.ok();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TPedigreeChartController.java
@@ -11,6 +11,7 @@
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.exception.GlobalException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.framework.web.service.TokenService;
@@ -32,6 +33,7 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
/**
@@ -48,6 +50,7 @@
public class TPedigreeChartController {
    @Resource
    private TPedigreeChartDetailService pedigreeChartDetailService;
    @Resource
    private TPedigreeChartService pedigreeChartService;
    @Resource
@@ -65,6 +68,7 @@
    @ApiOperation(value = "谱系图-获取谱系图分页列表",response = TPedigreeChartQuery.class)
    @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")){
@@ -77,6 +81,9 @@
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }else{
                return R.ok(new PageInfo<>());
            }
        }else if (!sysUser.getRoleType().equals("1")){
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
@@ -88,6 +95,9 @@
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }else{
                return R.ok(new PageInfo<>());
            }
        }
        return R.ok(pedigreeChartService.pageList(query));
@@ -158,7 +168,6 @@
                        tPedigreeChartParentTwoDTO.setVaccinateTime(LocalDateTime.now());
                        tPedigreeChartParentTwoDTO.setStorageTime(LocalDateTime.now());
                        tPedigreeChartParentTwoDTO.setParentId(count.getId());
                        tPedigreeChartParentTwoDTO.setPedigreeChartId(parent.getId());
                        tPedigreeChartParentTwoDTO.setId(null);
                        pedigreeChartDetailService.save(tPedigreeChartParentTwoDTO);
@@ -177,6 +186,7 @@
                                    tPedigreeChartParentThreeDTO.setParentId(childCount.getId());
                                    tPedigreeChartParentThreeDTO.setPedigreeChartId(parent.getId());
                                    tPedigreeChartParentThreeDTO.setType(1);
                                    tPedigreeChartParentThreeDTO.setVaccinateId(loginUser.getUserId()+"");
                                    if (tPedigreeChartParentThreeDTO.getStatus()==null){
                                        tPedigreeChartParentThreeDTO.setStatus(1);
                                    }
@@ -196,26 +206,28 @@
            String child = JSON.toJSONString(oneLevel);
            parent.setJson(child);
            pedigreeChartService.updateById(parent);
            // 新增消息
            TNotice tNotice = new TNotice();
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .eq(TProjectTeamStaff::getRoleType, 2)
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!allProjectIds.isEmpty()){
                TProjectTeam team = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                        .eq(TProjectTeam::getStatus, 1)
                        .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
                TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
                        .eq(TProjectTeamStaff::getTeamId, team.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
                tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
                tNotice.setUserId(projectTeamStaff.getUserId());
                tNotice.setStatus(1);
                tNotice.setNoticeContent("菌种实验员新增【1】条【菌种传代生产谱系图】操作,等待您签字确认;");
                tNotice.setDataId(parent.getId());
                tNotice.setNoticeType(4);
                noticeService.save(tNotice);
            }
        }
        // 新增消息
        TNotice tNotice = new TNotice();
        List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId,parent.getProjectId() )
                .eq(TProjectTeamStaff::getRoleType, 2)
                .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
        if (!allProjectIds.isEmpty()){
            TProjectTeam team = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                    .eq(TProjectTeam::getStatus, 1)
                    .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
            TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
                    .eq(TProjectTeamStaff::getTeamId, team.getId()).eq(TProjectTeamStaff::getRoleType, 2).one();
            tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice.setUserId(projectTeamStaff.getUserId());
            tNotice.setStatus(1);
            tNotice.setNoticeContent("菌种实验员新增【1】条【菌种传代生产谱系图】操作,等待您签字确认;");
            tNotice.setDataId(parent.getId());
            tNotice.setNoticeType(4);
            noticeService.save(tNotice);
        }
        return R.ok();
    }
@@ -242,6 +254,16 @@
            parent.setJson(child);
        }
        pedigreeChartService.updateById(parent);
        if (parent.getGenerationType()==1){
            TPedigreeChartDetail one = pedigreeChartDetailService.getOne(new LambdaQueryWrapper<TPedigreeChartDetail>()
                    .eq(TPedigreeChartDetail::getPedigreeChartId, "0"));
            if (one!=null){
                one.setStrainName(parent.getStrainName());
                one.setStrainCode(parent.getStrainCode());
                pedigreeChartDetailService.updateById( one);
            }
        }
//        pedigreeChartDetailService.remove(new LambdaQueryWrapper<TPedigreeChartDetail>()
//                .eq(TPedigreeChartDetail::getPedigreeChartId,  dto.getParent().getId()));
//        if (!dto.getOne().isEmpty()){
@@ -335,7 +357,7 @@
        }
        TPedigreeChartDetailDTO dto = JSON.parseObject(param, TPedigreeChartDetailDTO.class);
        if (dto.getParentId().equals("0")){
            // 新增祖代
            // 新增祖/母代
            dto.setParentId("0");
            pedigreeChartDetailService.save(dto);
        }else{
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectGroupController.java
@@ -10,6 +10,7 @@
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.domain.server.Sys;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.ChoiceDTO;
import com.ruoyi.system.dto.SysUserDTO;
import com.ruoyi.system.dto.TProjectTeamDTO;
@@ -31,6 +32,7 @@
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -50,6 +52,8 @@
    private TProjectTeamStaffService projectTeamStaffService;
    @Resource
    private ISysUserService sysUserService;
    @Resource
    private TokenService tokenService;
    /**
     * 获取项目组管理列表
     */
@@ -64,7 +68,17 @@
    @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));
        Long userId = tokenService.getLoginUser().getUserId();
        SysUser sysUser = sysUserService.selectUserById(userId);
        if (!sysUser.getRoleType().equals("1")){
            List<String> projetIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, userId).list()
                    .stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (projetIds.isEmpty()){
                return R.ok(new PageInfo<>());
            }
            query.setProjectIds(projetIds);
        }
        return R.ok(projectTeamService.pageList1(query));
    }
    /**
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainReportController.java
@@ -61,24 +61,43 @@
    @ApiOperation(value = "菌种报告库分页列表查询",tags = "菌种报告库",response = TStrainReportQuery.class)
    @PostMapping(value = "/api/t-strain-report/pageListAll")
    public R<PageInfo<TStrainReportVO>> pageListAll(@RequestBody String param) {
        TStrainReportQuery query = JSON.parseObject(param, TStrainReportQuery.class);
        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");
        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{
                return R.ok(new PageInfo<>());
            }
            projectIds = collect;
        }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);
            }else{
                return R.ok(new PageInfo<>());
            }
        }
        TStrainReportQuery query = JSON.parseObject(param, TStrainReportQuery.class);
        if (StringUtils.hasLength(query.getTime())){
            query.setStartTime(query.getTime().split(" - ")[0]);
            query.setEndTime(query.getTime().split(" - ")[1]);
        }
        query.setProjectIds(projectIds);
        return R.ok(strainReportService.pageListAll(query));
    }
    @ApiOperation(value = "获取菌种报告库操作评定分页列表",tags = "菌种报告库操作评定-菌种实验员",response = TStrainReportQuery.class)
@@ -152,17 +171,22 @@
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }else {
                return R.ok(new PageInfo<>());
            }
        }else if (!sysUser.getRoleType().equals("1")){
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!allProjectIds.isEmpty()){                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
            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);
            }else {
                return R.ok(new PageInfo<>());
            }
        }
        return R.ok(strainReportService.pageListProject(query));
@@ -172,7 +196,7 @@
    @ApiOperation(value = "菌种项目组评定详情",tags = "菌种项目组评定表")
    @GetMapping(value = "/open/t-strain-report/getDetailByIdProject")
    public R<TStrainReportDetailProjectVO> getDetailByIdProject(@RequestParam String id) {
        TProjectTeam byId = projectTeamService.getById(id);
        TProjectTeam project = projectTeamService.getById(id);
        TStrainReportDetailProjectVO tStrainReportDetailVO = new TStrainReportDetailProjectVO();
        LoginUser loginUser = tokenService.getLoginUser();
@@ -183,6 +207,7 @@
        if (strainReportIds.isEmpty())strainReportIds.add("0");
        List<TStrainReportDetail> tStrainReportDetails = strainReportDetailService
                .list(new LambdaQueryWrapper<TStrainReportDetail>().in(TStrainReportDetail::getReportId,strainReportIds)
                        .isNotNull(TStrainReportDetail::getExperimentId)
                        .orderByDesc(TStrainReportDetail::getCreateTime));
        BigDecimal sum = new BigDecimal("0");
        BigDecimal sum1 = new BigDecimal("0");
@@ -197,47 +222,51 @@
                    .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                            e.getEvaluateHumanType()==2).collect(Collectors.toList());
            // 菌种工程积分
            sum1 = tStrainReportDetails2.stream()
                    .filter(e -> e.getEvaluateHumanType().equals(1))
                    .map(TStrainReportDetail::getEvaluateTotal)
                    .reduce(BigDecimal::add)
                    .orElse(BigDecimal.ZERO);
            // 菌种实验员积分
            sum2 = tStrainReportDetails1.stream()
            sum1 = sum1.add(tStrainReportDetails2.stream()
                    .filter(e -> e.getEvaluateHumanType().equals(2))
                    .map(TStrainReportDetail::getEvaluateTotal)
                    .reduce(BigDecimal::add)
                    .orElse(BigDecimal.ZERO);
            List<TStrainReportDetail> tStrainReportDetails3 = tStrainReportDetails.stream().filter(e -> e.getReportType() == 1).collect(Collectors.toList());
                    .orElse(BigDecimal.ZERO));
            // 菌种实验员积分
            sum2 = sum2.add(tStrainReportDetails1.stream()
                    .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getReportType()==1)
                    .map(TStrainReportDetail::getEvaluateTotal)
                    .reduce(BigDecimal::add)
                    .orElse(BigDecimal.ZERO));
            List<TStrainReportDetail> tStrainReportDetails3 = tStrainReportDetails.stream().filter(e -> e.getReportId().equals(tStrainReport.getId())
                    &&
                    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")){
                    if (tStrainReportDetail.getEvaluate().split(",")[4].equals("-3")){
                        temp++;
                        break;
                    }
                }
            }
        }
        tStrainReportDetailVO.setTeamIntegral(sum);
        tStrainReportDetailVO.setTeamIntegral(sum1.add(sum2));
        tStrainReportDetailVO.setEngineerIntegral(sum1);
        tStrainReportDetailVO.setExperimenterIntegral(sum2);
        tStrainReportDetailVO.setFailCount(temp);
        List<TStrainReport> strainReportIdsByProjectId = tStrainReports.stream().filter(e -> e.getProjectId().equals(byId.getId())).collect(Collectors.toList());
        List<TStrainReport> strainReportIdsByProjectId = tStrainReports.stream().filter(e -> e.getProjectId().equals(project.getId())).collect(Collectors.toList());
        if (!strainReportIdsByProjectId.isEmpty()){
            tStrainReportDetailVO.setEndTime(strainReportIdsByProjectId.get(0).getEvaluateTime());
        }
        tStrainReportDetailVO.setStartTime(byId.getCreateTime());
        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, byId.getId())
        tStrainReportDetailVO.setStartTime(project.getCreateTime());
        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, project.getId())
                .eq(TProjectTeamStaff::getRoleType, 2).one();
        List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS = new ArrayList<>();
        if (sysUser.getRoleType().equals("4")){
            TStrainReportDetailExperimentVO tStrainReportDetailExperimentVO = new TStrainReportDetailExperimentVO();
            tStrainReportDetailExperimentVO.setUserName(sysUser.getNickName());
            tStrainReportDetailExperimentVO.setHandleCount((int) tStrainReportDetails.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId() + "")).count());
            tStrainReportDetailExperimentVO.setHandleCount((int) tStrainReportDetails.stream().filter(e -> e.getExperimentId()!=null&&e.getExperimentId().equals(sysUser.getUserId() + "")).count());
            BigDecimal handleIntegral = tStrainReportDetails.stream()
                    .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+""))
                    .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+"")
                            &&e.getReportType()==1)
                    .map(TStrainReportDetail::getEvaluateTotal)
                    .reduce(BigDecimal::add)
                    .orElse(BigDecimal.ZERO);
@@ -245,8 +274,9 @@
            List<TStrainReportDetail> strainReportDetails = tStrainReportDetails.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId() + "")).collect(Collectors.toList());
            if (!strainReportDetails.isEmpty()){
                tStrainReportDetailExperimentVO.setHandleStartTime(strainReportDetails.get(0).getCreateTime());
                tStrainReportDetailExperimentVO.setHandleEndTime(strainReportDetails.get(strainReportDetails.size()-1).getCreateTime());
            }
            tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime());
            tStrainReportDetailExperimentVOS.add(tStrainReportDetailExperimentVO);
            tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS);
        }else{
@@ -264,7 +294,8 @@
                tStrainReportDetailVO.setDetailEngineerVO(tStrainReportDetailEngineerVO);
                List<String> userIds = new ArrayList<>();
                List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS1 = new ArrayList<>();
                List<TStrainReportDetail> collect = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)).collect(Collectors.toList());
                List<TStrainReportDetail> collect = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)
                        &&e.getReportType()==1).collect(Collectors.toList());
                for (TStrainReportDetail tStrainReportDetail : collect) {
                    if (userIds.contains(tStrainReportDetail.getExperimentId())){
                        continue;
@@ -274,20 +305,20 @@
                    tStrainReportDetailExperimentVO.setUserName(sysUserService.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId())).getNickName());
                    tStrainReportDetailExperimentVO.setHandleCount((int) collect.stream().filter(e -> e.getExperimentId().equals(tStrainReportDetail.getExperimentId())).count());
                    BigDecimal handleIntegral = collect.stream()
                            .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+""))
                            .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+"")
                                    &&e.getReportType()==1)
                            .map(TStrainReportDetail::getEvaluateTotal)
                            .reduce(BigDecimal::add)
                            .orElse(BigDecimal.ZERO);
                    tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral);
                    List<TStrainReportDetail> collect9 = collect.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId()+"")).collect(Collectors.toList());
                    if (!collect9.isEmpty()){
                        tStrainReportDetailExperimentVO.setHandleEndTime(collect9.get(collect9.size()-1).getCreateTime());
                    List<TStrainReportDetail> reportDetails = collect.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId()+"")).collect(Collectors.toList());
                    if (!reportDetails.isEmpty()){
                        tStrainReportDetailExperimentVO.setHandleEndTime(reportDetails.get(reportDetails.size()-1).getCreateTime());
                    }
                    tStrainReportDetailExperimentVO.setHandleStartTime(byId.getCreateTime());
                    tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime());
                    tStrainReportDetailExperimentVOS1.add(tStrainReportDetailExperimentVO);
                }
                tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS1);
            }else{
                List<TStrainReportDetail> reportDetails = strainReportDetails.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(2) && e.getExperimentId().equals(projectTeamStaff.getUserId())).collect(Collectors.toList());
@@ -295,51 +326,56 @@
                TStrainReportDetailEngineerVO tStrainReportDetailEngineerVO = new TStrainReportDetailEngineerVO();
                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());
                List<TStrainReportDetail> tStrainReportDetails1 = reportDetails.stream().filter(e ->e.getEvaluateType()!=null&& e.getEvaluateType().equals(1)).collect(Collectors.toList());
                if (!tStrainReportDetails1.isEmpty()){
                    tStrainReportDetailEngineerVO.setInnovateEndTime(tStrainReportDetails1.get(tStrainReportDetails1.size()-1).getCreateTime());
                }
                tStrainReportDetailEngineerVO.setInnovateEndTime(byId.getCreateTime());
                tStrainReportDetailEngineerVO.setInnovateStartTime(project.getCreateTime());
                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(collect4.get(collect4.size()-1).getCreateTime());
                }
                tStrainReportDetailEngineerVO.setRegulationEndTime(byId.getCreateTime());
                tStrainReportDetailEngineerVO.setRegulationStartTime(project.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(reportDetailList.get(reportDetailList.size()-1).getCreateTime());
                }
                tStrainReportDetailEngineerVO.setHandleEndTime(byId.getCreateTime());
                tStrainReportDetailEngineerVO.setHandleStartTime(project.getCreateTime());
                tStrainReportDetailVO.setDetailEngineerVO(tStrainReportDetailEngineerVO);
                List<String> userIds = new ArrayList<>();
                List<TStrainReportDetailExperimentVO> tStrainReportDetailExperimentVOS1 = new ArrayList<>();
                List<TStrainReportDetail> collect = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)).collect(Collectors.toList());
                for (TStrainReportDetail tStrainReportDetail : collect) {
                    if (userIds.contains(tStrainReportDetail.getExperimentId())){
                        continue;
                    }
                    userIds.add(tStrainReportDetail.getExperimentId());
                List<String> experimentIds = tStrainReportDetails.stream().filter(e ->
                                e.getEvaluateHumanType().equals(1)
                                        &&e.getReportType()==1)
                        .map(TStrainReportDetail::getExperimentId)
                        .distinct()
                        .collect(Collectors.toList());
                List<TStrainReportDetail> tStrainReportDetails2 = tStrainReportDetails.stream().filter(e -> e.getEvaluateHumanType().equals(1)).collect(Collectors.toList());
                for (String experimentId : experimentIds) {
                    List<TStrainReportDetail> details = tStrainReportDetails2.stream().filter(e -> e.getExperimentId().equals(experimentId)).collect(Collectors.toList());
                    TStrainReportDetailExperimentVO tStrainReportDetailExperimentVO = new TStrainReportDetailExperimentVO();
                    tStrainReportDetailExperimentVO.setUserName(sysUserService.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId())).getNickName());
                    tStrainReportDetailExperimentVO.setHandleCount((int) collect.stream().filter(e -> e.getExperimentId().equals(tStrainReportDetail.getExperimentId())).count());
                    BigDecimal handleIntegral = collect.stream()
                            .filter(e -> e.getEvaluateHumanType().equals(1)&&e.getExperimentId().equals(sysUser.getUserId()+""))
                    SysUser sysUser1 = sysUserService.selectUserById(Long.valueOf(experimentId));
                    tStrainReportDetailExperimentVO.setUserName(sysUser1.getNickName());
                    tStrainReportDetailExperimentVO.setHandleCount(details.size());
                    BigDecimal handleIntegral = details.stream()
                            .filter(e -> e.getEvaluateHumanType().equals(1)
                                    &&e.getReportType()==1)
                            .map(TStrainReportDetail::getEvaluateTotal)
                            .reduce(BigDecimal::add)
                            .orElse(BigDecimal.ZERO);
                    tStrainReportDetailExperimentVO.setHandleIntegral(handleIntegral);
                    List<TStrainReportDetail> collect9 = collect.stream().filter(e -> e.getExperimentId().equals(sysUser.getUserId()+"")).collect(Collectors.toList());
                    if (!collect9.isEmpty()){
                        tStrainReportDetailExperimentVO.setHandleEndTime(collect9.get(collect9.size()-1).getCreateTime());
                    if (!tStrainReportDetails2.isEmpty()){
                        tStrainReportDetailExperimentVO.setHandleEndTime(details.get(details.size()-1).getCreateTime());
                    }
                    tStrainReportDetailExperimentVO.setHandleStartTime(byId.getCreateTime());
                    tStrainReportDetailExperimentVO.setHandleStartTime(project.getCreateTime());
                    tStrainReportDetailExperimentVOS1.add(tStrainReportDetailExperimentVO);
                }
                tStrainReportDetailVO.setDetailExperimentVOS(tStrainReportDetailExperimentVOS1);
@@ -376,7 +412,7 @@
        tStrainReportDetail.setEvaluateType(dto.getEvaluateType());
        strainReportDetailService.save(tStrainReportDetail);
        if (dto.getIsDraft()==0){
            // 新增消息
            // 新增审批消息
            TNotice tNotice = new TNotice();
            TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
@@ -389,11 +425,8 @@
            noticeService.save(tNotice);
            // 新增消息
            TNotice tNotice1 = new TNotice();
            TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, dto.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 3).last("limit 1").one();
            tNotice1.setCommitId(tokenService.getLoginUser().getUserId()+"");
            tNotice1.setUserId(tProjectTeamStaff.getUserId());
            tNotice1.setUserId(dto.getExperimentId());
            tNotice1.setStatus(1);
            tNotice1.setNoticeContent("您有【1】条菌种库操作菌种工程师已评定;");
            tNotice1.setDataId(dto.getId());
@@ -481,19 +514,19 @@
        tNotice.setNoticeType(2);
        noticeService.save(tNotice);
            // 新增消息
            TNotice notice = new TNotice();
            TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
                    .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
         // 新增消息
        TNotice notice = new TNotice();
        TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
                .eq(TProjectTeamStaff::getRoleType, 2).last("limit 1").one();
            notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
            notice.setUserId(tProjectTeamStaff.getUserId());
            notice.setStatus(1);
            String temp=dto.getStatus()==2?"通过":"驳回";
            notice.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已操作【" +temp+"】");
            notice.setDataId(dto.getId());
            notice.setNoticeType(7);
            noticeService.save(notice);
        notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
        notice.setUserId(tProjectTeamStaff.getUserId());
        notice.setStatus(1);
        String temp=dto.getStatus()==2?"通过":"驳回";
        notice.setNoticeContent("您有【1】条【菌种报告】【报告库"+strainReport.getReportType()+"】菌种审批人已操作【" +temp+"】");
        notice.setDataId(dto.getId());
        notice.setNoticeType(7);
        noticeService.save(notice);
        return R.ok();
    }
    /**
@@ -527,8 +560,9 @@
        strainReportDetailService.save(tStrainReportDetail);
        // 新增消息
        TNotice notice = new TNotice();
        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
                .eq(TProjectTeamStaff::getRoleType, 1).last("limit 1").one();
        TProjectTeamStaff projectTeamStaff = projectTeamStaffService.lambdaQuery()
                .eq(TProjectTeamStaff::getTeamId, strainReport.getProjectId())
                .eq(TProjectTeamStaff::getRoleType, 2).last("limit 1").one();
        notice.setCommitId(tokenService.getLoginUser().getUserId()+"");
        notice.setUserId(projectTeamStaff.getUserId());
        notice.setStatus(1);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TStrainValidationDataController.java
@@ -49,15 +49,46 @@
    private TStrainValidationDataService strainValidationDataService;
    @Resource
    private TStrainValidationDataDetailService strainValidationDataDetailService;
    @Resource
    private ISysUserService sysUserService;
    /**
     * 菌种验证数据资料分页列表
     */
    //@PreAuthorize("@ss.hasPermi('system:strainValidationData:list')")
    @ApiOperation(value = "菌种验证数据资料-获取菌种验证数据资料分页列表",response = TStrainValidationDataQuery.class)
    @PostMapping(value = "/api/t-strain-validation-data/pageList")
    public R<PageInfo<TStrainValidationDataVO>> pageList(@RequestBody String param) {
        TStrainValidationDataQuery query = JSON.parseObject(param, TStrainValidationDataQuery.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 {
                return R.ok(new PageInfo<>());
            }
        }else if (!sysUser.getRoleType().equals("1")){
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!allProjectIds.isEmpty()){
                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                        .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
                if (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }else {
                return R.ok(new PageInfo<>());
            }
        }
        return R.ok(strainValidationDataService.pageList(query));
    }
    /**
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java
@@ -29,6 +29,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -54,6 +55,16 @@
    private TProjectTeamService projectTeamService;
    @Resource
    private TProjectTeamStaffService projectTeamStaffService;
    @ApiOperation(value = "修改用户签名")
    @Log(title = "用户信息-修改用户签名", businessType = BusinessType.UPDATE)
    @PostMapping("/api/system/user/editSignPicture")
    public R editSignPicture(@RequestBody String param)
    {
        Long userId = tokenService.getLoginUser().getUserId();
        SysUser user = JSON.parseObject(param,SysUser.class);
        user.setUserId(userId);
        return R.ok(sysUserService.editSignPicture(user));
    }
    /**
     * 选择人员
     */
@@ -99,7 +110,37 @@
    @ApiOperation(value = "获取菌种库分页列表",tags = "菌种库管理",response = TTrainLibraryQuery.class)
    @PostMapping(value = "/api/t-train-library/pageList")
    public R<PageInfo<TTrainLibraryVO>> pageList(@RequestBody String param) {
        Long userId = tokenService.getLoginUser().getUserId();
        SysUser sysUser = sysUserService.selectUserById(userId);
        TTrainLibraryQuery query = JSON.parseObject(param, TTrainLibraryQuery.class);
        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 {
                return R.ok(new PageInfo<>());
            }
        }else if (!sysUser.getRoleType().equals("1")){
            List<String> allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                    .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
            if (!allProjectIds.isEmpty()){
                List<String> projectIds = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
                        .eq(TProjectTeam::getStatus, 1).list().stream().map(TProjectTeam::getId).collect(Collectors.toList());
                if (projectIds.isEmpty()){
                    return R.ok(new PageInfo<>());
                }
                query.setProjectIds(projectIds);
            }else {
                return R.ok(new PageInfo<>());
            }
        }
        return R.ok(tTrainLibraryService.pageList(query));
    }
    /**
@@ -207,10 +248,17 @@
            TTrainLibrary tTrainLibrary = new TTrainLibrary();
            BeanUtils.copyProperties(dto,tTrainLibrary);
            if (i==0){
                List<String> projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
                        .eq(TProjectTeamStaff::getRoleType, 3)
                        .list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
                if (projectIds.isEmpty()){
                if (!projectIds.isEmpty()){
                    TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
                            .eq(TProjectTeam::getStatus, 1)
                            .orderByDesc(BaseModel::getCreateTime)
                            .last("limit 1").one();
                    tTrainLibrary.setProjectId(projectTeam.getId());
                    dto.setProjectId(projectTeam.getId());
                }else{
                    return R.fail("请先加入项目组");
                }
                tTrainLibrary.setStatus(4);
@@ -408,37 +456,62 @@
        }
        AddTrainLibraryWarehousingDTO query = JSON.parseObject(param, AddTrainLibraryWarehousingDTO.class);
        TTrainLibrary tTrainLibrary = tTrainLibraryService.getById(query.getTrainLibraryId());
        if (query.getType()==1){
            if (tTrainLibrary.getStatus()==1||tTrainLibrary.getStatus()==2||tTrainLibrary.getStatus()==4){
                if(tTrainLibrary.getStatus()==2){
                    return R.fail("当前菌种为出库待确认状态,不可重复出库");
                }else if (tTrainLibrary.getStatus()==1){
                    return R.fail("当前菌种为已出库状态,不可重复出库");
                }else{
                    return R.fail("当前菌种为入库待确认状态,不可出库");
        List<TTrainLibraryWarehousing> tTrainLibraryWarehousings = tTrainLibraryWarehousingService.lambdaQuery()
                .isNull(TTrainLibraryWarehousing::getConfirmTime)
                .eq(TTrainLibraryWarehousing::getTrainLibraryId, query.getTrainLibraryId()).list();
        if (!tTrainLibraryWarehousings.isEmpty()){
            for (TTrainLibraryWarehousing tTrainLibraryWarehousing : tTrainLibraryWarehousings) {
                if (Objects.equals(tTrainLibraryWarehousing.getType(), query.getType())){
                    if (query.getType()==1){
                        return R.fail("当前已存在该类型待确认出库记录");
                    }else{
                        return R.fail("当前已存在该类型待确认入库记录");
                    }
                }
            }
        }
        if (query.getType()==1){
            tTrainLibrary.setStatus(2);
        }
        if (query.getType()==2){
            if (tTrainLibrary.getStatus()==2||tTrainLibrary.getStatus()==3||tTrainLibrary.getStatus()==4){
                if(tTrainLibrary.getStatus()==4){
                    return R.fail("当前菌种为入库待确认状态,不可重复入库");
                }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);
        // 新增消息
        TNotice tNotice = new TNotice();
        TProjectTeamStaff tProjectTeamStaff = projectTeamStaffService.lambdaQuery()
                .eq(TProjectTeamStaff::getTeamId, tTrainLibrary.getProjectId()).eq(TProjectTeamStaff::getRoleType, 2).one();
        tNotice.setUserId(tProjectTeamStaff.getUserId());
        tNotice.setCommitId(tokenService.getLoginUser().getUserId()+"");
        tNotice.setStatus(1);
        StringBuilder content = new StringBuilder();
        switch (tTrainLibrary.getType()){
            case 1:
                content.append("【原始细胞库】");
                break;
            case 2:
                content.append("【主细胞库】");
                break;
            case 3:
                content.append("【生产细胞库】");
                break;
        }
        switch (query.getType()){
            case 1:
                tNotice.setNoticeContent("您有【1】条"+content+"出库记录等待签字确认;");
                break;
            case 2:
                tNotice.setNoticeContent("您有【1】条"+content+"入库记录等待签字确认;");
                break;
        }
        tNotice.setDataId(query.getId());
        tNotice.setNoticeType(3);
        noticeService.save(tNotice);
        return R.ok();
    }
    /**
ruoyi-admin/src/main/resources/application-prod.yml
@@ -197,7 +197,7 @@
    location: /file/
    qrLocation: /file/qrCode/
    accessPath: /file/
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
  url:
    prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
wx:
ruoyi-admin/src/main/resources/application-test.yml
@@ -190,7 +190,7 @@
    location: /file/
    qrLocation: /file/qrCode/
    accessPath: /file/
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
  url:
#    prefix: http://localhost:${server.port}${server.servlet.context-path}
    prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
ruoyi-admin/target/classes/application-prod.yml
@@ -197,7 +197,7 @@
    location: /file/
    qrLocation: /file/qrCode/
    accessPath: /file/
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
  url:
    prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
wx:
ruoyi-admin/target/classes/application-test.yml
@@ -190,7 +190,7 @@
    location: /file/
    qrLocation: /file/qrCode/
    accessPath: /file/
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF
    allowExt: .jpg|.png|.gif|.jpeg|.doc|.docx|.apk|.MP4|.mp4|.pdf|.PDF|.xls|.xlsx|.rar|.zip|.rar
  url:
#    prefix: http://localhost:${server.port}${server.servlet.context-path}
    prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
@@ -47,19 +47,26 @@
        }
        // 获取文件名称
        String filename = mf.getOriginalFilename();
        // 生成随机5位英文字母
        String rename = "";
        for (int i = 0; i < 5; i++) {
            rename += (char) (Math.random() * 26 + 'a');
        }
        long l = System.currentTimeMillis();
        // 获取文件后缀
        String ext = filename.substring(filename.lastIndexOf("."), filename.length());
        String temp = rename+l+filename;
        String ext = temp.substring(temp.lastIndexOf("."), temp.length());
        // 检查文件类型
        if (!fileUploadConfig.getAllowExt().contains(ext)) {
            return AjaxResult.error("上传文件格式不正确,仅支持" + fileUploadConfig.getAllowExt());
        }
        File targetFile = new File(realPath, filename);//目标文件
        File targetFile = new File(realPath, temp);//目标文件
        //开始从源文件拷贝到目标文件
        //传图片一步到位
        mf.transferTo(targetFile);
        //拼接数据
//        String imgstr = fileUploadConfig.getAccessPath() + TimeDir +"\\"+ filename;
        String imgstr = TimeDir +"/"+ filename;
        String imgstr = TimeDir +"/"+ temp;
        return AjaxResult.success(imgstr);
    }
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -56,6 +56,8 @@
    @ApiModelProperty(value = "用户邮箱")
    private String email;
    /** 手机号码 */
    //@Excel(name = "手机号码")
    @ApiModelProperty(value = "手机号码")
@@ -130,7 +132,9 @@
    @ApiModelProperty(value = "部门id集合")
    @TableField(exist = false)
    private List<String> deptIds;
    @ApiModelProperty(value = "用户签名")
    @TableField("sign_picture")
    private String signPicture;
    public String getRoleName() {
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
@@ -7,6 +7,7 @@
import com.ruoyi.common.core.domain.model.LoginUserApplet;
import com.ruoyi.common.exception.GlobalException;
import com.ruoyi.common.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -68,7 +69,7 @@
    {
        LoginUser loginUser = getLoginUser(ServletUtils.getRequest());
        if (loginUser==null){
             throw new GlobalException().setDetailMessage("登录失效",401);
             throw new ServiceException("401");
        }
        return loginUser;
    }
ruoyi-system/src/main/java/com/ruoyi/system/dto/ChoiceStrainDTO.java
@@ -16,6 +16,8 @@
    private Integer roleType;
    @ApiModelProperty(value = "菌种报告库选择实验员项目组id")
    private String projectId;
    @ApiModelProperty(value = "名称")
    private String nickNameOrPhone;
    @ApiModelProperty(value = "前端忽略 人员ids")
    private List<String> userIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -187,4 +187,6 @@
    List<ChoiceUserVO> choiceUserList(@Param("query")ChoiceStrainDTO query, @Param("pageInfo")PageInfo<ChoiceUserVO> pageInfo);
    List<SysUser> selectUserByUserNameLike(@Param("userName") String userName);
    int editSignPicture(SysUser user);
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TObservationOfPetriDishes.java
@@ -53,7 +53,7 @@
    @ApiModelProperty(value = "形态强壮度排名")
    @TableField("strength")
    private Integer strength;
    private String strength;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TPedigreeChart.java
@@ -55,11 +55,11 @@
    @ApiModelProperty(value = "菌种源开始1母 2子 3孙 起传类型为母代存值")
    @TableField("strain_source_start")
    private Integer strainSourceStart;
    private String strainSourceStart;
    @ApiModelProperty(value = "菌种源结束1母 2子 3孙 起传类型为母代存值")
    @TableField("strain_source_end")
    private Integer strainSourceEnd;
    private String strainSourceEnd;
    @ApiModelProperty(value = "菌种传代生产谱系图 回显使用")
    @TableField(exist = false)
    private TPedigreeChartParentAllDetailDTO pedigreeChartParentAllDetailDTO;
ruoyi-system/src/main/java/com/ruoyi/system/model/TVaccinationSlope.java
@@ -49,6 +49,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/query/TProjectTeamQuery.java
@@ -5,6 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "项目组分页query")
public class TProjectTeamQuery extends TimeRangeQueryBody {
@@ -18,5 +20,7 @@
    private String startTime1;
    @ApiModelProperty(value = "结束时间 前端忽略")
    private String endTime1;
    @ApiModelProperty(value = "项目组ids")
    private List<String> projectIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/TStrainValidationDataQuery.java
@@ -5,6 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "菌种验证数据资料分页列表query")
public class TStrainValidationDataQuery extends TimeRangeQueryBody {
@@ -21,6 +23,8 @@
    private Integer isDraft;
    @ApiModelProperty(value = "类型 1原始细胞库 2主细胞库")
    private Integer strainType;
    @ApiModelProperty(value = "项目组ids")
    private List<String> projectIds;
ruoyi-system/src/main/java/com/ruoyi/system/query/TTrainLibraryQuery.java
@@ -5,6 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "菌种库管理分页query")
public class TTrainLibraryQuery extends TimeRangeQueryBody {
@@ -20,6 +22,8 @@
    private Integer type;
    @ApiModelProperty(value = "是否草稿 0否1是")
    private Integer isDraft;
    @ApiModelProperty(value = "项目组ids")
    private List<String> projectIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -271,4 +271,6 @@
    PageInfo<ChoiceUserVO> choiceUser(ChoiceDTO user);
    PageInfo<ChoiceUserVO> choiceUserList(ChoiceStrainDTO query);
    Integer editSignPicture(SysUser user);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java
@@ -18,6 +18,7 @@
public interface TProjectTeamService extends IService<TProjectTeam> {
    PageInfo<TProjectTeamVO> pageList(TProjectTeamQuery query);
    PageInfo<TProjectTeamVO> pageList1(TProjectTeamQuery query);
    PageInfo<TProjectTeamVO> choiceProjectList(ChoiceProjectDTO query);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -715,6 +715,11 @@
        return pageInfo;
    }
    @Override
    public Integer editSignPicture(SysUser user) {
        return userMapper.editSignPicture(user);
    }
//    @Override
//    public UserInfoVo userInfo(Long userId) {
//        return userMapper.userInfo(userId);
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java
@@ -41,8 +41,30 @@
        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.forEach(item->{
                List<TProjectTeamStaff> projectTeamStaffList = projectTeamStaffs.stream().filter(staff -> staff.getTeamId().equals(item.getId())).collect(Collectors.toList());
                if(!CollectionUtils.isEmpty(projectTeamStaffList)){
                    List<String> staffIds = projectTeamStaffList.stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
                    List<SysUser> staffs = sysUsers.stream().filter(sysUser -> staffIds.contains(sysUser.getUserId()+"")).collect(Collectors.toList());
                    item.setStaffName(staffs.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
                }
                item.setStaffs(projectTeamStaffList);
            });
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
    @Override
    public PageInfo<TProjectTeamVO> pageList1(TProjectTeamQuery query) {
        PageInfo<TProjectTeamVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TProjectTeamVO> list = this.baseMapper.pageList(query,pageInfo);
        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)
                    .eq(TProjectTeamStaff::getRoleType,3).in(TProjectTeamStaff::getTeamId, teamIds));
                            .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
@@ -77,23 +77,28 @@
                        .filter(e -> e.getReportId().equals(tStrainReport.getId())&&
                                e.getEvaluateHumanType()==2).collect(Collectors.toList());
                // 菌种工程积分
                sum1 = tStrainReportDetails2.stream()
                sum1 = sum1.add(tStrainReportDetails2.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(2))
                        .map(TStrainReportDetail::getEvaluateTotal)
                        .reduce(BigDecimal::add)
                        .orElse(BigDecimal.ZERO);
                        .orElse(BigDecimal.ZERO));
                // 菌种实验员积分
                sum2 = tStrainReportDetails1.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(1))
                sum2 = sum2.add(tStrainReportDetails1.stream()
                        .filter(e -> e.getEvaluateHumanType().equals(1)
                        &&e.getReportType()==1)
                        .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) {
                        .orElse(BigDecimal.ZERO));
                List<TStrainReportDetail> tStrainReportDetails3 = tStrainReportDetails.stream().filter(e ->
                        e.getReportId().equals(tStrainReport.getId())
                        &&
                        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")){
                        if (tStrainReportDetail.getEvaluate().split(",")[4].equals("-3")){
                            temp++;
                            break;
                        }
                    }
                }
@@ -126,11 +131,13 @@
                    if (tStrainReportDetail.getExperimentId()!=null){
                        SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId()));
                        tStrainReportVO.setExperimentName(sysUser.getNickName());
                        break;
                    }
                }else if (tStrainReportDetail.getEvaluateHumanType()==2){
                    if (tStrainReportDetail.getExperimentId()!=null){
                        SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tStrainReportDetail.getExperimentId()));
                        tStrainReportVO.setExperimentName(sysUser.getNickName());
                        break;
                    }
                }
            }
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -134,7 +134,7 @@
        select u.user_id AS userId, u.dept_id AS deptId, u.user_name AS userName, u.nick_name AS nickName, u.email AS email, u.avatar AS avatar,
               u.phonenumber AS phonenumber, u.sex AS sex, u.status AS status, u.del_flag AS delFlag, u.login_ip AS loginIp,
               u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS remark,u.ifBlack AS ifBlack,
               u.roleType,
               u.roleType,u.sign_picture as signPicture,
               ur.role_id AS roleId,sr.role_name AS roleName,u.deptName as deptName
        from sys_user u
        left join sys_user_role ur on u.user_id = ur.user_id
@@ -272,6 +272,10 @@
                #{id}
            </foreach>
        </if>
        <if test="query.nickNameOrPhone != null and query.nickNameOrPhone != ''">
            and( nick_name LIKE concat('%', #{query.nickNameOrPhone}, '%') or phonenumber LIKE concat('%', #{query.nickNameOrPhone}, '%')
            )
        </if>
    </select>
    <select id="selectUserByUserNameLike" resultType="com.ruoyi.common.core.domain.entity.SysUser">
        select * from sys_user
@@ -281,6 +285,9 @@
                </if>
    </select>
    <update id="editSignPicture" parameterType="SysUser">
        update sys_user set sign_picture = #{signPicture} where user_id = #{userId}
    </update>
    <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
ruoyi-system/src/main/resources/mapper/system/TPedigreeChartMapper.xml
@@ -57,6 +57,7 @@
        where pedigree_chart_id = #{query.id}
          and status = 1
          and type = 1
          and vaccinate_id is not null
          and preserve_id is null
        and  disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
    </select>
ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml
@@ -33,6 +33,13 @@
            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                AND create_time BETWEEN #{query.startTime} AND #{query.endTime}
            </if>
            <if test="query.projectIds != null and query.projectIds.size()>0">
                AND id IN
                <foreach collection="query.projectIds" close=")" open="(" item="id" separator=",">
                    #{id}
                </foreach>
            </if>
            AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        </where>
        ORDER BY create_time DESC
ruoyi-system/src/main/resources/mapper/system/TStrainValidationDataMapper.xml
@@ -44,6 +44,12 @@
                 <if test="query.strainType != null">
                and strain_type = #{query.strainType}
            </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/TTrainLibraryMapper.xml
@@ -49,6 +49,12 @@
        <if test="query.isDraft != null">
                and is_draft = #{query.isDraft}
            </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/target/classes/mapper/system/SysUserMapper.xml
@@ -134,7 +134,7 @@
        select u.user_id AS userId, u.dept_id AS deptId, u.user_name AS userName, u.nick_name AS nickName, u.email AS email, u.avatar AS avatar,
               u.phonenumber AS phonenumber, u.sex AS sex, u.status AS status, u.del_flag AS delFlag, u.login_ip AS loginIp,
               u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS remark,u.ifBlack AS ifBlack,
               u.roleType,
               u.roleType,u.sign_picture as signPicture,
               ur.role_id AS roleId,sr.role_name AS roleName,u.deptName as deptName
        from sys_user u
        left join sys_user_role ur on u.user_id = ur.user_id
@@ -265,23 +265,29 @@
    <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}
            </foreach>
        </if>
        <if test="query.nickNameOrPhone != null and query.nickNameOrPhone != ''">
            and( nick_name LIKE concat('%', #{query.nickNameOrPhone}, '%') or phonenumber LIKE concat('%', #{query.nickNameOrPhone}, '%')
            )
        </if>
    </select>
    <select id="selectUserByUserNameLike" resultType="com.ruoyi.common.core.domain.entity.SysUser">
        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>
    <update id="editSignPicture" parameterType="SysUser">
        update sys_user set sign_picture = #{signPicture} where user_id = #{userId}
    </update>
    <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
@@ -375,7 +381,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/target/classes/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/target/classes/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
@@ -51,6 +57,7 @@
        where pedigree_chart_id = #{query.id}
          and status = 1
          and type = 1
          and vaccinate_id is not null
          and preserve_id is null
        and  disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
    </select>
ruoyi-system/target/classes/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,14 @@
                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>
            <if test="query.projectIds != null and query.projectIds.size()>0">
                AND id IN
                <foreach collection="query.projectIds" close=")" open="(" item="id" separator=",">
                    #{id}
                </foreach>
            </if>
            AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        </where>
ruoyi-system/target/classes/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>
ruoyi-system/target/classes/mapper/system/TStrainValidationDataMapper.xml
@@ -44,6 +44,12 @@
                 <if test="query.strainType != null">
                and strain_type = #{query.strainType}
            </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/target/classes/mapper/system/TTrainLibraryMapper.xml
@@ -49,6 +49,12 @@
        <if test="query.isDraft != null">
                and is_draft = #{query.isDraft}
            </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