春风项目四线(合箱线、总装线)
wujian
2024-03-16 059083082a6d284821b70eb7bb6805763014c402
jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
@@ -3,20 +3,27 @@
import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
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.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.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component
public class OPCUaSubscription implements SubscriptionCallback {
@@ -26,12 +33,23 @@
    public IDaParamCollectionService daParamCollectionService;
    public DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl;
    public List<DaOpcuaConfig> lists;
    public static final HashMap<String,Integer> map = new HashMap<>();
    public OPCUaSubscription(MiloService miloService,
                             IDaCollectionParamConfService collectionParamConfService,
                             IDaParamCollectionService daParamCollectionService) {
                             IDaParamCollectionService daParamCollectionService,
                             DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl,
                             List<DaOpcuaConfig> lists) {
        OPCUaSubscription.miloService = miloService;
        this.collectionParamConfService = collectionParamConfService;
        this.daParamCollectionService = daParamCollectionService;
        this.passingStationCollectionServiceImpl = passingStationCollectionServiceImpl;
        this.lists = lists;
    }
@@ -41,20 +59,82 @@
        String ecpStr = "";//异常记录标记
        try {
            if(null != value) {
                //1、检索SN号
                //2、过站参数采集
                //3、扫码枪数据回传
                List<String> collect1 = lists.stream().filter(x -> OPCElement.SN_CHECK.equals(x.getrFunction()))
                        .map(DaOpcuaConfig::getNode).collect(Collectors.toList());
                List<String> collect2 = lists.stream().filter(x -> OPCElement.SAVE_DATA.equals(x.getrFunction()))
                        .map(DaOpcuaConfig::getNode).collect(Collectors.toList());
                if (collect1.contains(identifier)){
                    //sn
                    this.SNRetrieval(identifier,value.toString());
                    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);
                        }
                    }
                }
                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.OP010_SaveRequest) && "1".equals(value.toString())) {
                    //1、更新工单数据
                    //2、保存过站采集数据
                    //3、保存参数采集数据
                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesSaveFeed, 1);
                    miloService.writeToOpcByte(entity);
                }
                //OP010请求检索条码
                else if (identifier.equals(OPCElement.OP010_CodeCheck) && "1".equals(value.toString())) {
                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesCodeCheckFeed, 1);
                    miloService.writeToOpcByte(entity);
                }
//                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);
//                }
            }
@@ -69,8 +149,34 @@
        }
    }
    public void SNRetrieval(String Node, String value) throws Exception {
        String[] parts = Node.split("[.]");
        if(value.equals("1")) {
            //SN号检索
            Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue();
            if(null != SNCodeObject) {
                String SNCode=SNCodeObject.toString();
                String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[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);
                }
//                miloService.writeToOpcByte(entity);
                DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection();
                PassingStationCollection.setSfcCode(SNCode);
                PassingStationCollection.setLocationCode(parts[1]);
                PassingStationCollection.setInboundTime(new Date());
                passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection);
            }
        }
    }
    public void SaveData(String Node) throws Exception {
        /*String[] parts = Node.split("[.]");
        String[] parts = Node.split("[.]");
        Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue();
        if(null != SNCodeObject)
@@ -108,6 +214,6 @@
                }
                daParamCollectionService.saveBeachDaParamCollection(daParamCollectionlist);
            }
        }*/
        }
    }
}