yangys
2025-07-08 0d97a648b7aa8e7b328c37a1f6f73dad2880dd52
mdm程序导入
已修改4个文件
166 ■■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java
@@ -51,7 +51,7 @@
            return R.fail(e.getMessage());
        }
    }
    /*
    @PostMapping("accept")
    @ApiOperationSupport(order = 2)
    @Operation(summary = "MDM程序入库", description = "涉密网程序确认入库")
@@ -63,5 +63,5 @@
            return R.fail(e.getMessage());
        }
        return R.success();
    }*/
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
@@ -42,7 +42,6 @@
    @Operation(summary = "程序导出DNC分页查询", description = "分页查询,供用户选择数据")
    @GetMapping("/export-dnc-page")
    public R<IPage<NcProgramExportDncPageVO>> page(NcProgramExportDncQueryVO query) {
        //IPage<NcProgramVO> pages = ncProgramService.pageQuery(query);
        return R.data(ncProgramApprovedService.exportDncPageQuery(query));
    }
@@ -53,6 +52,8 @@
            throw new ServiceException("未选择文件导出");
        }
        try {
            response.setHeader("Content-Disposition", "attachment; filename=dnc-t.zip");
            response.setContentType("application/octet-stream");
            ncProgramExportDNCService.exportDnc(vo.getIds(),response.getOutputStream());
        } catch (IOException e) {
            log.error("导出DNC异常", e);
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -10,10 +10,15 @@
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.FileUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.IoUtil;
import org.springblade.mdm.flow.service.CureFlowService;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
@@ -27,6 +32,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;
@@ -41,6 +47,13 @@
public class MdmProgramImportService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
    private final CureFlowService cureFlowService;
    private final NcProgramService ncProgramService;
    private final NcNodeService ncNodeService;
    private final BladeRedis bladeRedis;
    private final OssTemplate ossTemplate;
    private String getFileKey(){
        return "mdmimpfile-"+ AuthUtil.getUserId();
    }
    /**
     * MDM导入文件上传
     * @param file MDM涉密网导出文件
@@ -49,6 +62,10 @@
    public List<MdmProgramImportVO> mdmImportUpload(MultipartFile file) {
        List<MdmProgramImportVO> list;
        try {
            BladeFile bfile = ossTemplate.putFile(file);//上传,供后续入库使用
            //设置一个缓存,2小时过期
            bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2));
            //String fileName = file.getOriginalFilename();
            //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
            InputStream zipFileInputStream = file.getInputStream();//test
@@ -161,13 +178,16 @@
     * @param ids id列表逗号分隔
     * @return
     */
    public void mdmFileAccept(String ids) {
        /*
    public void mdmFileAccept(String ids) throws IOException {
        String pkgFileName = bladeRedis.get(getFileKey());
        List<Long> idList = Func.toLongList(ids);
        //
        updateProgramFile(pkgFileName,idList);
        List<NcProgram> progList = ncProgramService.listByIds(idList);
        NcProgramExchange exchange;
        //NcProgram program;
        //NcNode programNode;
        for(NcProgram prog:progList){
            exchange = new NcProgramExchange();
@@ -175,11 +195,137 @@
            exchange.setExchangeType(2);//回传
            exchange.setNcProgramId(prog.getId());
            this.save(exchange);
        }
    //直接入库,无流程
    }
    /**
     * 更新程序文件
     * @param pkgFileName mdm程序包
     * @param idList 选定入库的
        */
    private void updateProgramFile(String pkgFileName,List<Long> idList) throws IOException {
        InputStream inputStream = this.ossTemplate.statFileStream(pkgFileName);
        byte[] bytes = FileUtil.copyToByteArray(inputStream);
        List<NcNode> nodeList = new ArrayList<>();
        List<NcProgram> progList = new ArrayList<>();
        try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
             ZipFile zipFile = new ZipFile(channel)) {
            ZipArchiveEntry entry;
            Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
            while (entries.hasMoreElements()) {
                entry = entries.nextElement();
                String entryName = entry.getName();
                if (!entry.isDirectory()) {
                    if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
                        try (InputStream insJson = zipFile.getInputStream(entry)) {
                            String jsonStr = IoUtil.readToString(insJson);
                            JSONArray jsonArray = JSONArray.parseArray(jsonStr);
                            for(int i=0;i<jsonArray.size();i++){
                                JSONObject jsonObject = jsonArray.getJSONObject(i);
                                NcProgram d = new NcProgram();
                                d.setId(jsonObject.getLong("id"));
                                d.setName(jsonObject.getString("name"));
                                d.setCode(jsonObject.getString("code"));
                                d.setDescription(jsonObject.getString("description"));
                                d.setCategory(jsonObject.getString("category"));
                                d.setBindNcNodeId(jsonObject.getLong("bindNcNodeId"));
                                d.setIsLastEdition(jsonObject.getInteger("isLastEdition"));
                                d.setIsLocked(jsonObject.getInteger("isLocked"));
                                d.setIsTest(jsonObject.getInteger("isTest"));
                                d.setMachineCode(jsonObject.getString("machineCode"));
                                d.setNcNodeId(jsonObject.getLong("ncNodeId"));
                                d.setPartNo(jsonObject.getString("partNo"));
                                d.setProcessEdition(jsonObject.getString("processEdition"));
                                progList.add(d);
                            }
                        }
                    }else if(entryName.equals(NcProgramExportDNCService.NODE_JSON_FILE)){
                        try (InputStream insJson = zipFile.getInputStream(entry)) {
                            String jsonStr = IoUtil.readToString(insJson);
                            JSONArray jsonArray = JSONArray.parseArray(jsonStr);
                            for (int i = 0; i < jsonArray.size(); i++) {
                                JSONObject jsonObject = jsonArray.getJSONObject(i);
                                NcNode node = new NcNode();
                                node.setId(jsonObject.getLong("id"));
                                node.setName(jsonObject.getString("name"));
                                node.setDescription(jsonObject.getString("description"));
                                node.setNodeType(jsonObject.getString("nodeType"));
                                node.setProcessName(jsonObject.getString("processName"));
                                node.setPartNo(jsonObject.getString("partNo"));
                                node.setMachineCode(jsonObject.getString("machineCode"));
                                node.setParentId(jsonObject.getLong("parentId"));
                                node.setParentIds(jsonObject.getString("parentIds"));
                                node.setIsCured(jsonObject.getInteger("isCured"));
                                nodeList.add(node);
                            }
                        }
                    }
                }
            }
        }
        try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
             ZipFile zipFile = new ZipFile(channel)) {
            ZipArchiveEntry entry;
            Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
            while (entries.hasMoreElements()) {
                entry = entries.nextElement();
                String entryName = entry.getName();
                if (!entry.isDirectory() && !entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)) {
                    for(NcProgram prog:progList){
                        if(prog.getName().equals(entryName)){
                            try (InputStream ncFileStream = zipFile.getInputStream(entry)) {
                                BladeFile bfile = this.ossTemplate.putFile(prog.getName(),ncFileStream);
                                prog.setOssName(bfile.getName());
                                prog.setUrl(bfile.getLink());
                            }
                            break;
                        }
                    }
                }
            }
        }
        for(NcNode node:nodeList){
            NcNode nodeTemp = this.ncNodeService.getById(node.getId());
            if(nodeTemp == null){
                ncNodeService.save(node);
            }else{
                ncNodeService.updateById(node);
            }
        }
        for(NcProgram prog:progList){
            NcProgram ncTemp = ncProgramService.getById(prog.getId());
            if(ncTemp == null){
                ncProgramService.save(prog);
            }else{
                ncProgramService.updateById(prog);
            }
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -53,6 +53,7 @@
    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";
    /**
     * 分页查询
     * @param query 查询参数
@@ -92,6 +93,8 @@
            addDataJson(zipOut, programIdList);
        }
        os.close();
    }