春风项目四线(合箱线、总装线)
wujian
2024-03-22 9e6d86cfea30f99668cde150b49abae780239a55
change 通信逻辑
fix 相关问题修改
已修改10个文件
342 ■■■■■ 文件已修改
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRoute/service/impl/BsTechnologyRouteInfoServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/controller/BsTechnologyRouteChildInfoController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/mapper/BsTechnologyRouteChildInfoMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/service/IBsTechnologyRouteChildInfoService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/service/impl/BsTechnologyRouteChildInfoServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/resources/mapper/bs/technologyRouteChild/BsTechnologyRouteChildInfoMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRoute/service/impl/BsTechnologyRouteInfoServiceImpl.java
@@ -6,6 +6,7 @@
import com.jcdm.main.bs.technologyRoute.domain.BsTechnologyRouteInfo;
import com.jcdm.main.bs.technologyRoute.mapper.BsTechnologyRouteInfoMapper;
import com.jcdm.main.bs.technologyRoute.service.IBsTechnologyRouteInfoService;
import com.jcdm.main.bs.technologyRouteChild.mapper.BsTechnologyRouteChildInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
@@ -26,7 +27,7 @@
    @Autowired
    private com.jcdm.main.bs.mapper.BsTechnologyRouteChildInfoMapper bsTechnologyRouteChildInfoMapper;
    private BsTechnologyRouteChildInfoMapper bsTechnologyRouteChildInfoMapper;
    /**
     * 查询工艺流程
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/controller/BsTechnologyRouteChildInfoController.java
@@ -1,25 +1,19 @@
package com.jcdm.main.bs.controller;
package com.jcdm.main.bs.technologyRouteChild.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.jcdm.common.annotation.Log;
import com.jcdm.common.core.controller.BaseController;
import com.jcdm.common.core.domain.AjaxResult;
import com.jcdm.common.enums.BusinessType;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
import com.jcdm.main.bs.service.IBsTechnologyRouteChildInfoService;
import com.jcdm.common.utils.poi.ExcelUtil;
import com.jcdm.common.core.page.TableDataInfo;
import com.jcdm.common.enums.BusinessType;
import com.jcdm.common.utils.poi.ExcelUtil;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * 工艺路线子信息Controller
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/mapper/BsTechnologyRouteChildInfoMapper.java
@@ -1,7 +1,9 @@
package com.jcdm.main.bs.mapper;
package com.jcdm.main.bs.technologyRouteChild.mapper;
import java.util.List;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * 工艺路线子信息Mapper接口
@@ -61,4 +63,6 @@
     * @return 结果
     */
    public int deleteBsTechnologyRouteChildInfoByIds(Long[] ids);
    public List<BsTechnologyRouteChildInfo> selectAllTechnologyRouteByProductCode(@Param("productCode") String productCode);
}
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/service/IBsTechnologyRouteChildInfoService.java
@@ -1,4 +1,4 @@
package com.jcdm.main.bs.service;
package com.jcdm.main.bs.technologyRouteChild.service;
import java.util.List;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
@@ -58,4 +58,9 @@
     * @return 结果
     */
    public int deleteBsTechnologyRouteChildInfoById(Long id);
    public List<BsTechnologyRouteChildInfo> selectAllTechnologyRouteByProductCode(String productCode);
}
jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/service/impl/BsTechnologyRouteChildInfoServiceImpl.java
@@ -1,12 +1,13 @@
package com.jcdm.main.bs.service.impl;
package com.jcdm.main.bs.technologyRouteChild.service.impl;
import java.util.List;
import com.jcdm.common.utils.DateUtils;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
import com.jcdm.main.bs.technologyRouteChild.mapper.BsTechnologyRouteChildInfoMapper;
import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jcdm.main.bs.mapper.BsTechnologyRouteChildInfoMapper;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
import com.jcdm.main.bs.service.IBsTechnologyRouteChildInfoService;
import java.util.List;
import static org.apache.commons.lang3.SystemUtils.getUserName;
@@ -17,7 +18,7 @@
 * @date 2023-12-09
 */
@Service
public class BsTechnologyRouteChildInfoServiceImpl implements IBsTechnologyRouteChildInfoService
public class BsTechnologyRouteChildInfoServiceImpl implements IBsTechnologyRouteChildInfoService
{
    @Autowired
    private BsTechnologyRouteChildInfoMapper bsTechnologyRouteChildInfoMapper;
@@ -97,4 +98,10 @@
    {
        return bsTechnologyRouteChildInfoMapper.deleteBsTechnologyRouteChildInfoById(id);
    }
    @Override
    public List<BsTechnologyRouteChildInfo> selectAllTechnologyRouteByProductCode(String productCode) {
        return bsTechnologyRouteChildInfoMapper.selectAllTechnologyRouteByProductCode(productCode);
    }
}
jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
@@ -226,8 +226,8 @@
    public String SelectSN(String SNcode,String node) {
        try {
            Map<String, Object> params = new HashMap<>();
            params.put("SNcode",SNcode);
            params.put("node",node);
            params.put("SN_CODE",SNcode);
            params.put("Node",node);
            params.put("Success","");
            daPassingStationCollectionMapper.SelectSN(params);
            return (String)params.get("Success");
jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java
@@ -1,12 +1,15 @@
package com.jcdm.main.plcserver;
import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService;
import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService;
import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService;
import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl;
import com.jcdm.main.plcserver.sub.OPCUaSubscription;
import com.jcdm.main.rm.repairRecord.service.IRmRepairRecordService;
import com.kangaroohy.milo.service.MiloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
@@ -35,6 +38,15 @@
    @Resource
    private IDaOpcuaConfigService iDaOpcuaConfigService;
    @Resource
    private IBsOrderSchedulingService bsOrderSchedulingService;
    @Resource
    private IRmRepairRecordService rmRepairRecordService;
    @Resource
    private IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService;
    @Override
    public void run(ApplicationArguments args) throws Exception {
@@ -43,9 +55,12 @@
        OPCUaSubscription opcUaSubscription = new OPCUaSubscription(
                miloService,
                collectionParamConfService,
                daParamCollectionService
        ,passingStationCollectionServiceImpl,
                lists);
                daParamCollectionService,
                passingStationCollectionServiceImpl,
                bsOrderSchedulingService,
                lists,
                rmRepairRecordService,
                bsTechnologyRouteChildInfoService);
        miloService.subscriptionFromOpcUa(collect,opcUaSubscription);
@@ -57,6 +72,7 @@
     */
    public List<DaOpcuaConfig> getSubList(){
        DaOpcuaConfig config = new DaOpcuaConfig();
        config.setState(1L);
        List<DaOpcuaConfig> list = iDaOpcuaConfigService.selectDaOpcuaConfigList(config);
//        List<String> lists = new ArrayList<>();
//        if (CollUtil.isNotEmpty(list)){
jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
@@ -27,9 +27,17 @@
    public static final String OP020_MesSaveFeed = OP020_ITEM + "MesSaveFeed";//Mes保存完成
    public static final String OP120_ZZ_CODE_CHECK = OP120_ITEM_ZZ + "CodeCheck";//请求保存
    public static final String OP050_HX_CODE_CHECK = "CFL4HX.OP050.CodeCheck";//请求保存
    //返修监听点位-465
    public static final String OP465_ZZ_CODE_CHECK = "CFL4ZZ.OP465.CodeCheck";
    //返修监听点位-355
    public static final String OP355_ZZ_CODE_CHECK = "CFL4ZZ.OP355.CodeCheck";
    public static final String SN_CHECK = "SNRetrieval";
    public static final String SAVE_DATA = "saveData";
    public static final String SAVE_DATA = "SaveData";
    public static final String QUALIFIED = "合格";
    public static final String UN_QUALIFIED = "不合格";
jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
@@ -1,6 +1,13 @@
package com.jcdm.main.plcserver.sub;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo;
import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling;
import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService;
import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService;
import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
@@ -9,13 +16,15 @@
import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl;
import com.jcdm.main.plcserver.conf.OPCElement;
import com.jcdm.main.rm.repairRecord.domain.RmRepairRecord;
import com.jcdm.main.rm.repairRecord.service.IRmRepairRecordService;
import com.kangaroohy.milo.model.ReadWriteEntity;
import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
import com.kangaroohy.milo.service.MiloService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.text.Format;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -39,16 +48,28 @@
    public static final HashMap<String,Integer> map = new HashMap<>();
    public IBsOrderSchedulingService bsOrderSchedulingService;
    public IRmRepairRecordService rmRepairRecordService;
    public IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService;
    public OPCUaSubscription(MiloService miloService,
                             IDaCollectionParamConfService collectionParamConfService,
                             IDaParamCollectionService daParamCollectionService,
                             DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl,
                             List<DaOpcuaConfig> lists) {
                             IBsOrderSchedulingService bsOrderSchedulingService,
                             List<DaOpcuaConfig> lists,
                             IRmRepairRecordService rmRepairRecordService,
                             IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService) {
        OPCUaSubscription.miloService = miloService;
        this.collectionParamConfService = collectionParamConfService;
        this.daParamCollectionService = daParamCollectionService;
        this.passingStationCollectionServiceImpl = passingStationCollectionServiceImpl;
        this.bsOrderSchedulingService = bsOrderSchedulingService;
        this.lists = lists;
        this.rmRepairRecordService = rmRepairRecordService;
        this.bsTechnologyRouteChildInfoService = bsTechnologyRouteChildInfoService;
    }
@@ -58,7 +79,7 @@
    public void onSubscribe(String identifier, Object value) {
        String ecpStr = "";//异常记录标记
        try {
            if(null != value) {
            if(null != value && "1".equals(value.toString())) {
                //1、检索SN号
                //2、过站参数采集
                //3、扫码枪数据回传
@@ -72,80 +93,57 @@
                    if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){
                        //总装上线扫码传输数据
                        log.info("-------监听到,{}的扫码枪扫码的CODE_CHECK的信号",identifier);
                        Integer i = map.getOrDefault(identifier + "的扫码枪扫码的CODE_CHECK的信号",0);
                        if (0==i){
                            map.put(identifier + "的扫码枪扫码的CODE_CHECK的信号",i+1);
                        }
                        String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]");
                        Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue();
                        if (null != SNCodeObject){
                            String SNCode = SNCodeObject.toString();
                            passingStationCollectionServiceImpl.sendMessage(SNCode);
                        scannerGunMessage();
                    }
                }
                if (collect2.contains(identifier)){
                    if ("1".equals(value.toString())){
                        //save
                        this.SaveData(identifier);
                        //返回plc保存成功
                        String[] parts = identifier.split("[.]");
                        if (parts.length==3){
                            if ("SaveRequest".equals(parts[2])){
                                ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeed", 1);
                                log.info("-------监听到,{}的saveRequest的信号",identifier);
                                Integer i = map.getOrDefault(identifier + "的saveRequest的信号",0);
                                if (0==i){
                                    map.put(identifier + "的saveRequest的信号",i+1);
                                }
//                                miloService.writeToOpcByte(entity);
                            }else if ("SaveRequestLast".equals(parts[2])){
                                ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeedLast", 1);
                                log.info("-------监听到,{}的SaveRequestLast的信号",identifier);
                                Integer i = map.getOrDefault(identifier + "的SaveRequestLast的信号",0);
                                if (0==i){
                                    map.put(identifier + "的SaveRequestLast的信号",i+1);
                                }
//                                miloService.writeToOpcByte(entity);
                            }
                        }
                    }
                }
                else if (collect2.contains(identifier)){
                    //save
                    this.SaveData(identifier);
                    //返回plc保存成功
                    String[] parts = identifier.split("[.]");
                    if (parts.length==3){
                        if ("SaveRequest".equals(parts[2])){
                            ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeed", 1);
                            log.info("-------监听到,{}的saveRequest的信号",identifier);
                            Integer i = map.getOrDefault(identifier + "的saveRequest的信号",0);
                            if (0==i){
                                map.put(identifier + "的saveRequest的信号",i+1);
                            }
//                            miloService.writeToOpcByte(entity);
                        }else if ("SaveRequestLast".equals(parts[2])){
                            ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeedLast", 1);
                            log.info("-------监听到,{}的SaveRequestLast的信号",identifier);
                            Integer i = map.getOrDefault(identifier + "的SaveRequestLast的信号",0);
                            if (0==i){
                                map.put(identifier + "的SaveRequestLast的信号",i+1);
                            }
//                            miloService.writeToOpcByte(entity);
                        }
                    }
                }
                //OP010保存请求
//                if (identifier.equals(OPCElement.OP120_SaveRequestLast) && "1".equals(value.toString())) {
//                    this.SaveData(OPCElement.OP120_SaveRequestLast);
//                    //1、更新工单数据
//                    //2、保存过站采集数据
//                    //3、保存参数采集数据
//                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesSaveFeed, 1);
//                    miloService.writeToOpcByte(entity);
//                }
//                else if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){
//                    //总装上线扫码传输数据
//                    String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]");
//                    Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue();
//                    if (null != SNCodeObject){
//                        String SNCode = SNCodeObject.toString();
//                        passingStationCollectionServiceImpl.sendMessage(SNCode);
//                    }
//                }
//                //OP010请求检索条码
//                else if (identifier.equals(OPCElement.OP010_CodeCheck) && "1".equals(value.toString())) {
//                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesCodeCheckFeed, 1);
//                    miloService.writeToOpcByte(entity);
//                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            if (!"".equals(ecpStr)) {
                System.out.println(ecpStr + "\r\n");
            }
        }
    }
    private void scannerGunMessage() throws Exception {
        String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]");
        Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue();
        if (null != SNCodeObject){
            String SNCode = SNCodeObject.toString();
            passingStationCollectionServiceImpl.sendMessage(SNCode);
        }
    }
@@ -157,20 +155,83 @@
            if(null != SNCodeObject) {
                String SNCode=SNCodeObject.toString();
                String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]);
//                String a="1";
                // 1:OK可生产 2:NG不可生产 3:NG可返工 4:PC检索失败(无记录)5:PC检索失败(软件)
                ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", a);
                log.info("-------监听到,{}的CodeCheck的信号",Node);
                Integer i = map.getOrDefault(Node + "的CodeCheck的信号",0);
                if (0==i){
                    map.put(Node + "的CodeCheck的信号",i+1);
                }
                if (StrUtil.isNotBlank(a)){
                    int input = Integer.parseInt(a);
                    ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", input);
                    log.info("-------监听到,{}的CodeCheck的信号",Node);
                    //首站传输订单号
                    if (OPCElement.OP050_HX_CODE_CHECK.equals(Node)){
                        //查询订单号
                        BsOrderScheduling bsOrderScheduling = new BsOrderScheduling();
                        bsOrderScheduling.setEngineNo(SNCode);
                        List<BsOrderScheduling> tempList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling);
                        String orderNum = "";
                        if (CollUtil.isNotEmpty(tempList)){
                            BsOrderScheduling bsOrderScheduling1 = tempList.get(0);
                            orderNum = bsOrderScheduling1.getOrderNo();
                        }
                        ReadWriteEntity entity2 = new ReadWriteEntity(parts[0]+"."+parts[1]+".OrderNumber", orderNum);
//                        miloService.writeToOpcByte(entity2);
                    }
                    //如果是返修工位需要传输返修工位号
                    if (OPCElement.OP465_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP355_ZZ_CODE_CHECK.equals(Node)){
                        rework(SNCode);
                    }
//                miloService.writeToOpcByte(entity);
                DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection();
                PassingStationCollection.setSfcCode(SNCode);
                PassingStationCollection.setLocationCode(parts[1]);
                PassingStationCollection.setInboundTime(new Date());
                passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection);
                }
            }
        }
    }
    private void rework(String SNCode) {
        BsOrderScheduling bsOrderScheduling = new BsOrderScheduling();
        bsOrderScheduling.setEngineNo(SNCode);
        List<String> allProcessCoed = new ArrayList<>();
        List<String> collect = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling).stream().map(BsOrderScheduling::getModel).collect(Collectors.toList());
        if (CollUtil.isNotEmpty(collect)){
            String s = collect.get(0);
            //查找次机型的完整工序
            List<BsTechnologyRouteChildInfo> bsTechnologyRouteChildInfos = bsTechnologyRouteChildInfoService.selectAllTechnologyRouteByProductCode(SNCode);
            if (CollUtil.isNotEmpty(bsTechnologyRouteChildInfos)){
                allProcessCoed = bsTechnologyRouteChildInfos.stream().map(BsTechnologyRouteChildInfo::getProcessesCode).collect(Collectors.toList());
            }
        }
        RmRepairRecord rmRepairRecord = new RmRepairRecord();
        rmRepairRecord.setBoxCode(SNCode);
        List<ReadWriteEntity> writeList = new ArrayList<>();
        List<RmRepairRecord> rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord);
        //所有反工工位
        List<String> collect1 = rmRepairRecords.stream().map(RmRepairRecord::getProcessesCode).collect(Collectors.toList());
        //所有放行工位
        List<String> collect2 = allProcessCoed;
        if (CollUtil.isNotEmpty(rmRepairRecords)){
            //数据库查询出的工位
            rmRepairRecords.forEach(x -> {
                ReadWriteEntity readWriteEntity = new ReadWriteEntity();
                readWriteEntity.setIdentifier(x.getProcessesCode());
                readWriteEntity.setValue(1);
                writeList.add(readWriteEntity);
            });
            collect2 = allProcessCoed.stream().filter(x -> !collect1.contains(x)).collect(Collectors.toList());
        }
        if (CollUtil.isNotEmpty(collect2)){
            collect2.forEach(x -> {
                ReadWriteEntity readWriteEntity = new ReadWriteEntity();
                readWriteEntity.setIdentifier(x);
                readWriteEntity.setValue(2);
                writeList.add(readWriteEntity);
            });
        }
        if (CollUtil.isNotEmpty(writeList)){
            ReadWriteEntity readWriteEntity = new ReadWriteEntity();
            readWriteEntity.setIdentifier("Repair_sign");
            readWriteEntity.setValue(1);
            writeList.add(readWriteEntity);
//                            miloService.writeToOpcByte(writeList);
        }
    }
@@ -214,6 +275,24 @@
                }
                daParamCollectionService.saveBeachDaParamCollection(daParamCollectionlist);
            }
            Object object = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Runtime").getValue();
            Long beatTime = 0L;
            if (ObjectUtil.isNotEmpty(object)){
                beatTime = (Long) object;
            }
            DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection();
            PassingStationCollection.setSfcCode(SNCode);
            PassingStationCollection.setLocationCode(parts[1]);
            PassingStationCollection.setOutboundTime(new Date());
            PassingStationCollection.setInboundTime(new Date(new Date().getTime()-beatTime*1000));
            PassingStationCollection.setCollectionTime(new Date());
            PassingStationCollection.setCreateTime(new Date());
            PassingStationCollection.setBeatTime(beatTime.toString());
            PassingStationCollection.setOutRsSign("合格");
            passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection);
        }
    }
}
jcdm-main/src/main/resources/mapper/bs/technologyRouteChild/BsTechnologyRouteChildInfoMapper.xml
@@ -2,8 +2,8 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jcdm.main.bs.mapper.BsTechnologyRouteChildInfoMapper">
<mapper namespace="com.jcdm.main.bs.technologyRouteChild.mapper.BsTechnologyRouteChildInfoMapper">
    <resultMap type="BsTechnologyRouteChildInfo" id="BsTechnologyRouteChildInfoResult">
        <result property="id"    column="id"    />
        <result property="processesCode"    column="processes_code"    />
@@ -161,4 +161,16 @@
            #{id}
        </foreach>
    </delete>
    <select id="selectAllTechnologyRouteByProductCode" parameterType="String" resultMap="BsTechnologyRouteChildInfoResult">
        <include refid="selectBsTechnologyRouteChildInfoVo"/>
            left join bs_technology_route_info
            on bs_technology_route_info.route_code = bs_technology_route_child_info.route_code
        <where>
            <if test="productCode != null  and productCode != ''">
            and bs_technology_route_info.product_code = #{productCode}
            </if>
        </where>
    </select>
</mapper>