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工作流有收藏查看有参与的流程方法) * 未通过:同已通过 * 已取消:发起者取消的单据 */ }