严智鑫
2025-03-11 67cbfd8f7c2ed9598eef92470313f3cf31028ea1
2.13-3-7号  现场标注线调试更改
47个文件已修改
5个文件已添加
12个文件已删除
4590 ■■■■■ 已修改文件
JiuMuMesParent/JsonFile/PlcLamination.json 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/JsonFile/PlcLoad.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/JsonFile/PlcLoad2.json 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/JsonFile/PlcMarking.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/JsonFile/PlcSilkScreen.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/common/servicebase/src/main/java/com/mes/service/ModbusTcp.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/gateway/target/gateway-1.0-SNAPSHOT.jar.original 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/AppRunnerConfig.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/MachineTask.java 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/MarkingTask.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCCleaning.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCEdging.java 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCFlipSlice.java 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCLoad.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCManualReporting.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCMechanicalArm.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCRotate.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCScanQRVerify.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCScanQRWorks.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCScanQrCodesReport.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/SilkScreenTask.java 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/controller/MachineController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/KBBTProgramsOperationLogBP.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/Machine.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/PrimitiveTask.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/RoleMenu.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/LineConfigurationService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/MachineService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/AccountServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/LineConfigurationServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/MachineServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingLogServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineEdging.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineFlipSlice.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLamination.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineMarking.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineRotate.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineSilkScreen.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineThread.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/src/test/java/com/mes/DeviceInteractionModuleApplicationTest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/target/deviceInteraction-1.0-SNAPSHOT.jar.original 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/moduleService/DeviceInteractionModule/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/config.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package-lock.json 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package.json 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/main.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/constants.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/request.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Edging/edging.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/FlipSlice/flipSlice.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/GlueDispenser/glueDispenser.vue 443 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/KanbanDisplay/kanbanDisplay.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Lamination/lamination.vue 412 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/ManualReporting/manualReporting.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Marking/marking.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/MechanicalArm/mechanicalArm.vue 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/MechanicalArm/mechanicalArm2.vue 321 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Rotate/rotate.vue 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/SilkScreen/SilkScreen.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JiuMuMesParent/JsonFile/PlcLamination.json
New file
@@ -0,0 +1,86 @@
{
   "plcAddressBegin":"DB44.0",
   "plcAddressLenght":"22",
   "dataType":"word",
   "parameteInfor":[
       {
         "codeId": "plcRequest",
         "addressIndex": "0",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
       {
         "codeId": "plcReport",
         "addressIndex": "2",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
       {
         "codeId": "mesSend",
         "addressIndex": "4",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
       {
         "codeId": "mesSendID",
         "addressIndex": "6",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
       {
         "codeId": "length",
         "addressIndex": "8",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
     {
       "codeId": "width",
       "addressIndex": "10",
       "addressLenght": "2",
       "ratio": "1",
       "unit": ""
     },
     {
       "codeId": "thickness",
       "addressIndex": "12",
       "addressLenght": "2",
       "ratio": "1",
       "unit": ""
     },
       {
         "codeId": "mesConfirm",
         "addressIndex": "14",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
       {
         "codeId": "mesConfirmID",
         "addressIndex": "16",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
       {
         "codeId": "alarmStatus",
         "addressIndex": "18",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       },
       {
         "codeId": "machineStatusWord",
         "addressIndex": "20",
         "addressLenght": "2",
         "ratio": "1",
         "unit": ""
       }
   ]
}
JiuMuMesParent/JsonFile/PlcLoad.json
@@ -5,14 +5,14 @@
   "parameterInfo":[
       {
         "codeId": "plcRequest",
         "addressIndex": "2",
         "addressIndex": "0",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "plcRequestID",
         "addressIndex": "4",
         "addressIndex": "2",
         "addressLength": "2",
         "type": "word",
         "unit": ""
JiuMuMesParent/JsonFile/PlcLoad2.json
New file
@@ -0,0 +1,134 @@
{
   "plcAddressBegin":"0000",
   "plcAddressLength":"50",
   "requestHead":"000100000006010300000032",
   "parameterInfo":[
       {
         "codeId": "plcRequest",
         "addressIndex": "2",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "plcRequestID",
         "addressIndex": "4",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "plcReport",
         "addressIndex": "10",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "plcReportID",
         "addressIndex": "12",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "mesSend",
         "addressIndex": "20",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "mesSendCount",
         "addressIndex": "22",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "mesConfirm",
         "addressIndex": "40",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "alarmStatus",
         "addressIndex": "62",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "alarmWord1",
         "addressIndex": "64",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "alarmWord2",
         "addressIndex": "66",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "alarmWord3",
         "addressIndex": "68",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "machineStatusWord",
         "addressIndex": "70",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "inputOrOut2",
         "addressIndex": "72",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "inputOrOut3",
         "addressIndex": "74",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "inputOrOut4",
         "addressIndex": "76",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "inputOrOut5",
         "addressIndex": "78",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "inputOrOut6",
         "addressIndex": "80",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "inputOrOut7",
         "addressIndex": "82",
         "addressLength": "2",
         "type": "word",
         "unit": ""
       }
     ]
}
JiuMuMesParent/JsonFile/PlcMarking.json
@@ -67,7 +67,7 @@
         "unit": ""
       },
       {
         "codeId": "mesSend",
         "codeId": "standby27",
         "addressIndex": "22",
         "addressLenght": "2",
         "ratio": "1",
JiuMuMesParent/JsonFile/PlcSilkScreen.json
@@ -52,6 +52,7 @@
         "type": "word",
         "unit": ""
       },
       {
         "codeId": "width",
         "addressIndex": "26",
JiuMuMesParent/common/servicebase/src/main/java/com/mes/service/ModbusTcp.java
@@ -46,7 +46,7 @@
    public void connect(){
        try {
            this.socket=new Socket(Ip,Port);
            this.socket.setSoTimeout(2000);
            this.socket.setSoTimeout(1000);
        }catch (Exception e) {
            log.info("The IP address of the host cannot be determined:{}",e.getMessage());
        }
JiuMuMesParent/gateway/target/gateway-1.0-SNAPSHOT.jar.original
Binary files differ
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/AppRunnerConfig.java
@@ -1,8 +1,10 @@
package com.mes;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mes.common.*;
import com.mes.job.PLCLoad;
import com.mes.md.entity.Machine;
import com.mes.md.mapper.MachineMapper;
import com.mes.md.mapper.PrimitiveTaskMapper;
import com.mes.md.mapper.TaskingMapper;
import com.mes.md.service.LineConfigurationService;
import com.mes.md.service.PrimitiveTaskService;
@@ -15,6 +17,8 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
@@ -31,14 +35,38 @@
    PrimitiveTaskService primitiveTaskService;
    @Resource
    LineConfigurationService lineConfigurationService;
    @Resource
    PrimitiveTaskMapper primitiveTaskMapper;
    @Override
    public void run(ApplicationArguments args) throws Exception {
        // TODO Auto-generated method stub
        new MachineLoad(taskingMapper,machineMapper,taskingService,primitiveTaskService,lineConfigurationService).start();
        new MachineEdging(taskingMapper,machineMapper,taskingService,primitiveTaskService,lineConfigurationService).start();
        new MachineFlipSlice(machineMapper,taskingService).start();
        new MachineMarking(machineMapper,taskingService).start();
        new MachineSilkScreen(machineMapper,taskingService).start();
        new MachineRotate(machineMapper,taskingService).start();
        List<Machine> machineListLoad =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"上片").eq(Machine::getState,"开工"));
        List<Machine> machineListEdging =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"磨边").eq(Machine::getState,"开工"));
        List<Machine> machineListFlipSlice =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"翻片").eq(Machine::getState,"开工"));
        List<Machine> machineListMarking =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"自动打标机").eq(Machine::getState,"开工"));
        List<Machine> machineListSilkScreen =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"自动丝印机").eq(Machine::getState,"开工"));
        List<Machine> machineListRotate =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"旋转台").eq(Machine::getState,"开工"));
        List<Machine> machineListLamination =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"自动贴膜机").eq(Machine::getState,"开工"));
        for (Machine item:machineListLoad){
            new MachineLoad(item,primitiveTaskMapper,taskingMapper,machineMapper,taskingService,primitiveTaskService,lineConfigurationService).start();
        }
        for (Machine item:machineListEdging){
            new MachineEdging(item,taskingMapper,machineMapper,taskingService,primitiveTaskService,lineConfigurationService).start();
        }
        for (Machine item:machineListFlipSlice){
            new MachineFlipSlice(item,machineMapper,taskingService).start();
        }
        for (Machine item:machineListMarking){
            new MachineMarking(item,machineMapper,taskingService).start();
        }
        for (Machine item:machineListSilkScreen){
            new MachineSilkScreen(item,machineMapper,taskingService).start();
        }
        for (Machine item:machineListRotate){
            new MachineRotate(item,machineMapper,taskingService).start();
        }
        for (Machine item:machineListLamination){
            new MachineLamination(item,machineMapper,taskingService).start();
        }
    }
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/MachineTask.java
@@ -1,18 +1,19 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.mes.common.S7objectFlipSlice;
import com.mes.common.S7objectMachine;
import com.mes.common.S7objectMarking;
import com.mes.device.PlcParameterInfo;
import com.mes.device.PlcParameterObject;
import com.mes.md.entity.Machine;
import com.mes.md.entity.Tasking;
import com.mes.md.entity.*;
import com.mes.md.mapper.GlassInfoMapper;
import com.mes.md.mapper.MachineMapper;
import com.mes.md.mapper.TaskingMapper;
import com.mes.md.service.TaskingService;
import com.mes.md.service.*;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +22,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 自动打标机
@@ -41,128 +43,231 @@
    @Autowired
    TaskingService taskingService;
    @Autowired
    ProjectService projectService;
    @Autowired
    PrimitiveTaskService primitiveTaskService;
    @Autowired
    KBBTJPDrawingBPService kBBTJPDrawingBPService;
    @Autowired
    LineConfigurationService lineConfigurationService;
    @Autowired
    private GlassInfoMapper glassInfoMapper;
    public int a =1;
    public S7objectMachine s7objectMachine;
    public List<Map> sendRecords = new ArrayList<>();
    private List<Machine> machineListLoad;
    private List<Machine> machineListEdging;
    private List<Machine> machineListFlipSlice;
    private List<Machine> machineListMarking;
    private List<Machine> machineListSilkScreen;
    private List<Machine> machineListRotate;
    private List<Machine> machineListGlueDispenser;
    private List<Machine> machineListScanQrCode;
    private List<Machine> machineListLamination;
    //@Scheduled(fixedDelay = 1000)
    public void plcMachineTask() {
        Long machineId=12L;
        Machine machine=machineMapper.selectById(machineId);
        if (s7objectMachine==null){
            s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),"PlcMarking", EPlcType.S1500);
            s7objectMachine.start();
        }
        PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject;
        PlcParameterInfo plcRequest =plcParameterObject.getPlcParameter("plcRequest");//请求字
        PlcParameterInfo plcRequestID =plcParameterObject.getPlcParameter("plcRequestID");//请求ID
        PlcParameterInfo mesSend =plcParameterObject.getPlcParameter("mesSend");//发送字
        PlcParameterInfo isMark =plcParameterObject.getPlcParameter("isMark");//发送ID【0 不打标,1标准模式,2定制模式】
        PlcParameterInfo drawingMark =plcParameterObject.getPlcParameter("drawingMark");//打标图纸地址
        PlcParameterInfo lengthOutOfService =plcParameterObject.getPlcParameter("length(OutOfService)");//长
        PlcParameterInfo widthOutOfService =plcParameterObject.getPlcParameter("width(OutOfService)");//宽
        PlcParameterInfo markingMode =plcParameterObject.getPlcParameter("markingMode");//
        PlcParameterInfo plcReport =plcParameterObject.getPlcParameter("plcReport");//汇报字
        PlcParameterInfo plcReportID =plcParameterObject.getPlcParameter("plcReportID");//汇报ID
        PlcParameterInfo mesConfirm =plcParameterObject.getPlcParameter("mesConfirm");//确认字
        PlcParameterInfo mesConfirmID =plcParameterObject.getPlcParameter("mesConfirmID");//确认ID
        String str=S7objectMarking.getinstance().plccontrol.readString("DB14.30");
        //String width=S7objectMarking.getinstance().plccontrol.readWord(widthOutOfService.getAddress());
        log.info("plcRequest:{},plcRequestID:{},mesSend:{},mesSendID:{},drawingMark:{}," +
                        "plcReport:{},plcReportID:{},mesConfirm:{},mesConfirmID:{}"
                ,plcRequest.getValue(),plcRequestID.getValue(),mesSend.getValue(),isMark.getValue(),drawingMark.getValue(),
                plcReport.getValue(),plcReportID.getValue(),mesConfirm.getValue(),mesConfirmID.getValue());
        if ("0".equals(plcRequest.getValue())&&"1".equals(mesSend.getValue())) {
            //发送字置0
            log.info("1.发送字置零,清除上次发送的数据{},{},{},{},{}"
                    ,markingMode.getValue()
                    ,isMark.getValue()
                    ,lengthOutOfService.getValue()
                    ,widthOutOfService.getValue()
                    ,mesSend.getValue());
            //S7objectMarking.getinstance().plccontrol.writeString(drawingMark.getAddress(),"");
            S7objectMarking.getinstance().plccontrol.writeWord(markingMode.getAddress(), 0);
            S7objectMarking.getinstance().plccontrol.writeWord(lengthOutOfService.getAddress(), 0);
            S7objectMarking.getinstance().plccontrol.writeWord(widthOutOfService.getAddress(), 0);
            S7objectMarking.getinstance().plccontrol.writeWord(isMark.getAddress(), 0);
            S7objectMarking.getinstance().plccontrol.writeWord(mesSend.getAddress(), 0);
            return;
        }
        if ("0".equals(plcReport.getValue())&&"1".equals(mesConfirm.getValue())) {
            log.info("2.确认字置零");
            //发送字置0
            S7objectMarking.getinstance().plccontrol.writeWord(mesConfirm.getAddress(), 0);
            return;
        }
        if("1".equals(plcReport.getValue())&&"0".equals(mesConfirm.getValue())){
            int finishCount=taskingService.finishMachineTask(machine);
            log.info("3、任务完成");
            if(finishCount>0){//有任务
                S7objectMarking.getinstance().plccontrol.writeWord(mesConfirm.getAddress(), 1);
                return;
            }
        }
        if("1".equals(plcRequest.getValue())&&"0".equals(mesSend.getValue())&& !plcRequestID.getValue().isEmpty()&&"开工".equals(machine.getState())){
            Tasking tasking;
            if("0".equals(plcRequestID.getValue())){
                //标准模式
                tasking=taskingService.startMachineTask(machine);
            }else{
                //定制模式
                tasking=taskingService.startMachineTask(machine,plcRequestID.getValue());
            }
            //log.info("4、发送任务  设备状态:{},  数据:{},",machine,tasking);
            if(tasking!=null){
                //模式:1定制  0 批量      是否打标:0不打标   1打标
                int isMark_=tasking.getDrawingMarking()==null?0:1;
                int isMarkingMode_="定制".equals(tasking.getTaskType()) ?1:0;
                log.info("4、发送数据:{},{},{},{},{},{}"
                        ,tasking.getProgramId()
                        ,tasking.getLength().intValue(),tasking.getWidth().intValue(),isMark_,isMarkingMode_,1);
                if(isMark_==1){
                    S7objectMarking.getinstance().plccontrol.writeString(drawingMark.getAddress(), tasking.getProgramId());
                }
                //S7objectMarking.getinstance().plccontrol.writeUInt32 (mesSendID.getAddress(), 2);
                S7objectMarking.getinstance().plccontrol.writeWord(lengthOutOfService.getAddress(), tasking.getLength().intValue());
                S7objectMarking.getinstance().plccontrol.writeWord(widthOutOfService.getAddress(), tasking.getWidth().intValue());
                S7objectMarking.getinstance().plccontrol.writeWord(isMark.getAddress(), isMark_);
                S7objectMarking.getinstance().plccontrol.writeWord(markingMode.getAddress(), isMarkingMode_);
                S7objectMarking.getinstance().plccontrol.writeWord(mesSend.getAddress(), 1);
                return;
            }
        }
        //log.info("无可执行的条件");
    }
    //@Scheduled(fixedDelay = 1000)
    public void markingTasks() {
    //机械手
    @Scheduled(fixedDelay = 500)
    public void MarkingTasks() {
        machineListLoad =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"上片"));
        JSONObject jsonObject = new JSONObject();
        Machine machine=machineMapper.selectById(11L);
        List<Tasking> taskingList=taskingService.findMachineTask(machine);
        jsonObject.append("taskingList", taskingList);
        jsonObject.append("machine", machine);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("marking");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    try {
                        webserver.sendMessage(jsonObject.toString());
                        List<String> messages = webserver.getMessages();
                        if (!messages.isEmpty()) {
                            // // 将最后一个消息转换为整数类型的列表
                            webserver.clearMessages();
                        }
                    }catch (Exception e) {
        jsonObject.append("sessionMapName", "loadTask");
        for (Machine machine : machineListLoad) {
            JSONObject jsonObjectItem = new JSONObject();
            //标准模式  找已领取未完成的第一条任务
            LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
            //此线路已领取的任务
            List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfiguration.getLineId());
            //此线路未领取的任务  本地
            //List<PrimitiveTask> findPrimitiveTask=primitiveTaskService.findPrimitiveTaskNotFinish();
            //此线路未领取的任务  客户数据库
            List<KBBTJPDrawingBP> list =kBBTJPDrawingBPService.notReceiveKBBTJPDrawingBP();
            jsonObjectItem.append("findPrimitiveTask", list);
            jsonObjectItem.append("findPrimitiveTasking", findPrimitiveTasking);
            //jsonObject.append("findPrimitiveTask", findPrimitiveTask);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //磨边机
    @Scheduled(fixedDelay = 500)
    public void edgingTasks() {
        machineListEdging =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"磨边"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "edgingTask");
        for (Machine machine : machineListEdging) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingService.findMachineTask(machine);
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //翻片台
    @Scheduled(fixedDelay = 500)
    public void flipSliceTasks() {
        machineListFlipSlice =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"翻片"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "flipSlice");
        for (Machine machine : machineListFlipSlice) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingService.findMachineTask(machine);
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //打标机
    @Scheduled(fixedDelay = 500)
    public void markingTasks() {
        machineListMarking =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"自动打标机"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "marking");
        for (Machine machine : machineListMarking) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingService.findMachineTask(machine);
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //丝印机
    @Scheduled(fixedDelay = 500)
    public void silkScreenTasks() {
        machineListSilkScreen =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"自动丝印机"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "silkScreenTask");
        for (Machine machine : machineListSilkScreen) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingService.findMachineTask(machine);
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //点胶机
    //@Scheduled(fixedDelay = 500)
    public void glueDispenserTasks() {
        machineListGlueDispenser =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"自动点胶机"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "glueDispenser");
        for (Machine machine : machineListGlueDispenser) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingService.findMachineTask(machine);
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //旋转台
    @Scheduled(fixedDelay = 500)
    public void rotateTasks() {
        machineListRotate =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"旋转台"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "rotate");
        for (Machine machine : machineListRotate) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingService.findMachineTask(machine);
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //贴膜机
    @Scheduled(fixedDelay = 500)
    public void laminationTasks() {
        machineListLamination =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"自动贴膜机"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "lamination");
        for (Machine machine : machineListLamination) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingService.findMachineTask(machine);
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObjectItem.append("sendRecords", sendRecords);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //报工页面查询
    @Scheduled(fixedDelay = 1000)
    public void manualReporting() {
        machineListScanQrCode =machineMapper.selectList(new QueryWrapper<Machine>().lambda().eq(Machine::getName,"识别报工"));
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sessionMapName", "manualReporting");
        for (Machine machine : machineListScanQrCode) {
            JSONObject jsonObjectItem = new JSONObject();
            List<Tasking> taskingList=taskingMapper.selectJoinList(Tasking.class,new MPJLambdaWrapper<Tasking>()
                    .selectAll(Tasking.class)
                    .innerJoin(LineConfiguration.class,LineConfiguration::getId,Tasking::getLineConfigurationId)
                    .innerJoin(Machine.class,Machine::getId,LineConfiguration::getMachineId)
                    .eq(LineConfiguration::getMachineId,machine.getId())
                    .eq(Tasking::getGlassState,"正常")
                    .eq(Tasking::getState,"线上")
                    .ne(Tasking::getWorkState,"完工")
                    .orderByDesc(Tasking::getOperationRecordTime));
            jsonObjectItem.append("taskingList", taskingList);
            jsonObjectItem.append("machine", machine);
            jsonObject.append(machine.getId().toString(), jsonObjectItem);
        }
        this.webSocketServer(jsonObject);
    }
    //线下玻璃查询
    @Scheduled(fixedDelay = 1000)
    public void downLineTask() {
        JSONObject jsonObject = new JSONObject();
        List<Tasking> downLineTask=taskingService.findDownLineTask();
        jsonObject.append("sessionMapName", "downLineTask");
        jsonObject.append("downLineTask", downLineTask);
        this.webSocketServer(jsonObject);
    }
    public void webSocketServer(JSONObject jsonObject) {
        try {
            String sessionMapName=jsonObject.getJSONArray("sessionMapName").get(0).toString();
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get(sessionMapName);
            if (sendwServer != null) {
                for (WebSocketServer webserver : sendwServer) {
                    if (webserver != null) {
                        try {
                            webserver.sendMessage(jsonObject.toString());
                            List<String> messages = webserver.getMessages();
                            if (!messages.isEmpty()) {
                                // // 将最后一个消息转换为整数类型的列表
                                webserver.clearMessages();
                            }
                        }catch (Exception e) {
                        }
                    } else {
                        log.info("Home is closed");
                    }
                } else {
                    log.info("Home is closed");
                }
            }
        }catch (Exception e) {
        }
    }
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/MarkingTask.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCCleaning.java
@@ -51,8 +51,8 @@
        if (machine.getIsLog()>0){
            s7objectMachine.consoleLogInfo();
        }
        int edgSpeedInt=PLCEdging.edgSpeed;
        int edgThinnessInt=PLCEdging.thinness;
        int edgSpeedInt=0;
        int edgThinnessInt=0;
        if(!(edgSpeedInt+"").equals(edgSpeed.getValue())||!(edgThinnessInt+"").equals(thinness.getValue())){
            //给清洗机器发送磨边机速度
            S7objectCleaning.getinstance().plccontrol.writeWord(edgSpeed.getAddress(), edgSpeedInt);
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCEdging.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCFlipSlice.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCLoad.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCManualReporting.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCMechanicalArm.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCRotate.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCScanQRVerify.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCScanQRWorks.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/PLCScanQrCodesReport.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/job/SilkScreenTask.java
File was deleted
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/controller/MachineController.java
@@ -50,5 +50,21 @@
        int count =machineService.toggleModeMachine(machine);
        return Result.build(200,"修改成功:"+count,count);
    }
    @ApiOperation("当前旋转模式 【1旋转/2不旋转】")
    @PostMapping("/toggleModeRotate")
    @ResponseBody
    public Result toggleModeRotate(@RequestBody Machine machine) {
        int count =machineService.toggleModeRotate(machine);
        return Result.build(200,"修改成功:"+count,count);
    }
    @ApiOperation("[手动上片模式]  修改数量")
    @PostMapping("/manualOperationTask")
    @ResponseBody
    public Result manualOperationTask(@RequestBody Machine machine) {
        int count =machineService.manualOperationTask(machine);
        return Result.build(200,"修改成功:"+count,count);
    }
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/KBBTProgramsOperationLogBP.java
@@ -173,10 +173,11 @@
    @TableField(value="[operation record_time]")
    private Date operationRecordTime;
//    /**
//     * 操作者
//     */
//    private String operationRecord;
    /**
     * 操作者
     */
    @TableField(value="operationRecord")
    private String operationRecord;
    /**
     * 操作类型   【开始/结束】
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/Machine.java
@@ -31,6 +31,10 @@
     * 设备名称
     */
    private String name;
    /**
     * 协议文件名称
     */
    private String fileName;
    /**
     * 设备IP
@@ -71,15 +75,34 @@
     */
    private Integer todayCount;
//    /**
//     * 开机状态
//     */
//    private String statePowerOn;
//
//    /**
//     * 联机状态
//     */
//    private String stateOnLine;
    /**
     * 开机状态
     */
    private String statePowerOn;
    /**
     * 联机状态
     */
    private String stateOnLine;
    /**
     * 手动任务数量
     */
    private int taskCount;
    /**
     * 手动任务完成数量
     */
    private int finshCount;
    /**
     * 旋转模式   1 旋转  2 不旋转
     */
    private int rotateMode;
    /**
     *
     */
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/PrimitiveTask.java
@@ -177,4 +177,9 @@
     */
    private Integer unusualCount;
    /**
     * 上片数量
     */
    private Integer loadCount;
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/entity/RoleMenu.java
@@ -46,5 +46,10 @@
     */
    private Integer menuSequence;
    /**
     * 页面参数:用于控制同页面展示不同数据
     */
    private String params;
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/LineConfigurationService.java
@@ -15,4 +15,6 @@
 */
public interface LineConfigurationService extends MPJBaseService<LineConfiguration> {
    LineConfiguration machineLineConfiguration(Machine machine);
    LineConfiguration machineLineConfigurationBefore(Machine machine);
    LineConfiguration machineLineConfigurationAfter(Machine machine);
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/MachineService.java
@@ -18,9 +18,21 @@
     * @return
     */
    int openOrCloseMachine(Machine machine);
    /**
     * @param machine 添加手动上片任务
     * @return
     */
    int manualOperationTask(Machine machine);
    /**
     * @param machine 切换设备模式:(上片:【1定制/2标准】),其他设备暂时没有模式
     * @return
     */
    int toggleModeMachine(Machine machine);
    /**
     * @param machine 切换旋转模式:(旋转:【1旋转/2不旋转】)
     * @return
     */
    int toggleModeRotate(Machine machine);
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/AccountServiceImpl.java
@@ -47,6 +47,7 @@
                .selectAs(RoleMenu::getMenuId,"menu_id")
                .selectAs(RoleMenu::getPageId,"page_id")
                .selectAs(RoleMenu::getMenuSequence,"remark")
                .selectAs(RoleMenu::getParams,"params")
                .selectAs(Menu::getMenuName,"menu_name")
                .selectAs(Menu::getMenuNumber,"menu_number")
                .selectAs(Menu::getRemark,"menu_remark")
@@ -85,6 +86,7 @@
                    page.put("page_number",item.get("page_number"));
                    page.put("page_url",item.get("page_url"));
                    page.put("menu_sequence",item.get("menu_sequence"));
                    page.put("params",item.get("params"));
                    thisPages.add(page);
                    thisMenu.put("pages",thisPages);
                    thisMenus.set(index,thisMenu);
@@ -106,6 +108,7 @@
                    page.put("page_number",item.get("page_number"));
                    page.put("page_url",item.get("page_url"));
                    page.put("menu_sequence",item.get("menu_sequence"));
                    page.put("params",item.get("params"));
                    thisPages.add(page);
                    thisMenu.put("pages",thisPages);
                    thisMenus.add(thisMenu);
@@ -127,6 +130,7 @@
                    page.put("page_number",item.get("page_number"));
                    page.put("page_url",item.get("page_url"));
                    page.put("menu_sequence",item.get("menu_sequence"));
                    page.put("params",item.get("params"));
                    pages.add(page);
                    menu.put("pages",pages);
                    menus.add(menu);
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/LineConfigurationServiceImpl.java
@@ -24,6 +24,11 @@
@Service
public class LineConfigurationServiceImpl extends MPJBaseServiceImpl<LineConfigurationMapper, LineConfiguration> implements LineConfigurationService {
    /**
     * @param machine 当前设备配置
     * @return
     */
    @Override
    public LineConfiguration machineLineConfiguration(Machine machine){
        List<LineConfiguration> machineLineConfiguration=baseMapper.selectJoinList(LineConfiguration.class,new MPJLambdaWrapper<LineConfiguration>()
@@ -34,4 +39,51 @@
        }
        return machineLineConfiguration.get(0);
    }
    /**
     * @param machine 当前设备的上一设备配置
     * @return
     */
    @Override
    public LineConfiguration machineLineConfigurationBefore(Machine machine){
        List<LineConfiguration> machineLineConfiguration=baseMapper.selectJoinList(LineConfiguration.class,new MPJLambdaWrapper<LineConfiguration>()
                .selectAll(LineConfiguration.class)
                .eq(LineConfiguration::getMachineId,machine.getId()));
        if(!machineLineConfiguration.isEmpty()){
            List<LineConfiguration> machineLineConfigurationBefore=baseMapper.selectJoinList(LineConfiguration.class,new MPJLambdaWrapper<LineConfiguration>()
                    .selectAll(LineConfiguration.class)
                    .eq(LineConfiguration::getLineId,machineLineConfiguration.get(0).getLineId())
                    .eq(LineConfiguration::getIsStart,1)
                    .lt(LineConfiguration::getProcessSequence,machineLineConfiguration.get(0).getProcessSequence())
                    .orderByDesc(LineConfiguration::getProcessSequence));
            if (!machineLineConfigurationBefore.isEmpty()){
                return machineLineConfigurationBefore.get(0);
            }
        }
        return null;
    }
    /**
     * @param machine 当前设备的下一设备配置
     * @return
     */
    @Override
    public LineConfiguration machineLineConfigurationAfter(Machine machine){
        List<LineConfiguration> machineLineConfiguration=baseMapper.selectJoinList(LineConfiguration.class,new MPJLambdaWrapper<LineConfiguration>()
                .selectAll(LineConfiguration.class)
                .eq(LineConfiguration::getMachineId,machine.getId()));
        if(!machineLineConfiguration.isEmpty()){
            List<LineConfiguration> machineLineConfigurationBefore=baseMapper.selectJoinList(LineConfiguration.class,new MPJLambdaWrapper<LineConfiguration>()
                    .selectAll(LineConfiguration.class)
                    .eq(LineConfiguration::getLineId,machineLineConfiguration.get(0).getLineId())
                    .eq(LineConfiguration::getIsStart,1)
                    .gt(LineConfiguration::getProcessSequence,machineLineConfiguration.get(0).getProcessSequence())
                    .orderByAsc(LineConfiguration::getProcessSequence));
            if (!machineLineConfigurationBefore.isEmpty()){
                return machineLineConfigurationBefore.get(0);
            }
        }
        return null;
    }
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/MachineServiceImpl.java
@@ -32,9 +32,22 @@
        }
        return 0;
    }
    /**
     * @param machine 切换设备模式:(上片:【1定制/2标准】),其他设备暂时没有模式
     * @param machine 添加手动上片任务
     * @return
     */
    @Override
    public int manualOperationTask(Machine machine){
        Machine oldmachine=baseMapper.selectById(machine);
        if(!Objects.isNull(oldmachine)){
            oldmachine.setTaskCount(machine.getTaskCount());
            oldmachine.setFinshCount(machine.getFinshCount());
            return baseMapper.updateById(oldmachine);
        }
        return 0;
    }
    /**
     * @param machine 切换设备模式:(上片:【1定制/2标准/3手动】,翻片:【1定制/2标准】 旋转:【1定制/2标准】),其他设备暂时没有模式
     * @return
     */
    @Override
@@ -47,5 +60,19 @@
        return 0;
    }
    /**
     * @param machine 切换旋转模式:(旋转:【1旋转/2不旋转】)
     * @return
     */
    @Override
    public int toggleModeRotate(Machine machine){
        Machine oldmachine=baseMapper.selectById(machine);
        if(!Objects.isNull(oldmachine)){
            oldmachine.setRotateMode(machine.getRotateMode());
            return baseMapper.updateById(oldmachine);
        }
        return 0;
    }
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingLogServiceImpl.java
@@ -60,6 +60,7 @@
                newData.setScanId(item.getScanId());
                newData.setProgramId(item.getProgramId());
                newData.setBatchNumber(item.getBatchNumber() == null ? "" : item.getBatchNumber());
                newData.setLineConfigurationId(item.getLineConfigurationId());
                newData.setTaskType(item.getTaskType());
                newData.setLength(item.getLength());
                newData.setWidth(item.getWidth());
@@ -77,6 +78,10 @@
                newData.setR_3_2(item.getR_3_2());
                newData.setR_4_1(item.getR_4_1());
                newData.setR_4_2(item.getR_4_2());
                newData.setSilkScreenY(item.getSilkScreenY());
                newData.setOperationRecord(item.getOperationRecord());
                newData.setOperationMode(item.getOperationMode());
                newData.setOperationRecordTime(item.getOperationRecordTime());
                newData.setCreateDate(new Date());
                kBBTProgramsOperationLogBPMapper.insert(newData);
                return newData;
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingServiceImpl.java
@@ -238,6 +238,7 @@
                    .eq(Tasking::getScanId,scan_id)
                    .eq(Tasking::getGlassState,"正常")
                    .eq(Tasking::getState,"线上")
                    .ne(Tasking::getWorkState,"完工")
                    .le(LineConfiguration::getProcessSequence,machineLineConfiguration.get(0).getProcessSequence())
                    .orderByAsc(Tasking::getTaskSequence));
            if(!list.isEmpty()){
@@ -325,11 +326,12 @@
    @Override
    public int finishMachineTask(Machine machine) {
        List<Tasking> list=this.findMachineWorkStateTask(machine,"正在工作");
        //当前设备的线路配置
        //查询当前设备线路配置
        List<LineConfiguration> machineLineConfiguration=lineConfigurationMapper.selectJoinList(LineConfiguration.class,new MPJLambdaWrapper<LineConfiguration>()
                .selectAll(LineConfiguration.class)
                .eq(LineConfiguration::getMachineId,machine.getId()));
        if(!machineLineConfiguration.isEmpty()){
            //当前设备存在线路配置,查询当前设备 在线路配置表中的下一设备
            List<LineConfiguration> listLineConfiguration=lineConfigurationMapper.selectJoinList(LineConfiguration.class,new MPJLambdaWrapper<LineConfiguration>()
                    .selectAll(LineConfiguration.class)
                    .eq(LineConfiguration::getLineId,machineLineConfiguration.get(0).getLineId())
@@ -338,12 +340,16 @@
                    .orderByAsc(LineConfiguration::getProcessSequence)
                    .orderByAsc(LineConfiguration::getPrioritySequence)
            );
            if(!list.isEmpty()){
                //标记任务状态
                Tasking tasking=list.get(0);
                LineConfiguration thisLineConfiguration=lineConfigurationMapper.selectById(tasking.getLineConfigurationId());
                tasking.setOperationRecord(thisLineConfiguration.getRemark()+thisLineConfiguration.getLineId());
                tasking.setOperationRecordTime(new Date());
                tasking.setOperationMode("结束");
                //listLineConfiguration不是空,表示当前设备配置关系中有下一设备
                // 否则表示无下一工序,即当前工序为最后一工序 标记状态完工
                if (!listLineConfiguration.isEmpty()){
                    tasking.setLineConfigurationId(listLineConfiguration.get(0).getId());
                    tasking.setWorkState("等待");
@@ -352,7 +358,6 @@
                else{
                    tasking.setWorkState("完工");
                    return baseMapper.updateById(tasking);
                    //return this.stopTasking(tasking);
                }
            }
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineEdging.java
@@ -36,10 +36,11 @@
    LineConfigurationService lineConfigurationService;
    public static int thinness = 40;
    public static int edgSpeed = 40;
    public static Long machineId = 6L;
    //public static Long machineId = 6L;
    public List<Map> sendRecords = new ArrayList<>();
    public MachineEdging(TaskingMapper taskingMapper, MachineMapper machineMapper, TaskingService taskingService, PrimitiveTaskService primitiveTaskService, LineConfigurationService lineConfigurationService){
    public Machine thisMachine;
    public MachineEdging(Machine machine,TaskingMapper taskingMapper, MachineMapper machineMapper, TaskingService taskingService, PrimitiveTaskService primitiveTaskService, LineConfigurationService lineConfigurationService){
        this.thisMachine = machine;
        this.taskingMapper = taskingMapper;
        this.machineMapper = machineMapper;
        this.taskingService = taskingService;
@@ -48,8 +49,8 @@
    }
    public void plcStart() {
        Machine machine=machineMapper.selectById(machineId);
        ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),"PlcEdging");
        Machine machine=machineMapper.selectById(thisMachine.getId());
        ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),machine.getFileName());
        try {
            modbusTcp1.connect();
            PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement("PlcEdging");
@@ -63,7 +64,6 @@
            PlcParameter plcRequest =plcAgreement.getPlcParameter("plcRequest");//请求字
            PlcParameter mesSend =plcAgreement.getPlcParameter("mesSend");//发送字
            PlcParameter plcReport =plcAgreement.getPlcParameter("plcReport");//汇报字
            PlcParameter plcReportID =plcAgreement.getPlcParameter("plcReportID");//汇报ID
@@ -195,13 +195,15 @@
            if(((1==plcRequest.getValueInt()&&0==mesSend.getValueInt())
                    &&"开工".equals(machine.getState())
                    &&taskingCount.size()<machine.getMaxTaskCount())){
                Machine loadMachine=machineMapper.selectById(2L);
                //Machine loadMachine=machineMapper.selectById(2L);
                LineConfiguration lineConfigurationBefore=lineConfigurationService.machineLineConfigurationBefore(machine);
                Machine loadMachine=machineMapper.selectById(lineConfigurationBefore.getMachineId());
                Tasking tasking;
                String scan_id="";
                if(loadMachine.getMode()==1){
                    //标准模式  找已领取未完成的第一条任务
                    LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
                    List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfiguration.getLineId());
                    //LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
                    List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfigurationBefore.getLineId());
                    //添加数据:
                    for(PrimitiveTask primitiveTask:findPrimitiveTasking){
                        List<Tasking> taskingTopList=taskingMapper.selectList(new QueryWrapper<Tasking>().lambda()
@@ -209,6 +211,7 @@
                        );
                        //任务数>已上数量
                        if(taskingTopList.size()<primitiveTask.getTaskQuantity()){
                            LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
                            Tasking taskingAdd=primitiveTaskService.convertListTasking(primitiveTask,lineConfiguration.getId());
                            Integer taskSequence=1;
                            if (machine.getTodayCount()>0&&machine.getTodayCount()<5000){
@@ -226,7 +229,9 @@
                    tasking=taskingService.startMachineTask(machine);
                }else{
                    //定制模式
                    String PlcRequestID_=clientTCPSocket();
                    LineConfiguration lineConfigurationAfter=lineConfigurationService.machineLineConfigurationBefore(machine);
                    Machine scanMachine=machineMapper.selectById(lineConfigurationAfter.getMachineId());
                    String PlcRequestID_=clientTCPSocket(scanMachine);
                    //String PlcRequestID_=",,46408889";
                    if (PlcRequestID_==null||PlcRequestID_.lastIndexOf(",")<0){
                        modbusTcp1.close();
@@ -267,6 +272,8 @@
                    modbusTcp1.close();
                    return;
                }
            }else if(0==plcRequest.getValueInt()){
                errorMachine(machine,"");
            }
            //}
@@ -285,9 +292,9 @@
            machineMapper.updateById(machine);
        }
    }
    public String clientTCPSocket() {
    public String clientTCPSocket(Machine machine) {
        try {
            Machine machine=machineMapper.selectById(4L);
            //Machine machine=machineMapper.selectById(4L);
            Socket clientSocket = new Socket(machine.getIp(), machine.getPort());
            try {
                clientSocket.setSoTimeout(1000);
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineFlipSlice.java
@@ -22,19 +22,21 @@
    private S7objectMachine s7objectMachine;
    public static int thinness = 40;
    public static int edgSpeed = 40;
    public static Long machineId = 6L;
    //public static Long machineId = 6L;
    public List<Map> sendRecords = new ArrayList<>();
    public Machine thisMachine;
    public MachineFlipSlice(MachineMapper machineMapper, TaskingService taskingService){
    public MachineFlipSlice(Machine machine,MachineMapper machineMapper, TaskingService taskingService){
        this.thisMachine = machine;
        this.machineMapper = machineMapper;
        this.taskingService = taskingService;
    }
    public void plcStart() {
        Long machineId=26L;
        Machine machine=machineMapper.selectById(machineId);
        //Long machineId=26L;
        Machine machine=machineMapper.selectById(thisMachine.getId());
        if (s7objectMachine==null){
            s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),"PlcFlipSlice", EPlcType.S1200);
            s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),machine.getFileName(), EPlcType.S1200);
            s7objectMachine.start();
        }
        PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject;
@@ -121,6 +123,8 @@
            }else if(!scan_id.isEmpty()){
                taskingService.scanMachineAdd(machine,scan_id);
            }
        }else if("0".equals(plcRequest.getValue())){
            nullMachine(machine);
        }
    }
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLamination.java
New file
@@ -0,0 +1,101 @@
package com.mes.plcTaskThread;
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
import com.mes.common.S7objectMachine;
import com.mes.device.PlcParameterInfo;
import com.mes.device.PlcParameterObject;
import com.mes.md.entity.Machine;
import com.mes.md.entity.Tasking;
import com.mes.md.mapper.MachineMapper;
import com.mes.md.service.TaskingService;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
public class MachineLamination extends Thread{
    private MachineMapper machineMapper;
    private TaskingService taskingService;
    private S7objectMachine s7objectMachine;
    public Machine thisMachine;
    public MachineLamination(Machine machine, MachineMapper machineMapper, TaskingService taskingService){
        this.thisMachine = machine;
        this.machineMapper = machineMapper;
        this.taskingService = taskingService;
    }
    public void plcStart() {
            Machine machine=machineMapper.selectById(thisMachine.getId());
            if (s7objectMachine==null){
                s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),machine.getFileName(), EPlcType.S1200);
                s7objectMachine.start();
            }
            PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject;
            PlcParameterInfo plcRequest =plcParameterObject.getPlcParameter("plcRequest");//请求字
            PlcParameterInfo mesSend =plcParameterObject.getPlcParameter("mesSend");//发送字
            PlcParameterInfo lengthOutOfService =plcParameterObject.getPlcParameter("length");//长
            PlcParameterInfo widthOutOfService =plcParameterObject.getPlcParameter("width");//宽
            PlcParameterInfo markingMode =plcParameterObject.getPlcParameter("thickness");//厚度
            PlcParameterInfo plcReport =plcParameterObject.getPlcParameter("plcReport");//汇报字
            PlcParameterInfo mesConfirm =plcParameterObject.getPlcParameter("mesConfirm");//确认字
            PlcParameterInfo mesConfirmID =plcParameterObject.getPlcParameter("mesConfirmID");//确认ID
            if (machine.getIsLog()>0){
                s7objectMachine.consoleLogInfo();
            }
            if ("0".equals(plcRequest.getValue())&&"1".equals(mesSend.getValue())) {
                //发送字置0
                log.info("1.发送字置零,清除上次发送的数据{}",mesSend.getValue());
                s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 0);
                return;
            }
            if ("0".equals(plcReport.getValue())&&"1".equals(mesConfirm.getValue())) {
                log.info("2.确认字置零");
                //发送字置0
                s7objectMachine.plccontrol.writeWord(mesConfirm.getAddress(), 0);
                return;
            }
            if("1".equals(plcReport.getValue())&&"0".equals(mesConfirm.getValue())){
                int finishCount=taskingService.finishMachineTask(machine);
                log.info("3、任务完成");
                if(finishCount>0){//有任务
                    s7objectMachine.plccontrol.writeWord(mesConfirm.getAddress(), 1);
                    return;
                }
                return;
            }
            List<Tasking> taskingCount=taskingService.findMachineWorkStateTask(machine,"正在工作");
            if("1".equals(plcRequest.getValue())&&"0".equals(mesSend.getValue())
                    &&"开工".equals(machine.getState())
                    &&taskingCount.size()<machine.getMaxTaskCount()){
                Tasking tasking=taskingService.startMachineTask(machine);
                if(tasking!=null){
                    log.info("4、发送数据:{},{},{}",tasking.getLength().intValue(),tasking.getWidth().intValue(),1);
                    s7objectMachine.plccontrol.writeWord(lengthOutOfService.getAddress(), tasking.getLength().intValue());//x
                    s7objectMachine.plccontrol.writeWord(widthOutOfService.getAddress(), tasking.getWidth().intValue());//y
                    s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 1);
                    return;
                }
            }
        }
    @Override
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(1000);
                plcStart();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java
@@ -34,10 +34,12 @@
    PrimitiveTaskMapper primitiveTaskMapper;
    LineConfigurationService lineConfigurationService;
    public Long machineId = 2L;
    public Machine thisMachine;
    //public Long machineId = 2L;
    public List<Map> sendRecords = new ArrayList<>();
    public MachineLoad(TaskingMapper taskingMapper, MachineMapper machineMapper, TaskingService taskingService, PrimitiveTaskService primitiveTaskService, LineConfigurationService lineConfigurationService){
    public MachineLoad(Machine machine,PrimitiveTaskMapper primitiveTaskMapper,TaskingMapper taskingMapper, MachineMapper machineMapper, TaskingService taskingService, PrimitiveTaskService primitiveTaskService, LineConfigurationService lineConfigurationService){
        this.thisMachine = machine;
        this.primitiveTaskMapper = primitiveTaskMapper;
        this.taskingMapper = taskingMapper;
        this.machineMapper = machineMapper;
        this.taskingService = taskingService;
@@ -45,15 +47,23 @@
        this.lineConfigurationService = lineConfigurationService;
    }
    public void plcStart() {
        Machine machine=machineMapper.selectById(machineId);
        ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),"PlcLoad");
        Machine machine=machineMapper.selectById(thisMachine.getId());
        ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),machine.getFileName());
        modbusTcp1.connect();
        PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement("PlcLoad");
        try {
            if(!modbusTcp1.read(plcAgreement)){
                log.info("通讯读取新数据失败");
                if(!"关机".equals(machine.getStatePowerOn())){
                    machine.setStatePowerOn("关机");
                    machineMapper.updateById(machine);
                }
                modbusTcp1.close();
                return;
            }
            if(!"开机".equals(machine.getStatePowerOn())){
                machine.setStatePowerOn("开机");
                machineMapper.updateById(machine);
            }
            PlcParameter plcRequest =plcAgreement.getPlcParameter("plcRequest");//请求字
            PlcParameter mesSend =plcAgreement.getPlcParameter("mesSend");//发送字
@@ -90,10 +100,13 @@
                        LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
                        List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfiguration.getLineId());
                        for(PrimitiveTask primitiveTask:findPrimitiveTasking){
                            primitiveTask.setReportCount(primitiveTask.getReportCount()+plcReportID.getValueInt());
                            primitiveTask.setLoadCount(primitiveTask.getLoadCount()+1);
                            primitiveTaskMapper.updateById(primitiveTask);
                            break;
                        }
                    }else if(machine.getMode()==3){
                        machine.setFinshCount(machine.getFinshCount()+plcReportID.getValueInt());
                        machineMapper.updateById(machine);
                    }
                    String send = HexUtil.intTo2ByteHex(1);
                    modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/ 2));
@@ -115,21 +128,18 @@
                    LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
                    List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfiguration.getLineId());
                    for(PrimitiveTask primitiveTask:findPrimitiveTasking){
                        //任务数>已上数量
                        List<Tasking> taskingTopList=taskingMapper.selectList(new QueryWrapper<Tasking>().lambda()
                                .eq(Tasking::getScanId,primitiveTask.getScanId())
                                .eq(Tasking::getState,"线上")
                                .eq(Tasking::getGlassState,"正常")
                        );
                        if (primitiveTask.getTaskQuantity()>primitiveTask.getReportCount()){
                            loadCount=primitiveTask.getTaskQuantity()-taskingTopList.size();
                            loadCount=(loadCount>0?loadCount:0);
                        //任务数-已上数量>0  返回1
                        if((primitiveTask.getTaskQuantity()-primitiveTask.getLoadCount())>0){
                            loadCount=1;
                        }
                        break;
                    }
                }else{
                }else if(machine.getMode()==2){
                    //定制模式
                    loadCount=1;
                }else if (machine.getMode()==3){
                    loadCount=machine.getTaskCount()-machine.getFinshCount();
                    loadCount=(loadCount>0?1:0);
                }
                if(loadCount>0){
                    log.info("4、发送任务  任务数据:{}, 设备状态:{}, ",loadCount,machine);
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineMarking.java
@@ -22,19 +22,22 @@
    private S7objectMachine s7objectMachine;
    public static int thinness = 40;
    public static int edgSpeed = 40;
    public static Long machineId = 6L;
    //public static Long machineId = 6L;
    public List<Map> sendRecords = new ArrayList<>();
    public MachineMarking(MachineMapper machineMapper, TaskingService taskingService){
    public Machine thisMachine;
    public MachineMarking(Machine machine,MachineMapper machineMapper, TaskingService taskingService){
        this.thisMachine = machine;
        this.machineMapper = machineMapper;
        this.taskingService = taskingService;
    }
    public void plcStart() {
            Long machineId=12L;
            Machine machine=machineMapper.selectById(machineId);
            //Long machineId=12L;
            Machine machine=machineMapper.selectById(thisMachine.getId());
//            S7objectMachine s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),"PlcMarking", EPlcType.S1500);
//            s7objectMachine.start();
            if (s7objectMachine==null){
                s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),"PlcMarking", EPlcType.S1500);
                s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),machine.getFileName(), EPlcType.S1500);
                s7objectMachine.start();
            }
            PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject;
@@ -100,26 +103,11 @@
                    if(isMark_==1){
                        s7objectMachine.plccontrol.writeString(drawingMark.getAddress(), tasking.getProgramId());
                    }
                    s7objectMachine.plccontrol.writeWord(lengthOutOfService.getAddress(), tasking.getLength().intValue());
                    s7objectMachine.plccontrol.writeWord(widthOutOfService.getAddress(), tasking.getWidth().intValue());
                    s7objectMachine.plccontrol.writeWord(widthOutOfService.getAddress(), tasking.getWidth().intValue());//y
                    s7objectMachine.plccontrol.writeWord(lengthOutOfService.getAddress(), tasking.getLength().intValue());//x
                    s7objectMachine.plccontrol.writeWord(isMark.getAddress(), isMark_);
                    s7objectMachine.plccontrol.writeWord(markingMode.getAddress(), isMarkingMode_);
                    s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 1);
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String sendRecord=df.format(new Date())+"  "+
                            tasking.getScanId()+"-"+
                            tasking.getProgramId()+"-"+
                            tasking.getLength()+"-"+
                            tasking.getWidth()+"-"+
                            isMark_+"-"+
                            isMarkingMode_;
                    if (sendRecords.size()>7){
                        sendRecords.remove(0);
                    }
                    Map sendContentMap=new HashMap();
                    sendContentMap.put("sendContent",sendRecord);
                    sendRecords.add(sendContentMap);
                    return;
                }
            }
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineRotate.java
@@ -22,17 +22,19 @@
    private S7objectMachine s7objectMachine;
    public static Long machineId = 6L;
    public List<Map> sendRecords = new ArrayList<>();
    public Machine thisMachine;
    public MachineRotate(MachineMapper machineMapper, TaskingService taskingService){
    public MachineRotate(Machine machine,MachineMapper machineMapper, TaskingService taskingService){
        this.thisMachine = machine;
        this.machineMapper = machineMapper;
        this.taskingService = taskingService;
    }
    public void plcStart() {
        //旋转台
        Long machineId=20L;
        Machine machine=machineMapper.selectById(machineId);
        //Long machineId=20L;
        Machine machine=machineMapper.selectById(thisMachine.getId());
        if (s7objectMachine==null){
            s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),"PlcRotate", EPlcType.S1200);
            s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),machine.getFileName(), EPlcType.S1200);
            s7objectMachine.start();
        }
        PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject;
@@ -104,7 +106,7 @@
                s7objectMachine.plccontrol.writeWord(length.getAddress(), tasking.getLength().intValue());
                s7objectMachine.plccontrol.writeWord(width.getAddress(), tasking.getWidth().intValue());
                s7objectMachine.plccontrol.writeString(mesSendId.getAddress(), tasking.getTaskSequence().toString());
                s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), 1);
                s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), machine.getRotateMode());
                s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 1);
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String sendRecord=df.format(new Date())+"  "+
@@ -121,6 +123,8 @@
            }else if(!scan_id.isEmpty()){
                taskingService.scanMachineAdd(machine,scan_id);
            }
        }else if("0".equals(plcRequest.getValue())){
            nullMachine(machine);
        }
    }
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineSilkScreen.java
@@ -21,15 +21,16 @@
    private TaskingService taskingService;
    public static Long machineId = 14L;
    public List<Map> sendRecords = new ArrayList<>();
    public MachineSilkScreen(MachineMapper machineMapper, TaskingService taskingService){
    public Machine thisMachine;
    public MachineSilkScreen(Machine machine,MachineMapper machineMapper, TaskingService taskingService){
        this.thisMachine = machine;
        this.machineMapper = machineMapper;
        this.taskingService = taskingService;
    }
    public void plcStart() {
            Machine machine=machineMapper.selectById(machineId);
            String fileName="PlcSilkScreen";
            Machine machine=machineMapper.selectById(thisMachine.getId());
            String fileName=machine.getFileName();
            ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),fileName);
            modbusTcp1.connect();
            PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement(fileName);
JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineThread.java
@@ -13,6 +13,7 @@
import com.mes.service.PlcParameter;
import com.mes.utils.HexUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.protocol.HTTP;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -42,6 +43,23 @@
    public Long machineId = 2L;
    public List<Map> sendRecords = new ArrayList<>();
//    public void plcStart1(PlcAgreement plcAgreement,String zuKey) {
//        //逻辑组 :请求组,完成组,其他组
//        //List<Map<String,String>> map=new ArrayList<>();//逻辑组
//        Map<String,Map<String,Map<String,String>>> map=new HashMap<>();//请求逻辑组
//        Map<String,Map<String,String>> zuMap=map.get(zuKey);
//
//        for(String key:map.keySet()){
//            boolean istrue=false;
//            if(plcAgreement.getPlcParameter(key).getValueString()==map.get(key)){
//                istrue=true;
//            }
//            map.put(key,plcAgreement.getPlcParameter(key).getValueString());
//        }
//
//    }
    public void plcStart() {
        Machine machine=machineMapper.selectById(machineId);
        ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),"PlcLoad");
JiuMuMesParent/moduleService/DeviceInteractionModule/src/test/java/com/mes/DeviceInteractionModuleApplicationTest.java
@@ -170,7 +170,7 @@
    public void testSaoMa() {
        try {
// 创建TCP客户端并连接到服务器
            String serverAddress = "192.168.1.8";
            String serverAddress = "10.36.164.19";
            int serverPort = 2001;
            Socket clientSocket = new Socket(serverAddress, serverPort);
            // 创建输入流和输出流
JiuMuMesParent/moduleService/DeviceInteractionModule/target/deviceInteraction-1.0-SNAPSHOT.jar.original
Binary files differ
JiuMuMesParent/moduleService/DeviceInteractionModule/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -1,16 +1,16 @@
com\mes\md\mapper\TaskingMapper.class
com\mes\md\entity\Machine.class
com\mes\md\mapper\RoleMapper.class
com\mes\md\service\TaskingLogService.class
com\mes\md\mapper\KBBTProgramsDeviceStatusLogBPMapper.class
com\mes\md\service\impl\ProjectServiceImpl.class
com\mes\md\service\impl\OrderOriginalPieceServiceImpl.class
com\mes\md\service\AccountService.class
com\mes\DeviceInteractionModuleApplication.class
com\mes\job\PLCScanQRVerify.class
com\mes\md\service\ProjectService.class
com\mes\md\service\WorkTaskDetailService.class
com\mes\common\S7objectMachine.class
com\mes\md\service\impl\EquipmentLogServiceImpl.class
com\mes\job\PLCRotate.class
com\mes\md\controller\WorkTaskDetailController.class
com\mes\md\controller\MenuController.class
com\mes\md\entity\OrderOriginalPiece.class
@@ -18,12 +18,14 @@
com\mes\md\service\MenuService.class
com\mes\md\mapper\KBBTJPDrawingBPMapper.class
com\mes\md\controller\GlassInfoController.class
com\mes\md\service\KBBTProgramsOperationLogBPService.class
com\mes\md\mapper\PageMapper.class
com\mes\md\service\ProjectLogService.class
com\mes\md\entity\Project.class
com\mes\md\mapper\PrimitiveTaskMapper.class
com\mes\md\service\impl\EdgeGrindingLogServiceImpl.class
com\mes\job\AddTask.class
com\mes\md\entity\KBBTProgramsOperationLogBP.class
com\mes\md\entity\LineConfiguration.class
com\mes\edgstoragecage\controller\EdgStorageCageController.class
com\mes\edgstoragecage\entity\EdgStorageCage.class
@@ -40,6 +42,7 @@
com\mes\plcTaskThread\MachineSilkScreen.class
com\mes\md\entity\EquipmentLog.class
com\mes\md\service\KBBTJPDrawingBPService.class
com\mes\md\mapper\KBBTProgramsDeviceOlnlineLogBPMapper.class
com\mes\plcTaskThread\MachineRotate.class
com\mes\md\controller\PrimitiveTaskController.class
com\mes\md\controller\RoleMenuController.class
@@ -47,8 +50,10 @@
com\mes\md\mapper\WorkTaskDetailMapper.class
com\mes\md\service\LineService.class
com\mes\md\service\impl\PageServiceImpl.class
com\mes\md\entity\TaskingLog.class
com\mes\md\service\impl\WorkTaskDetailServiceImpl.class
com\mes\md\service\impl\TaskLogServiceImpl.class
com\mes\md\mapper\TaskingLogMapper.class
com\mes\md\controller\EdgeGrindingLogController.class
com\mes\md\service\LineConfigurationService.class
com\mes\md\entity\GlassInfo.class
@@ -56,7 +61,6 @@
com\mes\md\entity\Page.class
com\mes\job\PLCCleaning.class
com\mes\md\controller\RoleController.class
com\mes\job\MarkingTask.class
com\mes\md\mapper\MachineMapper.class
com\mes\md\mapper\AccountMapper.class
com\mes\common\S7objectCleaning.class
@@ -68,33 +72,31 @@
com\mes\md\entity\ProjectLog.class
com\mes\md\service\EdgeGrindingLogService.class
com\mes\AppRunnerConfig.class
com\mes\job\PLCFlipSlice.class
com\mes\plcTaskThread\MachineFlipSlice.class
com\mes\md\controller\TaskingController.class
com\mes\md\controller\AccountController.class
com\mes\md\service\TaskLogService.class
com\mes\job\SilkScreenTask.class
com\mes\md\mapper\KBBTProgramsOperationLogBPMapper.class
com\mes\md\service\PrimitiveTaskService.class
com\mes\plcTaskThread\MachineLoad.class
com\mes\md\entity\Account.class
com\mes\job\PLCScanQRWorks.class
com\mes\md\service\impl\TaskingLogServiceImpl.class
com\mes\md\service\impl\MenuServiceImpl.class
com\mes\md\controller\PageController.class
com\mes\md\entity\TaskLog.class
com\mes\md\mapper\LineConfigurationMapper.class
com\mes\md\entity\KBBTProgramsDeviceStatusLogBP.class
com\mes\md\mapper\EquipmentLogMapper.class
com\mes\job\PLCMechanicalArm.class
com\mes\md\entity\RoleMenu.class
com\mes\md\controller\TaskLogController.class
com\mes\md\service\impl\TaskingServiceImpl.class
com\mes\md\entity\KBBTLensSorting.class
com\mes\md\service\impl\KBBTJPDrawingBPServiceImpl.class
com\mes\md\mapper\ProjectMapper.class
com\mes\job\PLCScanQrCodesReport.class
com\mes\md\controller\EquipmentLogController.class
com\mes\md\controller\TaskingLogController.class
com\mes\common\SmbTool.class
com\mes\md\mapper\ProjectLogMapper.class
com\mes\job\PLCManualReporting.class
com\mes\plcTaskThread\MachineMarking.class
com\mes\md\mapper\OrderOriginalPieceMapper.class
com\mes\edgstoragecage\entity\EdgStorageCageDetails.class
@@ -106,7 +108,9 @@
com\mes\md\mapper\LineMapper.class
com\mes\md\mapper\EdgeGrindingLogMapper.class
com\mes\common\S7objectMarking.class
com\mes\md\entity\KBBTProgramsDeviceOlnlineLogBP.class
com\mes\md\entity\PrimitiveTask.class
com\mes\plcTaskThread\MachineLamination.class
com\mes\job\MachineTask.class
com\mes\md\entity\Menu.class
com\mes\md\service\impl\LineConfigurationServiceImpl.class
@@ -124,8 +128,7 @@
com\mes\md\service\MachineService.class
com\mes\md\service\PageService.class
com\mes\md\controller\ProjectLogController.class
com\mes\job\PLCEdging.class
com\mes\job\PLCLoad.class
com\mes\md\mapper\GlassInfoMapper.class
com\mes\md\service\impl\KBBTProgramsOperationLogBPServiceImpl.class
com\mes\md\entity\Tasking.class
com\mes\md\service\impl\MachineServiceImpl.class
JiuMuMesParent/moduleService/DeviceInteractionModule/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -2,8 +2,6 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\edgstoragecage\mapper\EdgStorageCageMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\common\CommunicationProtocol.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\DeviceInteractionModuleApplication.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCEdging.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\MarkingTask.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\Role.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\Tasking.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\edgstoragecage\service\impl\EdgStorageCageServiceImpl.java
@@ -12,11 +10,11 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\ProjectLogMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\GlassInfoServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\WorkTaskDetailController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\KBBTProgramsOperationLogBPMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\MachineTask.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineThread.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\WorkTaskDetailServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\AccountService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCScanQRWorks.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\KBBTJPDrawingBPMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\AccountServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\MenuServiceImpl.java
@@ -30,15 +28,14 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\TaskingController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\TaskLogServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\TaskingServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCLoad.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\LineConfigurationService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\AppRunnerConfig.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\AccountMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\SilkScreenTask.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\ProjectMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\TaskingService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\GlassInfoMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\WorkTaskDetailMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\TaskingLogController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\Line.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\MachineMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\EdgeGrindingLogMapper.java
@@ -48,20 +45,21 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\MenuMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\KBBTJPDrawingBPService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\common\SmbTool.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCRotate.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\KBBTProgramsDeviceOlnlineLogBP.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\Page.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\common\S7objectFlipSlice.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineLoad.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCCleaning.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\TaskingLog.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\ProjectLogService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineSilkScreen.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCScanQRVerify.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\MachineController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\edgstoragecage\entity\EdgStorageCageDetails.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineFlipSlice.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\ProjectLogController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\common\S7objectMarking.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\WorkTaskDetail.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\KBBTProgramsDeviceOlnlineLogBPMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\TaskLogController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\TaskLogService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\RoleMenu.java
@@ -71,13 +69,14 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\EquipmentLogServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\RoleMenuService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\AddTask.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCMechanicalArm.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\LineMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\KBBTLensSorting.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineLamination.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\ProjectLog.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\KBBTJPDrawingBP.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\PageService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineMarking.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\KBBTProgramsOperationLogBP.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\TaskLog.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\GlassInfo.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\OrderOriginalPieceMapper.java
@@ -89,6 +88,8 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\edgstoragecage\entity\EdgStorageCage.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\PrimitiveTaskMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\MachineService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\TaskingLogServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\TaskingLogMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\EdgeGrindingLogController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\Account.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineRotate.java
@@ -103,12 +104,12 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\OrderOriginalPieceService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\RoleMenuMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\EquipmentLogMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCFlipSlice.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\EquipmentLog.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\LineConfigurationMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\LineServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCScanQrCodesReport.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\KBBTProgramsDeviceStatusLogBPMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\AccountController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\KBBTProgramsDeviceStatusLogBP.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\MenuService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\Menu.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\LineService.java
@@ -120,11 +121,13 @@
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\GlassInfoController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\OrderOriginalPieceServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\ProjectService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\TaskingLogService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\KBBTProgramsOperationLogBPServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\impl\ProjectLogServiceImpl.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\mapper\TaskingMapper.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\OrderOriginalPieceController.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\common\S7objectCleaning.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\job\PLCManualReporting.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\service\KBBTProgramsOperationLogBPService.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\plcTaskThread\MachineEdging.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\entity\PrimitiveTask.java
D:\workfile\JiuMuMES\JiuMuMesParent\moduleService\DeviceInteractionModule\src\main\java\com\mes\md\controller\EquipmentLogController.java
UI-Project/config.js
@@ -1,18 +1,15 @@
export default {
  serverUrl: "localhost:88/api",
  serverUrl2: "localhost:88"
  // serverUrl: "localhost:88/api",
  // serverUrl2: "localhost:88"
  // serverUrl: "10.36.164.200:88/api",
  // serverUrl2: "10.36.164.200:88"
//  serverUrl: "10.153.19.29:88/api",
 //serverUrl: "10.36.164.201:88/api",
  // serverUrl: "10.36.164.253:88/api",
  //  serverUrl2: "10.36.164.253:88"
//  serverUrl: "127.0.0.1:88/api",
  // serverUrl2: "10.153.19.29:88"
  //serverUrl2: "10.36.164.201:88"
  serverUrl: "10.36.164.200:88/api",
  serverUrl2: "10.36.164.200:88"
    // serverUrl2: "127.0.0.1:88"
    // serverUrl2: "127.0.0.1:88"npm
  //serverUrl:"res.abeim.cn"
}
UI-Project/package-lock.json
@@ -12,7 +12,7 @@
        "@vue-macros/reactivity-transform": "^0.3.23",
        "axios": "^1.6.8",
        "chart.js": "^4.4.3",
        "echarts": "^5.5.1",
        "echarts": "^5.6.0",
        "element-plus": "^2.8.2",
        "moment": "^2.30.1",
        "northglass-mes": "file:",
@@ -839,12 +839,12 @@
      "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
    },
    "node_modules/echarts": {
      "version": "5.5.1",
      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
      "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
      "version": "5.6.0",
      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
      "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
      "dependencies": {
        "tslib": "2.3.0",
        "zrender": "5.6.0"
        "zrender": "5.6.1"
      }
    },
    "node_modules/element-plus": {
@@ -2181,9 +2181,9 @@
      }
    },
    "node_modules/zrender": {
      "version": "5.6.0",
      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
      "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
      "version": "5.6.1",
      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
      "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
      "dependencies": {
        "tslib": "2.3.0"
      }
@@ -2775,12 +2775,12 @@
      "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
    },
    "echarts": {
      "version": "5.5.1",
      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
      "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
      "version": "5.6.0",
      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
      "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
      "requires": {
        "tslib": "2.3.0",
        "zrender": "5.6.0"
        "zrender": "5.6.1"
      }
    },
    "element-plus": {
@@ -3137,7 +3137,7 @@
        "@vue-macros/reactivity-transform": "^0.3.23",
        "axios": "^1.6.8",
        "chart.js": "^4.4.3",
        "echarts": "^5.5.1",
        "echarts": "^5.6.0",
        "element-plus": "^2.8.2",
        "http-proxy-middleware": "^3.0.0",
        "moment": "^2.30.1",
@@ -3746,12 +3746,12 @@
          "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
        },
        "echarts": {
          "version": "5.5.1",
          "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
          "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
          "version": "5.6.0",
          "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
          "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
          "requires": {
            "tslib": "2.3.0",
            "zrender": "5.6.0"
            "zrender": "5.6.1"
          }
        },
        "element-plus": {
@@ -4647,9 +4647,9 @@
          }
        },
        "zrender": {
          "version": "5.6.0",
          "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
          "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
          "version": "5.6.1",
          "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
          "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
          "requires": {
            "tslib": "2.3.0"
          }
@@ -5204,9 +5204,9 @@
      }
    },
    "zrender": {
      "version": "5.6.0",
      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
      "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
      "version": "5.6.1",
      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
      "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
      "requires": {
        "tslib": "2.3.0"
      }
UI-Project/package.json
@@ -3,16 +3,16 @@
  "version": "0.0.0",
  "private": true,
  "scripts": {
  "dev": "vite --host 0.0.0.0",
  "build": "vite build",
  "serve": "vite preview --host 0.0.0.0"
    "dev": "vite --host 0.0.0.0",
    "build": "vite build",
    "serve": "vite preview --host 0.0.0.0"
  },
  "dependencies": {
    "@element-plus/icons-vue": "^2.3.1",
    "@vue-macros/reactivity-transform": "^0.3.23",
    "axios": "^1.6.8",
    "chart.js": "^4.4.3",
    "echarts": "^5.5.1",
    "echarts": "^5.6.0",
    "element-plus": "^2.8.2",
    "moment": "^2.30.1",
    "northglass-mes": "file:",
UI-Project/src/lang/zh.js
@@ -189,6 +189,8 @@
        modeB :'标准',
        bound:'绑定',
        reporting:'报工',
        rotate:'旋转',
        notRotate:'不旋转',
        reportingcount:'报工数量',
    }
UI-Project/src/main.js
@@ -10,18 +10,23 @@
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
import i18n from '@/lang'
// import Echarts from "vue-echarts"
import * as echarts from "echarts"
import Echarts from "vue-echarts"
import * as echarts from "echarts";
// echarts.registerMap('china', china)
// Vue.prototype.$echarts = echarts
// app.component("v-chart", Echarts)
// app.config.globalProperties.$echarts = echarts
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
const app = createApp(App)
app.component('v-chart', echarts)
//app.config.globalProperties.$echarts = echarts
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate )
app.use(VXETable)
UI-Project/src/router/index.js
@@ -63,6 +63,19 @@
          ]
        },
        {
          /*----------- 大屏 ----------------*/
          path: 'KanbanDisplay/kanbanDisplay',
          name: 'kanbanDisplay',
          component: () => import('../views/KanbanDisplay/kanbanDisplay.vue'),
          children: [
            {
              path: '/KanbanDisplay/kanbanDisplay',
              name: 'kanbanDisplay',
              component: () => import('../views/KanbanDisplay/kanbanDisplay.vue'),
            }
          ]
        },
        {
          /*----------- 清洗机 ----------------*/
          path: 'Cleaning',
          name: 'cleaning',
@@ -140,19 +153,19 @@
            }
          ]
        },
        // {
        //   /*----------- 自动点胶机 ----------------*/
        //   path: 'GlueDispenser',
        //   name: 'glueDispenser',
        //   component: () => import('../views/GlueDispenser/glueDispenser.vue'),
        //   children: [
        //     {
        //       path: '/GlueDispenser/glueDispenser',
        //       name: 'glueDispenser',
        //       component: () => import('../views/GlueDispenser/glueDispenser.vue'),
        //     }
        //   ]
        // },
        {
          /*----------- 自动点胶机 ----------------*/
          path: 'GlueDispenser',
          name: 'glueDispenser',
          component: () => import('../views/GlueDispenser/glueDispenser.vue'),
          children: [
            {
              path: '/GlueDispenser/glueDispenser',
              name: 'glueDispenser',
              component: () => import('../views/GlueDispenser/glueDispenser.vue'),
            }
          ]
        },
        // {
        //   /*----------- 烘干线 ----------------*/
        //   path: 'Drying',
@@ -179,19 +192,19 @@
            }
          ]
        },
        // {
        //   /*----------- 自动贴膜机 ----------------*/
        //   path: 'Lamination',
        //   name: 'lamination',
        //   component: () => import('../views/Lamination/lamination.vue'),
        //   children: [
        //     {
        //       path: '/Lamination/lamination',
        //       name: 'lamination',
        //       component: () => import('../views/Lamination/lamination.vue'),
        //     }
        //   ]
        // },
        {
          /*----------- 自动贴膜机 ----------------*/
          path: 'Lamination',
          name: 'lamination',
          component: () => import('../views/Lamination/lamination.vue'),
          children: [
            {
              path: '/Lamination/lamination',
              name: 'lamination',
              component: () => import('../views/Lamination/lamination.vue'),
            }
          ]
        },
        {
          /*----------- 报工管理 ----------------*/
          path: 'ManualReporting',
UI-Project/src/utils/constants.js
@@ -1,5 +1,4 @@
  export const WebSocketHost = "localhost";
// export const WebSocketHost = "10.36.164.200";
// export const WebSocketHost = "10.153.19.29";
// export const WebSocketHost = "127.0.0.1";
export const host = "88";
   // export const WebSocketHost = "localhost";
//  export const WebSocketHost = "10.36.164.253";
 export const WebSocketHost = "10.36.164.200";
 export const host = "88";
UI-Project/src/utils/request.js
@@ -2,10 +2,13 @@
import config from '../../config';
import useUserInfoStore from '@/stores/userInfo'
const userStore=useUserInfoStore()
const request = axios.create({
    baseURL: `http://${config.serverUrl}`,  // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置!
    //baseURL: `http://`+url,  // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置!
    timeout: 30000
})
 
//
 
UI-Project/src/views/Edging/edging.vue
@@ -20,7 +20,12 @@
const sendRecords = ref([]);
const downLineTask = ref([]);
const machineId = 6;//当前页面的设备ID
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[1].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
var errorScanId;
var errorOpen=false;
//使用WebSocket方式展示数据
@@ -31,9 +36,11 @@
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  loadData.value = data.taskingList[0];
  findMachine.value = data.machine[0];
  sendRecords.value = data.sendRecords[0].reverse();
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  sendRecords.value = dataJson.sendRecords[0].reverse();
  
  if(findMachine.value.remark.toString()!=errorScanId&&findMachine.value.remark.toString()!=""&&findMachine.value.remark.toString()!=undefined){
    //有数据就弹窗 
UI-Project/src/views/FlipSlice/flipSlice.vue
@@ -22,7 +22,12 @@
const sendRecords = ref([]);
const downLineTask = ref([]);
const machineId = 26;//当前页面的设备ID
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[2].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
//const machineId = 26;//当前页面的设备ID
var errorScanId;
var errorOpen=false;
//使用WebSocket方式展示数据
@@ -33,9 +38,11 @@
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  loadData.value = data.taskingList[0];
  findMachine.value = data.machine[0];
  sendRecords.value = data.sendRecords[0].reverse();
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  sendRecords.value = dataJson.sendRecords[0].reverse();
  if(findMachine.value.remark.toString()!=errorScanId&&findMachine.value.remark.toString()!=""&&findMachine.value.remark.toString()!=undefined){
    //有数据就弹窗 
    if(errorOpen){
UI-Project/src/views/GlueDispenser/glueDispenser.vue
@@ -1,11 +1,13 @@
<!--  点胶机  -->
<!--  贴膜机  -->
<script setup>
import request from "@/utils/request";
import { ElMessage, ElMessageBox } from "element-plus";
import { reactive, ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue'
import { reactive, ref, onMounted, onBeforeUnmount, onUnmounted } from 'vue'
import { useI18n } from 'vue-i18n'
import { WebSocketHost ,host} from '@/utils/constants'
import { WebSocketHost, host } from '@/utils/constants'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import {gridDateFormatter} from '@/stores/tool';
let language = ref(localStorage.getItem('lang') || 'zh')
const { t } = useI18n()
@@ -13,21 +15,43 @@
  account: '',
  password: '',
});
const blind = ref(false)
const loadData = ref([]);
const findMachine = ref([]);
const machineId=15;//当前页面的设备ID
const sendRecords = ref([]);
const downLineTask = ref([]);
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[2].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
//使用WebSocket方式展示数据
let socket = null;
let socketDownLineTask = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/glueDispenser`;
const socketDownLineTaskUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/downLineTask`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  loadData.value = data.taskingList[0];
  findMachine.value = data.machine[0];
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  sendRecords.value = dataJson.sendRecords[0].reverse();
};
// 定义消息处理函数,更新 receivedData 变量
const handleMessage2 = (data) => {
  downLineTask.value = data.downLineTask[0];
  // console.log(data);
};
onUnmounted(() => {
  if (socket) {
    closeWebSocket(socket);
  }
  if (socketDownLineTask) {
    closeWebSocket(socketDownLineTask);
  }
});
onBeforeUnmount(() => {
@@ -38,194 +62,320 @@
onMounted(async () => {
  //使用WebSocket方式展示数据
  socket = initializeWebSocket(socketUrl, handleMessage);// 初始化 WebSocket,并传递消息处理函数
  //使用WebSocket方式展示数据
  socketDownLineTask = initializeWebSocket(socketDownLineTaskUrl, handleMessage2);// 初始化 WebSocket,并传递消息处理函数
});
//报警提示
const errorInfoFuntion = async (info) => {
  let infoScancode=info;
  ElMessageBox.confirm(
    infoScancode,
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sureStart'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//修改工作状态 【失败/正在工作/完工】
const workStatus = async(row,state) => {
const workStatus = async (row, state) => {
  let url;
  if(state=="重发"){
    url="/deviceInteraction/tasking/loseMachineTask";
  }else if(state=="正在工作"){
    url="/deviceInteraction/tasking/startMachineTask";
  }else if(state=="完工"){
    url="/deviceInteraction/tasking/finishMachineTask";
  }else{
  if (state == "重发") {
    url = "/deviceInteraction/tasking/loseMachineTask";
  } else if (state == "正在工作") {
    url = "/deviceInteraction/tasking/startMachineTask";
  } else if (state == "完工") {
    url = "/deviceInteraction/tasking/finishMachineTask";
  } else {
    return;
  }
  ElMessageBox.confirm(
        t('functionState.tips'),
        t('delivery.prompt'),
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //开始修改
      request.post(url,
        {
          confirmButtonText: t('functionState.sure'),
          cancelButtonText: t('functionState.cancel'),
          type: 'warning',
        }
      )
        .then(() => {
          //开始修改
          request.post(url,
            {
              "id": machineId
            }).then((res) => { // 替换为你的API端点
              if (res.code === 200) {
                ElMessage.success(res.message);
              } else {
                ElMessage.warning(res.message)
              }
            })
          "id": machineId
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
        .catch(() => {
          ElMessage({
            type: 'info',
            message: t('functionState.cancel'),
          })
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//开工/暂停
const machineStatus = async(state) => {
const machineStatus = async (state) => {
  ElMessageBox.confirm(
        t('functionState.tips'),
        t('delivery.prompt'),
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/machine/updateMachineState",
        {
          confirmButtonText: t('functionState.sure'),
          cancelButtonText: t('functionState.cancel'),
          type: 'warning',
        }
      )
        .then(() => {
          //下线接口
          request.post("/deviceInteraction/machine/updateMachineState",
            {
              "id": machineId,
              "state": state
            }).then((res) => { // 替换为你的API端点
              if (res.code === 200) {
                ElMessage.success(res.message);
              } else {
                ElMessage.warning(res.message)
              }
            })
          "id": machineId,
          "state": state
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
        .catch(() => {
          ElMessage({
            type: 'info',
            message: t('functionState.cancel'),
          })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//定制/标准
const machineMode = async (mode) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/machine/toggleModeMachine",
        {
          "id": machineId,
          "mode": mode
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//破损
const damagedTask = async(row) => {
const damagedTask = async (row) => {
  ElMessageBox.confirm(
        t('functionState.tips'),
        t('delivery.prompt'),
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/tasking/damagedTask",
        {
          confirmButtonText: t('functionState.sure'),
          cancelButtonText: t('functionState.cancel'),
          type: 'warning',
        }
      )
        .then(() => {
          //下线接口
          request.post("/deviceInteraction/tasking/damagedTask",
            {
              "glassId": row.glassId
            }).then((res) => { // 替换为你的API端点
              if (res.code === 200) {
                ElMessage.success(res.message);
              } else {
                ElMessage.warning(res.message)
              }
            })
          "glassId": row.glassId
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
        .catch(() => {
          ElMessage({
            type: 'info',
            message: t('functionState.cancel'),
          })
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//下线(拿走)
const glassDownLine = async(row) => {
const glassDownLine = async (row) => {
  ElMessageBox.confirm(
        t('functionState.tips'),
        t('delivery.prompt'),
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/tasking/glassDownLine",
        {
          confirmButtonText: t('functionState.sure'),
          cancelButtonText: t('functionState.cancel'),
          type: 'warning',
        }
      )
        .then(() => {
          //下线接口
          request.post("/deviceInteraction/tasking/glassDownLine",
            {
              "glassId": row.glassId,
            }).then((res) => { // 替换为你的API端点
              if (res.code === 200) {
                ElMessage.success(res.message);
              } else {
                ElMessage.warning(res.message)
              }
            })
          "glassId": row.glassId,
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
        .catch(() => {
          ElMessage({
            type: 'info',
            message: t('functionState.cancel'),
          })
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
const topLineShow = async () => {
  blind.value = true;
}
//上线
const topLine = async() => {
const topLine = async (row) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //上线接口
      request.post("/deviceInteraction/tasking/glassTopLine",
        {
          "glassId": row.glassId,
          "lineConfigurationId": machineId
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {n
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
const handleDialogClose = () => {
}
</script>
<template>
  <div ref="content" style="padding:0 20px;">
    <div id="div-title" style="font-size: 20px; font-weight: bold; margin:10px 0 10px 0;padding-left: 20px;">
      {{$t('machine.glueDispenser')}}
      {{ $t('machine.glueDispenser') }}
    </div>
    <el-dialog v-model="blind" top="30vh" style="text-align: center;" @close="handleDialogClose">
        <!-- 线下玻璃 -->
      <el-table :data="downLineTask" stripe :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129', textAlign: 'center' }" :cell-style="{ textAlign: 'center' }">
        <!-- <el-table-column type="selection" min-width="30" /> -->
        <el-table-column type="index" :label="$t('glassInfo.number')" min-width="30" />
        <el-table-column prop="batchNumber" :label="$t('glassInfo.batchNumber')" />
        <el-table-column prop="taskType" :label="$t('glassInfo.taskType')" />
        <el-table-column prop="scanId" :label="$t('glassInfo.scanId')" />
        <el-table-column prop="length" :label="$t('glassInfo.length')" />
        <el-table-column prop="width" :label="$t('glassInfo.width')" />
        <el-table-column prop="thickness" :label="$t('glassInfo.thickness')" />
        <el-table-column prop="workState" :label="$t('glassInfo.workState')" />
        <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="70">
          <template #default="scope">
            <el-button size="mini" link type="primary" plain @click="topLine(scope.row)">{{
              $t('functionState.topLine') }}</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
    <hr />
    <br>
    <div id="search" >
    <div id="search">
      <!-- 功能 -->
      <el-button :type="(findMachine['state']=='暂停'?'danger':'success')" id="ButtonMachineStatus"
      @click="machineStatus((findMachine['state']=='暂停'?'开工':'暂停'))">
      {{findMachine['state']=='开工'?$t('functionState.start'):$t('functionState.stop')}}</el-button>
      <el-button type="primary" id="ButtonTopLine" @click="topLine">{{$t('functionState.topLine')}}</el-button>
      <el-button :type="(findMachine['state'] == '暂停' ? 'danger' : 'success')" id="ButtonMachineStatus"
        @click="machineStatus((findMachine['state'] == '暂停' ? '开工' : '暂停'))">{{ findMachine['state'] == '开工' ?
          $t('functionState.start') : $t('functionState.stop') }}</el-button>
      <el-button type="primary" id="ButtonTopLine" @click="topLineShow">{{ $t('functionState.topLine') }}</el-button>
    </div>
    <div id="main-body" style="min-height:240px;">
    <div id="main-body">
      <!-- 表格内容 -->
      <el-table :data="loadData" stripe
      <el-table :data="loadData" stripe style="height:260px"
        :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129', textAlign: 'center' }"
        :cell-style="{ textAlign: 'center' }">
        <!-- <el-table-column type="selection" min-width="30" /> -->
        <el-table-column type="index" :label="$t('glassInfo.number')" min-width="30" />
        <el-table-column prop="batchNumber" :label="$t('glassInfo.batchNumber')"/>
        <el-table-column prop="taskType" :label="$t('glassInfo.taskType')"/>
        <el-table-column prop="glassId" :label="$t('glassInfo.glassId')"/>
        <el-table-column prop="length" :label="$t('glassInfo.length')"/>
        <el-table-column prop="width" :label="$t('glassInfo.width')"/>
        <el-table-column prop="thickness" :label="$t('glassInfo.thickness')"/>
        <el-table-column prop="workState" :label="$t('glassInfo.workState')"/>
        <el-table-column prop="batchNumber" :label="$t('glassInfo.batchNumber')" />
        <el-table-column prop="taskType" :label="$t('glassInfo.taskType')" />
        <el-table-column prop="glassId" :label="$t('glassInfo.glassId')" />
        <el-table-column prop="scanId" :label="$t('glassInfo.scanId')" />
        <el-table-column prop="length" :label="$t('glassInfo.length')" />
        <el-table-column prop="width" :label="$t('glassInfo.width')" />
        <el-table-column prop="thickness" :label="$t('glassInfo.thickness')" />
        <el-table-column prop="workState" :label="$t('glassInfo.workState')" />
        <el-table-column prop="operationRecordTime" :formatter="gridDateFormatter" :label="$t('glassInfo.operationRecordTime')" width="180"/>
        <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
          <template #default="scope">
            <el-button size="mini" link type="primary" plain @click="workStatus(scope.row, '重发')" >{{$t('functionState.anew')}}</el-button>
            <el-button size="mini" link type="primary" plain @click="workStatus(scope.row, '完工')">{{$t('functionState.finish')}}</el-button>
            <el-button size="mini" link type="primary" plain @click="damagedTask(scope.row)">{{$t('functionState.lose')}}</el-button>
            <el-button size="mini" link type="primary" plain @click="glassDownLine(scope.row)">{{$t('functionState.downLine')}}</el-button>
            <el-button size="mini" link type="primary" plain @click="workStatus(scope.row, '重发')">{{
              $t('functionState.anew') }}</el-button>
            <el-button size="mini" link type="primary" plain @click="workStatus(scope.row, '完工')">{{
              $t('functionState.finish') }}</el-button>
            <el-button size="mini" link type="primary" plain @click="damagedTask(scope.row)">{{ $t('functionState.lose')
              }}</el-button>
            <el-button size="mini" link type="primary" plain @click="glassDownLine(scope.row)">{{
              $t('functionState.downLine') }}</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <!-- <div id="main-body" style="width: 100%; height: 460px;background-image: url(../../src/assets/自动打标机.png) ;background-size: 100% 100%;"> -->
      <!-- 画图内容 -->
      <!-- <div style="width: 100px; height: 100px; background-color: red; position: relative; top: 171px; left: 218px">
    <div id="main-body" style="width: 100%; height: 460px;min-width: 1200px;">
      <img style="width: 70%;min-width: 900px; height: 460px;float: left;" src="../../assets/翻片台.png">
      <!-- <el-image style="width: 70%;min-width: 900px; height: 460px;float: left;" src="../../src/assets/翻片台.png"></el-image> -->
      <!-- <div style="width: 70%;min-width: 900px; height: 460px;background-image: url(../../src/assets/翻片台.png) ;background-size: 100% 100%;float: left;">
      </div> -->
    <!-- </div> -->
      <div style="width: 30%;min-width: 300px; height: 460px;float: left;padding: 20px;;">
        <el-table :data="sendRecords" stripe
          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129', textAlign: 'center', height: '30px' }"
          :cell-style="{ textAlign: 'center' }">
          <el-table-column prop="sendContent" :label="$t('glassInfo.sendContent')" />
        </el-table>
      </div>
      <div style="clear:both"></div>
    </div>
  </div>
</template>
@@ -259,4 +409,11 @@
  border: none;
  cursor: pointer;
}
.dotClass {
  width:10px;
  height:10px;
  border-radius: 50%;
  display: block;
  margin-left: 10px;
}
</style>
UI-Project/src/views/KanbanDisplay/kanbanDisplay.vue
New file
@@ -0,0 +1,193 @@
<!--  空白页  -->
<script setup>
import { ref, computed } from 'vue'
import * as echarts from 'echarts';
</script>
<script>
export default {
  mounted() {
    this.drawLineChart('drawLineChart_day1', 1);
    this.drawLineChart('drawLineChart_day2', 1);
    this.drawLineChart('drawLineChart_day3', 1);
    this.drawLineChart('drawLineChart_day4', 1);
    this.drawLineChart('drawLineChart_day5', 1);
    //this.drawLineChart('drawLineChart_week', 1);
    this.drawBarchart('drawBarchart', 1);
  },
  methods: {
    //方法
    drawLineChart(name, data) {
      var myChart = echarts.init(document.getElementById(name));
      myChart.setOption({ // 绘制图表
        title: {
          text: '产量看板示例'
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'cross',
            label: {
              backgroundColor: '#6a7985'
            }
          }
        },
        legend: {
          data: ['计划产量', '实际产量']
        },
        toolbox: {
          feature: {
            saveAsImage: {}
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            boundaryGap: false,
            data: ['1-01', '1-02', '1-03', '1-04', '1-05',
              '1-06', '1-07', '1-08', '1-09', '1-10',
              '1-11', '1-12', '1-13', '1-14', '1-15',
              '1-16', '1-17', '1-18', '1-19', '1-20',
              '1-21', '1-22', '1-23', '1-24', '1-25',
              '1-26', '1-27', '1-28', '1-29', '1-30', '1-31']
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ],
        series: [
          {
            name: '计划产量',
            type: 'line',
            areaStyle: {},
            label: {
              show: true,
              position: 'top'
            },
            data: [120, 132, 101, 134, 90, 230, 210,
              120, 132, 101, 134, 90, 230, 210,
              120, 132, 101, 134, 90, 230, 210,
              120, 132, 101, 134, 90, 230, 210,
              120, 132, 101]
          },
          {
            name: '实际产量',
            type: 'line',
            areaStyle: {},
            emphasis: {
              focus: 'series'
            },
            data: [100, 122, 101, 124, 90, 200, 180,
              100, 122, 101, 124, 90, 200, 180,
              100, 122, 101, 124, 90, 200, 180,
              100, 122, 101, 124, 90, 200, 180,
              100, 122, 101]
          }
        ]
      });
    },
    drawBarchart(name, data) {
      var myChart = echarts.init(document.getElementById(name));
      myChart.setOption({ // 绘制图表
        title: {
          text: '总产量看板示例'
        },
        tooltip: {
          trigger: 'item'
        },
        legend: {
          top: '5%',
          left: 'center'
        },
        series: [
          {
            name: 'Access From',
            type: 'pie',
            radius: ['40%', '70%'],
            avoidLabelOverlap: false,
            label: {
              show: false,
              position: 'center'
            },
            emphasis: {
              label: {
                show: true,
                fontSize: 40,
                fontWeight: 'bold'
              }
            },
            labelLine: {
              show: false
            },
            data: [
              { value: 1000, name: '计划总片数' },
              { value: 900, name: '实际总片数' },
              { value: 10, name: '破损片数' }
            ]
            , label: {
              formatter: '{b}:{c}'
            }
          }
        ]
      });
    }
  }
}
</script>
<template>
  <div>
    <div style="font-size: 30px;height: 70px;line-height: 70px;border: 1px solid #ccc;text-align: center;">
      JOOMO镜片制造中心驾驶舱
    </div>
    <div style="margin-left: 20px;">
      <el-button type="primary" @click="drawPieChart">标准品</el-button>
      <el-button type="primary" @click="drawPieChart">定制品</el-button>
    </div>
    <div style="width:100% ;height: 880px;">
      <div style="width:33.3% ;height: 100%;border: 1px solid #ccc;float: left;">
        <div id="drawLineChart_day11" style="height: 50%;width: 100%;border: 1px solid #ccc;">日单达成率-片数</div>
        <div id="drawLineChart_day21" style="height: 50%;width: 100%;border: 1px solid #ccc;">月单达成率-片数</div>
      </div>
      <div style="width:33.3% ;height: 100%;border: 1px solid #ccc;float: left;">
        <div id="drawLineChart_day31" style="height: 50%;width: 100%;border: 1px solid #ccc;">日单达成率-平方</div>
        <div id="drawLineChart_day41" style="height: 50%;width: 100%;border: 1px solid #ccc;">月单达成率-平方</div>
      </div>
      <div style="width:33.3% ;height: 100%;border: 1px solid #ccc;float: left;">
        <div id="drawLineChart_day51" style="height: 33.3%;width: 100%;border: 1px solid #ccc;">合格率-显示当天</div>
        <div id="drawLineChart_day61" style="height: 33.3%;width: 100%;border: 1px solid #ccc;">设备稼动率</div>
        <div id="drawLineChart_day71" style="height: 33.3%;width: 100%;border: 1px solid #ccc;">能耗管理-按天显示(手输)</div>
      </div>
    </div>
    <!-- <div style="width:33% ;height: 880px;border: 1px solid #ccc;">
      <div id="drawLineChart_day1" style="height: 300px;width: 25%;border: 1px solid #ccc;float: left;"></div>
      <div id="drawLineChart_day2" style="height: 300px;width: 25%;border: 1px solid #ccc;float: left;"></div>
    </div> -->
  </div>
</template>
<style scoped>
.float{
  float: left;
}
.style{
  width: 600px;
  height: 400px;
  border: 1px solid #ccc;
}
.chart {
  height: 400px;
}
</style>
UI-Project/src/views/Lamination/lamination.vue
New file
@@ -0,0 +1,412 @@
<!--  贴膜机  -->
<script setup>
import request from "@/utils/request";
import { ElMessage, ElMessageBox } from "element-plus";
import { reactive, ref, onMounted, onBeforeUnmount, onUnmounted } from 'vue'
import { useI18n } from 'vue-i18n'
import { WebSocketHost, host } from '@/utils/constants'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import {gridDateFormatter} from '@/stores/tool';
let language = ref(localStorage.getItem('lang') || 'zh')
const { t } = useI18n()
const requestData = reactive({
  account: '',
  password: '',
});
const blind = ref(false)
const errorInfo = ref(true)
const loadData = ref([]);
const findMachine = ref([]);
const sendRecords = ref([]);
const downLineTask = ref([]);
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[7].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
//const machineId = 21;//当前页面的设备ID
var errorScanId;
var errorOpen=false;
//使用WebSocket方式展示数据
let socket = null;
let socketDownLineTask = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/lamination`;
const socketDownLineTaskUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/downLineTask`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  sendRecords.value = dataJson.sendRecords[0].reverse();
};
// 定义消息处理函数,更新 receivedData 变量
const handleMessage2 = (data) => {
  downLineTask.value = data.downLineTask[0];
  // console.log(data);
};
onUnmounted(() => {
  if (socket) {
    closeWebSocket(socket);
  }
  if (socketDownLineTask) {
    closeWebSocket(socketDownLineTask);
  }
});
onBeforeUnmount(() => {
  console.log("关闭了")
  closeWebSocket();
});
onMounted(async () => {
  //使用WebSocket方式展示数据
  socket = initializeWebSocket(socketUrl, handleMessage);// 初始化 WebSocket,并传递消息处理函数
  //使用WebSocket方式展示数据
  socketDownLineTask = initializeWebSocket(socketDownLineTaskUrl, handleMessage2);// 初始化 WebSocket,并传递消息处理函数
});
//报警提示
const errorInfoFuntion = async (info) => {
  let infoScancode=info;
  ElMessageBox.confirm(
    infoScancode,
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sureStart'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//修改工作状态 【失败/正在工作/完工】
const workStatus = async (row, state) => {
  let url;
  if (state == "重发") {
    url = "/deviceInteraction/tasking/loseMachineTask";
  } else if (state == "正在工作") {
    url = "/deviceInteraction/tasking/startMachineTask";
  } else if (state == "完工") {
    url = "/deviceInteraction/tasking/finishMachineTask";
  } else {
    return;
  }
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //开始修改
      request.post(url,
        {
          "id": machineId
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//开工/暂停
const machineStatus = async (state) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/machine/updateMachineState",
        {
          "id": machineId,
          "state": state
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//定制/标准
const machineMode = async (mode) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/machine/toggleModeMachine",
        {
          "id": machineId,
          "mode": mode
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//破损
const damagedTask = async (row) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/tasking/damagedTask",
        {
          "glassId": row.glassId
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//下线(拿走)
const glassDownLine = async (row) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/tasking/glassDownLine",
        {
          "glassId": row.glassId,
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
const topLineShow = async () => {
  blind.value = true;
}
//上线
const topLine = async (row) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //上线接口
      request.post("/deviceInteraction/tasking/glassTopLine",
        {
          "glassId": row.glassId,
          "lineConfigurationId": machineId
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {n
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
const handleDialogClose = () => {
}
</script>
<template>
  <div ref="content" style="padding:0 20px;">
    <div id="div-title" style="font-size: 20px; font-weight: bold; margin:10px 0 10px 0;padding-left: 20px;">
      {{ $t('machine.lamination') }}
    </div>
    <el-dialog v-model="blind" top="30vh" style="text-align: center;" @close="handleDialogClose">
        <!-- 线下玻璃 -->
      <el-table :data="downLineTask" stripe :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129', textAlign: 'center' }" :cell-style="{ textAlign: 'center' }">
        <!-- <el-table-column type="selection" min-width="30" /> -->
        <el-table-column type="index" :label="$t('glassInfo.number')" min-width="30" />
        <el-table-column prop="batchNumber" :label="$t('glassInfo.batchNumber')" />
        <el-table-column prop="taskType" :label="$t('glassInfo.taskType')" />
        <el-table-column prop="scanId" :label="$t('glassInfo.scanId')" />
        <el-table-column prop="length" :label="$t('glassInfo.length')" />
        <el-table-column prop="width" :label="$t('glassInfo.width')" />
        <el-table-column prop="thickness" :label="$t('glassInfo.thickness')" />
        <el-table-column prop="workState" :label="$t('glassInfo.workState')" />
        <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="70">
          <template #default="scope">
            <el-button size="mini" link type="primary" plain @click="topLine(scope.row)">{{
              $t('functionState.topLine') }}</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
    <hr />
    <br>
    <div id="search">
      <!-- 功能 -->
      <el-button :type="(findMachine['state'] == '暂停' ? 'danger' : 'success')" id="ButtonMachineStatus"
        @click="machineStatus((findMachine['state'] == '暂停' ? '开工' : '暂停'))">{{ findMachine['state'] == '开工' ?
          $t('functionState.start') : $t('functionState.stop') }}</el-button>
      <el-button type="primary" id="ButtonTopLine" @click="topLineShow">{{ $t('functionState.topLine') }}</el-button>
    </div>
    <div id="main-body">
      <!-- 表格内容 -->
      <el-table :data="loadData" stripe style="height:260px"
        :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129', textAlign: 'center' }"
        :cell-style="{ textAlign: 'center' }">
        <!-- <el-table-column type="selection" min-width="30" /> -->
        <el-table-column type="index" :label="$t('glassInfo.number')" min-width="30" />
        <el-table-column prop="batchNumber" :label="$t('glassInfo.batchNumber')" />
        <el-table-column prop="taskType" :label="$t('glassInfo.taskType')" />
        <el-table-column prop="glassId" :label="$t('glassInfo.glassId')" />
        <el-table-column prop="scanId" :label="$t('glassInfo.scanId')" />
        <el-table-column prop="length" :label="$t('glassInfo.length')" />
        <el-table-column prop="width" :label="$t('glassInfo.width')" />
        <el-table-column prop="thickness" :label="$t('glassInfo.thickness')" />
        <el-table-column prop="workState" :label="$t('glassInfo.workState')" />
        <el-table-column prop="operationRecordTime" :formatter="gridDateFormatter" :label="$t('glassInfo.operationRecordTime')" width="180"/>
        <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
          <template #default="scope">
            <el-button size="mini" link type="primary" plain @click="workStatus(scope.row, '重发')">{{
              $t('functionState.anew') }}</el-button>
            <el-button size="mini" link type="primary" plain @click="workStatus(scope.row, '完工')">{{
              $t('functionState.finish') }}</el-button>
            <el-button size="mini" link type="primary" plain @click="damagedTask(scope.row)">{{ $t('functionState.lose')
              }}</el-button>
            <el-button size="mini" link type="primary" plain @click="glassDownLine(scope.row)">{{
              $t('functionState.downLine') }}</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div id="main-body" style="width: 100%; height: 460px;min-width: 1200px;">
      <div style="width: 33%;min-width: 400px;height: 460px;float: left;background-color: aqua;"></div>
      <div style="width: 33%;min-width: 400px;height: 460px;float: left;"></div>
      <div style="width: 33%;min-width: 400px;height: 460px;float: left;"></div>
    </div>
  </div>
</template>
<style scoped>
table {
  text-align: center;
  width: 100%;
  height: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}
table td {
  text-align: center;
}
#main-body {
  width: 100%;
  height: 100%;
  border: 1px solid #ccc;
  margin-top: 25px;
}
#searchButton {
  width: 100px;
  height: 40px;
  font-size: 16px;
  border-radius: 5px;
  background-color: #409EFF;
  color: #fff;
  border: none;
  cursor: pointer;
}
.dotClass {
  width:10px;
  height:10px;
  border-radius: 50%;
  display: block;
  margin-left: 10px;
}
</style>
UI-Project/src/views/ManualReporting/manualReporting.vue
@@ -24,7 +24,11 @@
const scanCodeOld = ref([]);
const searcheh = ref();  
const machineId = 24;//当前页面的设备ID
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[4].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
var errorScanId;
var errorOpen=false;
//使用WebSocket方式展示数据
@@ -37,8 +41,9 @@
  // 更新 tableData 的数据
  //taskinggoruby.value = data.taskinggoruby[0];
  //loadData.value =getDataSort(data.taskingList[0]);
  loadData.value = data.taskingList[0];
  findMachine.value = data.machine[0];
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  
  if(findMachine.value.remark.toString()!=errorScanId&&findMachine.value.remark.toString()!=""&&findMachine.value.remark.toString()!=undefined){
    //有数据就弹窗 
@@ -56,7 +61,8 @@
};
// 定义消息处理函数,更新 receivedData 变量
const handleMessage2 = (data) => {
  downLineTask.value = data.downLineTask[0];
  let dataJson = data[""+machineId][0];
  downLineTask.value = dataJson.downLineTask[0];
  // console.log(data);
};
onUnmounted(() => {
@@ -395,13 +401,14 @@
        :cell-style="{ textAlign: 'center' }">
        <!-- <el-table-column type="selection" min-width="30" /> -->
        <el-table-column type="index" :label="$t('glassInfo.number')" min-width="30" />
        <el-table-column prop="batchNumber" :label="$t('glassInfo.batchNumber')" />
        <el-table-column prop="taskType" :label="$t('glassInfo.taskType')" />
        <el-table-column prop="scanId" :label="$t('glassInfo.scanId')" />
        <el-table-column prop="length" :label="$t('glassInfo.length')" />
        <el-table-column prop="width" :label="$t('glassInfo.width')" />
        <el-table-column prop="thickness" :label="$t('glassInfo.thickness')" />
        <el-table-column prop="operationRecordTime" :formatter="gridDateFormatter" :label="$t('glassInfo.operationRecordTime')" width="180"/>
        <el-table-column prop="batchNumber" :label="$t('glassInfo.batchNumber')" />
        <el-table-column prop="scanId" :label="$t('glassInfo.scanId')" />
        <el-table-column prop="warehouse" :label="$t('glassInfo.warehouse')" />
        <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
          <template #default="scope">
UI-Project/src/views/Marking/marking.vue
@@ -17,16 +17,24 @@
const loadData = ref([]);
const findMachine = ref([]);
const sendRecords = ref([]);
const machineId=12;//当前页面的设备ID
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[3].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
//const machineId=12;//当前页面的设备ID
//使用WebSocket方式展示数据
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/marking`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  loadData.value = data.taskingList[0];
  findMachine.value = data.machine[0];
  sendRecords.value = data.sendRecords[0];
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  sendRecords.value = dataJson.sendRecords[0];
};
onUnmounted(() => {
  if (socket) {
UI-Project/src/views/MechanicalArm/mechanicalArm.vue
@@ -14,7 +14,7 @@
});
const blind = ref(false)
const blindMode = ref(false)
const blindModeNumber = ref('')
const blindModeNumberLocal = ref('')
const errorInfo = ref(true)
const loadData = ref([]);
const findMachine = ref([]);
@@ -23,7 +23,12 @@
const findPrimitiveTask = ref([]);
const scanCodeOld = ref([]);
const searchs = ref();
const machineId = 2;//当前页面的设备ID
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[0].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
var errorScanId;
//使用WebSocket方式展示数据
let socket = null;
@@ -31,12 +36,33 @@
const socketUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/loadTask`;
const socketDownLineTaskUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/downLineTask`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  loadData.value = data.findPrimitiveTasking[0];
  findPrimitiveTask.value = data.findPrimitiveTask[0];
  findMachine.value = data.machine[0];
  sendRecords.value = data.sendRecords[0].reverse();
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.findPrimitiveTasking[0];
  findPrimitiveTask.value = dataJson.findPrimitiveTask[0];
  findMachine.value = dataJson.machine[0];
  if(findMachine.value.mode=="1"){
    modevalue.value = {
    value: '1',
    label: '标准',
  };
  }else if(findMachine.value.mode=="2"){
    modevalue.value = {
      value: '2',
      label: '定制',
    };
  }else if(findMachine.value.mode=="3"){
    modevalue.value = {
      value: '3',
      label: '手动',
    };
  }
  //sendRecords.value = data.sendRecords[0].reverse();
};
// 定义消息处理函数,更新 receivedData 变量
const handleMessage2 = (data) => {
@@ -334,13 +360,48 @@
    label: '手动',
  }
]
const modeShow = async () => {
  blindMode.value = true;
  blindModeNumberLocal.value=findMachine.taskCount;
}
//模式选择时进行处理
const modeChange = async () => {
  let mode=modevalue.value;
  request.post("/deviceInteraction/machine/toggleModeMachine",
        {
          "id": machineId,
          "mode": mode
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
  if(modevalue.value=='3'){
    //当是手动模式时弹窗提示 设置上片数量
    blindMode.value = true;
  }
  
}
//提交修改手动模式的吸片数量
const fetchSubmit = async () => {
  //扫码回车提交
  request.post("/deviceInteraction/machine/manualOperationTask",
        {
          "id": machineId,
          "taskCount": blindModeNumberLocal.value,
          "finshCount": 0
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
        blindMode.value = false;
}
</script>
<template>
@@ -348,10 +409,10 @@
    <div id="div-title" style="font-size: 20px; font-weight: bold; margin:10px 0 10px 0;padding-left: 20px;">
      {{ $t('machine.mechanicalArm') }}
    </div>
    <el-dialog v-model="blind" top="30vh" style="text-align: center;" @close="handleDialogClose">
    <el-dialog v-model="blind" top="10vh" style="text-align: center;width:1400px ;" @close="handleDialogClose">
      <!-- 未领取的标准任务 -->
      <el-table :data="findPrimitiveTask" stripe style="height:260px"
      <el-table :data="findPrimitiveTask" stripe style="height:660px"
        :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129', textAlign: 'center' }"
        :cell-style="{ textAlign: 'center' }">
        <!-- <el-table-column type="selection" min-width="30" /> -->
@@ -382,7 +443,8 @@
      </div>
      <div>
        手动输入上片数量:
        <el-input v-model="blindModeNumber" style="width: 200px;" type="Number" id="blindMode" @keyup.enter="fetchData"></el-input>
        <el-input v-model="blindModeNumberLocal" style="width: 200px;" type="Number" id="blindMode" @keyup.enter="fetchSubmit"></el-input>
      </div>
      <!-- <div>
        <el-button size="mini" link type="primary" plain @click="startOrStopTask(scope.row, 2, 2)">确认</el-button>
@@ -399,7 +461,12 @@
        <el-select v-model="modevalue" @change="modeChange" placeholder="请选择模式" size="large" style="width: 220px">
          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
        </el-select>
        <span @click="modeChange" style="margin-left: 40px;">上片数量:{{ blindModeNumber}}</span>
        <span>
          <span @click="modeShow" style="margin-left: 40px;">{{ findMachine.mode=="3"? ("上片数量:"+findMachine.taskCount):"" }}</span>
          <span style="margin-left: 40px;">{{ findMachine.mode=="3"? ("已完成数量:"+findMachine.finshCount):"" }}</span>
        </span>
        
      </div>
      <br>
@@ -407,10 +474,6 @@
        @click="machineStatus((findMachine['state'] == '暂停' ? '开工' : '暂停'))">{{ findMachine['state'] == '开工' ?
        $t('functionState.start') : $t('functionState.stop') }}</el-button>
      <el-button type="primary" id="ButtonTopLine" @click="topLineShow">{{ $t('functionState.getTask') }}</el-button>
      <el-button :type="(findMachine['mode'] == '定制' ? 'danger' : 'success')" id="ButtonMachineMode"
        @click="machineMode((findMachine['mode'] == 0 ? 1 : 0))">{{ findMachine['mode'] == 0 ?
        $t('functionState.modeD') : $t('functionState.modeB') }}</el-button>
    </div>
    <div id="main-body" style="min-height:240px;">
UI-Project/src/views/MechanicalArm/mechanicalArm2.vue
File was deleted
UI-Project/src/views/Rotate/rotate.vue
@@ -21,7 +21,12 @@
const downLineTask = ref([]);
const searchs = ref();
const machineId = 20;//当前页面的设备ID
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[5].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
//const machineId = 20;//当前页面的设备ID
var errorScanId;
var errorOpen=false;
//使用WebSocket方式展示数据
@@ -32,9 +37,11 @@
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  loadData.value = data.taskingList[0];
  findMachine.value = data.machine[0];
  sendRecords.value = data.sendRecords[0].reverse();
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  sendRecords.value = dataJson.sendRecords[0].reverse();
  
  if(findMachine.value.remark.toString()!=errorScanId&&findMachine.value.remark.toString()!=""&&findMachine.value.remark.toString()!=undefined){
    //有数据就弹窗 
@@ -202,6 +209,39 @@
      })
    })
}
//定制/标准
const rotateMode = async (mode) => {
  ElMessageBox.confirm(
    t('functionState.tips'),
    t('delivery.prompt'),
    {
      confirmButtonText: t('functionState.sure'),
      cancelButtonText: t('functionState.cancel'),
      type: 'warning',
    }
  )
    .then(() => {
      //下线接口
      request.post("/deviceInteraction/machine/toggleModeRotate",
        {
          "id": machineId,
          "rotateMode": mode
        }).then((res) => { // 替换为你的API端点
          if (res.code === 200) {
            ElMessage.success(res.message);
          } else {
            ElMessage.warning(res.message)
          }
        })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: t('functionState.cancel'),
      })
    })
}
//破损
const damagedTask = async (row) => {
  ElMessageBox.confirm(
@@ -350,6 +390,12 @@
      <el-button :type="(findMachine['mode'] == '定制' ? 'danger' : 'success')" id="ButtonMachineMode"
        @click="machineMode((findMachine['mode'] == 0 ? 1 : 0))">{{ findMachine['mode'] == 0 ?
         $t('functionState.modeD') : $t('functionState.modeB') }}</el-button>
      <el-button :type="(findMachine['rotateMode'] == 1 ? 'danger' : 'success')" id="ButtonRotateMode"
        @click="rotateMode((findMachine['rotateMode'] == 1 ? 2 : 1))">{{ findMachine['rotateMode'] == 1 ?
         $t('functionState.rotate') : $t('functionState.notRotate') }}</el-button>
      <el-button type="primary" id="ButtonTopLine" @click="topLineShow">{{ $t('functionState.topLine') }}</el-button>
      <!-- <el-button type="primary" id="searchButton" @click="downLine('下线')">下线</el-button>
      <el-button type="primary" id="searchButton" @click="workStatus('破损')">破损</el-button>
UI-Project/src/views/SilkScreen/SilkScreen.vue
@@ -17,16 +17,23 @@
const loadData = ref([]);
const findMachine = ref([]);
const sendRecords = ref([]);
const machineId=14;//当前页面的设备ID
const userInfo=JSON.parse(window.localStorage.getItem('userInfo'));
const pageParams=userInfo.user.menus[0].pages[4].params;
const pageParamsJson=JSON.parse(pageParams);
const machineId = pageParamsJson.machineId;//当前页面的设备ID
console.log(machineId);
//const machineId=14;//当前页面的设备ID
//使用WebSocket方式展示数据
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/deviceInteraction/api/talk/silkScreenTask`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  loadData.value = data.taskingList[0];
  findMachine.value = data.machine[0];
  sendRecords.value = data.sendRecords[0];
  let dataJson = data[""+machineId][0];
  loadData.value = dataJson.taskingList[0];
  findMachine.value = dataJson.machine[0];
  sendRecords.value = dataJson.sendRecords[0];
};
onUnmounted(() => {
  if (socket) {