package com.ruoyi.web.controller.api;
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;
import com.ruoyi.common.core.domain.BaseModel;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.*;
import com.ruoyi.system.mapper.TProjectTeamMapper;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.TBreedingAndPreservationQuery;
import com.ruoyi.system.query.TStrainValidationDataQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.AddStrainValidationDataDetailVO;
import com.ruoyi.system.vo.TBreedingAndPreservationVO;
import com.ruoyi.system.vo.TProjectTeamVO;
import com.ruoyi.system.vo.TStrainValidationDataVO;
import io.swagger.annotations.Api;
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;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 菌种验证数据资料 前端控制器
*
*
* @author 无关风月
* @since 2025-04-12
*/
@RestController
@RequestMapping("")
@Api(tags = "菌种验证数据资料")
public class TStrainValidationDataController {
@Resource
private TStrainValidationDataService strainValidationDataService;
@Resource
private TStrainValidationDataDetailService strainValidationDataDetailService;
@Resource
private ISysUserService sysUserService;
/**
* 菌种验证数据资料分页列表
*/
@ApiOperation(value = "菌种验证数据资料-获取菌种验证数据资料分页列表",response = TStrainValidationDataQuery.class)
@PostMapping(value = "/api/t-strain-validation-data/pageList")
public R> pageList(@RequestBody String param) {
TStrainValidationDataQuery query = JSON.parseObject(param, TStrainValidationDataQuery.class);
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
if (sysUser.getRoleType().equals("2")){
List allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
.list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
if (!allProjectIds.isEmpty()){ List 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")){
if (query.getProjectIds() == null || query.getProjectIds().isEmpty()) {
if (query.getProjectIds() == null || query.getProjectIds().isEmpty()) {
List allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
.list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
if (!allProjectIds.isEmpty()){
List 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));
}
/**
* 新增菌种验证数据资料
*/
//@PreAuthorize("@ss.hasPermi('system:strainValidationData:add')")
@Log(title = "菌种验证数据资料-新增菌种验证数据资料", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增菌种验证数据资料",response = AddStrainValidationDataDTO.class)
@PostMapping(value = "/api/t-strain-validation-data/add")
public R addOriginal(@RequestBody String param) {
AddStrainValidationDataDTO dto = JSON.parseObject(param,AddStrainValidationDataDTO.class);
if (StringUtils.hasLength(dto.getHandleSignature())){
dto.setHandleTime(LocalDateTime.now());
}
if (com.ruoyi.common.utils.StringUtils.isEmpty(dto.getProjectId())) {
List projectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
.list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
if (!projectIds.isEmpty()){
TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, projectIds)
.eq(TProjectTeam::getStatus, 1)
.orderByDesc(BaseModel::getCreateTime)
.last("limit 1").one();
dto.setProjectId(projectTeam.getId());
}
}
strainValidationDataService.save(dto);
if (dto.getIsDraft()==0){
dto.setStatus(1);
}else{
dto.setStatus(3);
}
if (dto.getStatus()==1){
// 新增消息
TNotice tNotice = new TNotice();
List allProjectIds = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getUserId, tokenService.getLoginUser().getUserId())
.eq(TProjectTeamStaff::getRoleType, 3)
.list().stream().map(TProjectTeamStaff::getTeamId).collect(Collectors.toList());
if (allProjectIds.isEmpty()){
allProjectIds.add("0");
}
TProjectTeam projectTeam = projectTeamService.lambdaQuery().in(TProjectTeam::getId, allProjectIds)
.eq(TProjectTeam::getStatus, 1)
.orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
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 content = new StringBuilder();
switch (dto.getStrainType()){
case 1:
content.append( "【原始细胞库验证资料】");
break;
case 2:
content.append("【主细胞库验证资料】");
break;
}
tNotice.setNoticeContent("您有【1】条"+content+"等待确认;");
tNotice.setDataId(dto.getId());
tNotice.setNoticeType(6);
noticeService.save(tNotice);
}
return R.ok();
}
@Resource
private TProjectTeamService projectTeamService;
@Resource
private TProjectTeamStaffService projectTeamStaffService;
@Resource
private TNoticeService noticeService;
@Resource
private TokenService tokenService;
/**
* 编辑菌种验证数据资料
*/
//@PreAuthorize("@ss.hasPermi('system:strainValidationData:update')")
@Log(title = "菌种验证数据资料-编辑菌种验证数据资料", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑菌种验证数据资料",response = AddStrainValidationDataDTO.class)
@PostMapping(value = "/api/t-strain-validation-data/updateOriginal")
public R updateOriginal(@RequestBody String param) {
AddStrainValidationDataDTO dto = JSON.parseObject(param,AddStrainValidationDataDTO.class);
strainValidationDataDetailService.remove(new LambdaQueryWrapper()
.eq(TStrainValidationDataDetail::getDataId, dto.getId()));
for (TStrainValidationDataDetail tStrainValidationDataDetail : dto.getList()) {
tStrainValidationDataDetail.setDataId(dto.getId());
}
strainValidationDataDetailService.saveBatch(dto.getList());
dto.setStatus(1);
strainValidationDataService.updateById(dto);
return R.ok();
}
@Log(title = "菌种验证数据资料-确认验证资料", businessType = BusinessType.INSERT)
@ApiOperation(value = "确认验证资料",response = AddStrainValidationDataDetailDTO.class)
@PostMapping(value = "/api/t-strain-validation-data/confirm")
public R confirm(@RequestBody String param) {
AddStrainValidationDataDetailDTO dto = JSON.parseObject(param,AddStrainValidationDataDetailDTO.class);
List list = dto.getList();
for (TStrainValidationDataDetail tStrainValidationDataDetail : list) {
tStrainValidationDataDetail.setDataId(dto.getId());
}
dto.setStatus(2);
strainValidationDataService.updateById(dto);
// 先删除该 dataId 的所有数据
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TStrainValidationDataDetail::getDataId, dto.getId());
strainValidationDataDetailService.remove(wrapper);
strainValidationDataDetailService.saveBatch(list);
return R.ok();
}
@Log(title = "菌种验证数据资料-存草稿", businessType = BusinessType.INSERT)
@ApiOperation(value = "确认验证资料",response = AddStrainValidationDataDetailDTO.class)
@PostMapping(value = "/api/t-strain-validation-data/saveDraf")
public R saveDraf(@RequestBody String param) {
AddStrainValidationDataDetailDTO dto = JSON.parseObject(param,AddStrainValidationDataDetailDTO.class);
List list = dto.getList();
for (TStrainValidationDataDetail tStrainValidationDataDetail : list) {
tStrainValidationDataDetail.setDataId(dto.getId());
}
dto.setIsDraft(1);
strainValidationDataService.updateById(dto);
// 先删除该 dataId 的所有数据
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TStrainValidationDataDetail::getDataId, dto.getId());
strainValidationDataDetailService.remove(wrapper);
strainValidationDataDetailService.saveBatch(list);
return R.ok();
}
@Resource
private TProjectTeamMapper tProjectTeamMapper;
/**
* 查看菌种验证数据资料详情
*/
@ApiOperation(value = "查看菌种验证数据资料详情")
@GetMapping(value = "/open/t-strain-validation-data/getDetailById")
public R getDetailMainById(@RequestParam String id) {
TStrainValidationData strainValidationData = strainValidationDataService.getById(id);
if (strainValidationData == null) {
return R.fail("菌种验证资料不存在或已删除");
}
AddStrainValidationDataDetailVO res = new AddStrainValidationDataDetailVO();
BeanUtils.copyProperties(strainValidationData,res);
List list = strainValidationDataDetailService.lambdaQuery().eq(TStrainValidationDataDetail::getDataId, id).list();
res.setList(list);
if (com.ruoyi.common.utils.StringUtils.isNotEmpty(strainValidationData.getProjectId())) {
TProjectTeam tProjectTeam = tProjectTeamMapper.selectById(strainValidationData.getProjectId());
if (tProjectTeam != null) {
List listProsd = projectTeamStaffService.lambdaQuery().eq(TProjectTeamStaff::getTeamId, tProjectTeam.getId()).list();
StringBuilder staffNames = new StringBuilder();
for (TProjectTeamStaff tProjectTeamStaff : listProsd) {
SysUser sysUser = sysUserService.selectUserById(Long.valueOf(tProjectTeamStaff.getUserId()));
if (sysUser!=null){
staffNames.append(sysUser.getNickName()).append(",");
}
}
if (StringUtils.hasLength(staffNames.toString())){
tProjectTeam.setStaff(staffNames.substring(0, staffNames.toString().length() - 1));
}
List tProjectTeamList = new ArrayList<>();
tProjectTeamList.add(tProjectTeam);
res.setTProjectTeamList(tProjectTeamList);
res.setProjectName(tProjectTeam.getTeamName());
}
}
return R.ok(res);
}
@Log(title = "主细胞-删除菌种验证数据资料", businessType = BusinessType.DELETE)
@ApiOperation(value = "主细胞-删除菌种验证数据资料",response = TPedigreeChartParentDTO.class)
@DeleteMapping(value = "/open/t-strain-validation-data/deleteMain")
public R deleteMain(@RequestParam String id) {
strainValidationDataService.removeById(id);
return R.ok();
}
@Log(title = "原始细胞-删除菌种验证数据资料", businessType = BusinessType.DELETE)
@ApiOperation(value = "原始细胞-删除菌种验证数据资料",response = TPedigreeChartParentDTO.class)
@DeleteMapping(value = "/open/t-strain-validation-data/deleteOriginal")
public R deleteOriginal(@RequestParam String id) {
strainValidationDataService.removeById(id);
return R.ok();
}
}