package com.ruoyi.web;

import java.util.List;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.domain.Sample;
import com.ruoyi.mapper.TaskSampleRelationMapper;
import com.ruoyi.service.SampleManagementService;
import com.ruoyi.web.request.SampleManagementGetInfoRequest;
import com.ruoyi.web.request.SampleManagementRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.core.page.TableDataInfo;

/**
 * 样品管理Controller
 * 
 * @author ruoyi
 * @date 2024-01-29
 */
@Api(tags = "样品管理")
@RestController
@RequestMapping("/sample/Management")
public class SampleManagementController extends BaseController
{
    @Autowired
    private SampleManagementService sampleManagementService;

    @Autowired
    private TaskSampleRelationMapper taskSampleRelationMapper;

    /**
     * 查询样品管理列表
     */
    @ApiOperation("查询样品管理列表")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/list")
    public TableDataInfo<Sample> list(@Validated @RequestBody  SampleManagementRequest request)
    {
        startPage(request);
        List<Sample> list = sampleManagementService.selectSampleManagementList(request);
        return getDataTable(list);

    }

    /**
     * 获取样品管理详细信息
     */
    @ApiOperation("获取样品管理详细信息")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/getInfo")
    public R<Sample> getInfo(@Validated @RequestBody SampleManagementGetInfoRequest request)
    {
        return R.ok(sampleManagementService.selectSampleManagementById(request.getId()));
    }

    /**
     * 新增样品管理
     */
    @ApiOperation("新增样品管理")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @Log(title = "样品管理", businessType = BusinessType.INSERT)
    @RequestMapping(method = RequestMethod.POST, value = "/add")
    public R<Integer> add(@Validated @RequestBody Sample tSampleManagement)
    {
        return R.ok(sampleManagementService.insertSampleManagement(tSampleManagement));
    }

    /**
     * 修改样品管理
     */

    @ApiOperation("修改样品管理")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @Log(title = "样品管理", businessType = BusinessType.UPDATE)
    @RequestMapping(method = RequestMethod.POST, value = "/edit")
    public R<Integer> edit(@Validated @RequestBody Sample tSampleManagement)
    {
        return R.ok(sampleManagementService.updateSampleManagement(tSampleManagement));
    }

    /**
     * 删除样品管理
     */
    @ApiOperation(" 删除样品管理")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @Log(title = "样品管理", businessType = BusinessType.DELETE)
	@PostMapping ("/del")
    public AjaxResult remove(@Validated @RequestBody SampleManagementGetInfoRequest request)
    {
       int num =  taskSampleRelationMapper.selectTaskSumBySampleId(request.getId());
        if(num>0){
            throw new ServiceException("已有相关任务,不允许删除");
        }
        return toAjax(sampleManagementService.removeById(request.getId()));
    }

    @ApiOperation("样品信息下拉框/识别码和编号条件查询")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/sampleList")
    public R<List<Sample>> selectSampleList(@Validated @RequestBody  SampleManagementRequest request){
        return R.ok(sampleManagementService.selectSampleList(request));
    }
}