已修改21个文件
已删除1个文件
已添加14个文件
788 ■■■■ 文件已修改
blade-service/blade-mdm/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/ProgramEmptyUpgradeProcessEdtionTask.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramApproved.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProcessProgRef.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProgramSeq.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProgramSeqMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProgramSeqMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeProgramVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncPageVO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncQueryVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramUploadVO.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramVO.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/sql/mdm/mdm.mysql.all.create.sql 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/pom.xml
@@ -75,6 +75,11 @@
            <artifactId>tika-core</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!--<dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-starter-transaction</artifactId>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
@@ -4,6 +4,7 @@
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.TaskService;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@@ -12,6 +13,7 @@
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.mdm.flow.excution.StartDispatcher;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.service.ProcessProgRefService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -30,20 +32,21 @@
    private StartDispatcher dispatcher;
    @Autowired
    private TaskService taskService;
    @Autowired
    private ProcessProgRefService processProgRefService;
    /**
     * æ–°å¢ž
     */
    @PostMapping("/start")
    @Operation(summary = "任务计划(派工流程)", description = "启动派工流程")
    public R<Boolean> save(@RequestBody TaskAssignVO startVO) {
    public R<Boolean> start(@RequestBody TaskAssignVO startVO) {
        dispatcher.start(startVO);
        return R.status(true);
    }
    @Operation(summary = "完成任务", description = "流向下一个节点")
    @PostMapping("completeTask")
    public R<Void> completeTask(String taskId, String processInstanceId, String comment, @Parameter(name = "variables", description = "任务变量") @RequestBody Map<String, Object> variables) {
    public R<Void> completeTask(String taskId, String processInstanceId, String comment,@Parameter(description = "对应的程序id,逗号分隔") String programIds, @Parameter(name = "variables", description = "任务变量") @RequestBody Map<String, Object> variables) {
        // å¢žåŠ è¯„è®º
        if (StringUtil.isNoneBlank(processInstanceId, comment)) {
            taskService.addComment(taskId, processInstanceId, comment);
@@ -52,6 +55,10 @@
        if (Func.isEmpty(variables)) {
            variables = Kv.create();
        }
        if(StringUtils.isNotEmpty(programIds)) {
            processProgRefService.addRelations(processInstanceId,Func.toLongList(programIds));
        }
        //加入审批用户
        variables.put("approveUserNickName",AuthUtil.getNickName());
        if(variables.containsKey("assignee")){
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package org.springblade.mdm.flow.excution;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.history.HistoricProcessInstance;
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.entity.ProcessProgRef;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.program.service.ProcessProgRefService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * æ´¾å·¥å®¡æ‰¹å®Œæˆæ‰§è¡Œçš„事件,功能:插入审批表数据
 */
@Slf4j
@Component("dispatchFinishListener")
public class DispatchFinishListener {
    @Autowired
    RuntimeService runtimeService;
    @Autowired
    ProcessProgRefService processProgRefService;
    @Autowired
    NcProgramApprovedService approvedService;
    public void handle(DelegateExecution execution) {
        String instId = execution.getProcessInstanceId();
        log.info("{},instid={}" , runtimeService,instId);
        //将关联表中的数据插入审批表
        LambdaQueryWrapper<ProcessProgRef> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ProcessProgRef::getProcessInstanceId, instId);
        List<ProcessProgRef> reflist = processProgRefService.list(wrapper);
        for (ProcessProgRef ref : reflist) {
            NcProgramApproved approved = new NcProgramApproved();
            approved.setNcProgramId(ref.getNcProgramId());
            approvedService.save(approved);
        }
        // æ‰§è¡Œä¸šåŠ¡é€»è¾‘
        System.out.println("流程已完成");
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -16,6 +16,7 @@
import org.springframework.stereotype.Service;
import org.flowable.engine.RuntimeService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service("startDispatcher")
@@ -46,19 +47,19 @@
        vars.put("craftEdition",startVO.getCraftEdition());
        vars.put("planStartTime",startVO.getPlanStartTime());
        vars.put("drawingNo",startVO.getDrawingNo());
        vars.put("drawingNoEdition",startVO.getDrawingNoEdition());
        vars.put("partNo",startVO.getPartNo());
        vars.put("partNoEdition",startVO.getPartNoEdition());
        vars.put("planLockDays",startVO.getPlanLockDays());
        //零组件代码
        String partNo = generatePartNo(startVO);
        vars.put("partNo",partNo);
        NcProgram curedNcProgram = ncProgramService.getCuredNcProgram(partNo,startVO.getMachineCode());
        vars.put("curedNcProgram",curedNcProgram);
        List<NcProgram> curedNcProgram = ncProgramService.getCuredNcProgram(partNo,startVO.getMachineCode());
        //vars.put("curedNcProgram",curedNcProgram);
        //设置是否有固化程序标记
        vars.put("hasCuredProgram",curedNcProgram != null ? "Y":"N");
        vars.put("hasCuredProgram",!curedNcProgram.isEmpty() ? "Y":"N");
        String businessKey = "0";//业务表key
@@ -78,8 +79,8 @@
    String generatePartNo(TaskAssignVO startVO){
        //TODO è¿™ä¸ªæ ¼å¼æœªç¡®å®šï¼Œéœ€è¦ç¡®è®¤
        return String.format("%s-%s-%s-%s-%s-%s",
            startVO.getDrawingNo(),
            startVO.getDrawingNoEdition(),
            startVO.getPartNo(),
            startVO.getPartNoEdition(),
            startVO.getProcessNo(),
            startVO.getProcessName(),
            startVO.getCraftEdition(),
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
@@ -67,20 +67,4 @@
        //log.info()
    }
    /**
     * ç”Ÿæˆé›¶ç»„件编号
     * å›¾å·ã€å›¾å·ç‰ˆæ¬¡ã€å·¥åºå·ã€å·¥åºåç§°ã€å·¥è‰ºç‰ˆæ¬¡ã€å·¥åºç‰ˆæ¬¡ ç»„合起来获得零组件号
     * @param startVO
     * @return
     */
    String generatePartNo(TaskAssignVO startVO){
        //TODO è¿™ä¸ªæ ¼å¼æœªç¡®å®šï¼Œéœ€è¦ç¡®è®¤
        return String.format("%s-%s-%s-%s-%s-%s",
            startVO.getDrawingNo(),
            startVO.getDrawingNoEdition(),
            startVO.getProcessNo(),
            startVO.getProcessName(),
            startVO.getCraftEdition(),
            startVO.getProcessEdition());
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/ProgramEmptyUpgradeProcessEdtionTask.java
ÎļþÒÑɾ³ý
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java
@@ -9,10 +9,10 @@
@Data
@Schema(description = "任务计划")
public class TaskAssignVO {
    @Schema(description = "图号")
    private String drawingNo;
    @Schema(description = "图号版次")
    private String drawingNoEdition;
    @Schema(description = "零组件/图号")
    private String partNo;
    @Schema(description = "图号版次/设计版次")
    private String partNoEdition;
    @Schema(description = "工序号")
    private String processNo;
    @Schema(description = "工序名称")
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
@@ -69,13 +69,13 @@
        return R.data(list);
    }
    /**
     * åˆ†é¡µ
     */
    /*
    @Operation(summary = "程序分页查询", description = "用于在编制节点选择流程对应的程序")
    @GetMapping("/programpickpage")
    public R<IPage<NcNodeProgramVO>> page(NcNodeProgramQueryVO query) {
        IPage<NcNodeProgramVO> pages = ncNodeService.programPageQuery(query);
        return R.data(pages);
    }
*/
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
@@ -1,6 +1,7 @@
package org.springblade.mdm.program.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -10,6 +11,8 @@
import org.springblade.core.tool.api.R;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.service.NcProgramService;
import org.springblade.mdm.program.service.ProcessProgRefService;
import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
import org.springblade.mdm.program.vo.NcProgramUploadVO;
import org.springblade.mdm.program.vo.NcProgramVO;
import org.springframework.web.bind.annotation.*;
@@ -31,7 +34,7 @@
public class NcProgramController {
    private final NcProgramService ncProgramService;
    private final ProcessProgRefService ncProcessProgRefService;
    @PostMapping("/upload")
    @Operation(summary = "上传文件", description = "上传程序/附件文件")
    public R<Boolean> upload(NcProgramUploadVO uploadVO) {
@@ -69,4 +72,24 @@
    public R<List<NcProgramVO>> listByNode(@Parameter(description="所属节点ID")@RequestParam Long nodeId) {
        return R.data(ncProgramService.listByNode(nodeId));
    }
    @PostMapping("/upgrade-process-edition")
    @Operation(summary = "升版", description = "升级工序版次")
    public R<Boolean> upgradeProcessEdition(Long id,String newProcessEdition ) {
        ncProgramService.upgradeProcessEdition(id,newProcessEdition);
        return R.<Boolean>status(true);
    }
    @Operation(summary = "程序分页查询", description = "用于在编制节点选择流程对应的程序")
    @GetMapping("/programpickpage")
    public R<IPage<NcProgramVO>> page(NcNodeProgramQueryVO query) {
        IPage<NcProgramVO> pages = ncProgramService.pageQuery(query);
        return R.data(pages);
    }
    @GetMapping("/list-by-process")
    @Operation(summary = "节点程序文件列表", description = "某节点内的程序列表,仅‘程序包’字典值60")
    public R<List<NcProgramVO>> listByProcess(@Parameter(description="所属节点ID")@RequestParam String processInstanceId) {
        return R.data(ncProcessProgRefService.listByProcess(processInstanceId));
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
@@ -1,13 +1,21 @@
package org.springblade.mdm.program.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
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.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.program.service.NcProgramService;
import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
import org.springblade.mdm.program.vo.NcProgramExportDncPageVO;
import org.springblade.mdm.program.vo.NcProgramExportDncQueryVO;
import org.springblade.mdm.program.vo.NcProgramVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -21,11 +29,18 @@
@RestController
@RequestMapping("/program/exchange")
@AllArgsConstructor
@Tag(name = "导出DNC", description = "涉密网沉痼导出DNC")
@Tag(name = "导出DNC", description = "涉密网程序导出DNC")
@Slf4j
public class NcProgramExportDNCController {
    private final NcProgramService ncProgramService;
    private final NcProgramApprovedService ncProgramApprovedService;
    @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));
    }
    @PostMapping("/export-dnc")
    @Operation(summary = "数控程序导出dnc", description = "数控程序导出到工控网")
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java
@@ -23,14 +23,8 @@
     * è®¾å¤‡ç¼–号
     */
    private String machineCode;
    /**
     * å›¾å·
     */
    private String drawingNo;
    /**
     * å›¾å·ç‰ˆæ¬¡
     */
    private String drawingNoEdition;
    /**
     * å·¥åºï¼Œå¦‚“精铣”
@@ -47,9 +41,13 @@
     */
    private String craftEdition;
    /**
     * é›¶ç»„件号
     * é›¶ç»„件号/图号
     */
    private String partNo;
    /**
     * å›¾å·ç‰ˆæ¬¡
     */
    private String partNoEdition;
    /**
     * æ˜¯å¦å›ºåŒ–
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
@@ -25,10 +25,7 @@
     * æ‰€å±žèŠ‚ç‚¹id,必须未“程序包名"的节点
     */
    private long ncNodeId;
    /**
     * ç¨‹åºåŒ…名
      */
    //private String packageName;
    /**
     * æ–‡ä»¶åœ°å€
     */
@@ -42,10 +39,7 @@
     * æ˜¯å¦ä¸ºæ–‡æœ¬ç±»åž‹
     */
    private Boolean isTextFile;
    /**
     * å›¾å·
     */
    private String drawingNo;
    /**
     * å·¥åºï¼Œå¦‚“精铣”
     */
@@ -59,14 +53,18 @@
     */
    private String machineCode;
    /**
     * é›¶ç»„件号
     * é›¶ç»„件号/图号
     */
    //private String partNo;
    private String partNo;
    /**
     * æè¿°
     */
    private String description;
    /**
     * æ˜¯å¦å›ºåŒ–
     */
    //private Integer isCured;
    private Integer isCured;
    /**
     * è¿‡æœŸæ—¥æœŸ
     */
@@ -74,15 +72,19 @@
    /**
     * å·¥åºç‰ˆæ¬¡
     */
    //private String processEdition;
    private String processEdition;
    /**
     * æ˜¯å¦æœ€æ–°ç‰ˆæ¬¡ï¼Œ1:最新版次;0:历史版次
     */
    //private Integer isLastEdition;
    private Integer isLastEdition = 1;
    /**
     * æ˜¯å¦é”å®š
     */
    private Integer isLocked;
    private Integer isLocked = 0;
    /**
     * æ˜¯å¦æµ‹è¯•程序
     */
    private Integer isTest = 0;
    /**
     * ä»»åŠ¡åˆ†æ´¾æ—¶é—´
     */
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramApproved.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package org.springblade.mdm.program.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import org.springblade.core.mp.base.BizEntity;
import java.time.LocalDateTime;
/**
 * æ•°æŽ§ç¨‹åºå®¡æ‰¹è¡¨
 */
@Setter
@Getter
@TableName("mdm_nc_program_approved")
public class NcProgramApproved extends BizEntity {
    /*
     * æ‰€å±žèŠ‚ç‚¹id,必须未“程序包名"的节点
     */
    private long ncProgramId;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProcessProgRef.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package org.springblade.mdm.program.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import org.springblade.core.mp.base.BizEntity;
import java.time.LocalDateTime;
@Setter
@Getter
@TableName("mdm_process_prog_ref")
public class ProcessProgRef extends BizEntity {
    /**
     * æ–‡ä»¶å
     */
    private String processInstanceId;
    /**
     * å¯¹è±¡å­˜å‚¨ä¸­çš„名称
     */
    private Long ncProgramId;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProgramSeq.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.springblade.mdm.program.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import org.springblade.core.mp.base.BizEntity;
import java.time.LocalDate;
import java.util.Date;
@Setter
@Getter
@TableName("mdm_program_seq")
public class ProgramSeq {
    private long id;
    private Date createTime;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java
@@ -14,7 +14,7 @@
public interface NcNodeMapper extends BladeMapper<NcNode> {
    List<NcNodeVO> lazyList(Long parentId);
    IPage<NcNodeProgramVO> programPageQuery(@Param("page")IPage<NcNodeProgramVO> page, @Param("query") NcNodeProgramQueryVO query);
    /**
     * æ ¹æ®åç§°èŽ·å–æœ€æ–°çš„ç¨‹åºåŒ…èŠ‚ç‚¹
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
@@ -24,7 +24,7 @@
    <!--    <select id="parentTree" resultMap="treeNodeResultMap">-->
<!--        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict where is_deleted = 0 and parent_id = 0-->
<!--    </select>-->
    <sql id="prog_all_columns">id,tenant_id,nc_node_id,code,name,package_name,machine_code,part_no,is_cured,
    <sql id="prog_all_columns">id,tenant_id,nc_node_id,code,name,machine_code,part_no,is_cured,
  expire_date,process_edition,is_last_edition,is_locked,task_assign_time,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
    <select id="getCuredNcProgram" resultMap="BaseResultMap">
        select <include refid="prog_all_columns"/> from mdm_nc_program
@@ -45,14 +45,7 @@
        parent_id = n.id and is_deleted = 0
        ) AS "has_children" from mdm_nc_node n where is_deleted=0 and parent_id=#{parentId}
    </select>
    <select id="programPageQuery" resultType="org.springblade.mdm.program.vo.NcNodeProgramVO">
        select id,parent_id,machine_code,drawing_no,drawing_no_edition,part_no,process_name,craft_edition from mdm_nc_node n
        <where>
            <if test="query.name!=null and query.name!=''">
                and n.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
            </if>
        </where>
    </select>
    <!--获取 æœ€æ–°ç‰ˆæœ¬çš„程序(即程序包名 èŠ‚ç‚¹ node_type=60)-->
    <select id="getLastProgramNode" resultType="org.springblade.mdm.program.entity.NcNode">
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package org.springblade.mdm.program.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.core.mp.mapper.BladeMapper;
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.vo.*;
public interface NcProgramApprovedMapper extends BladeMapper<NcProgramApproved> {
    IPage<NcProgramExportDncPageVO> exportDncPageQuery(@Param("page")IPage<NcProgramExportDncPageVO> page, @Param("query") NcProgramExportDncQueryVO query);
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
<?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.program.mapper.NcProgramApprovedMapper">
    <resultMap id="BaseResultMap" type="org.springblade.mdm.program.entity.NcProgramApproved">
        <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>
    <select id="exportDncPageQuery" resultType="org.springblade.mdm.program.vo.NcProgramExportDncPageVO">
        select a.id,a.nc_program_id,p.name,p.nc_node_id,a.create_time,p.process_name from mdm_nc_program_approved a inner join mdm_nc_program p on a.nc_program_id=p.id
        where a.is_deleted=0
        <where>
            <if test="query.name!=null and query.name!=''">
                and p.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
            </if>
            <if test="query.passTimeBegin!=null">
                and a.create_time &gt;= #{query.passTimeBegin}
            </if>
            <if test="query.passTimeEnd!=null">
                and a.create_time &lt;= #{query.passTimeEnd}
            </if>
        </where>
    </select>
</mapper>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.java
@@ -8,6 +8,11 @@
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.machine.vo.MachineVO;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
import org.springblade.mdm.program.vo.NcNodeProgramVO;
import org.springblade.mdm.program.vo.NcProgramVO;
import java.util.List;
public interface NcProgramMapper extends BladeMapper<NcProgram> {
@@ -17,12 +22,7 @@
     * @param machineGroupCode æœºåºŠç»„代码
     * @return
     */
    NcProgram getCuredNcProgram(@Param("partNo")String partNo,@Param("machineGroupCode")String machineGroupCode);
    List<NcProgram> getCuredNcProgram( @Param("partNo")String partNo,@Param("machineGroupCode")String machineGroupCode);
    /**
     * æ ¹æ®ç¨‹åºåç§°ï¼ŒèŽ·å–æœ€æ–°çš„ç¨‹åºå®žä½“
     * @param name ç¨‹åºåç§°
     * @return nc程序
     */
    //NcProgram getLastNcProgram(String name);
    IPage<NcProgramVO> pageQuery(@Param("page")IPage<NcNodeProgramVO> page, @Param("query") NcNodeProgramQueryVO query);
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.xml
@@ -34,14 +34,24 @@
    <!--    <select id="parentTree" resultMap="treeNodeResultMap">-->
<!--        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict where is_deleted = 0 and parent_id = 0-->
<!--    </select>-->
    <sql id="all_columns">id,tenant_id,nc_node_id,code,name,package_name,machine_code,part_no,is_cured,
    <sql id="all_columns">id,tenant_id,nc_node_id,code,name,machine_code,part_no,is_cured,
  expire_date,process_edition,is_last_edition,is_locked,task_assign_time,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
    <select id="getCuredNcProgram" resultMap="BaseResultMap">
        select <include refid="all_columns"/> from mdm_nc_program
        where is_deleted=0 and is_cured=1 and part_no=#{partNo} and is_last_edition=1
        and machine_code in (select code from mdm_machine where machine_group_code=#{machineGroupCode})
        order by create_time desc
        limit 1
    </select>
    <select id="pageQuery" resultType="org.springblade.mdm.program.vo.NcProgramVO">
        select id,nc_node_id,name,machine_code,part_no,part_no_edition,process_name,craft_edition from mdm_nc_program p
        where is_deleted=0 and is_last_edition=1 and (category='program' or category='subprogram')
        <where>
            <if test="query.name!=null and query.name!=''">
                and p.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
            </if>
        </where>
    </select>
    <!--
    <select id="getLastNcProgram" resultType="org.springblade.mdm.program.entity.NcProgram">
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.springblade.mdm.program.mapper;
import org.springblade.core.mp.mapper.BladeMapper;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.ProcessProgRef;
import org.springblade.mdm.program.vo.NcNodeVO;
import org.springblade.mdm.program.vo.NcProgramVO;
import java.util.List;
public interface ProcessProgRefMapper extends BladeMapper<ProcessProgRef> {
    List<NcProgramVO> listByProcess(String processInstanceId);
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
<?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.program.mapper.ProcessProgRefMapper">
    <select id="listByProcess" resultType="org.springblade.mdm.program.vo.NcProgramVO">
        select p.id,p.name,url,code from mdm_process_prog_ref r join mdm_nc_program p on r.nc_program_id=p.id
        where process_instance_id=#{processInstanceId} and p.is_deleted=0
    </select>
</mapper>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProgramSeqMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package org.springblade.mdm.program.mapper;
import org.springblade.mdm.program.entity.ProgramSeq;
import java.util.List;
public interface ProgramSeqMapper{
    void insert(ProgramSeq entity);
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProgramSeqMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
<?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.program.mapper.ProgramSeqMapper">
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO mdm_program_seq(create_time)
        VALUES(current_time)
    </insert>
</mapper>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
@@ -82,14 +82,6 @@
        return baseMapper.lazyList(parentId);
    }
    /**
     * ç¨‹åºèŠ‚ç‚¹
     * @param query
     * @return
     */
    public IPage<NcNodeProgramVO> programPageQuery(NcNodeProgramQueryVO query) {
        return this.getBaseMapper().programPageQuery(Condition.getPage(query),query);
    }
    /**
     * æŸ¥è¯¢çŽ°æœ‰å›ºåŒ–çš„ç¨‹åºï¼Œæš‚å®šæ¡ä»¶ï¼šé›¶ç»„ä»¶å·ç›¸åŒï¼Œä¸”æ˜¯åŒä¸€æœºåºŠç»„
@@ -100,4 +92,6 @@
    public NcNode getLastProgramNode(String name) {
        return this.getBaseMapper().getLastProgramNode(name);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package org.springblade.mdm.program.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
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.springframework.stereotype.Service;
/**
 * ä¸‹å‘/回传程序统计
 *
 * @author yangys
 */
@Slf4j
@Service
@AllArgsConstructor
public class NcProgramApprovedService extends BizServiceImpl<NcProgramApprovedMapper, NcProgramApproved> {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param query æŸ¥è¯¢å‚æ•°
     * @return
     */
    public IPage<NcProgramExportDncPageVO> exportDncPageQuery(NcProgramExportDncQueryVO query) {
        IPage<NcProgramExportDncPageVO> page = this.getBaseMapper().exportDncPageQuery(Condition.getPage(query),query);
        return page;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -25,6 +25,7 @@
 */
package org.springblade.mdm.program.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
@@ -32,14 +33,18 @@
import org.apache.commons.io.IOUtils;
import org.flowable.engine.*;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.ProgramSeq;
import org.springblade.mdm.program.mapper.NcProgramMapper;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.mapper.ProgramSeqMapper;
import org.springblade.mdm.program.vo.DncSendBackData;
import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
import org.springblade.mdm.program.vo.NcProgramUploadVO;
import org.springblade.mdm.program.vo.NcProgramVO;
import org.springblade.mdm.utils.FileContentUtil;
@@ -50,6 +55,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
@@ -67,13 +73,15 @@
    private final OssTemplate ossTemplate;
    private final NcNodeService nodeService;
    private final ProgramSeqMapper seqMapper;
    /**
     * æŸ¥è¯¢çŽ°æœ‰å›ºåŒ–çš„ç¨‹åºï¼Œæš‚å®šæ¡ä»¶ï¼šé›¶ç»„ä»¶å·ç›¸åŒï¼Œä¸”æ˜¯åŒä¸€æœºåºŠç»„
     * @param partNo
     * @param machineCode
     * @return
     */
    public NcProgram getCuredNcProgram(String partNo,String machineCode) {
    public List<NcProgram> getCuredNcProgram(String partNo,String machineCode) {
        Machine machine = machineService.getByCode(machineCode);
        return this.getBaseMapper().getCuredNcProgram(partNo,machine.getMachineGroupCode());
    }
@@ -81,20 +89,23 @@
    /**
     * ä¸Šä¼ ç¨‹åºæ–‡ä»¶åˆ°æŒ‡å®šèŠ‚ç‚¹
     * @param file
     * @param nodeId
     * @param category æ–‡ä»¶åˆ†ç±»ï¼ˆç¨‹åºæ–‡ä»¶/其他文件)
     * @param uploadVO ä¸Šä¼ æ–‡ä»¶è¡¨å•数据
     */
    public void uploadProgramFile(NcProgramUploadVO uploadVO) {
        MultipartFile file = uploadVO.getFile();
        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.setPartNo(uploadVO.getPartNo());
        prog.setProcessEdition(uploadVO.getProcessEdition());
        prog.setIsLastEdition(1);
        boolean isTextFile = false;
        try {
            isTextFile = FileContentUtil.isTextFile(file.getInputStream());
@@ -108,6 +119,13 @@
        this.save(prog);
    }
    String generageCode(){
        ProgramSeq program = new ProgramSeq();
        seqMapper.insert(program);
        DecimalFormat df = new DecimalFormat("0000000000");
        return df.format(program.getId());
    }
    /**
     * åˆ é™¤ä¸€ä¸ªç¨‹åº
     * @param id
@@ -136,7 +154,7 @@
    public List<NcProgramVO> listByNode(Long nodeId) {
        NcNode node = nodeService.getById(nodeId);
        List<NcProgram> pList = this.list(Wrappers.lambdaQuery(NcProgram.class).eq(NcProgram::getNcNodeId, nodeId).orderByDesc(NcProgram::getCreateTime));
        List<NcProgram> pList = this.list(Wrappers.lambdaQuery(NcProgram.class).eq(NcProgram::getNcNodeId, nodeId).eq(NcProgram::getIsLastEdition,1).orderByDesc(NcProgram::getCreateTime));
        List<NcProgramVO> result = new ArrayList<>();
@@ -149,4 +167,32 @@
        return result;
    }
    /**
     * å‡ç‰ˆ(升级工序版次),升级工序版本(包括程序和其他附件)
     * @param id ç¨‹åºæ–‡ä»¶id
     * @param newProcessEdition æ–°ç‰ˆæ¬¡
     */
    public void upgradeProcessEdition(long id,String newProcessEdition) {
        NcProgram prog = this.getById(id);
        //将现有程序更新为非最新版本
        this.update(Wrappers.lambdaUpdate(NcProgram.class).eq(NcProgram::getId,id).set(NcProgram::getIsLastEdition,0));
        NcProgram newVerProg = new NcProgram();
        BeanUtils.copyProperties(prog, newVerProg);
        newVerProg.setId(null);
        newVerProg.setIsLastEdition(1);
        newVerProg.setProcessEdition(newProcessEdition);
        this.save(newVerProg);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢ï¼Œç”¨äºŽå®¡æ‰¹æ—¶é€‰æ‹©ç¨‹åº
     * @param query
     * @return
     */
    public IPage<NcProgramVO> pageQuery(NcNodeProgramQueryVO query) {
        return this.getBaseMapper().pageQuery(Condition.getPage(query),query);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
/**
 * BladeX Commercial License Agreement
 * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
 * <p>
 * Use of this software is governed by the Commercial License Agreement
 * obtained after purchasing a license from BladeX.
 * <p>
 * 1. This software is for development use only under a valid license
 * from BladeX.
 * <p>
 * 2. Redistribution of this software's source code to any third party
 * without a commercial license is strictly prohibited.
 * <p>
 * 3. Licensees may copyright their own code but cannot use segments
 * from this software for such purposes. Copyright of this software
 * remains with BladeX.
 * <p>
 * Using this software signifies agreement to this License, and the software
 * must not be used for illegal purposes.
 * <p>
 * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
 * not liable for any claims arising from secondary or illegal development.
 * <p>
 * Author: Chill Zhuang (bladejava@qq.com)
 */
package org.springblade.mdm.program.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.entity.ProcessProgRef;
import org.springblade.mdm.program.entity.ProgramSeq;
import org.springblade.mdm.program.mapper.NcProgramMapper;
import org.springblade.mdm.program.mapper.ProcessProgRefMapper;
import org.springblade.mdm.program.mapper.ProgramSeqMapper;
import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
import org.springblade.mdm.program.vo.NcProgramUploadVO;
import org.springblade.mdm.program.vo.NcProgramVO;
import org.springblade.mdm.utils.FileContentUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
/**
 * å·¥ä½œæµæœåŠ¡å®žçŽ°ç±»
 *
 * @author Chill
 */
@Slf4j
@Service
@AllArgsConstructor
public class ProcessProgRefService extends BizServiceImpl<ProcessProgRefMapper, ProcessProgRef> {
    /**
     * æŸ¥è¯¢çŽ°æœ‰å›ºåŒ–çš„ç¨‹åºï¼Œæš‚å®šæ¡ä»¶ï¼šé›¶ç»„ä»¶å·ç›¸åŒï¼Œä¸”æ˜¯åŒä¸€æœºåºŠç»„
     * @param processInstanceId æµç¨‹å®žä¾‹id
     * @param programIds ç¨‹åºid
     * @return
     */
    @Transactional
    public void addRelations(String processInstanceId, List<Long> programIds) {
        if(programIds == null || programIds.isEmpty()) {
            return;
        }
        this.lambdaUpdate().eq(ProcessProgRef::getProcessInstanceId, processInstanceId).remove();
        List<ProcessProgRef> entities = new ArrayList<>();
        for (Long programId : programIds) {
            ProcessProgRef entity = new ProcessProgRef();
            entity.setProcessInstanceId(processInstanceId);
            entity.setNcProgramId(programId);
            entities.add(entity);
        }
        this.saveBatch(entities);
    }
    /**
     * æŸ¥è¯¢æµç¨‹å…³è”的程序i二标
     * @param processInstanceId
     * @return
     */
    public List<NcProgramVO> listByProcess(String processInstanceId) {
        return this.getBaseMapper().listByProcess(processInstanceId);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeProgramVO.java
@@ -24,10 +24,6 @@
    @Schema(description = "备注")
    private String remark;
    @Schema(description = "图号")
    private String drawingNo;
    @Schema(description = "图号版次")
    private String drawingNoEdition;
@@ -37,6 +33,6 @@
    @Schema(description = "工艺版次")
    private String craftEdition;
    @Schema(description = "零组件号")
    @Schema(description = "零组件号/图号")
    private String partNo;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncPageVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.springblade.mdm.program.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springblade.mdm.commons.vo.BaseVO;
/**
 * NC程序VO
 */
@Setter
@Getter
public class NcProgramExportDncPageVO extends BaseVO {
    @Schema(description = "程序名称")
    private String name;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncQueryVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package org.springblade.mdm.program.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springblade.core.mp.support.Query;
import java.util.Date;
/**
 * åˆ†é¡µæ‹†çº¿å‘¢
 */
@Schema(description = "机床回传文件查询对象")
@Setter
@Getter
public class NcProgramExportDncQueryVO extends Query {
    @Schema(description = "程序名称")
    private String name;
    @Schema(description = "通过时间开始")
    private Date passTimeBegin;
    @Schema(description = "通过时间截止")
    private Date passTimeEnd;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramUploadVO.java
@@ -11,7 +11,7 @@
 */
@Setter
@Getter
public class NcProgramUploadVO extends BaseVO {
public class NcProgramUploadVO {
    @Schema(description = "所属节点id")
    private Long nodeId;
@@ -20,13 +20,20 @@
    @Schema(description = "设备编号")
    private MultipartFile file;
    @Schema(description = "图号")
    private String drawingNo;
    @Schema(description = "零组件号/图号")
    private String partNo;
    @Schema(description = "工序,如“精铣”")
    private String processName;
    @Schema(description = "文件分类,使用字典(node_file_type)")
    private String category;
    @Schema(description = "工序版本")
    private String processEdition;
    /**
     * æ˜¯å¦æµ‹è¯•程序。1是;0否
     */
    private Integer isTest;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramVO.java
@@ -21,18 +21,17 @@
    @Schema(description = "备注")
    private String remark;
    @Schema(description = "图号")
    private String drawingNo;
    @Schema(description = "图号版次")
    private String drawingNoEdition;
    @Schema(description = "工序,如“精铣”")
    private String processName;
    @Schema(description = "工艺版次")
    private String craftEdition;
    @Schema(description = "零组件号")
    @Schema(description = "零组件号/图号")
    private String partNo;
    @Schema(description = "零组件号/图号版次")
    private String partNoEdition;
    @Schema(description = "是否测试程序.1是;0否")
    private Integer isTest;
}
blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml
@@ -7,7 +7,11 @@
    <userTask id="programmingTask" name="编制" flowable:assignee="${assignee}"/>
    <userTask id="check" name="校对" flowable:assignee="${assignee}"/>
    <userTask id="approveTask" name="高师审批" flowable:assignee="${assignee}"/>
    <endEvent id="approveEnd" name="审批完成"/>
    <endEvent id="approveEnd" name="审批完成">
      <extensionElements>
        <flowable:executionListener expression="${dispatchFinishListener.handle(execution)}" event="end"/>
      </extensionElements>
    </endEvent>
    <sequenceFlow id="programingToCheck" sourceRef="programmingTask" targetRef="check" name="编制完成给校对">
      <conditionExpression xsi:type="tFormalExpression">${approve=='Y'}</conditionExpression>
    </sequenceFlow>
@@ -32,24 +36,15 @@
      <conditionExpression xsi:type="tFormalExpression">${approve=='Y' &amp;&amp; hasCuredProgram=='Y'}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-353381d5-35c7-47b0-bf5b-2bafe865ab5e" sourceRef="cureCheckServiceTask" targetRef="confirmIsUseableTask"/>
    <sequenceFlow id="sid-d144dad0-dc94-4a2b-96d6-9d8451b05ec1" sourceRef="confirmIsUseableTask" targetRef="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" name="固化程序可用">
    <sequenceFlow id="sid-d144dad0-dc94-4a2b-96d6-9d8451b05ec1" sourceRef="confirmIsUseableTask" targetRef="check" name="固化程序可用">
      <conditionExpression>${approve=='Y'}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-d4133565-1a45-4bb6-b603-9b9e4db1cdbb" sourceRef="approveTask" targetRef="check">
      <conditionExpression>${approve=='N'}</conditionExpression>
    </sequenceFlow>
    <exclusiveGateway id="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" name="可用程序流转网关"/>
    <sequenceFlow id="sid-b15dcf6a-a48c-4e01-b6bc-5c2a74ca817e" sourceRef="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" targetRef="check" name="工序版次一致并且可用">
      <conditionExpression xsi:type="tFormalExpression">${processEditionEqual=='Y'}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-6249886b-7c4a-4904-9b0b-cf743932be9f" sourceRef="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" targetRef="emptyUpgradeProcessEdtionServiceTask">
      <conditionExpression xsi:type="tFormalExpression">${processEditionEqual=='N'}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-598e1dbe-85b3-40d0-89c8-bd2580ecbfc5" sourceRef="emptyUpgradeProcessEdtionServiceTask" targetRef="check"/>
    <sequenceFlow id="sid-80b50f96-7601-4ba2-8c32-968923170d25" sourceRef="confirmIsUseableTask" targetRef="programmingTask">
      <conditionExpression>${approve=='N'}</conditionExpression>
    </sequenceFlow>
    <serviceTask id="emptyUpgradeProcessEdtionServiceTask" flowable:exclusive="true" name="空升版" flowable:expression="programEmptyUpgradeProcessEdtionTask.execute(execution)"/>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_dispatch">
    <bpmndi:BPMNPlane bpmnElement="dispatch" id="BPMNPlane_dispatch">
@@ -70,10 +65,10 @@
        <omgdc:Bounds x="130.0" y="-135.0" width="60.0" height="55.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="shape-a42e90ff-9c82-4d5b-8f5b-0804754e89a6" bpmnElement="approveTask">
        <omgdc:Bounds x="220.0" y="-14.0" width="50.0" height="45.0"/>
        <omgdc:Bounds x="130.0" y="-4.0" width="50.0" height="45.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="shape-f14acaf6-9747-4d52-87a1-d4c5b8f3d166" bpmnElement="approveEnd">
        <omgdc:Bounds x="245.0" y="51.0" width="30.0" height="30.0"/>
        <omgdc:Bounds x="295.0" y="-6.5" width="30.0" height="30.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="edge-6f05f47f-7804-4dd0-b6d2-e435b9efaa3c" bpmnElement="programingToCheck">
        <omgdi:waypoint x="12.5" y="-92.5"/>
@@ -89,20 +84,21 @@
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-d05b5f9f-9108-4a41-9e48-4db1e1b1e325" bpmnElement="flowToSeriorTask">
        <omgdi:waypoint x="190.0" y="-93.75"/>
        <omgdi:waypoint x="270.0" y="-2.75"/>
        <omgdi:waypoint x="180.0" y="7.25"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-715efa53-6c03-407b-87ec-640f99c481a0" bpmnElement="sid-c0b195e7-17e5-44bf-8115-8b7126cb3ab3">
        <omgdi:waypoint x="270.0" y="19.749996"/>
        <omgdi:waypoint x="245.0" y="58.5"/>
        <omgdi:waypoint x="180.0" y="29.749996"/>
        <omgdi:waypoint x="295.0" y="1.0"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="shape-8455618d-c1b9-4e6a-bca4-de965cc81633" bpmnElement="cureCheckServiceTask">
        <omgdc:Bounds x="-275.0" y="37.500004" width="65.0" height="39.999996"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="shape-8f7064fc-4838-44cc-bf6d-ca15932a1e2e" bpmnElement="confirmIsUseableTask">
        <omgdc:Bounds x="-165.0" y="37.5" width="55.0" height="40.0"/>
        <omgdc:Bounds x="-135.0" y="37.5" width="55.0" height="40.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="edge-0408fc3c-c133-40e3-9006-c315b12e9790" bpmnElement="sid-46ccac64-2d48-4933-88a6-f2941ae131dd">
        <omgdi:waypoint x="-192.5" y="-92.500015"/>
        <omgdi:waypoint x="-132.5" y="-100.0"/>
        <omgdi:waypoint x="-72.49999" y="-107.50001"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-d8883eca-269a-42cd-b2d4-134da6596afb" bpmnElement="sid-af92e6ab-bc80-43ed-8b09-1d3ec54cc9e7">
@@ -111,38 +107,20 @@
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-44016aa6-bf48-4c73-8aaa-4cedf795d68b" bpmnElement="sid-353381d5-35c7-47b0-bf5b-2bafe865ab5e">
        <omgdi:waypoint x="-210.0" y="57.5"/>
        <omgdi:waypoint x="-165.0" y="57.5"/>
        <omgdi:waypoint x="-135.0" y="57.5"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-64e64024-1ffd-4cdf-be8f-4c5e4911a5bb" bpmnElement="sid-d144dad0-dc94-4a2b-96d6-9d8451b05ec1">
        <omgdi:waypoint x="-110.0" y="47.5"/>
        <omgdi:waypoint x="-60.0" y="0.0"/>
        <omgdi:waypoint x="-80.0" y="47.5"/>
        <omgdi:waypoint x="145.0" y="-80.00001"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-7a5135fe-5eb1-425c-b920-3e2b5bf18454" bpmnElement="sid-d4133565-1a45-4bb6-b603-9b9e4db1cdbb">
        <omgdi:waypoint x="257.5" y="-14.0"/>
        <omgdi:waypoint x="167.5" y="-4.0"/>
        <omgdi:waypoint x="175.0" y="-80.0"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="shape-50f64465-52e3-4ba9-b36d-ebac41ab8b22" bpmnElement="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398">
        <omgdc:Bounds x="-60.0" y="-20.0" width="40.0" height="40.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="edge-4b95c6df-601d-48e8-a9a4-98499ae5ddf3" bpmnElement="sid-b15dcf6a-a48c-4e01-b6bc-5c2a74ca817e">
        <omgdi:waypoint x="-20.0" y="0.0"/>
        <omgdi:waypoint x="130.0" y="-93.75"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-dbb7a807-e493-42fe-b229-b9f2ec25b5ee" bpmnElement="sid-6249886b-7c4a-4904-9b0b-cf743932be9f">
        <omgdi:waypoint x="-40.0" y="20.0"/>
        <omgdi:waypoint x="30.0" y="57.5"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-092f7d8d-2467-4794-af93-fdc9ad503923" bpmnElement="sid-598e1dbe-85b3-40d0-89c8-bd2580ecbfc5">
        <omgdi:waypoint x="86.25" y="30.0"/>
        <omgdi:waypoint x="145.0" y="-79.99999"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="edge-223da197-47f2-44ef-847e-40d1fae1009b" bpmnElement="sid-80b50f96-7601-4ba2-8c32-968923170d25">
        <omgdi:waypoint x="-123.75" y="37.5"/>
        <omgdi:waypoint x="-93.75" y="37.5"/>
        <omgdi:waypoint x="-51.25" y="-77.5"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="shape-0fe942f6-dea9-427c-aef6-0db9c3e3707b" bpmnElement="emptyUpgradeProcessEdtionServiceTask">
        <omgdc:Bounds x="30.0" y="30.0" width="75.0" height="55.0"/>
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>
doc/sql/mdm/mdm.mysql.all.create.sql
@@ -65,10 +65,9 @@
   `id` bigint NOT NULL,
   `tenant_id` varchar(6) DEFAULT NULL COMMENT '所属租户',
   `name` varchar(100) NOT NULL COMMENT '节点名称',
   `drawing_no` varchar(40) NULL COMMENT '图号',
   `process_name` varchar(20) NULL COMMENT '工序名称',
   `machine_code` varchar(100) DEFAULT NULL COMMENT '设备编号/机床编号',
   `part_no` varchar(100) NULL COMMENT '零组件编号',
   `part_no` varchar(100) NULL COMMENT '零组件编号/图号',
   `is_cured` int DEFAULT NULL COMMENT '是否固化,1是;0否',
   `expire_date` date DEFAULT NULL COMMENT '到期时间,根据有效期时长计算而来',
   `process_edition` varchar(40) DEFAULT NULL COMMENT '工序版次,升版就是变更改该字段,需要保留历史记录',
@@ -88,12 +87,12 @@
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='程序节点目录';
/**流程实例与节点关联表,记录创建时机:用户在程序编制节点手动关联*/
DROP TABLE IF EXISTS `mdm_process_node_ref`;
CREATE TABLE `mdm_process_node_ref` (
DROP TABLE IF EXISTS `mdm_process_prog_ref`;
CREATE TABLE `mdm_process_prog_ref` (
  `id` bigint NOT NULL,
  `tenant_id` varchar(6) DEFAULT NULL COMMENT '所属租户',
  `nc_node_id` bigint DEFAULT NULL COMMENT '节点id,对应 ç¨‹åºåŒ…名 èŠ‚ç‚¹id',
  `process_instance_id` varchar(100) NOT NULL COMMENT '流程实例id',
  `process_instance_id` varchar(64) NOT NULL COMMENT '流程实例id',
  `nc_program_id` bigint DEFAULT NULL COMMENT '数控程序id',
  `status` int DEFAULT NULL COMMENT '业务状态',
  `create_dept` bigint DEFAULT NULL COMMENT '创建单位',
  `is_deleted` int DEFAULT NULL,
@@ -102,32 +101,29 @@
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='流程实例与节点关联表';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='流程实例与程序关联表';
DROP TABLE IF EXISTS `mdm_nc_program`;
CREATE TABLE `mdm_nc_program` (
  `id` bigint NOT NULL,
  `tenant_id` varchar(6) DEFAULT NULL COMMENT '所属租户',
  `nc_node_id` bigint DEFAULT NULL COMMENT '所属节点id,应该属于某个数控程序节点',
  `code` varchar(100) NOT NULL COMMENT '程序编号',
  `code` varchar(100) NULL COMMENT '程序编号',
  `name` varchar(100) NOT NULL COMMENT '程序名称',
  `oss_name` varchar(100) NULL COMMENT 'oss中的文件名',
  `category` varchar(2) NULL COMMENT '文件分类',
  `drawing_no` varchar(40) NULL COMMENT '图号',
  `process_name` varchar(20) NULL COMMENT '工序名称',
  `remark` varchar(100) NULL COMMENT '备注',
  `is_text_file` int DEFAULT NULL COMMENT '是否文本文件',
  `url` varchar(400) NOT NULL COMMENT '文件地址',
  `machine_code` varchar(100) DEFAULT NULL COMMENT '设备编号/机床编号',
  `part_no` varchar(100) NULL COMMENT '零组件编号',
  `part_no` varchar(100) NULL COMMENT '零组件编号/图号',
  `is_cured` int DEFAULT NULL COMMENT '是否固化,1是;0否',
  `expire_date` date DEFAULT NULL COMMENT '到期时间,根据有效期时长计算而来',
  `process_edition` varchar(40) DEFAULT NULL COMMENT '工序版次,升版就是变更改该字段,需要保留历史记录',
  `is_last_edition` int NOT NULL COMMENT '是否最新版次,1:最新版次;0:历史版次,主要取该字段=1的数据,0是历史版次',
  `is_locked` int DEFAULT NULL COMMENT '锁定状态,1:锁定;0:正常',
  `is_test` int DEFAULT NULL COMMENT '是否测试程序,1:是;0:否',
  `task_assign_time` datetime DEFAULT NULL COMMENT '程序的任务下发的时间(用于检查是否为重复的任务)',
  `status` int DEFAULT NULL COMMENT '业务状态',
  `create_dept` bigint DEFAULT NULL COMMENT '创建单位',