/*
 * Author: wangjian
 * 生成controller
 */
package com.tofly.stocks.controller;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.common.core.entity.ResultRespone;
import com.tofly.common.log.annotation.ToFlyAppLog;
import com.tofly.stocks.dto.DeviceInfoQuery;
import com.tofly.stocks.dto.DeviceInfoStoreQuery;
import com.tofly.stocks.entity.DeviceInfo;
import com.tofly.stocks.service.DeviceInfoService;
import io.swagger.annotations.*;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.List;

/**
 * 物资设备信息表（包含物料、设备、药品）
 *
 * @author admin
 * @date Fri Nov 25 00:00:00 CST 2022
 */
@RestController
@AllArgsConstructor
@RequestMapping("/deviceinfo")
@Api(tags="物资设备信息表（包含物料、设备、药品）接口")
public class DeviceInfoController {

    private final  DeviceInfoService deviceInfoService;

    /**
    * 基础信息导出
    * @param deviceInfo 物资设备信息表（包含物料、设备、药品）
    * @return
    */
    @GetMapping("/export" )
    @ApiOperation(value = "基础信息导出（包含物料、设备、药品）")
    public void getDeviceExport(@ModelAttribute DeviceInfo deviceInfo) {
      deviceInfoService.DeviceExport(deviceInfo);
    }

     /**
     * 基础信息导入（包含物料、设备、药品）
     * @return
     */
    @ToFlyAppLog(title="基础信息导入（包含物料、设备、药品）" )
    @ApiOperation(value = "基础信息导入（包含物料、设备、药品）")
    @PostMapping("/import")
    @ApiImplicitParam(name = "file", value = "Excel文件", required = true)
    public ResultRespone ImportData(@Validated @RequestParam(name = "file") MultipartFile file){
      return ResultRespone.success(deviceInfoService.ImportData(file));
    }

    /**
     * 分页查询
     * @param page 分页对象
     * @param query 物资设备信息表（包含物料、设备、药品）
     * @return
     */
    @GetMapping("/page" )
    @ApiOperation(value = "分页查询")
    public ResultRespone getDeviceInfoPage(Page page, @ModelAttribute DeviceInfoQuery query) {
        return ResultRespone.success(deviceInfoService.getDataPage(page,query));
    }
    @GetMapping("/devicestorelist" )
    @ApiOperation(value = "出库/使用记录时候，选择对应的物资列表")
    public ResultRespone getDeviceStorelistPage(Page page, @Validated DeviceInfoStoreQuery deviceInfoStoreQuery) {
        return ResultRespone.success(deviceInfoService.getDeviceStorelistPage(page, deviceInfoStoreQuery));
    }


    /**
     * 通过id查询物资设备信息表（包含物料、设备、药品）
     * @param id id
     * @return ResultRespone
     */
    @GetMapping("/{id}" )
    @ApiOperation(value = "通过ID查询")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long")
    })
    public ResultRespone getById(@PathVariable("id" ) Long id) {
      return ResultRespone.success(deviceInfoService.getById(id));
    }

    /**
     * 新增物资设备信息表（包含物料、设备、药品）
     * @param deviceInfo 物资设备信息表（包含物料、设备、药品）
     * @return ResultRespone
     */
    @ToFlyAppLog(title="新增物资设备信息表（包含物料、设备、药品）" )
    @ApiOperation(value = "新增物资设备信息表（包含物料、设备、药品）")
    @PostMapping
    public ResultRespone save(@RequestBody @Validated DeviceInfo deviceInfo) {
      return ResultRespone.success(deviceInfoService.saveDeviceInfo(deviceInfo));
    }

    /**
     * 修改物资设备信息表（包含物料、设备、药品）
     * @param deviceInfo 物资设备信息表（包含物料、设备、药品）
     * @return ResultRespone
     */
    @ToFlyAppLog(title="修改物资设备信息表（包含物料、设备、药品）" )
    @ApiOperation(value = "修改物资设备信息表（包含物料、设备、药品）")
    @PutMapping
    public ResultRespone updateById(@RequestBody @Validated DeviceInfo deviceInfo) {
      return ResultRespone.success(deviceInfoService.editDeviceInfo(deviceInfo));
    }

    /**
     * 通过id批量删除物资设备信息表（包含物料、设备、药品）
     * @param ids id
     * @return ResultRespone
     */
    @ToFlyAppLog(title="通过id批量删除物资设备信息表（包含物料、设备、药品）" )
    @ApiOperation(value = "通过ID批量删除物资设备信息表（包含物料、设备、药品）")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "ids", value = "批量删除，多个id以逗号隔开", required = true, dataType = "String")
    })
    @DeleteMapping("/deleteByIds" )
    public ResultRespone removeById(String ids) {
        return ResultRespone.success(deviceInfoService.deleteByIds(ids));
    }


    /**
     * 同步物资设备信息表（包含物料、设备、药品）
     * @return ResultRespone
     */
    @ToFlyAppLog(title="同步物资设备信息表（包含物料、设备、药品）" )
    @ApiOperation(value = "同步物资设备信息表（包含物料、设备、药品）")
    @PostMapping("/sync")
    public ResultRespone syncDevice() {
        return ResultRespone.success("同步接口未实现");
    }

    /**
     * 分页查询
     * @param page 分页对象
     * @param deviceId 设备台账，详情数据，包含维修信息，保养信息，巡检信息
     * @return
     */
    @GetMapping("/repairList" )
    @ApiOperation(value = "设备维修信息，分页查询")
    @ApiImplicitParam(name = "deviceId", value = "设备ID")
    public ResultRespone getDeviceRepairListPage(Page page, @RequestParam(value = "deviceId")Long deviceId) {
        return ResultRespone.success(deviceInfoService.getDeviceRepairListPage(page,deviceId));
    }

    /**
     * 分页查询
     * @param page 分页对象
     * @param deviceId 设备台账，详情数据，包含维修信息，保养信息，巡检信息
     * @return
     */
    @GetMapping("/maintainList" )
    @ApiOperation(value = "设备保养信息，分页查询")
    @ApiImplicitParam(name = "deviceId", value = "设备ID")
    public ResultRespone getDeviceMaintainListPage(Page page, @RequestParam(value = "deviceId")Long deviceId) {
        return ResultRespone.success(deviceInfoService.getDeviceMaintainListPage(page,deviceId));
    }

    /**
     * 分页查询
     * @param page 分页对象
     * @param deviceId 设备台账，详情数据，包含维修信息，保养信息，巡检信息
     * @return
     */
    @GetMapping("/patrolList" )
    @ApiOperation(value = "设备巡检信息，分页查询")
    @ApiImplicitParam(name = "deviceId", value = "设备ID")
    public ResultRespone getDevicePatrolListPage(Page page, @RequestParam(value = "deviceId")Long deviceId) {
        return ResultRespone.success(deviceInfoService.getDevicePatrolListPage(page,deviceId));
   }

    /**
     * 分页查询
      * @param deviceId 设备台账，详情数据，包含维修信息，保养信息，巡检信息
     * @return
     */
    @GetMapping("/report" )
    @ApiOperation(value = "设备图表统计")
    @ApiImplicitParam(name = "deviceId", value = "设备ID")
    public ResultRespone getDeviceReport( @RequestParam(value = "deviceId")Long deviceId) {
        return ResultRespone.success(deviceInfoService.getDeviceReport(deviceId));
    }
}
