package com.zhitan.airconditioner.service.impl;
|
|
import java.util.Date;
|
import java.util.List;
|
|
import com.alibaba.fastjson2.JSONObject;
|
import com.zhitan.airconditioner.common.AirCondConstants;
|
import com.zhitan.airconditioner.domain.AirConditioner;
|
import com.zhitan.airconditioner.domain.AirConditionerLog;
|
import com.zhitan.airconditioner.mapper.AirConditionerLogMapper;
|
import com.zhitan.airconditioner.mapper.AirConditionerMapper;
|
import com.zhitan.airconditioner.service.IAirConditionerService;
|
import com.zhitan.common.utils.DateUtils;
|
import com.zhitan.common.utils.SecurityUtils;
|
import com.zhitan.framework.mqtt.MqttClientUtil;
|
import com.zhitan.realtimedata.domain.TagValue;
|
import com.zhitan.realtimedata.service.RealtimeDatabaseService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
/**
|
* 空调控制器Service业务层处理
|
*
|
* @author zhitan
|
*/
|
@Service
|
public class AirConditionerServiceImpl implements IAirConditionerService
|
{
|
@Autowired
|
private AirConditionerMapper airConditionerMapper;
|
|
@Autowired
|
private AirConditionerLogMapper airConditionerLogMapper;
|
|
@Autowired
|
private MqttClientUtil mqttClientUtil;
|
|
@Autowired
|
private RealtimeDatabaseService realtimeDatabaseService;
|
|
/**
|
* 查询空调控制器列表
|
*
|
* @param airConditioner 空调控制器信息
|
* @return 空调控制器集合
|
*/
|
@Override
|
public List<AirConditioner> selectAirConditionerList(AirConditioner airConditioner)
|
{
|
return airConditionerMapper.selectAirConditionerList(airConditioner);
|
}
|
|
/**
|
* 查询空调控制器信息
|
*
|
* @param id 空调控制器ID
|
* @return 空调控制器信息
|
*/
|
@Override
|
public AirConditioner selectAirConditionerById(Long id)
|
{
|
return airConditionerMapper.selectAirConditionerById(id);
|
}
|
|
/**
|
* 根据控制器ID查询空调控制器信息
|
*
|
* @param controllerId 控制器ID
|
* @return 空调控制器信息
|
*/
|
@Override
|
public AirConditioner selectAirConditionerByControllerId(String controllerId)
|
{
|
return airConditionerMapper.selectAirConditionerByControllerId(controllerId);
|
}
|
|
/**
|
* 新增空调控制器
|
*
|
* @param airConditioner 空调控制器信息
|
* @return 结果
|
*/
|
@Override
|
public int insertAirConditioner(AirConditioner airConditioner)
|
{
|
airConditioner.setCreateTime(DateUtils.getNowDate());
|
airConditioner.setCreateBy(SecurityUtils.getUsername());
|
return airConditionerMapper.insertAirConditioner(airConditioner);
|
}
|
|
/**
|
* 修改空调控制器
|
*
|
* @param airConditioner 空调控制器信息
|
* @return 结果
|
*/
|
@Override
|
public int updateAirConditioner(AirConditioner airConditioner)
|
{
|
airConditioner.setUpdateTime(DateUtils.getNowDate());
|
airConditioner.setUpdateBy(SecurityUtils.getUsername());
|
return airConditionerMapper.updateAirConditioner(airConditioner);
|
}
|
|
/**
|
* 批量删除空调控制器
|
*
|
* @param ids 需要删除的空调控制器ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteAirConditionerByIds(Long[] ids)
|
{
|
return airConditionerMapper.deleteAirConditionerByIds(ids);
|
}
|
|
/**
|
* 删除空调控制器信息
|
*
|
* @param id 空调控制器ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteAirConditionerById(Long id)
|
{
|
return airConditionerMapper.deleteAirConditionerById(id);
|
}
|
|
/**
|
* 控制空调开关机
|
*
|
* @param id 空调ID
|
* @param mode 控制模式(0制冷 1制热 2关机)
|
* @param operateType 操作类型(0手动 1自动)
|
* @return 结果
|
*/
|
@Override
|
public boolean controlAirConditioner(Long id, String mode, String operateType)
|
{
|
try {
|
// 查询空调信息
|
AirConditioner airConditioner = airConditionerMapper.selectAirConditionerById(id);
|
if (airConditioner == null) {
|
return false;
|
}
|
|
String msg = "{\n" +
|
" \"rw_prot\": {\n" +
|
" \"Ver\": \"1.0.1\",\n" +
|
" \"dir\": \"down\",\n" +
|
" \"id\": \"00601925021000024737\",\n" +
|
" \"r_data\": [\n" +
|
" {\"name\":\"hum\"},\n" +
|
" {\"name\":\"tmp\"},\n" +
|
" {\n" +
|
" \"name\": \"cold\"\n" +
|
" },\n" +
|
" {\n" +
|
" \"name\": \"hot\"\n" +
|
" },\n" +
|
" {\n" +
|
" \"name\": \"off\"\n" +
|
" }\n" +
|
" ],\n" +
|
" \"w_data\": [\n" +
|
" {\n" +
|
" \"name\": \"cold\",\n" +
|
" \"value\": \"0\"\n" +
|
" },\n" +
|
" {\n" +
|
" \"name\": \"hot\",\n" +
|
" \"value\": \"0\"\n" +
|
" },\n" +
|
" {\n" +
|
" \"name\": \"off\",\n" +
|
" \"value\": \"0\"\n" +
|
" }\n" +
|
" ]\n" +
|
" }\n" +
|
"}";
|
// 将字符串转json
|
JSONObject jsonObject = JSONObject.parseObject(msg);
|
JSONObject rwProt = jsonObject.getJSONObject("rw_prot");
|
rwProt.put("id", airConditioner.getControllerId());
|
if (AirCondConstants.COOL_OPEN.equals(mode)) {
|
rwProt.getJSONArray("w_data").getJSONObject(0).put("value", "1");
|
} else if (AirCondConstants.HOT_OPEN.equals(mode)) {
|
rwProt.getJSONArray("w_data").getJSONObject(1).put("value", "1");
|
} else if (AirCondConstants.OFF.equals(mode)) {
|
rwProt.getJSONArray("w_data").getJSONObject(2).put("value", "1");
|
}
|
// 构建MQTT消息
|
String message = jsonObject.toJSONString();
|
|
// 发送MQTT消息
|
mqttClientUtil.sendMessage(AirCondConstants.SEND_COMMAND_TOPIC, message, 2);
|
|
// 记录操作日志
|
AirConditionerLog log = new AirConditionerLog();
|
log.setAirConditionerId(id);
|
log.setAirConditionerName(airConditioner.getName());
|
log.setOperateType(operateType);
|
log.setOperateMode(mode);
|
log.setOperateTime(new Date());
|
log.setOperateResult("1"); // 成功
|
log.setOperateMsg("操作成功");
|
log.setCreateTime(DateUtils.getNowDate());
|
if ("1".equals(operateType)) {
|
log.setCreateBy("系统");
|
} else {
|
log.setCreateBy(SecurityUtils.getUsername());
|
}
|
airConditionerLogMapper.insertAirConditionerLog(log);
|
|
return true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
return false;
|
}
|
}
|
}
|