yangys
2025-08-20 51054f0da5dd4718212064510fff045815388b90
增加临时流程处理
已添加1个文件
已修改6个文件
160 ■■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/EmailService.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TempFlowCompleteService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameCheckUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/EmailService.java
@@ -15,49 +15,5 @@
@Service
@Slf4j
public class EmailService {
    @Autowired
    private JavaMailSender mailSender;
    public void sendSimpleEmail(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
        message.setFrom("zhangxiaoxu@qianwen.ltd");
        mailSender.send(message);
        log.info("Simple email sent to: {}", to);
    }
    public void sendHtmlEmail(String to, String subject, String htmlContent)
        throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(htmlContent, true); // true è¡¨ç¤º HTML å†…容
        helper.setFrom("zhangxiaoxu@qianwen.ltd");
        mailSender.send(message);
        log.info("HTML email sent to: {}", to);
    }
    public void sendEmailWithAttachment(String to, String subject, String text,
                                        File attachment) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(text);
        helper.setFrom("noreply@example.com");
        // æ·»åР附件
        FileSystemResource file = new FileSystemResource(attachment);
        helper.addAttachment(attachment.getName(), file);
        mailSender.send(message);
        log.info("Email with attachment sent to: {}", to);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
@@ -39,6 +39,7 @@
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -61,6 +62,7 @@
    private final TaskDispatchService taskDispatchService;
    private final BatchDispatchService dispatchService;
    private final ReplaceFlowCompleteService replaceFlowCompleteService;
    private final TempFlowCompleteService tempFlowCompleteService;
    /**
     * å‘起派工流程
     */
@@ -79,10 +81,15 @@
    }
    AbstractFlowCompleteService getActualService(String processInstanceId){
        ProcessInstance inst = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        ProcessInstance inst = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).includeProcessVariables().singleResult();
        if(inst.getProcessDefinitionKey().equals(FlowContants.TRY_PROCESS_KEY) || inst.getProcessDefinitionKey().equals(FlowContants.CURE_PROCESS_KEY)
            || inst.getProcessDefinitionKey().equals(FlowContants.UNLOCK_PROCESS_KEY)){
            return tryFlowCompleteService;
            String isTempFlow = Func.toStr(inst.getProcessVariables().get(FlowContants.IS_TEMP_FLOW));
            if(FlowContants.N.equals(isTempFlow)){
                return tryFlowCompleteService;
            }else{
                return tempFlowCompleteService;
            }
        }else if(inst.getProcessDefinitionKey().equals(FlowContants.REPLACE_PROCESS_KEY)){
            return replaceFlowCompleteService;
        }else{
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -57,7 +57,7 @@
        vars.put(FlowContants.TITLE,startVO.getTitle());
        //临时流程标志,明确指定Y,属于临时流程
        vars.put(FlowContants.IS_TEMP_FLOW,FlowContants.Y.equals(startVO.getIsTempFlow())?FlowContants.Y:FlowContants.N);
        //机床编号
        vars.put(FlowContants.MACHINE_CODE,startVO.getMachineCode());
        String workshop = nodeDeptQueryService.getWorkshopNameByMachineCode(startVO.getMachineCode());
@@ -81,25 +81,35 @@
        String programPkgName = NcNodeService.genProgramName(startVO.getDrawingNo(),startVO.getProcessNo());
        vars.put(FlowContants.PROGRAM_PACKAGE_NAME,programPkgName);
        NcNode curedProgramPackage = ncNodeService.getCuredProgramPackage(programPkgName,startVO.getMachineCode());
        //设置是否有固化程序标记
        vars.put(FlowContants.HAS_CURED_PROGRAM,curedProgramPackage != null ? FlowContants.Y:FlowContants.N);
        //工序版次是否一致,是否在有效期内
        if(curedProgramPackage != null && Func.isBlank(startVO.getDeviation())){//偏离单优先,如果有偏离单,那么找到固化程序的也不算固化了
            vars.put(FlowContants.CURED_NODE_ID,curedProgramPackage.getId());
            vars.put(FlowContants.IS_PROCESS_EDITION_SAME, StringUtils.equals(curedProgramPackage.getProcessEdition(),startVO.getProcessEdition()) ? "Y":"N");
            vars.put(FlowContants.VALIDITY_PERIOD, curedProgramPackage.withinValidityPeriod() ? FlowContants.Y:FlowContants.N);
        vars.put(FlowContants.IS_TEMP_FLOW,FlowContants.Y.equals(startVO.getIsTempFlow())?FlowContants.Y:FlowContants.N);
        NcNode curedProgramPackage = null;
        if(FlowContants.N.equals(startVO.getIsTempFlow())) {
            curedProgramPackage = ncNodeService.getCuredProgramPackage(programPkgName, startVO.getMachineCode());
            //设置是否有固化程序标记
            vars.put(FlowContants.HAS_CURED_PROGRAM, curedProgramPackage != null ? FlowContants.Y : FlowContants.N);
            //工序版次是否一致,是否在有效期内
            if (curedProgramPackage != null && Func.isBlank(startVO.getDeviation())) {//偏离单优先,如果有偏离单,那么找到固化程序的也不算固化了
                vars.put(FlowContants.CURED_NODE_ID, curedProgramPackage.getId());
                vars.put(FlowContants.IS_PROCESS_EDITION_SAME, StringUtils.equals(curedProgramPackage.getProcessEdition(), startVO.getProcessEdition()) ? "Y" : "N");
                vars.put(FlowContants.VALIDITY_PERIOD, curedProgramPackage.withinValidityPeriod() ? FlowContants.Y : FlowContants.N);
            } else {
                vars.put(FlowContants.IS_PROCESS_EDITION_SAME, FlowContants.Y);
                vars.put(FlowContants.VALIDITY_PERIOD, FlowContants.Y);
            }
        }else{
            vars.put(FlowContants.IS_PROCESS_EDITION_SAME, FlowContants.Y);
            vars.put(FlowContants.VALIDITY_PERIOD, FlowContants.Y);
            //临时流程,不管固化
            vars.put(FlowContants.HAS_CURED_PROGRAM,FlowContants.N);
        }
        String myProcessName = "试切下发流程";
        if(vars.getOrDefault(FlowContants.HAS_CURED_PROGRAM,FlowContants.N).equals(FlowContants.Y)){
        if(vars.getOrDefault(FlowContants.IS_TEMP_FLOW,FlowContants.N).equals(FlowContants.Y)){
            myProcessName = "试切补充流程";
        }else if(StringUtils.isNotBlank(startVO.getDeviation()) ){
            myProcessName = "偏离单";
        }else if(vars.getOrDefault(FlowContants.HAS_CURED_PROGRAM,FlowContants.N).equals(FlowContants.Y)){
            myProcessName = "固化下发流程";
        }
        if(StringUtils.isNotBlank(startVO.getDeviation()) ){
            myProcessName = "偏离单";
        }
        vars.put(FlowContants.MY_PROCESS_NAME, myProcessName);
        String businessKey = "0";//业务表key
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TempFlowCompleteService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package org.springblade.mdm.flow.service.execute;
import org.flowable.task.api.Task;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
/**
 * è¯•切流程完成任务的实现
 */
@Service("tempFlowCompleteService")
public class TempFlowCompleteService extends AbstractFlowCompleteService {
    @Autowired
    private FlowProgramFileService flowProgramFileService;
    @Autowired
    private NcNodeService ncNodeService;
    @Autowired
    private FlowCommonService flowCommonService;
    @Transactional
    @Override
    public void completeTask(String taskId, String processInstanceId, String comment, Map<String, Object> variables) {
        Task task = currentTask(taskId);
        String operateResult = this.getApproveResult(variables);
        if (StringUtil.isNoneBlank(processInstanceId, comment)) {
            taskService.addComment(taskId, processInstanceId, comment);
        }
        // éžç©ºåˆ¤æ–­
        if (Func.isEmpty(variables)) {
            variables = Kv.create();
        }
        variables.put(FlowContants.LAST_STEP_USER_NICKNAME, AuthUtil.getNickName());
        if(!variables.containsKey("assignee")) {
            throw new ServiceException("请指定流程下一步处理人");
        }
        addApproveRecord(taskId,comment,variables);
        taskService.complete(taskId, variables);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
@@ -42,7 +42,7 @@
        String operateResult = this.getApproveResult(variables);
        if(task.getTaskDefinitionKey().equals("programmingTask")) {//编制节点
            flowProgramFileService.checkProgramFiles(processInstanceId,"Y".equals(operateResult));
            flowProgramFileService.checkProgramFiles(processInstanceId,FlowContants.Y.equals(operateResult));
        }
        if (StringUtil.isNoneBlank(processInstanceId, comment)) {
            taskService.addComment(taskId, processInstanceId, comment);
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
@@ -109,8 +109,7 @@
    @GetMapping("/sendmail")
    @Operation(summary = "sendmail", description = "sendmail")
    public R<Void> sendmail(String code) throws IOException, MessagingException {
        mailService.sendHtmlEmail("zhangxiaoxu@qianwen.ltd","testtitle"+code,"abc烦烦烦");
        mailService.sendHtmlEmail("y_ys79@sina.com","testtitle"+code,"abc烦烦烦");
        return R.success();
    }
blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameCheckUtil.java
@@ -15,7 +15,7 @@
     * @param programProperties ç¨‹åºå±žæ€§ï¼Œå‘起时填写的
     */
    public static void checkFilename(String filename, FlowProgramProperties programProperties){
        if(FlowContants.IS_TEMP_FLOW.equals(programProperties.getIsTempFlow())){
        if(FlowContants.Y.equals(programProperties.getIsTempFlow())){
            //临时程序下发流程,不检查文件名合法性
            return;
        }