package com.yfd.platform.modules.experimentalData.controller;


import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.modules.experimentalData.domain.TsTask;
import com.yfd.platform.modules.experimentalData.service.ITsTaskService;
import com.yfd.platform.modules.specialDocument.domain.Project;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * <p>
 * 试验任务表 前端控制器
 * </p>
 *
 * @author LiMengNan
 * @since 2025-01-21
 */
@RestController
@RequestMapping("/experimentalData/tstask")
public class TsTaskController {

    //试验任务服务类
    @Resource
    private ITsTaskService tsTaskService;

    /**********************************
     * 用途说明: 分页查询试验数据管理-试验任务管理
     * 参数说明
     * taskName      任务名称
     * startDate     (开始日期)
     * endDate      （结束日期）
     * taskPlace     任务地点
     * taskPerson    任务人员
     * taskCode      任务编号
     * taskType      任务类型
     * carrierName    任务人员
     * deviceCode    任务人员
     * testDescribe    任务人员
     * sensorDescribe    任务人员
     * pageNum 当前页
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回分页查询结果
     ***********************************/
    @Log(module = "试验数据管理", value = "分页查询试验数据管理试验任务管理！")
    @GetMapping("/page")
    @ApiOperation("分页查询试验数据管理试验任务管理")
    @PreAuthorize("@el.check('select:tsTask')")
    public ResponseResult getTsTaskPage(String taskName, String startDate, String endDate,String taskPlace, String taskPerson, String taskCode, String taskType,String carrierName,String deviceCode,String testDescribe,String sensorDescribe, Page<TsTask> page) {
        //分页查询
        Page<TsTask> sdProjectPage = tsTaskService.getTsTaskPage(taskName, startDate, endDate,taskPlace,taskPerson,taskCode,taskType,carrierName,deviceCode,testDescribe,sensorDescribe, page);
        return ResponseResult.successData(sdProjectPage);
    }

    /***********************************
     * 用途说明：新增试验数据管理-试验任务管理
     * 参数说明
     * TsTask     试验任务管理
     * 返回值说明:  com.yfd.platform.config.ResponseResult 返回新增成功或者失败
     ***********************************/
    @Log(module = "试验数据管理", value = "新增试验数据管理试验任务管理！")
    @PostMapping("/addtsTask")
    @ApiOperation("新增试验数据管理试验任务管理")
    @ResponseBody
    @PreAuthorize("@el.check('add:tsTask')")
    public ResponseResult addtsTask(@RequestBody TsTask tsTask) {
        //对象不能为空
        if (ObjUtil.isEmpty(tsTask)) {
            return ResponseResult.error("参数为空");
        }
        Boolean isOk = tsTaskService.addSdproject(tsTask);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 修改试验数据管理-试验任务管理
     * 参数说明
     * TsTask     试验任务管理
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回修改成功或者失败
     ***********************************/
    @Log(module = "试验数据管理", value = "修改试验数据管理试验任务管理！")
    @PostMapping("/updatetsTask")
    @ApiOperation("修改试验数据管理试验任务管理")
    @PreAuthorize("@el.check('update:tsTask')")
    public ResponseResult updatetsTask(@RequestBody TsTask tsTask) {
        //对象不能为空
        if (ObjUtil.isEmpty(tsTask) && StrUtil.isBlank(tsTask.getId())) {
            return ResponseResult.error("参数为空");
        }
        boolean isOk = tsTaskService.updatetsTask(tsTask);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 根据ID试验数据管理-试验任务管理
     * 参数说明  id 试验数据管理ID
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回删除成功或者失败
     ***********************************/
    @Log(module = "试验数据管理", value = "根据ID删除试验数据管理试验任务管理")
    @PostMapping("/deleteTsTaskById")
    @ApiOperation("根据ID删除试验数据管理试验任务管理")
    @PreAuthorize("@el.check('del:tsTask')")
    public ResponseResult deleteTsTaskById(@RequestParam String id) {
        if (StrUtil.isBlank(id)) {
            return ResponseResult.error("参数为空");
        }
        List<String> dataset = new ArrayList<>();
        dataset.add(id);
        boolean isOk = tsTaskService.deleteTstaskByIds(dataset);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 批量删除试验数据管理-试验任务管理
     * 参数说明  ids 试验数据管理id数组
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回批量删除成功或失败
     ***********************************/
    @Log(module = "试验数据管理", value = "批量删除试验数据管理试验任务管理！")
    @PostMapping("/deleteTsTaskByIds")
    @ApiOperation("批量删除试验数据管理试验任务管理")
    @PreAuthorize("@el.check('del:tsTask')")
    public ResponseResult deleteTsTaskByIds(@RequestParam String ids) {
        if (StrUtil.isBlank(ids)) {
            return ResponseResult.error("参数为空");
        }
        String[] splitIds = ids.split(",");
        // 数组转集合
        List<String> dataset = Arrays.asList(splitIds);
        boolean isOk = tsTaskService.deleteTstaskByIds(dataset);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /***********************************
     * 用途说明： 查询所有试验数据管理-试验任务管理
     * 参数说明
     * 返回值说明:  试验数据管理试验任务管理
     ***********************************/
    @PostMapping("/list")
    @ApiOperation("查询所有试验数据管理试验任务管理！")
    @ResponseBody
    //@PreAuthorize("@el.check('select:devicesignal')")
    public ResponseResult listTsTask() {
        LambdaQueryWrapper<TsTask> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByDesc(TsTask::getTaskStartdate);
        List<TsTask> tsTasks = tsTaskService.list(queryWrapper);
        return ResponseResult.successData(tsTasks);
    }
}
