From fc588c6e5ccac038cab378931d9bac3033e28f98 Mon Sep 17 00:00:00 2001 From: yangys <y_ys79@sina.com> Date: 星期五, 04 七月 2025 11:29:16 +0800 Subject: [PATCH] 增加产品型号 --- blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 213 insertions(+), 2 deletions(-) diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java index 4a12b5e..3b5791f 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java @@ -1,18 +1,41 @@ package org.springblade.mdm.program.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 lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.archivers.zip.ZipUtil; +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.program.entity.NcNode; +import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.entity.NcProgramApproved; import org.springblade.mdm.program.mapper.NcProgramApprovedMapper; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.mdm.program.vo.NcProgramExportDncPageVO; import org.springblade.mdm.program.vo.NcProgramExportDncQueryVO; +import org.springblade.mdm.utils.CustomBinaryWriter; 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; /** * 涓嬪彂/鍥炰紶绋嬪簭缁熻 @@ -23,8 +46,10 @@ @Service @AllArgsConstructor public class NcProgramApprovedService extends BizServiceImpl<NcProgramApprovedMapper, NcProgramApproved> { - - + private final NcProgramService progService; + private final OssTemplate ossTemplate; + private final ApproveRecordService approvedService; + private final NcNodeService ncNodeService; /** * 鍒嗛〉鏌ヨ * @param query 鏌ヨ鍙傛暟 @@ -37,5 +62,191 @@ return page; } + + /** + * 瀵煎嚭dnc + * @param approvedIdArr 寰呭鍑哄鎵硅〃id鏁扮粍 + */ + public void exportDnc(Long[] approvedIdArr, OutputStream os) throws IOException { + ZipOutputStream zipOut = new ZipOutputStream(os); + + ArrayList<Long> programIdList = new ArrayList<Long>(); + + for (Long approvedId : approvedIdArr) { + NcProgramApproved approved = this.getById(approvedId); + programIdList.add(approved.getNcProgramId()); + + NcProgram prog = progService.getById(approved.getNcProgramId()); + + String filename = prog.getOssName(); + InputStream inputStream = ossTemplate.statFileStream(filename); + + addInputStreamToZip(zipOut, inputStream, prog.getName()); + + } + addDataJson(zipOut, programIdList); + + } + + /** + * 瀵煎叆鏁版嵁鏂囦欢 + * @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("category",program.getCategory()); + recObj.put("description",program.getDescription()); + recObj.put("name",program.getName()); + recObj.put("partNo",program.getPartNo()); + recObj.put("ncNodeId",program.getNcNodeId()); + 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)),"exp_mdm_nc_program.json"); + + } + + /** + * 瀵煎叆瀹℃壒璁板綍 + * @param zipOut + * @param programIdList + */ + void addApproveRecordDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { + LambdaQueryWrapper<ApproveRecord> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ApproveRecord::getNcProgramId, programIdList); + List<ApproveRecord> records = approvedService.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.getNcNodeId())){ + exportNodeIdList.add(program.getNcNodeId()); + } + NcNode ncNode = ncNodeService.getById(program.getNcNodeId()); + + 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("partNo",node.getPartNo()); + 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(); + } } -- Gitblit v1.9.3