无关风月
2025-08-06 053f6187b5f6cda1725ed63df8a8766b5976fb53
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTrainLibraryController.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.basic.PageInfo;
@@ -18,10 +19,7 @@
import com.ruoyi.system.query.TTrainLibraryDetailQuery;
import com.ruoyi.system.query.TTrainLibraryQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.ChoiceUserVO;
import com.ruoyi.system.vo.TProjectTeamVO;
import com.ruoyi.system.vo.TTrainLibraryDetailVO;
import com.ruoyi.system.vo.TTrainLibraryVO;
import com.ruoyi.system.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -31,6 +29,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -56,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));
    }
    /**
     * 选择人员
     */
@@ -63,14 +72,19 @@
    @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::getRoleType, query.getRoleType() )
                .eq(TProjectTeamStaff::getTeamId, query.getProjectId()).list().stream().map(TProjectTeamStaff::getUserId).collect(Collectors.toList());
        if (userIds.isEmpty()){
            userIds.add("0");
        }
        query.setUserIds(userIds);
        return R.ok(sysUserService.choiceUserList(query));
    }
    /**
@@ -81,24 +95,52 @@
    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) {
        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));
    }
    /**
@@ -108,10 +150,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){
@@ -125,7 +167,7 @@
                }
            }
        }
        return R.ok(list);
        return R.ok(tTrainLibraryWarehousings);
    }
    @Resource
    private TNoticeService noticeService;
@@ -141,7 +183,15 @@
            return R.fail(401,"登陆失效");
        }
        TTrainLibraryDTO dto = JSON.parseObject(param,TTrainLibraryDTO.class);
        dto.setStock(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());
        }
        tTrainLibraryService.save(dto);
        if (dto.getIsDraft()==0){
            // 新增入库记录
@@ -150,34 +200,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);
@@ -198,7 +248,20 @@
            TTrainLibrary tTrainLibrary = new TTrainLibrary();
            BeanUtils.copyProperties(dto,tTrainLibrary);
            if (i==0){
                tTrainLibrary.setStatus(3);
                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();
                    tTrainLibrary.setProjectId(projectTeam.getId());
                    dto.setProjectId(projectTeam.getId());
                }else{
                    return R.fail("请先加入项目组");
                }
                tTrainLibrary.setStatus(4);
                tTrainLibrary.setIsDraft(0);
                tTrainLibraryService.save(tTrainLibrary);
                TTrainLibraryWarehousing tTrainLibraryWarehousing = new TTrainLibraryWarehousing();
@@ -209,32 +272,30 @@
                tTrainLibraryWarehousingService.save(tTrainLibraryWarehousing);
                // 新增消息
                TNotice tNotice = new TNotice();
                List<String> collect = 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, 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);
@@ -261,14 +322,17 @@
        TTrainLibraryDTO dto = JSON.parseObject(param,TTrainLibraryDTO.class);
        tTrainLibraryService.updateById(dto);
        if (dto.getIsDraft()==0){
            // 新增入库记录
            TTrainLibraryWarehousing tTrainLibraryWarehousing = new TTrainLibraryWarehousing();
            tTrainLibraryWarehousing.setTrainLibraryId(dto.getId());
            tTrainLibraryWarehousing.setType(2);
            tTrainLibraryWarehousing.setBoundTime(LocalDateTime.now());
            tTrainLibraryWarehousing.setHandleId(tokenService.getLoginUser().getUserId());
            tTrainLibraryWarehousing.setHandleSignature(dto.getHandleSignature());
            tTrainLibraryWarehousingService.updateById(tTrainLibraryWarehousing);
            List<TTrainLibraryWarehousing> list = tTrainLibraryWarehousingService.lambdaQuery().eq(TTrainLibraryWarehousing::getTrainLibraryId, dto.getId()).list();
            if (list.isEmpty()){
                // 新增入库记录
                TTrainLibraryWarehousing tTrainLibraryWarehousing = new TTrainLibraryWarehousing();
                tTrainLibraryWarehousing.setTrainLibraryId(dto.getId());
                tTrainLibraryWarehousing.setType(2);
                tTrainLibraryWarehousing.setBoundTime(LocalDateTime.now());
                tTrainLibraryWarehousing.setHandleId(tokenService.getLoginUser().getUserId());
                tTrainLibraryWarehousing.setHandleSignature(dto.getHandleSignature());
                tTrainLibraryWarehousingService.save(tTrainLibraryWarehousing);
            }
        }
        return R.ok();
    }
@@ -285,15 +349,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.setStatus(1);
            tTrainLibrary.setStock(0);
            tTrainLibrary.setStatus(1);
        }else{
            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());
@@ -308,9 +372,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);
    }
    /**
@@ -321,11 +385,27 @@
    @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);
        TTrainLibraryDetailVO libraryDetailVO = tTrainLibraryService.getDetailById(query);
        PageInfo<TTrainLibraryWarehousingVO> warehousingList = libraryDetailVO.getWarehousingList();
        List<TTrainLibraryWarehousingVO> records = warehousingList.getRecords();
        List<SysUser> sysUsers = sysUserService.selectList();
        for (TTrainLibraryWarehousingVO record : records) {
            if (record.getHandleId()!=null){
                SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(record.getHandleId())).findFirst().orElse(null);
                if (sysUser!=null){
                    record.setHandleName(sysUser.getNickName());
                }
            }
            if (record.getPreserveId()!=null){
                SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(record.getPreserveId())).findFirst().orElse(null);
                if (sysUser!=null){
                    record.setPreserveName(sysUser.getNickName());
                }
            }
        }
        List<TTrainLibraryWarehousing> list = tTrainLibraryWarehousingService
                .lambdaQuery().eq(TTrainLibraryWarehousing::getTrainLibraryId,query.getId())
                .orderByDesc(TTrainLibraryWarehousing::getCreateTime).list();
        List<SysUser> sysUsers = sysUserService.selectList();
        for (TTrainLibraryWarehousing tTrainLibraryWarehousing : list) {
            if (tTrainLibraryWarehousing.getHandleId()!=null){
                SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(tTrainLibraryWarehousing.getHandleId())).findFirst().orElse(null);
@@ -340,8 +420,8 @@
                }
            }
        }
        detailById.setList(list);
        return R.ok(detailById);
        libraryDetailVO.setList(list);
        return R.ok(libraryDetailVO);
    }
    /**
     * 删除项目组
@@ -367,7 +447,6 @@
    /**
     * 新增菌种库出入记录
     */
    //@PreAuthorize("@ss.hasPermi('system:trainLibrary:addWarehousing')")
    @ApiOperation(value = "新增菌种库出入记录",tags = "菌种库管理",response = AddTrainLibraryWarehousingDTO.class)
    @Log(title = "菌种库管理-新增菌种库出入记录", businessType = BusinessType.INSERT)
    @PostMapping(value = "/open/t-train-library/addWarehousing")
@@ -377,25 +456,67 @@
        }
        AddTrainLibraryWarehousingDTO query = JSON.parseObject(param, AddTrainLibraryWarehousingDTO.class);
        TTrainLibrary tTrainLibrary = tTrainLibraryService.getById(query.getTrainLibraryId());
        if (query.getType()==1){
            if (tTrainLibrary.getStatus()==1||tTrainLibrary.getStatus()==2){
                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()==3||tTrainLibrary.getStatus()==4){
                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();
    }
    /**
     * 编辑出入库记录
     */
    //@PreAuthorize("@ss.hasPermi('system:trainLibrary:addWarehousing')")
    @ApiOperation(value = "编辑出入库记录",tags = "菌种库管理",response = AddTrainLibraryWarehousingDTO.class)
    @PostMapping(value = "/api/t-train-library/editWarehousing")
    public R editWarehousing(@RequestBody String param) {
@@ -407,7 +528,6 @@
    /**
     * 编辑出入库记录
     */
    //@PreAuthorize("@ss.hasPermi('system:trainLibrary:addWarehousing')")
    @ApiOperation(value = "编辑出入库记录-获取详情",tags = "菌种库管理",response = AddTrainLibraryWarehousingDTO.class)
    @PostMapping(value = "/open/t-train-library/editWarehousingDetail")
    public R editWarehousingDetail(@RequestParam String id) {