yangys
2025-08-02 e1c6d113abb7c36c48573009e09d30a42513417a
程序上传接口
已添加5个文件
已修改5个文件
290 ■■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/vo/ProduceDivisionViewVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/FlowProgramFile.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramFileMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
@@ -39,11 +39,6 @@
     * @return åˆ†é¡µæ•°æ®
     */
    public IPage<ProduceDivisionViewVO> pageQuery(String name, Query query) {
        LambdaQueryWrapper<ProduceDivision> queryWrapper = new LambdaQueryWrapper<>();
        return this.getBaseMapper().pageQuery(Condition.getPage(query),name);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/vo/ProduceDivisionViewVO.java
@@ -22,10 +22,9 @@
    @Schema(description = "编制工艺员id")
    private Long programmerId;
    @Schema(description = "编制工艺员姓名")
    private String programmerName;
    /**
     * æ ¡å¯¹å·¥è‰ºå‘˜è´¦å·
     */
    @Schema(description = "校对工艺员id")
    private Long checkerId;
    @Schema(description = "校对工艺员姓名")
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java
@@ -3,4 +3,28 @@
public class FlowContants {
    public static final String PROGRAM_IDS_KEY = "programids";
    /**
     * å›¾å·
     */
    public static final String DRAWING_NO = "drawingNo";
    /**
     * å·¥åºå·
     */
    public static final String PROCESS_NO = "processNo";
    /**
     * å›¾å·ç‰ˆæ¬¡
     */
    public static final String DRAWING_NO_EDITION = "drawingNoEdition";
    /**
     * å·¥åºç‰ˆæ¬¡
     */
    public static final String PROCESS_EDITION = "processEdition";
    /*
    æœºåºŠç¼–码
     */
    public static final String MACHINE_CODE = "machineCode";
    /**
     * å·¥è‰ºç‰ˆæ¬¡
     */
    public static final String CRAFT_EDITION = "craftEdition";
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java
@@ -10,6 +10,7 @@
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.vo.ApproveRecordVO;
import org.springblade.mdm.flow.vo.ProgramUploadVO;
import org.springblade.mdm.flow.vo.TaskTraceVO;
@@ -39,7 +40,7 @@
    private final NcProgramService ncProgramService;
    private final ProcessProgRefService ncProcessProgRefService;
    private final ApproveRecordService approveRecordService;
    private final FlowProgramFileService flowProgramFileService;
    @PostMapping("/ncupload")
    @Operation(summary = "上传程序文件", description = "上传程序文件")
@@ -53,11 +54,17 @@
        return R.success();
    }
    @GetMapping("/list-by-node")
    @Operation(summary = "节点程序文件列表", description = "某节点内的程序列表,仅‘程序包’字典值60")
    public R<List<NcProgramVO>> listByNode(@Parameter(description="所属节点ID")@RequestParam Long nodeId) {
        return R.data(ncProgramService.listByNode(nodeId));
    }
    @PostMapping("/remove")
    @Operation(summary = "删除临时程序文件", description = "")
    public R<Boolean> removeFile(Long id) {
        try {
            flowProgramFileService.removeById(id);
        }catch(Exception e) {
            log.error("删除文件失败",e);
            return R.fail(e.getMessage());
@@ -69,7 +76,7 @@
    @Operation(summary = "获取文件内容", description = "仅限文本格式的内容,二进制文件将返回空串")
    public R<String> fileContent(@Parameter(description = "程序文件id") Long id) {
        try {
            return R.data(ncProgramService.getFileContent(id));
            return R.data(flowProgramFileService.getFileContent(id));
        }catch(Exception e) {
            log.error("删除文件失败",e);
            return R.fail(e.getMessage());
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/FlowProgramFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package org.springblade.mdm.flow.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springblade.core.mp.base.BizEntity;
import java.util.Date;
/**
 * æµç¨‹ç¨‹åºæ–‡ä»¶
 */
@Setter
@Getter
@TableName("mdm_flow_program_file")
public class FlowProgramFile extends BizEntity {
    private String processInstanceId;
    /**
     * æ–‡ä»¶å ç¬¦åˆæ ¼å¼çš„æ–‡ä»¶åï¼Œæ£€æŸ¥æ–‡ä»¶åéœ€è¦æŽ’除扩展名
     */
    private String name;
    /**
     * oss文件名
     */
    private String ossName;
    /**
     * oss文件名
     */
    private String programName;
    /*
    @Schema(description = "产品型号")
    private String productModel;
    private String drawingNo;
    @Schema(description = "工艺版次")
    private String craftEdition;
    @Schema(description = "工序号")
    private String processNo;
    private String machineCode;
*/
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package org.springblade.mdm.flow.mapper;
import org.springblade.core.mp.mapper.BladeMapper;
import org.springblade.mdm.flow.entity.ApproveRecord;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.vo.ApproveRecordVO;
import java.util.List;
public interface FlowProgramFileMapper extends BladeMapper<FlowProgramFile> {
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.mdm.flow.mapper.FlowProgramFileMapper">
    <resultMap id="BaseResultMap" type="org.springblade.mdm.flow.entity.FlowProgramFile">
        <id column="id" property="id"/>
        <result column="status" property="status"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <result column="is_deleted" property="isDeleted"/>
    </resultMap>
    <sql id="all_columns">id,tenant_id,nc_program_id,process_instances_id,operate_time,operate_result,user_id,user_nickname,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
    <select id="listByNcProgramId" resultType="org.springblade.mdm.flow.vo.ApproveRecordVO">
        select <include refid="all_columns"/> FROM mdm_approve_record
        WHERE  nc_program_id = ${ncProgramId} and is_deleted = 0 order by create_time desc
    </select>
</mapper>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
@@ -3,7 +3,10 @@
import lombok.AllArgsConstructor;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springframework.stereotype.Service;
import java.util.Map;
@AllArgsConstructor
@Service
@@ -23,4 +26,26 @@
        return processInstance.getProcessDefinitionKey();
    }
    /**
     * ä»Žæµç¨‹å˜é‡èŽ·å–å‘èµ·æµç¨‹çš„æ ‘å½¢
     * @param processInstanceId
     * @return
     */
    public FlowProgramProperties getProgramProperties(String processInstanceId){
        FlowProgramProperties programProperties = new FlowProgramProperties();
        Map<String, Object> vars = runtimeService.getVariables(processInstanceId);
        programProperties.setDrawingNo(String.valueOf(vars.get(FlowContants.DRAWING_NO)));
        programProperties.setDrawingNoEdition(String.valueOf(vars.get(FlowContants.DRAWING_NO_EDITION)));
        programProperties.setProcessNo(String.valueOf(vars.get(FlowContants.PROCESS_NO)));
        programProperties.setProcessEdition(String.valueOf(vars.get(FlowContants.PROCESS_EDITION)));//工序版次
        programProperties.setMachineCode(String.valueOf(vars.get(FlowContants.MACHINE_CODE)));
        //数据处理名称为版次以前,零件号加工序号:YZL4-1100-01-50 é›¶ç»„件号:YZL4-1100-01 å·¥åºå· 50
        programProperties.setCraftEdition(String.valueOf(vars.get(FlowContants.CRAFT_EDITION)));
        return programProperties;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package org.springblade.mdm.flow.service;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.RuntimeService;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.mapper.FlowProgramFileMapper;
import org.springblade.mdm.flow.vo.ProgramUploadVO;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.service.ProcessProgRefService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
 * æµç¨‹ç¨‹åºå¤„理,包括上传,查询展示
 *
 * @author yangys
 */
@Slf4j
@Service
@AllArgsConstructor
public class FlowProgramFileService extends BizServiceImpl<FlowProgramFileMapper, FlowProgramFile> {
    private final OssTemplate ossTemplate;
    private final RuntimeService runtimeService;
    private final FlowCommonService flowCommonService;
    public void uploadFlowProgramFile(ProgramUploadVO uploadVO) {
        Map<String, Object> vars = runtimeService.getVariables(uploadVO.getProcessInstanceId());
        checkFilenames(uploadVO.getFiles(),flowCommonService.getProgramProperties(uploadVO.getProcessInstanceId()));
        //
        //BladeFile bfile = ossTemplate.putFile(uploadVO.getFile());
        //String link = bfile.getLink();
        //保存profame
        /*
        NcProgram prog = new NcProgram();
        prog.setCode(generageCode());
        prog.setName(file.getOriginalFilename());
        prog.setNcNodeId(uploadVO.getNodeId());
        prog.setOssName(bfile.getName());
        prog.setDrawingNo(uploadVO.getDrawingNo());
        prog.setProcessEdition(uploadVO.getProcessEdition());
        prog.setIsLastEdition(1);
         */
    }
    public void checkFilenames(MultipartFile[] files,FlowProgramProperties programProperties){
        for (MultipartFile file : files){
            checkFilename(file.getOriginalFilename(),programProperties);
        }
    }
    void checkFilename(String filename,FlowProgramProperties programProperties){
        //程序名称:零件号加工序号,文件名应该以此开头
        String expectedProgramName = programProperties.getDrawingNo()+"-"+programProperties.getProcessNo();
        if(!StringUtils.startsWith(filename,expectedProgramName)){
            throw new ServiceException("程序文件名不合法,应为:"+expectedProgramName+"-"+programProperties.getCraftEdition()+"-[段数]-[段号].[文件扩展名]");
        }
    }
    /**
     * èŽ·å–æ–‡ä»¶å†…å®¹
     * @param id
     * @return
     */
    public String getFileContent(Long id) {
        String result  ="";
        FlowProgramFile programFile = this.getById(id);
        //if(prog.getIsTextFile()!=null && programFile.getIsTextFile()){
            String fileName = programFile.getOssName();
            try (InputStream inputStream = ossTemplate.statFileStream(fileName)) {
                result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        //}else{
        //    result = "非文本格式文件";
        //}
        return result;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package org.springblade.mdm.flow.service;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
/**
 * æ´¾å·¥æµç¨‹çš„程序树形
 */
@Data
public class FlowProgramProperties {
    @Schema(description = "零组件/图号")
    private String drawingNo;
    @Schema(description = "图号版次/设计版次")
    private String drawingNoEdition;
    @Schema(description = "工序号")
    private String processNo;
    @Schema(description = "工序名称")
    private String processName;
    @Schema(description = "产品型号")
    private String productModel;
    @Schema(description = "工序版次")
    private String processEdition;
    @Schema(description = "工艺版次")
    private String craftEdition;
    @Schema(description = "设备编号")
    private String machineCode;
    @Schema(description = "设备型号")
    private String machineMode;
    @Schema(description = "计划锁定时间(天)")
    private Integer planLockDays;
    @Schema(description = "计划开工时间")
    private LocalDate planStartTime;
}