自动化立体仓库 - WCS系统
#
lsh
2022-10-07 a1739f5c4a9421a583a546f7420bac1a94f3a54b
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.zy.core.netty.handle;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.FireLog;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.FireLogService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.Utils;
import com.zy.core.netty.AbstractInboundHandler;
import com.zy.core.netty.cache.ChannelCache;
import com.zy.core.netty.constant.Constant;
import com.zy.core.netty.constant.FireDataType;
import com.zy.core.netty.domain.ChPackage;
import com.zy.core.netty.domain.fire.Fire_3030;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import java.util.Date;
 
/**
 * 国标业务处理handler
 * Created by vincent on 2019-04-02
 */
@Slf4j
@Component
@ChannelHandler.Sharable
public class PackageServerHandler extends AbstractInboundHandler<ChPackage> {
 
    @Autowired
    private MainServiceImpl mainService;
 
    @Override
    protected boolean channelRead0(ChannelHandlerContext ctx, ChPackage pac) {
        FireDataType dataType = FireDataType.get(pac.getBytes()[1], pac.getBytes()[2]);
        Fire_3030 fire3030 = new Fire_3030().readFromBytes(pac.getBytes());
        switch (dataType) {
            case HEARTBEAT:
                ChannelCache.setChannel(String.valueOf(fire3030.getNo()), ctx.channel());
                Constant.errorMap.remove(fire3030.getNo());
                break;
            case FIRE_ALARM:
                //消防IO点编号
                String fireNo = fire3030.getNo().toString() + fire3030.getLoop().toString() + fire3030.getPartNo().toString();
                String fireTime = "20" + fire3030.getYear() + "-" + fire3030.getMonth() + "-" + fire3030.getDay()
                        + " " + fire3030.getHour() + ":" + fire3030.getMinute() + ":" + fire3030.getSeconds();
                Date dt = DateUtils.convert(fireTime);
                LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
                if(null != locMastService){
                    //报警信号更新到库存主档 fire_status字段
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("fire_no",fireNo));
                    if(null != locMast){
                        if(locMast.getFireStatus() != 1) {
                            locMast.setFireStatus(1);
                            locMast.setModiTime(new Date());
                            locMastService.update(locMast, new EntityWrapper<LocMast>().eq("fire_no", fireNo));
                        }
 
                        //插入报警日志记录,同一库位同一报警只插入一次
                        FireLogService fireLogService = SpringUtils.getBean(FireLogService.class);
                        if(null != fireLogService){
                            String ymd = "20" + fire3030.getYear() + "" + fire3030.getMonth() + "" + fire3030.getDay();
                            FireLog one = fireLogService.selectOne(new EntityWrapper<FireLog>()
                                    .eq("ymd",ymd)
                                    .eq("fire_no",fireNo));
                            if(null == one) {
                                FireLog fireLog = new FireLog();
                                fireLog.setYmd(ymd);
                                fireLog.setFireNo(fireNo);
                                fireLog.setFireTime(dt);
                                fireLog.setLocNo(locMast.getLocNo());
                                fireLog.setCreateTime(new Date());
                                fireLogService.insert(fireLog);
                            }
                        }
                    }
                }
                break;
            default:
                break;
        }
        return true;
    }
 
    /**
     * 数据下行
     */
    public static void write(ChPackage chPackage){
        String uuid = chPackage.getUuid();
        Channel channel = ChannelCache.getChannel(uuid);
        if (null == channel){
            log.warn("通道uuid={} 不在线", uuid);
            return;
        }
        channel.writeAndFlush(chPackage);
    }
 
    /**************************************** 测试专用 *****************************************/
    public static void main(String[] args){
        byte[] rfidBytes = new byte[]{(byte)0xA0, 0x13, 0x01, (byte)0x8A, (byte)0xB6, 0x30, 0x00,
                0x38, 0x30, 0x33, 0x34, 0x35, 0x36, 0x37, (byte)0x38, 0x28, (byte)0xC3, (byte)0x81, 0x2D, (byte)0xB0, 0x2F };
        if(rfidBytes.length > 15) {
            byte[] dataBytes = new byte[8];
            dataBytes[0] = rfidBytes[7];
            dataBytes[1] = rfidBytes[8];
            dataBytes[2] = rfidBytes[9];
            dataBytes[3] = rfidBytes[10];
            dataBytes[4] = rfidBytes[11];
            dataBytes[5] = rfidBytes[12];
            dataBytes[6] = rfidBytes[13];
            dataBytes[7] = rfidBytes[14];
            String str = new String(dataBytes);
            String barcode = new String(rfidBytes,7,8);
            System.out.println(str);
        }
 
        String aa= "ILY0127 0001";
        byte[] byteAa = aa.getBytes();
 
        byte[] bytes = new byte[]{(byte)0x82, 0x38, 0x30, 0x32, 0x34, 0x30, 0x38, 0x39, 0x3B, 0x30, 0x31, 0x31, 0x31,
                                    0x30, 0x33, 0x30, 0x38, 0x31, 0x30, 0x30, 0x34, 0x30, 0x38, 0x38, 0x30, (byte)0x83};
        Fire_3030 fire3030 = new Fire_3030().readFromBytes(bytes);
        String now = "20" + fire3030.getYear() + "-" + fire3030.getMonth() + "-" + fire3030.getDay()
                + " " + fire3030.getHour() + ":" + fire3030.getMinute() + ":" + fire3030.getSeconds();
        //消防IO点编号
        String fireNo = fire3030.getNo().toString() + fire3030.getLoop().toString() + fire3030.getPartNo().toString();
        System.out.println(fireNo);
    }
}