yangys
2025-07-08 ef4a26bca3552aed5865e5ef3ef2804b8509d31b
增加param调用接口
已修改7个文件
已添加1个文件
333 ■■■■■ 文件已修改
blade-service/blade-mdm/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/pom.xml
@@ -44,6 +44,10 @@
        </dependency>
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-system-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-flow-api</artifactId>
        </dependency>
        <!-- å·¥ä½œæµ -->
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -1,6 +1,7 @@
package org.springblade.mdm.flow.excution;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.IdentityService;
import org.flowable.engine.runtime.ProcessInstance;
@@ -11,7 +12,9 @@
import org.springblade.flow.core.utils.TaskUtil;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.entity.ProcessProgRef;
import org.springblade.mdm.program.service.NcProgramService;
import org.springblade.mdm.program.service.ProcessProgRefService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.flowable.engine.RuntimeService;
@@ -19,20 +22,23 @@
import java.util.List;
import java.util.Map;
@AllArgsConstructor
@Service("startDispatcher")
public class StartDispatcher  {
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private AutoAssignUsersService autoAssignUsersService;
    @Autowired
    private IdentityService identityService;
    private final RuntimeService runtimeService;
    private final AutoAssignUsersService autoAssignUsersService;
    @Autowired
    private NcProgramService ncProgramService;
    private final IdentityService identityService;
    private final ProcessProgRefService processProgRefService;
    private final NcProgramService ncProgramService;
    private static final String PROCESS_KEY = "dispatch";
    /**
     * å¯åŠ¨æ´¾å·¥æµç¨‹
     * @param startVO
     */
    public void start(TaskAssignVO startVO){
        Map<String,Object> preAssignee = autoAssignUsersService.autoAssignUsers(startVO.getProducePlanId());
@@ -51,22 +57,27 @@
        vars.put("partNoEdition",startVO.getPartNoEdition());
        vars.put("planLockDays",startVO.getPlanLockDays());
        vars.put("productModel",startVO.getProductModel());
        //零组件代码
        String partNo = generatePartNo(startVO);
        vars.put("partNo",partNo);
        List<NcProgram> curedNcProgram = ncProgramService.getCuredNcProgram(partNo,startVO.getMachineCode());
        //vars.put("curedNcProgram",curedNcProgram);
        List<NcProgram> curedNcPrograms = ncProgramService.getCuredNcProgram(startVO.getPartNo(),startVO.getMachineCode());
        //设置是否有固化程序标记
        vars.put("hasCuredProgram",!curedNcProgram.isEmpty() ? "Y":"N");
        vars.put("hasCuredProgram",!curedNcPrograms.isEmpty() ? "Y":"N");
        String businessKey = "0";//业务表key
        identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//设置流程发起人
        ProcessInstance pinst = runtimeService.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars);
        int a=1;
        //如果有已固化程序,则将程序id插入流畅关联表
        for(NcProgram ncProgram : curedNcPrograms){
            ProcessProgRef ref = new ProcessProgRef();
            ref.setProcessInstanceId(pinst.getId());
            ref.setNcProgramId(ncProgram.getId());
            processProgRefService.save(ref);
        }
        //log.info()
    }
@@ -76,6 +87,7 @@
     * @param startVO
     * @return
     */
    /*
    String generatePartNo(TaskAssignVO startVO){
        //TODO è¿™ä¸ªæ ¼å¼æœªç¡®å®šï¼Œéœ€è¦ç¡®è®¤
        return String.format("%s-%s-%s-%s-%s-%s",
@@ -85,5 +97,5 @@
            startVO.getProcessName(),
            startVO.getCraftEdition(),
            startVO.getProcessEdition());
    }
    }*/
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package org.springblade.mdm.program.controller;
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.program.service.NcProgramExchangeService;
import org.springblade.mdm.program.vo.DncSendBackData;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.feign.IUserClient;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * æµç¨‹ç®¡ç†æŽ¥å£
 *
 * @author Chill
 */
@NonDS
@RestController
@RequestMapping("/system/param/")
@AllArgsConstructor
@Tag(name = "DNC导入", description = "DNC导入接口")
@Slf4j
public class MdmParamController {
    private final ISysClient sysClient;
    @GetMapping("/getValue")
    @ApiOperationSupport(order = 2)
    @Operation(summary = "获取参数值")
    public R<String> detail(@Parameter(description = "参数Key") @RequestParam String paramKey) {
        try {
            return sysClient.getParamValue(paramKey);
        }catch (Exception e){
            log.error("入库错误",e);
            return R.fail(e.getMessage());
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
@@ -35,15 +35,16 @@
    </select>
    <sql id="all_columns">id,tenant_id,name,parent_id,node_type,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
    <sql id="all_columns_n">n.id,n.tenant_id,n.name,n.parent_id,n.node_type,n.status,n.create_dept,n.is_deleted,n.create_time,n.create_user,n.update_time,n.update_user</sql>
    <select id="lazyList" resultType="org.springblade.mdm.program.vo.NcNodeVO">
        select <include refid="all_columns"/>,(
        select <include refid="all_columns_n"/>,u.name create_user_name,(
        SELECT
        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
        FROM
        mdm_nc_node
        WHERE
        parent_id = n.id and is_deleted = 0
        ) AS "has_children" from mdm_nc_node n where is_deleted=0 and parent_id=#{parentId}
        parent_id = id and is_deleted = 0
        ) AS "has_children" from mdm_nc_node n left join blade_user u on n.create_user=u.id where n.is_deleted=0 and n.parent_id=#{parentId}
    </select>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -9,6 +9,7 @@
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
import org.springblade.core.mp.base.BizEntity;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
@@ -17,6 +18,8 @@
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.entity.ApproveRecord;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.CureFlowService;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgram;
@@ -48,6 +51,7 @@
    private final CureFlowService cureFlowService;
    private final NcProgramService ncProgramService;
    private final NcNodeService ncNodeService;
    private final ApproveRecordService approveRecordService;
    private final BladeRedis bladeRedis;
    private final OssTemplate ossTemplate;
@@ -214,6 +218,8 @@
        List<NcNode> nodeList = new ArrayList<>();
        List<NcProgram> progList = new ArrayList<>();
        List<ApproveRecord> recordList = new ArrayList<>();
        try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
             ZipFile zipFile = new ZipFile(channel)) {
@@ -249,6 +255,8 @@
                                d.setPartNo(jsonObject.getString("partNo"));
                                d.setProcessEdition(jsonObject.getString("processEdition"));
                                setBaseProperties(d,jsonObject);
                                progList.add(d);
                            }
@@ -271,7 +279,27 @@
                                node.setParentIds(jsonObject.getString("parentIds"));
                                node.setIsCured(jsonObject.getInteger("isCured"));
                                setBaseProperties(node,jsonObject);
                                nodeList.add(node);
                            }
                        }
                    }else if(entryName.equals(NcProgramExportDNCService.APPROVE_RECORD_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);
                                ApproveRecord record = new ApproveRecord();
                                record.setId(jsonObject.getLong("id"));
                                record.setNcProgramId(jsonObject.getLong("ncProgramId"));
                                record.setUserId(jsonObject.getLong("userId"));
                                record.setUserNickname(jsonObject.getString("userNickname"));
                                record.setOperateResult(jsonObject.getString("operateResult"));
                                record.setOperateTime(jsonObject.getDate("operateTime"));
                                setBaseProperties(record,jsonObject);
                                recordList.add(record);
                            }
                        }
                    }
@@ -327,5 +355,22 @@
            }
        }
        for(ApproveRecord record:recordList) {
            ApproveRecord recordTemp = this.approveRecordService.getById(record.getId());
            if (recordTemp == null) {
                approveRecordService.save(record);
            } else {
                approveRecordService.updateById(record);
            }
        }
    }
    void setBaseProperties(BizEntity entity,JSONObject jsonObject){
        entity.setCreateTime(jsonObject.getDate("createTime"));
        entity.setUpdateTime(jsonObject.getDate("updateTime"));
        entity.setStatus(jsonObject.getInteger("status"));
        entity.setCreateUser(jsonObject.getLong("createUser"));
        entity.setUpdateUser(jsonObject.getLong("updateUser"));
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
@@ -12,13 +12,20 @@
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
import org.apache.commons.io.IOUtils;
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.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.entity.ApproveRecord;
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;
@@ -32,6 +39,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.*;
@@ -46,6 +54,13 @@
public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
    private final CureFlowService cureFlowService;
    private final NcProgramService ncProgramService;
    private final NcNodeService ncNodeService;
    private final OssTemplate ossTemplate;
    private final BladeRedis bladeRedis;
    private String getFileKey(){
        return "dncexpfile-"+ AuthUtil.getUserId();
    }
    /**
     * dnc回传文件上传(解析后保存入upload表)
     * @param file DNC回传文件
@@ -54,13 +69,15 @@
    public List<DncSendBackData> dncSendBackUpload(MultipartFile file) {
        List<DncSendBackData> list;
        try {
            //String fileName = file.getOriginalFilename();
            BladeFile bfile = ossTemplate.putFile(file);//上传,供后续入库使用
            //设置一个缓存,2小时过期
            bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2));
            //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
            InputStream zipFileInputStream = file.getInputStream();//test
            byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
            list = parseDncZipFromByteArray(bytes);
        } catch (IOException e) {
            log.error("上传dnc回传文件失败",e);
@@ -138,11 +155,6 @@
                        }
                    }
                    System.out.println("文件名: " + entry.getName());
                    System.out.println("大小: " + entry.getSize());
                    // è¯»å–文件内容到字节数组
                    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                }
@@ -164,13 +176,13 @@
     * @param ids id列表逗号分隔
     * @return
     */
    public void dncFileAccept(String ids) {
    public void dncFileAccept(String ids) throws IOException {
        List<Long> idList = Func.toLongList(ids);
        List<NcProgram> progList = ncProgramService.listByIds(idList);
        //
        NcProgramExchange exchange;
        //NcProgram program;
        //NcNode programNode;
        String pkgFileName = bladeRedis.get(getFileKey());
        updateProgramData(pkgFileName,idList);
        List<NcProgram> progList = ncProgramService.listByIds(idList);
        for(NcProgram prog:progList){
            exchange = new NcProgramExchange();
            exchange.setName(prog.getName());
@@ -182,6 +194,143 @@
        }
        cureFlowService.startCure(progList);
    }
    void updateProgramData(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()) {
                    continue;
                }
                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 program = new NcProgram();
                            program.setId(jsonObject.getLong("id"));
                            if(!idList.contains(program.getId())){//不是选定入库的
                                continue;
                            }
                            program.setName(jsonObject.getString("name"));
                            program.setCode(jsonObject.getString("code"));
                            program.setDescription(jsonObject.getString("description"));
                            program.setCategory(jsonObject.getString("category"));
                            program.setBindNcNodeId(jsonObject.getLong("bindNcNodeId"));
                            program.setIsLastEdition(jsonObject.getInteger("isLastEdition"));
                            program.setIsLocked(jsonObject.getInteger("isLocked"));
                            program.setIsTest(jsonObject.getInteger("isTest"));
                            program.setMachineCode(jsonObject.getString("machineCode"));
                            program.setNcNodeId(jsonObject.getLong("ncNodeId"));
                            program.setPartNo(jsonObject.getString("partNo"));
                            program.setProcessEdition(jsonObject.getString("processEdition"));
                            setBaseProperties(program,jsonObject);
                            progList.add(program);
                        }
                    }
                }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"));
                            setBaseProperties(node,jsonObject);
                            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() && !NcProgramExportDNCService.isDataFile(entryName)) {
                    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);
            }
        }
    }
    void setBaseProperties(BizEntity entity, JSONObject jsonObject){
        entity.setCreateTime(jsonObject.getDate("createTime"));
        entity.setUpdateTime(jsonObject.getDate("updateTime"));
        entity.setStatus(jsonObject.getInteger("status"));
        entity.setCreateUser(jsonObject.getLong("createUser"));
        entity.setUpdateUser(jsonObject.getLong("updateUser"));
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -46,6 +46,7 @@
@Service
@AllArgsConstructor
public class NcProgramExportDNCService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
    private final NcProgramService progService;
    private final NcProgramApprovedService approvedService;
    private final ApproveRecordService approveRecordService;
@@ -54,6 +55,16 @@
    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 filename æ–‡ä»¶åç§°
     * @return
     */
    public static boolean isDataFile(String filename){
        return StringUtils.equals(filename, PROGRAM_JSON_FILE) || StringUtils.equals(filename, NODE_JSON_FILE) || StringUtils.equals(filename, APPROVE_RECORD_JSON_FILE);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param query æŸ¥è¯¢å‚æ•°
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
@@ -22,4 +22,6 @@
    private String description;
    @Schema(description = "备注")
    private String remark;
    @Schema(description = "创建用户名称")
    private String createUserName;
}