package com.nantian.cloud.jljc.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.nantian.cloud.jljc.entity.*;
import com.nantian.cloud.jljc.service.TFaAccreditingBodyService;
import com.nantian.cloud.jljc.service.TFaFieldReconnaissanceService;
import com.nantian.cloud.jljc.service.TFaFixedAssetsService;
import com.nantian.sc.cloud.common.core.util.R;
import com.nantian.sc.cloud.common.log.annotation.SysLog;
import com.nantian.sc.cloud.common.minio.service.MinioTemplate;
import com.nantian.sc.cloud.common.security.service.ScUser;
import com.nantian.sc.cloud.common.security.util.SecurityUtils;
import lombok.AllArgsConstructor;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * <p>
 * 固定资产投资项目节能审查实地踏勘报告表 前端控制器
 * </p>
 *
 * @author fyf
 * @since 2022-02-15
 */
@CrossOrigin
@AllArgsConstructor
@RestController
@RequestMapping("/tFaFieldReconnaissance")
public class TFaFieldReconnaissanceController {

    @Autowired
    MinioTemplate minioTemplate;

    @Autowired
    TFaFieldReconnaissanceService tFaFieldReconnaissanceService;

    @Autowired
    TFaAccreditingBodyService tFaAccreditingBodyService;

    @Autowired
    TFaFixedAssetsService tFaFixedAssetsService;

    @GetMapping("/getFileList/{id}")
    @SysLog("根据id获取固定资产投资项目节能审查实地踏勘报告")
    public R getFileList(@PathVariable Integer id){
        List<TFaFieldReconnaissance> tFaFieldReconnaissanceList = tFaFieldReconnaissanceService.list(
                new QueryWrapper<TFaFieldReconnaissance>().eq("del_flag",1)
                        .eq("project_id", id
        ));
        return R.ok(tFaFieldReconnaissanceList);
    }
    /**
     * 实地踏勘资料上传
     * @param id
     * @param multipartFiles
     * @return
     * @throws Exception
     */
    @PostMapping("/fileUpload/{id}")
    @SysLog("实地踏勘资料上传")
    public R fileUpload(@PathVariable Integer id,@RequestParam("file") MultipartFile[] multipartFiles) throws Exception {
        TFaAccreditingBody tFaAccreditingBody = tFaAccreditingBodyService.getOne(new QueryWrapper<TFaAccreditingBody>().eq("project_id", id));
        ScUser u = SecurityUtils.getUser();
        if (multipartFiles.length > 0) {
            for (MultipartFile multipartFile : multipartFiles) {
                //获取文件名称
                String fileName = multipartFile.getOriginalFilename();
                //获取文件的后缀
                String extension = "." + FilenameUtils.getExtension(multipartFile.getOriginalFilename());
                //生成新的文件名称
                String newFileName = "SDTK" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
                        + UUID.randomUUID().toString()
                        .replace("-", "") + extension;
                //文件的大小
                long size = multipartFile.getSize();
                //文件的类型
                String contentType = multipartFile.getContentType();
                //上传文件
                InputStream inputStream = multipartFile.getInputStream();
                minioTemplate.putObject("jljc", newFileName, inputStream, inputStream.available(), "application/octet-stream");
                //文件信息保存到数据库
                TFaFieldReconnaissance faFieldReconnaissance = new TFaFieldReconnaissance();
                faFieldReconnaissance.setDelFlag(1);
                faFieldReconnaissance.setExtension(extension);
                faFieldReconnaissance.setFilePath("jljc/" + newFileName);
                faFieldReconnaissance.setFileSize(String.valueOf(size));
                faFieldReconnaissance.setFileType(contentType);
                faFieldReconnaissance.setNewFileName(newFileName);
                faFieldReconnaissance.setOldFileName(fileName);
                faFieldReconnaissance.setDeptId(u.getDeptId());
                faFieldReconnaissance.setUpdateTime(new Date());
                faFieldReconnaissance.setUserId(u.getId());
                faFieldReconnaissance.setUploadPerson(u.getUserRealName());
                faFieldReconnaissance.setProjectId(id);
                faFieldReconnaissance.setUploadTime(new Date());
                faFieldReconnaissance.setPersonId(tFaAccreditingBody.getId());
                tFaFieldReconnaissanceService.save(faFieldReconnaissance);
                return R.ok();
            }
            TFaFixedAssets faFixedAssets = tFaFixedAssetsService.getById(id);
            faFixedAssets.setDeptId(u.getDeptId());
            faFixedAssets.setUserId(u.getId());
            faFixedAssets.setStatusData(4);
            faFixedAssets.setUpdateTime(new Date());
            tFaFixedAssetsService.updateById(faFixedAssets);
        } else {
            return R.failed("上传文件为空！");
        }
        return R.ok();
    }

    @GetMapping("/fileDownload/{id}")
    @SysLog("根据id下载固定资产投资项目节能审查实地踏勘报告")
    public R fileDownload(@PathVariable("id") String id) throws IOException {
        TFaFieldReconnaissance tFaFieldReconnaissance = tFaFieldReconnaissanceService.getById(id);
        //获取文件名
        String newFileName = tFaFieldReconnaissance.getNewFileName();
        //文件下载
        minioTemplate.getObject("jljc",newFileName);
        return R.ok();
    }

    @DeleteMapping("/fileRemove/{id}")
    @SysLog("根据id删除固定资产投资项目节能审查实地踏勘报告")
    public R fileRemove(@PathVariable("id") String id) throws Exception {
        ScUser u = SecurityUtils.getUser();
        TFaFieldReconnaissance tFaFieldReconnaissance = tFaFieldReconnaissanceService.getById(id);
        //获取文件名
        String newFileName = tFaFieldReconnaissance.getNewFileName();
        tFaFieldReconnaissance.setUserId(u.getId());
        tFaFieldReconnaissance.setDelFlag(4);
        tFaFieldReconnaissance.setUpdateTime(new Date());
        tFaFieldReconnaissance.setDeptId(u.getDeptId());
        tFaFieldReconnaissanceService.updateById(tFaFieldReconnaissance);
        //文件删除
        minioTemplate.removeObject("jljc",newFileName);
        return R.ok();
    }
}
