yangys
2025-09-08 4295f6d8006cc02cd98d19f46829a9dc3e5b36d4
修复新编程序报表错误,增加mes接口
已添加5个文件
已修改12个文件
506 ■■■■■ 文件已修改
blade-service/blade-mdm/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowVariableContants.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/NewProgrammingStatService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ExceptionDispathCleanTask.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/controller/MesController.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/service/MesTaskService.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/pom.xml
@@ -71,10 +71,6 @@
            <artifactId>qiniu-java-sdk</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-flow-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>3.2.0</version>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java
@@ -4,9 +4,9 @@
    public static final String NETWORK_TYPE_KEY = "networkType";
    /**
     * å·¥æŽ§ç½‘回传程序监控目录逗号分隔
     * é‡å¤æ´¾å·¥å¤©æ•°éªŒè¯é—´éš”天数
     */
    public static final String PROGRAM_MONITOR_DIR_KEY = "programMonitorDir";
    public static String TASK_DUPLICATE_CHECK_DAYS= "taskDuplicateCheckDays";
    /**
     * æ¶‰å¯†ç½‘
     */
@@ -25,4 +25,12 @@
     * ç³»ç»Ÿå‚数,机构中车间的key
     */
    public static final String WORKSHOP_DICT_KEY = "workshopDictKey";
    /**
     * è·Ÿç›®å½•çš„id
     */
    public static String ROOT_DEPT_ID= "rootDeptId";
    /**
     * é‡å¤æ´¾å·¥å¤©æ•°éªŒè¯é—´éš”天数
     */
    public static String TASK_EXPIRE_DAYS = "taskExpireDays";
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
@@ -4,6 +4,8 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.commons.contants.ParamConstants;
import org.springblade.system.feign.ISysClient;
import org.springframework.stereotype.Service;
@@ -17,15 +19,9 @@
@AllArgsConstructor
public class ParamService{
    public static String NETWORK_TYPE= "networkType";
    /**
     * é‡å¤æ´¾å·¥å¤©æ•°éªŒè¯é—´éš”天数
     */
    public static String TASK_DUPLATE_CHECK_DAYS= "taskDuplicateCheckDays";
    /**
     * é‡å¤æ´¾å·¥å¤©æ•°éªŒè¯é—´éš”天数
     */
    public static String TASK_EXPIRE_DAYS= "taskExpireDays";
    /**
     * å®¡æ‰¹ç”¨æˆ·è§’色别名参数key,逗号分隔
@@ -51,14 +47,14 @@
    public static String APPROVE_TABLE_TEMPLATE= "approveTableTemplate";
    /**
     * å®¡æ‰¹ç”¨æˆ·è§’色别名参数key,逗号分隔
     */
    public static String ROOT_DEPT_ID= "rootDeptId";
    /**
     * è½¦åºŠçš„key,参数值指向机床类型中的车床
     */
    public static String MACHINE_SPEC_RURNING = "machineSecTurning";
    private final ISysClient sysClient;
    public String getParamValue(String paramKey,String defaultValue){
@@ -89,9 +85,9 @@
     * èŽ·å–ä»»åŠ¡é‡å¤æ£€æŸ¥å¤©æ•°
     * @return å¤©æ•°
     */
    public String taskDuplicateCheckDays(){
        return getParamValue(
            TASK_DUPLATE_CHECK_DAYS,"30");
    public int taskDuplicateCheckDays(){
        return Func.toInt(getParamValue(
            ParamConstants.TASK_DUPLICATE_CHECK_DAYS,"30"));
    }
@@ -100,9 +96,9 @@
            CONFIRM_TABLE_TEMPLATE,"");
    }
    public String rootDetpId() {
    public String rootDeptId() {
        return getParamValue(
            ROOT_DEPT_ID,"0");
            ParamConstants.ROOT_DEPT_ID,"0");
    }
    public String approveTableTemplateOssFileName() {
@@ -125,4 +121,12 @@
    }
    /**
     * å¼‚常而南无保留天数
     * @return
     */
    public int getTaskExpireDays() {
        String valueStr = getParamValue(ParamConstants.TASK_EXPIRE_DAYS,"30");
        return Func.toInt(valueStr);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowVariableContants.java
@@ -23,4 +23,8 @@
     * å®žé™…审批高师id
     */
    public static final String ACT_SENIOR = "actSenior";
    /**
     * è¿‡ç¨‹å¡å·å˜é‡å
     */
    public static final String PROCESS_CARD = "processCard";
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java
@@ -1,6 +1,7 @@
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;
@@ -88,4 +89,30 @@
     * ç¨‹åºç¼–号
     */
    private String programNo;
    /**
     * mes任务唯一标识
     */
    private String mesTaskId;
    /**
     * æ£€éªŒå‘˜ï¼ˆmes提供)
     */
    private String inspector;
    /**
     * æ£€éªŒåé¦ˆæ—¶é—´ï¼ˆmes提供)
     */
    private Date checkTime;
    /**
     * è¿‡ç¨‹å¡å·
     */
    private String processCard;
    /**
     * æ˜¯å¦ä¸ºé‡å¤æ´¾å·¥æ•°æ®
     * @return æ˜¯å¦
     */
    public boolean isDuplicateTask(){
        return this.getStatus() == STATUS_DUP;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.java
@@ -4,9 +4,16 @@
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.entity.TaskDispatch;
import java.time.LocalDateTime;
import java.util.List;
public interface TaskDispatchMapper extends BladeMapper<TaskDispatch> {
    List<String> distinctAllDrawingNo();
    /**
     * åˆ é™¤è¶…过过期天数的异常任务
     * @param expiredTime è¿‡æœŸçš„æ—¶é—´ç‚¹
     */
    void deleteExpiredExceptionTasks(LocalDateTime expiredTime);
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.xml
@@ -8,9 +8,12 @@
        <result column="update_time" property="updateTime"/>
        <result column="is_deleted" property="isDeleted"/>
    </resultMap>
    <select id="distinctAllDrawingNo" resultType="java.lang.String">
        select distinct drawing_no from mdm_task_dispatch
    </select>
    <delete id="deleteExpiredExceptionTasks">
        delete from mdm_task_dispatch where status not in (1,2) and create_time &lt; #{expiredTime}
    </delete>
</mapper>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java
@@ -3,10 +3,8 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.flow.entity.TaskDispatch;
import org.springblade.mdm.flow.mapper.TaskDispatchMapper;
@@ -20,6 +18,7 @@
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
/**
 * ä»»åŠ¡æ´¾å·¥æ•°æ® å¤„理服务
@@ -28,12 +27,13 @@
 */
@Slf4j
@Service
@AllArgsConstructor
public class TaskDispatchService  extends BizServiceImpl<TaskDispatchMapper, TaskDispatch> {
    @Autowired
    private ParamService paramService;
    @Autowired
    private DrawingNosMapper drawingNosMapper;
    @Transactional(rollbackFor = Exception.class)
    public TaskDispatch saveTask(TaskAssignVO startVO,boolean isDup) {
        TaskDispatch taskDispatch = new TaskDispatch();
@@ -51,7 +51,7 @@
     * åŠ u人下拉数据
     * @param drawingNo
     */
    void addDrawingNos(String drawingNo){
    public void addDrawingNos(String drawingNo){
        DrawingNos data = drawingNosMapper.selectById(drawingNo);
        if(data == null){
            data = new DrawingNos();
@@ -85,7 +85,7 @@
            return false;
        }
        int taskDupDays = Func.toInt(paramService.taskDuplicateCheckDays());
        int taskDupDays = paramService.taskDuplicateCheckDays();
        LocalDateTime checkStartDate = LocalDateTime.now().minusDays(taskDupDays);
        LambdaQueryChainWrapper<TaskDispatch> q = lambdaQuery().eq(TaskDispatch::getDrawingNo,startVO.getDrawingNo())
            .eq(TaskDispatch::getProcessNo,startVO.getProcessNo())
@@ -113,4 +113,24 @@
        }
    }
    /**
     * æ¸…理过期的异常任务计划
     */
    @Transactional
    public void cleanExpiredExceptionTask() {
        int expireDays = paramService.getTaskExpireDays();
        LocalDateTime expiredTime = LocalDateTime.now().minusDays(expireDays);
        baseMapper.deleteExpiredExceptionTasks(expiredTime);
    }
    /**
     * æ ¹æ®mes唯一标识获取派工数据
     * @param mesTaskId
     * @return
     */
    public TaskDispatch getByMesTaskId(String mesTaskId) {
        Optional<TaskDispatch> opt = lambdaQuery().eq(TaskDispatch::getMesTaskId, mesTaskId).oneOpt();
        return opt.orElse(null);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
@@ -68,9 +68,9 @@
                runtimeService.setVariable(task.getExecutionId(),FlowContants.PROGRAMMER_NAME,userCommonService.getUserNameById(Func.toLong(variables.get("assignee"))));
            }
        }else if(task.getTaskDefinitionKey().equals("check")){
            runtimeService.setVariable(task.getExecutionId(),FlowVariableContants.ACT_CHECKER,Func.toLong(variables.get("assignee")));
            variables.put(FlowVariableContants.ACT_CHECKER,Func.toStr(AuthUtil.getUserId()));
        }else if(task.getTaskDefinitionKey().equals("approveTask")){
            runtimeService.setVariable(task.getExecutionId(),FlowVariableContants.ACT_SENIOR,Func.toLong(variables.get("assignee")));
            variables.put(FlowVariableContants.ACT_SENIOR,Func.toStr(AuthUtil.getUserId()));
        }
        variables.remove("programOnMachine");//其他节点,忽略现场编程标记
        if (StringUtil.isNoneBlank(processInstanceId, comment)) {
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java
@@ -51,6 +51,8 @@
    @Schema(description = "人员职责表id,界面上零件号匹配不上用户指定的")
    private Long producePlanId;
    @Schema(description = "MES任务唯一标识")
    private String mesTaskId;
    /**
     * æ˜¯å¦ æœª ç¨‹åºè¡¥å……流程(临时流程)
     * @return æ˜¯å¦
blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
@@ -54,7 +54,7 @@
    public List<ProgramNodeVO> loadTree(String includeSend) {
        Integer workshopDictVal = Func.toInt(paramService.getParamValue(ParamConstants.WORKSHOP_DICT_KEY,DEFAULT_WORKSHOP_VALUE));
        Long rootDeptId = Func.toLong(paramService.rootDetpId());
        Long rootDeptId = Func.toLong(paramService.rootDeptId());
        TreeDept root =  treeDeptService.getById(rootDeptId);
        List<ProgramNodeVO> roots = new ArrayList<>();
        ProgramNodeVO rootVO = new ProgramNodeVO();
blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/NewProgrammingStatService.java
@@ -129,7 +129,7 @@
            }else{
                vo.setActCheckerName(this.userCommonService.getUserNameById(props.getActCheckerId()) );
            }
            if(props.getActCheckerId() == 0) {
            if(props.getActSeniorId() == 0) {
                vo.setActSeniorName(this.userCommonService.getUserNameById(props.getSeniorId()));
            }else{
                vo.setActSeniorName(this.userCommonService.getUserNameById(props.getActSeniorId()));
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ExceptionDispathCleanTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package org.springblade.mdm.task;
import lombok.extern.slf4j.Slf4j;
import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.flow.service.TaskDispatchService;
import org.springblade.mdm.machinefile.service.MachineFileScanService;
import org.springblade.mdm.machinefile.service.MachineFileService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
 * å¼‚常任务计划清除定时任务
 */
@Slf4j
@Component
@EnableScheduling
public class ExceptionDispathCleanTask {
    @Autowired
    private TaskDispatchService taskDispatchService;
    @Autowired
    private ParamService paramService;
    // æ¯5秒执行一次
    //@Scheduled(fixedRate = 1000000)
    //@Scheduled(cron = "0 1 0 * * ?") // æ¯å¤©ä¸Šåˆ0点1分执行
    //@Scheduled(cron = "0 */5 * * * ?")
    //@Scheduled(cron = "0 15 19 * * ?") //test
    @Scheduled(cron = "${task.cron.exception_dispatch_clean:0 1 * * * ?}")
    public void execute() {
        String networkType = paramService.getParamValue(ParamService.NETWORK_TYPE,ParamService.NETWORK_TYPE_SHEMI);
        if(ParamService.NETWORK_TYPE_SHEMI.equals(networkType)){
            //涉密网,执行异常任务清理
            taskDispatchService.cleanExpiredExceptionTask();
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/controller/MesController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,169 @@
package org.springblade.mdm.thirdpart.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.TaskDispatch;
import org.springblade.mdm.flow.excution.StartDispatcher;
import org.springblade.mdm.flow.service.TaskDispatchService;
import org.springblade.mdm.flow.vo.FlowStartResult;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.thirdpart.service.MesTaskService;
import org.springblade.mdm.thirdpart.vo.MesTaskFinishVO;
import org.springblade.mdm.thirdpart.vo.MesTaskVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/thirdparty/")
@Tag(name = "MES接口", description = "MES接口")
public class MesController {
    @Autowired
    private MesTaskService mesTaskService;
    @Autowired
    private StartDispatcher dispatcher;
    @Autowired
    private TaskDispatchService taskDispatchService;
    /**
     * æ–°å¢ž
     */
    @PostMapping("/new-mes-task")
    @Operation(summary = "接收MES任务", description = "接收MES任务")
    public R<Void> newTask(@RequestBody MesTaskVO mesTaskVO) {
        try {
            TaskAssignVO startVO = this.toTaskAssignVO(mesTaskVO);
            List<String> errors = checkTaskData(startVO);
            if (!errors.isEmpty()) {
                String msg = formatError(errors);
                log.error("接收MES任务{},验证失败:{}",mesTaskVO,msg);
                return R.fail(msg);
            }
            TaskDispatch dispatch = mesTaskService.saveTask(startVO);
            log.error("MES任务保存成功");
            if(!dispatch.isDuplicateTask()){
                try {
                    FlowStartResult result = dispatcher.start(startVO);
                    dispatch.setStatus(TaskDispatch.STATUS_STARTED);
                    dispatch.setProcessInstanceId(result.getProcessInstanceId());
                    dispatch.setProgramNo(result.getProgramNo());
                    taskDispatchService.updateById(dispatch);
                }catch (Exception e){
                    dispatch.setStatus(TaskDispatch.STATUS_EXCEPTION);
                    dispatch.setErrMsg(e.getMessage());
                    taskDispatchService.updateById(dispatch);
                    log.error("MES任务启动失败", e);
                }
            }
            return R.success();
        }catch (Exception e) {
            log.error("接收mes任务失败", e);;
            return R.fail(e.getMessage());
        }
    }
    //private IResultCode formatError(List<String> errors) {
    private String formatError(List<String> errors) {
        return StringUtils.join(errors,",");
    }
    /**
     * éªŒè¯æ•°æ®
     * @param startVO
     * @return
     */
    private List<String> checkTaskData(TaskAssignVO startVO) {
        List<String> errorList = new ArrayList<>();
        if(StringUtils.isBlank(startVO.getDrawingNo())){
            errorList.add("图号不能为空");
        }
        if(StringUtils.isBlank(startVO.getProcessNo())){
            errorList.add("工序号不能为空");
        }
        if(StringUtils.isBlank(startVO.getProcessEdition())){
            errorList.add("工序版次不能为空");
        }
        if(StringUtils.isBlank(startVO.getMachineCode())){
            errorList.add("设备编码不能为空");
        }
        //TODO å·¥åºåç§° æˆ‘们是必填,
        return errorList;
    }
    /**
     * ä»Žmesvo转换为内部任务分派vo
     * @param mesTaskVO
     * @return
     */
    TaskAssignVO toTaskAssignVO(MesTaskVO mesTaskVO) {
        TaskAssignVO taskAssignVO = new TaskAssignVO();
        BeanUtils.copyProperties(mesTaskVO, taskAssignVO);
        taskAssignVO.setTitle(taskAssignVO.getDrawingNo()+"-"+taskAssignVO.getProcessNo()+"-"+taskAssignVO.getProcessEdition()+"计划任务");
        taskAssignVO.setIsTempFlow(FlowContants.N);
        return taskAssignVO;
    }
    @PostMapping("/finish-task")
    @Operation(summary = "MES任务完成推送", description = "MES任务完成推送")
    public R<Void> finishTask(@RequestBody MesTaskFinishVO finishTaskVO) {
        log.info("收到mes任务完成推送:{}",finishTaskVO);
        List<String> errors = checkFinishTaskData(finishTaskVO);
        if (!errors.isEmpty()) {
            String msg = formatError(errors);
            log.error("接收MES完成推送{},验证失败:{}",finishTaskVO,msg);
            return R.fail(msg);
        }
        try {
            mesTaskService.finishTask(finishTaskVO);
            return R.success();
        }catch(Exception e){
            log.error("接收MES工序完成信息失败", e);;
            return R.fail("内部错误");
        }
    }
    private List<String> checkFinishTaskData(MesTaskFinishVO finishTaskVO) {
        List<String> errorList = new ArrayList<>();
        if(StringUtils.isBlank(finishTaskVO.getMesTaskId())){
            errorList.add("唯一标识不能为空");
        }
        if(StringUtils.isBlank(finishTaskVO.getInspector())){
            errorList.add("检验员不能为空");
        }
        if(finishTaskVO.getCheckTime() == null){
            errorList.add("检验反馈时间不能为空");
        }
        return errorList;
    }
    @GetMapping("/ping")
    @Operation(summary = "MES ping", description = "测试接口通畅")
    public R<String> ping() {
        try {
            return R.data("pong");
        }catch (Exception e) {
            return R.fail(e.getMessage());
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/service/MesTaskService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package org.springblade.mdm.thirdpart.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.springblade.mdm.flow.constants.FlowVariableContants;
import org.springblade.mdm.flow.entity.TaskDispatch;
import org.springblade.mdm.flow.service.TaskDispatchService;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.thirdpart.vo.MesTaskFinishVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * ä»»åŠ¡æ´¾å·¥æ•°æ® å¤„理服务
 *
 * @author yangys
 */
@Slf4j
@Service
public class MesTaskService {
    @Autowired
    private TaskDispatchService taskDispatchService;
    @Autowired
    private RuntimeService runtimeService;
    /**
     * ä¿å­˜mes任务
     * @param startVO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public TaskDispatch saveTask(TaskAssignVO startVO) {
        TaskDispatch taskDispatch = new TaskDispatch();
        BeanUtils.copyProperties(startVO, taskDispatch);
        boolean isDuplicate = taskDispatchService.checkIsDuplicate(startVO);
        if(isDuplicate){
            taskDispatch.setStatus(TaskDispatch.STATUS_DUP);
        }
        taskDispatchService.save(taskDispatch);
        taskDispatchService.addDrawingNos(taskDispatch.getDrawingNo());
        return taskDispatch;
    }
    /**
     * mes å®ŒæˆæŽ¨é€
     * @param finishTaskVO
     */
    public void finishTask(MesTaskFinishVO finishTaskVO) {
        TaskDispatch taskDispatch = taskDispatchService.getByMesTaskId(finishTaskVO.getMesTaskId());
        if(taskDispatch != null && taskDispatch.getProcessInstanceId() != null){
            taskDispatch.setProcessCard(finishTaskVO.getProcessCard());
            taskDispatch.setInspector(finishTaskVO.getInspector());
            taskDispatch.setCheckTime(finishTaskVO.getCheckTime());
            taskDispatchService.updateById(taskDispatch);
            runtimeService.setVariable(taskDispatch.getProcessInstanceId(), FlowVariableContants.PROCESS_CARD,finishTaskVO.getProcessCard());
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package org.springblade.mdm.thirdpart.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
import java.util.Date;
@Data
@Schema(description = "MES任务完成数据")
public class MesTaskFinishVO {
    @Schema(description = "检验反馈时间")
    private Date checkTime;
    @Schema(description = "过程卡号")
    private String processCard;
    @Schema(description = "批次号")
    private Long batchId;
    @Schema(description = "检验员")
    private String inspector;
    @Schema(description = "MES任务唯一标识")
    private String mesTaskId;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package org.springblade.mdm.thirdpart.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springblade.mdm.flow.constants.FlowContants;
import java.time.LocalDate;
@Data
@Schema(description = "MES任务计划")
public class MesTaskVO {
    @Schema(description = "流程标题")
    private String title;
    @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;
    @Schema(description = "偏离单号")
    private String deviation;
    @Schema(description = "是否临时流程,值:Y/N")
    private String isTempFlow;
    @Schema(description = "任务派工记录表id")
    private Long taskDispatchId;
    @Schema(description = "人员职责表id,界面上零件号匹配不上用户指定的")
    private Long producePlanId;
    @Schema(description = "MES任务唯一标识")
    private String mesTaskId;
    /**
     * æ˜¯å¦ æœª ç¨‹åºè¡¥å……流程(临时流程)
     * @return æ˜¯å¦
     */
    public boolean isTemporaryFlow(){
        return FlowContants.Y.equals(isTempFlow);
    }
    /**
     * æ˜¯å¦åç¦»å•
     * @return æ˜¯å¦
     */
    public boolean isDeviationFlow(){
        return StringUtils.isNotBlank(deviation);
    }
}