#
Junjie
8 天以前 edf5eb33c88d88062e295db466a654ac0a646ded
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package com.zy.asrs.wcs.rcs.thread.impl;
 
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.wcs.core.entity.DeviceBarcode;
import com.zy.asrs.wcs.core.service.DeviceBarcodeService;
import com.zy.asrs.wcs.core.utils.RedisUtil;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.thread.BarcodeThread;
 
import java.text.MessageFormat;
import java.util.Date;
 
public class SiemensBarcodeThread implements BarcodeThread {
 
    private Device device;
    private RedisUtil redisUtil;
    private SiemensS7Net siemensS7Net;
    private StringBuffer barcode = new StringBuffer();
    private String lastBarcode = "";
 
    public SiemensBarcodeThread(Device device, RedisUtil redisUtil) {
        this.device = device;
        this.redisUtil = redisUtil;
    }
 
    @Override
    public String getBarcode() {
        return String.valueOf(barcode);
    }
 
    @Override
    public boolean setBarcode(String barcode) {
        this.barcode.delete(0, this.barcode.length());
        this.barcode.append(barcode);
        if(!Cools.isEmpty(barcode) && !this.lastBarcode.equals(barcode)) {
            this.lastBarcode = String.valueOf(this.barcode);
            News.info("{}号条码器,检索数据:{}", device.getId(), this.barcode);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F));
            jsonObject.put("barcode", barcode);
            if (OutputQueue.BARCODE.size() >= 32) {
                OutputQueue.BARCODE.poll();
            }
            OutputQueue.BARCODE.offer(jsonObject);
            return true;
        }
        return false;
    }
 
    @Override
    public boolean connect() {
        boolean result = false;
        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, device.getIp());
        siemensS7Net.setRack(device.getRack().byteValue());
        siemensS7Net.setSlot(device.getSlot().byteValue());
        OperateResult connect = siemensS7Net.ConnectServer();
        if(connect.IsSuccess){
            result = true;
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】条码器plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
            News.info("条码器plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort());
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】条码器plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
            News.error("条码器plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort());
        }
        // siemensS7Net.ConnectClose();
        return result;
    }
 
    @Override
    public void close() {
 
    }
 
    @Override
    public void run() {
//        this.connect();
//        while (true) {
//            try {
//                DeviceBarcodeService deviceBarcodeService = SpringUtils.getBean(DeviceBarcodeService.class);
//                if (deviceBarcodeService == null) {
//                    continue;
//                }
//
//                DeviceBarcode deviceBarcode = deviceBarcodeService.getOne(new LambdaQueryWrapper<DeviceBarcode>()
//                        .eq(DeviceBarcode::getDeviceId, device.getId())
//                        .eq(DeviceBarcode::getHostId, device.getHostId())
//                        .eq(DeviceBarcode::getStatus, 1));
//                if (deviceBarcode == null) {
//                    continue;
//                }
//
//                JSONObject connect = JSON.parseObject(deviceBarcode.getConnect());
//                String address = connect.getString("address");
//                Short length = connect.getShort("length");
//
//                // 条码扫描器
//                OperateResultExOne<byte[]> result = null;
//                result = siemensS7Net.Read(address, length);
//                if (result.IsSuccess) {
//                    String barcode = siemensS7Net.getByteTransform().TransString(result.Content, 0, length, "UTF-8");
//                    setBarcode(barcode);
//                }
//            } catch (Exception e) {
////                e.printStackTrace();
//            }
//        }
    }
 
}