DeviceControlService.java 7.0 KB
package com.ruoyi.system.service;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.core.domain.MessageCode;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.IotDevice;
import com.ruoyi.system.dto.ApiName;
import com.ruoyi.system.dto.DeviceCommandApi;
import com.ruoyi.system.dto.DeviceCommandApiParameter;
import com.ruoyi.system.rocketmq.RocketMqService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Service
public class DeviceControlService {
    @Autowired
    protected RocketMqService rocketMqService;

    @Autowired
    private IIotDeviceService iIotDeviceService;
    
    private DeviceCommandApi getDeviceCommandApi(String imei, Map<String,Object> map)  {
        DeviceCommandApi deviceCommandApi = new DeviceCommandApi();
        deviceCommandApi.setApiName(ApiName.control);
        DeviceCommandApiParameter deviceCommandApiParameter = new DeviceCommandApiParameter();
        deviceCommandApiParameter.setClient_id(imei);
        deviceCommandApiParameter.setMap(map);
        deviceCommandApi.setDeviceCommandApiParameter(deviceCommandApiParameter);
        return deviceCommandApi;
    }

    /**
     * 固件版本更新
     * @param imei
     * @param firmwareVersion
     * @param code
     * @return
     * @throws IOException
     */
    public Message firmwareUp( String imei, String firmwareVersion, Integer code) throws IOException {
        Map<String,Object> map = new HashMap<>();
        Map<String,Object> valueMap = new HashMap<>();
        valueMap.put("firmwareVersion",firmwareVersion);
        valueMap.put("code",code);
        map.put("0",valueMap);
        DeviceCommandApi deviceCommandApi = getDeviceCommandApi(imei,map);
        return rocketMqService.send(deviceCommandApi);
    }

    /**
     * 设备重启
     * @param imei
     * @param restart
     * @return
     * @throws IOException
     */
    public Message restart( String imei , Integer restart)  {
        Map<String,Object> map = new HashMap<>();
        Map<String,Object> valueMap = new HashMap<>();
        valueMap.put("restart",restart);
        map.put("0",valueMap);
        DeviceCommandApi deviceCommandApi = getDeviceCommandApi(imei,map);
        return rocketMqService.send(deviceCommandApi);
    }

    /**
     * 获取指定设备版本信息
     * @param imei
     * @return
     */
    public Message getFirmwareVersion( String imei)   {
        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByClient_id(imei);
        if(null == iotDevice || StringUtils.isBlank(iotDevice.getMqtt_username()))
        {
            return new Message(MessageCode.DEFAULT_FAIL_CODE,"设备或者设备类型不存在");
        }
        DeviceCommandApi deviceCommandApi = new DeviceCommandApi();
        deviceCommandApi.setApiName(ApiName.getFirmwareVersion);
        DeviceCommandApiParameter deviceCommandApiParameter = new DeviceCommandApiParameter();
        deviceCommandApiParameter.setClient_id(imei);
        deviceCommandApiParameter.setData(iotDevice.getMqtt_username());
        deviceCommandApi.setDeviceCommandApiParameter(deviceCommandApiParameter);
        return rocketMqService.send(deviceCommandApi);
    }

    /**
     * 强行断开链接
     * @param imei
     * @return
     */
    public Message closeSession( String imei)  {
        DeviceCommandApi deviceCommandApi = new DeviceCommandApi();
        deviceCommandApi.setApiName(ApiName.closeSession);
        DeviceCommandApiParameter deviceCommandApiParameter = new DeviceCommandApiParameter();
        deviceCommandApiParameter.setClient_id(imei);
        deviceCommandApi.setDeviceCommandApiParameter(deviceCommandApiParameter);
        return rocketMqService.send(deviceCommandApi);
    }

    /**
     * 删除主机
     * @param imei
     * @return
     */
    public Message delIotDevice( String imei)   {
        DeviceCommandApi deviceCommandApi = new DeviceCommandApi();
        deviceCommandApi.setApiName(ApiName.delIotDevice);
        DeviceCommandApiParameter deviceCommandApiParameter = new DeviceCommandApiParameter();
        deviceCommandApiParameter.setClient_id(imei);
        deviceCommandApi.setDeviceCommandApiParameter(deviceCommandApiParameter);
        return rocketMqService.send(deviceCommandApi);

    }

    /**
     * 删除终端
     * @param imei
     * @param number
     * @return
     */
    public Message delIotTerminal( String imei,  String number)  {
        DeviceCommandApi deviceCommandApi = new DeviceCommandApi();
        deviceCommandApi.setApiName(ApiName.delIotTerminal);
        DeviceCommandApiParameter deviceCommandApiParameter = new DeviceCommandApiParameter();
        deviceCommandApiParameter.setClient_id(imei);
        deviceCommandApiParameter.setNumber(number);
        deviceCommandApi.setDeviceCommandApiParameter(deviceCommandApiParameter);
        return  rocketMqService.send(deviceCommandApi);
    }

    /**
     * 读取属性
     * @param imei
     * @param sensor_number
     * @param attributes
     * @return
     */
    public Message readAttribute( String imei, String sensor_number,String attributes)  {
        Map<String,Object> map = new HashMap<>();
        map.put(sensor_number,attributes);
        DeviceCommandApi deviceCommandApi = new DeviceCommandApi();
        deviceCommandApi.setApiName(ApiName.read);
        DeviceCommandApiParameter deviceCommandApiParameter = new DeviceCommandApiParameter();
        deviceCommandApiParameter.setClient_id(imei);
        deviceCommandApiParameter.setMap(map);
        deviceCommandApi.setDeviceCommandApiParameter(deviceCommandApiParameter);
        return rocketMqService.send(deviceCommandApi);
    }

    /**
     * 设置主机自定义参数
     * @param imei
     * @param summary
     * @return
     */
    public Message upSummary( String imei,String summary)  {
        Map<String,Object> map = new HashMap<>();
        Map<String,Object> valueMap = new HashMap<>();
        valueMap.put("summary", JSONObject.parseObject(summary));
        map.put("0", valueMap);
        DeviceCommandApi deviceCommandApi = getDeviceCommandApi(imei,map);
        return rocketMqService.send(deviceCommandApi);
    }

    /**
     * 修改指定终端属性
     * @param imei
     * @param number
     * @param config
     * @return
     */
    public Message upTerminalConfig( String imei, String number, Map<String,Object> config)  {
        Map<String,Object> map = new HashMap<>();
        map.put(number,config);
        DeviceCommandApi deviceCommandApi = getDeviceCommandApi(imei,map);
        return rocketMqService.send(deviceCommandApi);
    }

    /**
     * 批量修改终端属性
     * @param imei
     * @param map
     * @return
     */
    public Message batchUpTerminalConfig( String imei, Map<String,Object> map)  {
        DeviceCommandApi deviceCommandApi = getDeviceCommandApi(imei,map);
        return rocketMqService.send(deviceCommandApi);
    }
}