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.core.page.PageInfoBT; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.IdsDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.meter.FileListRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.MeterFile; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.service.IMeterFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.util.CollectionUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.validation.Valid; import java.io.IOException; 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; /** * 文件列表,列表中查的是文件表中已通过的 * 质量文件(计量法规、质量手册、程序文件、作业文件、技术能力、CNAS文件)、计量管理规章制度、计量管理办法、校准检测办法、计量规程 */ @ApiOperation("文件列表/详情(分页)") @PostMapping("/listPage") @ResponseBody public ReturnDTO<PageInfoBT<MeterFile>> listPage(@RequestBody FileListRequest request) { Page<MeterFile> page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(meterFileService.listPage(page, request))); } @ApiOperation("文件列表(不分页)") @PostMapping("/list") @ResponseBody public ReturnDTO<List<MeterFile>> list(@RequestBody FileListRequest request) { return ReturnUtil.success(meterFileService.list(request)); } @ApiOperation("文件导出") @PostMapping("/listExport") @ResponseBody public void export(@RequestBody FileListRequest request) throws IOException { super.exportExcel(MeterFile.class, meterFileService.list(request), ExportEnum.FILE_EXPORT.getSheetName()); } /** * 流程:审批人列表要随着流程图信息一起上传 * 前后端交互两种方案:1、json转bpmn * 2、前端直接传bpmn文件或bpmn的xml文件(使用BpmnXMLConverter类的方法) * 文件的审批状态字段要更新,保证文件表的状态及时更新,供各列表使用 */ @ApiOperation("文件新建") @PostMapping("/add") @ResponseBody public ReturnDTO add(@RequestBody @Valid MeterFile meterFile, BindingResult bindingResult) { if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } return meterFileService.addFile(meterFile); } @ApiOperation("文件更新为已废止") @PostMapping("/update") @ResponseBody public ReturnDTO update(@RequestBody IdDTO idDTO) { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); return meterFileService.updateFile(idDTO.getId()); } @ApiOperation("文件删除") @PostMapping("/delete") @ResponseBody public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); return meterFileService.deleteFile(idDTO.getId()); // TODO: 2022/11/26 考虑activiti流程数据除脏 } @ApiOperation("文件批量删除") @PostMapping("/batchDelete") @ResponseBody public ReturnDTO batchDelete(@RequestBody @Valid IdsDTO idsDTO) { Assert.isFalse(CollectionUtils.isEmpty(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); return meterFileService.deleteBatchFile(idsDTO.getIds()); } /** * 文件审批,各审批状态的列表都是查文件表,和activiti中获取任务中businessKey关联,参考查询我的待办任务列表接口,里面的TaskInfo类比文件表实体 * 全部:所有状态的单据 * 草稿箱:发起者已保存,但未提交的单据 * 待审批:流程到该审批者用户,用户要去审批的单据(采用activiti自己待办任务列表实现) * 审批中:管理员角色可以查看所有的未完成的任务(activiti查看所有待办任务列表实现),发起者可查看自己的(google工作流有收藏查看发起者自己的流程方法) * 已通过:管理员角色可以查看所有的,发起者可查看自己的,审批者可查看流程中有自己的(google工作流有收藏查看有参与的流程方法) * 未通过:同已通过 * 已取消:发起者取消的单据 */ }