package org.springblade.mdm.machinefile.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.UrlUtil; import org.springblade.mdm.commons.service.OssFileCommonService; import org.springblade.mdm.machinefile.entity.FileSendRecord; import org.springblade.mdm.machinefile.entity.MachineAcceptedFile; import org.springblade.mdm.machinefile.service.MachineFileService; import org.springblade.mdm.machinefile.service.MachineAcceptedFileService; import org.springblade.mdm.machinefile.service.NcProgramExportInnerService; import org.springblade.mdm.machinefile.vo.MachineBackFileHandleExcelVO; import org.springblade.mdm.machinefile.vo.MachineAcceptedFileHandleQueryVO; import org.springblade.mdm.machinefile.vo.MachineAcceptedFileVO; import org.springblade.mdm.program.service.programannotation.AnnotationUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; @Slf4j @RestController @AllArgsConstructor @RequestMapping("/machinefile/filehandle") @Tag(name = "机床回传程序处理", description = "机床回传程序处理") public class MachineAcceptedFileHandleController { private final OssFileCommonService ossFileCommonService; private final MachineAcceptedFileService acceptedFileService; private final NcProgramExportInnerService ncProgramExportInnerService; /** * 分页 */ @Operation(summary = "机床回传文件处理分页查询", description = "名称或编码,已接受的文件列表") @GetMapping("/page") public R> page(MachineAcceptedFileHandleQueryVO query) { IPage pages = acceptedFileService.handlePageQuery(query); return R.data(pages); } @GetMapping("/download-by-id") @Operation(summary = "下发文件记录列表", description = "下发文件记录列表") public void downloadByRecordId(Long id,HttpServletResponse response) throws IOException { MachineAcceptedFile acceptedFile = acceptedFileService.getById(id); ossFileCommonService.download(acceptedFile.getOssName(),acceptedFile.getName(),response); } @GetMapping("export-to-inner") @ApiOperationSupport(order = 13) @Operation(summary = "导出到涉密网", description = "导出到涉密网") public void exportToInner(@Parameter(description = "机床接收文件id数组") String ids, HttpServletResponse response) { if(Func.isBlank(ids)) { throw new ServiceException("未选择文件导出"); } try { String prefix = UrlUtil.encode(AuthUtil.getNickName()+"-工控网导出"); String filename = prefix+"-"+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".zip"; response.setHeader("Content-Disposition", "attachment; filename="+filename); response.setContentType("application/octet-stream"); ncProgramExportInnerService.exportToInner(Func.toLongList(ids),response.getOutputStream()); } catch (IOException e) { log.error("工控网导出回传文件异常", e); throw new RuntimeException(e); } } @Operation(summary = "回传程序处理导出Excel", description = "回传程序处理导出Excel") @GetMapping("/export-excel") public void exportExcel(MachineAcceptedFileHandleQueryVO query, HttpServletResponse response) { query.setCurrent(1); query.setSize(Integer.MAX_VALUE); //IPage pages = machineFileService.handlePageQuery(query); IPage pages = acceptedFileService.handlePageQuery(query); List list = new ArrayList<>(); pages.getRecords().forEach(vo ->{ MachineBackFileHandleExcelVO excelVO = new MachineBackFileHandleExcelVO(); BeanUtil.copyProperties(vo, excelVO); excelVO.setProgramStatusName(parseProgramStatusName(vo.getProgramStatus())); list.add(excelVO); }); ExcelUtil.export(response, "机床回传程序" + DateUtil.time(), "机床回传程序表", list, MachineBackFileHandleExcelVO.class); } /** * 转换状态为显示文本 * @param programStatus 程序状态编码 * @return 状态名称 */ String parseProgramStatusName(String programStatus){ if(programStatus == null){ return "未知"; } return switch (programStatus) { case AnnotationUtil.SQ -> "试切"; case AnnotationUtil.GH -> "固化"; case AnnotationUtil.LG -> "临时更改单"; default -> "未知"; }; } }