Newer
Older
casic-metering / casic-metering-api / src / main / java / com / casic / missiles / controller / MeterFileController.java
wangpeng on 25 Nov 2022 4 KB knife4j、minio
package com.casic.missiles.controller;

import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.missiles.core.base.controller.ExportController;
import com.casic.missiles.core.page.PageFactory;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.OperateTypeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.model.MeterFile;
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.service.IMeterFileService;
import com.casic.missiles.utils.MinioUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Objects;

/**
 * @Description: 计量文件
 * @Author: wangpeng
 * @Date: 2022/11/21 17:47
 */
@Api(tags = "计量文件管理接口")
@Controller
@RequestMapping("/meter/file")
public class MeterFileController extends ExportController {
    @Autowired
    private IMeterFileService meterFileService;
    @Autowired
    private MinioUtil minioUtil;

    /**
     * 文件列表,列表中查的是文件表中已审批的
     * 质量文件(计量法规、质量手册、程序文件、作业文件、技术能力、CNAS文件)、计量管理规章制度、计量管理办法、校准检测办法、计量规程
     */
    @ApiOperation("文件列表")
    @PostMapping("/listPage")
    @ResponseBody
    public Object listPage(@RequestBody MeterFile meterFile) {
        Page<MeterFile> page = PageFactory.defaultPage();
        return ResponseData.success(super.packForBT(meterFileService.listPage(page, meterFile)));
    }

    /**
     * 文件上传(minio)
     */
    @ApiOperation("文件上传")
    @PostMapping("/upload")
    @ResponseBody
    public Object upload(@RequestBody MultipartFile[] multipartFile) {
        Assert.isFalse(Objects.isNull(multipartFile), () -> {
            throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL);
        });
        List<String> nameList = minioUtil.upload(multipartFile);
        return nameList;
    }

    /**
     * 文件下载(minio)
     */
    @ApiOperation("文件下载")
    @PostMapping("/download/{fileName}")
    @ResponseBody
    public Object upload(@PathVariable(name = "fileName") String fileName) {
        ResponseEntity<byte[]> download = minioUtil.download(fileName);
        return download;
    }

    /**
     * 查看详情(复用列表接口)
     */

    /**
     * 文件新建、编辑(废止)、删除
     * 流程:审批人列表要随着流程图信息一起上传
     *      前后端交互两种方案(待晓颖调研):1、前端传和activiti流程图生成的json一样的json,后端转成bpmnModel(使用BpmnJsonConverter类的方法)
     *                                    2、前端直接传bpmn文件或bpmn的xml文件(使用BpmnXMLConverter类的方法)
     * 文件的审批状态字段要更新,保证文件表的状态及时更新,供各列表使用
     */
    @PostMapping("/{operation}")
    @ResponseBody
    public Object operation(@PathVariable(name = "operation") String operateType, @RequestBody MeterFile meterFile) {
        if(OperateTypeEnum.ADD.getOperateType().equals(operateType)) {
            return meterFileService.addFile(meterFile);
        }else if(OperateTypeEnum.UPDATE.getOperateType().equals(operateType)){
            return meterFileService.updateFile(meterFile);
        }else if(OperateTypeEnum.DELETE.getOperateType().equals(operateType)){
            return meterFileService.deleteFile(meterFile);
        }else if(OperateTypeEnum.BATCHDELETE.getOperateType().equals(operateType)){
            return meterFileService.deleteBatchFile(meterFile.getIds());
        }
        return null;
    }

    /**
     * 文件审批,各审批状态的列表都是查文件表,和activiti中获取任务中businessKey关联,参考查询我的待办任务列表接口,里面的TaskInfo类比文件表实体
     *          全部:所有状态的单据
     *          草稿箱:发起者已保存,但未提交的单据
     *          待审批:流程到该审批者用户,用户要去审批的单据(采用activiti自己待办任务列表实现)
     *          审批中:管理员角色可以查看所有的未完成的任务(activiti查看所有待办任务列表实现),发起者可查看自己的(google工作流有收藏查看发起者自己的流程方法)
     *          已通过:管理员角色可以查看所有的,发起者可查看自己的,审批者可查看流程中有自己的(google工作流有收藏查看有参与的流程方法)
     *          未通过:同已通过
     *          已取消:发起者取消的单据
     */
}