blade-service/blade-mdm/pom.xml
@@ -89,6 +89,7 @@ <artifactId>blade-core-test</artifactId> <scope>test</scope> </dependency> <!--<dependency> <groupId>org.springblade</groupId> <artifactId>blade-starter-transaction</artifactId> blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.api.R; import org.springblade.mdm.basesetting.machine.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; @@ -34,6 +35,7 @@ private final DynamicDirectoryWatcher directoryWatcher; private final MachineBackFileService machineBackFileService; private final NcProgramService ncProgramService; private final OssTemplate ossTemplate; //private final FileWatcherService.FileChangeListener listener; @PostConstruct public void init() { @@ -82,7 +84,7 @@ FileWatcherService.FileChangeListener getListener() { return new MachineFileBackListener(machineBackFileService,ncProgramService); return new MachineFileBackListener(machineBackFileService,ncProgramService,ossTemplate); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
@@ -3,10 +3,13 @@ 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.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; @@ -14,7 +17,9 @@ import org.springblade.mdm.basesetting.machine.vo.MachineExcelVO; import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO; import org.springblade.mdm.basesetting.machine.vo.MachineVO; import org.springblade.mdm.commons.vo.IdsVO; import org.springblade.mdm.machineback.service.MachineBackFileService; import org.springblade.mdm.machineback.service.NcProgramExportInnerService; import org.springblade.mdm.machineback.vo.MachineBackFileHandleExcelVO; import org.springblade.mdm.machineback.vo.MachineBackFileHandleQueryVO; import org.springblade.mdm.machineback.vo.MachineBackFileQueryVO; @@ -23,18 +28,19 @@ 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("/machineback/filehandle") @Tag(name = "æºåºåä¼ ç¨åºå¤ç", description = "æºåºåä¼ ç¨åºå¤ç") public class MachineBackFileHandleController { @Autowired private MachineBackFileService service; private final MachineBackFileService service; private final NcProgramExportInnerService ncProgramExportInnerService; /** * å页 */ @@ -48,8 +54,20 @@ @GetMapping("export-to-inner") @ApiOperationSupport(order = 13) @Operation(summary = "导åºå°æ¶å¯ç½", description = "导åºå°æ¶å¯ç½") public void exportToInner(MachineBackFileHandleQueryVO query, HttpServletResponse response) { public void exportToInner(@RequestBody @Parameter(description = "审æ¹è¡¨idæ°ç»") IdsVO vo, HttpServletResponse response) { if(vo.getIds() == null || vo.getIds().length == 0) { throw new ServiceException("æªéæ©æä»¶å¯¼åº"); } try { String filename = "toinnerexp-"+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".zip"; response.setHeader("Content-Disposition", "attachment; filename="+filename); response.setContentType("application/octet-stream"); ncProgramExportInnerService.exportToInner(vo.getIds(),response.getOutputStream()); } catch (IOException e) { log.error("å·¥æ§ç½å¯¼åºåä¼ æä»¶å¼å¸¸", e); throw new RuntimeException(e); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/entity/MachineBackFile.java
@@ -22,4 +22,8 @@ * 确认æ¶é´ */ private Date confirmTime; /** * 对象å卿件å */ private String ossName; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/MachineFileBackListener.java
@@ -1,12 +1,15 @@ package org.springblade.mdm.machineback.filewatch; import lombok.SneakyThrows; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.oss.OssTemplate; import org.springblade.core.oss.model.BladeFile; import org.springblade.mdm.machineback.entity.MachineBackFile; import org.springblade.mdm.machineback.service.MachineBackFileService; import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.service.NcProgramService; import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Path; @@ -14,9 +17,11 @@ public class MachineFileBackListener implements FileWatcherService.FileChangeListener{ private final MachineBackFileService machineBackFileService; private final NcProgramService ncProgramService; public MachineFileBackListener(MachineBackFileService backService, NcProgramService aNcProgramService) { private final OssTemplate ossTemplate; public MachineFileBackListener(MachineBackFileService backService, NcProgramService aNcProgramService,OssTemplate aOssTemplate) { this.machineBackFileService = backService; this.ncProgramService = aNcProgramService; this.ossTemplate = aOssTemplate; } @Override public void onFileCreated(Path filePath) { @@ -39,6 +44,14 @@ return; } backFile.setNcProgramId(prog.getId()); //æ´æ°ç¨åºçæä»¶å°å try(FileInputStream fins = new FileInputStream(filePath.toFile());){ BladeFile bfile = ossTemplate.putFile(programName, fins); backFile.setOssName(bfile.getName()); } machineBackFileService.save(backFile); }else{ log.warn("æä»¶ä¼ è¾ä¸ï¼åç»åæä½{}",filePath); @@ -47,7 +60,7 @@ log.error("åä¼ æä»¶æä½IOé误",e); throw new RuntimeException(e); } catch (InterruptedException e) { log.error("sleepåºé"); log.error("sleepåºé",e); } catch (Exception e) { log.error("æºåºåä¼ æä»¶å¤çå¼å¸¸",e); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.xml
@@ -15,7 +15,7 @@ select f.id,p.name name,p.is_cured,f.create_time,m.code machine_code, m.name machine_name,f.create_time arrived_time from mdm_machine_back_file f left join mdm_nc_program p on f.nc_program_id=p.id join mdm_machine m on p.machine_code=m.code left join mdm_machine m on p.machine_code=m.code <where> f.status=1 and f.is_deleted=0 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/service/MachineBackFileService.java
@@ -2,8 +2,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.servlet.ServletOutputStream; import lombok.AllArgsConstructor; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO; @@ -13,13 +16,15 @@ import org.springblade.mdm.machineback.vo.MachineBackFileHandleQueryVO; import org.springblade.mdm.machineback.vo.MachineBackFileQueryVO; import org.springblade.mdm.machineback.vo.MachineBackFileVO; import org.springblade.mdm.program.service.NcProgramService; import org.springframework.stereotype.Service; import java.util.List; @AllArgsConstructor @Service public class MachineBackFileService extends BizServiceImpl<MachineBackFileMapper, MachineBackFile> { private final NcProgramService progService; private final OssTemplate ossTemplate; /** * æ¥å * @param ids @@ -33,6 +38,8 @@ backFile.setStatus(MachineBackFile.STATUS_ACCEPTED); backFile.setConfirmTime(DateUtil.now()); this.updateById(backFile); } } @@ -47,6 +54,7 @@ for(Long id : idList){ MachineBackFile backFile = this.getById(id); backFile.setStatus(MachineBackFile.STATUS_REJECTED); backFile.setConfirmTime(DateUtil.now()); this.updateById(backFile); } @@ -72,4 +80,6 @@ IPage<MachineBackFileVO> page = this.getBaseMapper().handlePageQuery(Condition.getPage(query),query); return page; } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/service/NcProgramExportInnerService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,258 @@ package org.springblade.mdm.machineback.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.servlet.ServletOutputStream; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.mp.base.BizEntity; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.flow.entity.ApproveRecord; import org.springblade.mdm.flow.service.ApproveRecordService; import org.springblade.mdm.machineback.entity.MachineBackFile; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.entity.NcProgramApproved; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.program.service.NcProgramApprovedService; import org.springblade.mdm.program.service.NcProgramService; import org.springblade.mdm.program.vo.DncSendBackData; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * ä¸å/åä¼ ç¨åºç»è®¡ * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class NcProgramExportInnerService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { private final MachineBackFileService machineBackFileService; private final NcProgramService progService; private final NcNodeService ncNodeService; private final OssTemplate ossTemplate; public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json"; public static final String NODE_JSON_FILE = "exp_mdm_nc_node.json"; public static final String APPROVE_RECORD_JSON_FILE = "exp_mdm_approve_record.json"; /** * 导åºå°æ¶å¯ç½ * @param backFileIds * @param os * @throws IOException */ public void exportToInner(Long[] backFileIds, ServletOutputStream os) throws IOException { //FileOutputStream fos = new FileOutputStream("d:/exportDnc.zip"); try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os ArrayList<Long> programIdList = new ArrayList<Long>(); for (Long backId : backFileIds) { MachineBackFile backFile = machineBackFileService.getById(backId); programIdList.add(backFile.getNcProgramId()); NcProgram prog = progService.getById(backFile.getNcProgramId()); //1111ï¼éè¦è£ 卿件 String filename = prog.getOssName(); InputStream inputStream = ossTemplate.statFileStream(filename); addInputStreamToZip(zipOut, inputStream, prog.getName()); } addDataJson(zipOut, programIdList); } os.close(); } /** * å¯¼å ¥æ°æ®æä»¶ * @param zipOut */ void addDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { addProgramDataJson(zipOut, programIdList); //addApproveRecordDataJson(zipOut, programIdList); addNcNodeDataJson(zipOut, programIdList); } /** * å¯¼å ¥ç¨åºè®°å½ * @param zipOut * @param programIdList */ void addProgramDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { LambdaQueryWrapper<NcProgram> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(NcProgram::getId, programIdList); List<NcProgram> programList = progService.list(queryWrapper); JSONArray jsonArray = new JSONArray(); for(NcProgram program : programList){ JSONObject recObj = new JSONObject(); recObj.put("id", program.getId()); recObj.put("code", program.getCode()); recObj.put("ossName",program.getOssName()); recObj.put("isTextFile",program.getIsTextFile()); recObj.put("isLastEdition",program.getIsLastEdition()); recObj.put("category",program.getCategory()); recObj.put("description",program.getDescription()); recObj.put("name",program.getName()); recObj.put("drawingNo",program.getDrawingNo()); recObj.put("ncNodeId",program.getNcNodeId()); recObj.put("bindNcNodeId",program.getBindNcNodeId()); recObj.put("url",program.getUrl()); recObj.put("isCured",program.getIsCured()); recObj.put("isLocked",program.getIsLocked()); recObj.put("isTest",program.getIsTest()); recObj.put("machineCode",program.getMachineCode()); recObj.put("processEdition",program.getProcessEdition()); recObj.put("taskAssignTime",program.getTaskAssignTime()); addSuperProperties(recObj,program); jsonArray.add(recObj); } addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),PROGRAM_JSON_FILE); } /** * å¯¼å ¥å®¡æ¹è®°å½ * @param zipOut * @param programIdList æ°æ§ç¨åºidå表 */ /* void addApproveRecordDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { LambdaQueryWrapper<ApproveRecord> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ApproveRecord::getNcProgramId, programIdList); List<ApproveRecord> records = approveRecordService.list(queryWrapper); JSONArray jsonArray = new JSONArray(); for(ApproveRecord record : records){ JSONObject recObj = new JSONObject(); recObj.put("id", record.getId()); recObj.put("comment", record.getComment()); recObj.put("userId",record.getUserId()); recObj.put("userNickname",record.getUserNickname()); recObj.put("operateTime",record.getOperateTime()); recObj.put("operateResult",record.getOperateResult()); recObj.put("taskName",record.getTaskName()); recObj.put("ncProgramId",record.getNcProgramId()); recObj.put("processInstanceId",record.getProcessInstanceId()); addSuperProperties(recObj,record); jsonArray.add(recObj); } addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_approve_record.json"); } */ /** * å¯¼å ¥èç¹ * @param zipOut * @param programIdList */ void addNcNodeDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { LambdaQueryWrapper<NcProgram> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(NcProgram::getId, programIdList); List<NcProgram> programs = progService.list(queryWrapper); JSONArray jsonArray = new JSONArray(); ArrayList<Long> exportNodeIdList = new ArrayList<>(); for(NcProgram program : programs){ //JSONObject recObj = new JSONObject(); if(!exportNodeIdList.contains(program.getBindNcNodeId())){ exportNodeIdList.add(program.getBindNcNodeId()); } NcNode ncNode = ncNodeService.getById(program.getBindNcNodeId());//ä»ç»å®çèç¹æ¬èº«å¼å§å¯¼åº if(StringUtils.isNotEmpty(ncNode.getParentIds())){ List<Long> pids = Func.toLongList(ncNode.getParentIds()); for(Long nodeId : pids){ if(!exportNodeIdList.contains(nodeId)){ exportNodeIdList.add(nodeId); } } } } LambdaQueryWrapper<NcNode> nodeQueryWrapper = new LambdaQueryWrapper<>(); nodeQueryWrapper.in(NcNode::getId, exportNodeIdList); List<NcNode> nodeList =ncNodeService.list(nodeQueryWrapper); for(NcNode node : nodeList){ JSONObject recObj = new JSONObject(); recObj.put("id", node.getId()); recObj.put("nodeType", node.getNodeType()); recObj.put("machineCode",node.getMachineCode()); recObj.put("parentId",node.getParentId()); recObj.put("description",node.getDescription()); recObj.put("name",node.getName()); recObj.put("remark",node.getRemark()); recObj.put("drawingNo",node.getDrawingNo()); recObj.put("parentIds",node.getParentIds()); recObj.put("processName",node.getProcessName()); addSuperProperties(recObj,node); jsonArray.add(recObj); } addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_nc_node.json"); } void addSuperProperties(JSONObject recObj, BizEntity entity){ recObj.put("tenantId",entity.getTenantId()); recObj.put("createTime",entity.getCreateTime()); recObj.put("updateTime",entity.getUpdateTime()); recObj.put("createUser",entity.getCreateUser()); recObj.put("updateUser",entity.getUpdateUser()); recObj.put("status",entity.getStatus()); recObj.put("createDept",entity.getCreateDept()); } public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName) throws IOException { // å建æ°ç ZIP æ¡ç® ZipEntry zipEntry = new ZipEntry(entryName); zipOut.putNextEntry(zipEntry); // å°è¾å ¥æµåå ¥ ZIP è¾åºæµ byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) >= 0) { zipOut.write(buffer, 0, length); } // å ³éå½åæ¡ç® zipOut.closeEntry(); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
@@ -16,6 +16,8 @@ private String machineCode; @Schema(description = "èç¹ç±»åï¼åå ¸(ç¨åºèç¹ç±»ånc_node_type)") private String nodeType; @Schema(description = "èç¹ç±»å䏿") private String nodeTypeName; @Schema(description = "æ¯å¦æåèç¹") private Boolean hasChildren; @Schema(description = "æè¿°")