vince
2023-09-04 803697bd4f3ac5262e0acd69d6d7cc519ec45b2a
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
package com.ld.igds.protocol.modbus.command;
 
import com.ld.igds.common.CoreSerService;
import com.ld.igds.constant.BizType;
import com.ld.igds.io.RemoteEsService;
import com.ld.igds.io.constant.OrderRespEnum;
import com.ld.igds.io.constant.ProtocolEnum;
import com.ld.igds.io.request.BaseRequest;
import com.ld.igds.io.response.BaseResponse;
import com.ld.igds.io.response.GasResponse;
import com.ld.igds.modbus.service.HModbusService;
import com.ld.igds.models.DeviceModbus;
import com.ld.igds.models.DeviceSer;
import com.ld.igds.protocol.modbus.ModbusUtil2;
import com.ld.igds.protocol.modbus.ServerUtil;
import com.ld.igds.protocol.modbus.data.ModbusTcp;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
 
/**
 * 当前协议针对标准Modbus-TCP协议
 *
 * @Desc:
 * @author: andy.jia
 * @update-time: 2023/8/11 10:07
 */
@Slf4j
@Component(RemoteEsServiceImpl.BEAN_ID)
public class RemoteEsServiceImpl implements RemoteEsService {
 
    public static final String BEAN_ID = "modbus.remoteEsService";
 
    @Resource
    private HModbusService modbusService;
    @Resource
    private AnalysisService analysisService;
    @Resource
    private CoreSerService coreSerService;
 
    @Override
    public String getProtocol() {
        return ProtocolEnum.TCP_MODBUS.getCode();
    }
 
    @Override
    public BaseResponse checkEs(BaseRequest request) {
 
        String passCode = request.getDepotId();
 
        try {
            //获取需要执行的设备配置
            List<DeviceModbus> list = modbusService.getDataByBizType(BizType.ES.getCode(), request.getSerId());
 
            if(null == list || list.isEmpty()){
                return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "未获取到Modbus能耗配置信息");
            }
            ModbusTcp modbusTcp;
            DeviceSer deviceSer;
            for (DeviceModbus deviceModbus : list) {
                modbusTcp = new ModbusTcp(deviceModbus);
                modbusTcp.setIp(request.getIp());
                modbusTcp.setPort(request.getPort());
 
                //若Modbus设备配置分机,则使用所配置分机的IP、端口
                if(StringUtils.isNotEmpty(deviceModbus.getSerId())){
                    deviceSer = coreSerService.getCacheSer(request.getCompanyId(), deviceModbus.getSerId());
                    modbusTcp.setIp(deviceSer.getIp());
                    modbusTcp.setPort(deviceSer.getPort());
                }
 
                modbusTcp.setBizCode(passCode);
                modbusTcp.setSerId(request.getSerId());
                modbusTcp.setCompanyId(request.getCompanyId());
 
                modbusTcp.setAddrExe(ServerUtil.getAddrExe(deviceModbus.getOpen()));
 
                log.debug("--------启动能耗查询---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode());
                Number check = ModbusUtil2.readHoldingRegister(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe());
 
                //解析能耗数据
                analysisService.analysisEs(request, check);
            }
        } catch (Exception e) {
            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "后台执行异常:" + e.getLocalizedMessage());
        }
 
        return new GasResponse(OrderRespEnum.ORDER_SUCCESS);
    }
}