package com.zhitan.airconditioner.service.impl; import java.util.Date; import java.util.List; import com.alibaba.fastjson2.JSONObject; 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 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; /** * 查询空调控制器列表 * * @param airConditioner 空调控制器信息 * @return 空调控制器集合 */ @Override public List 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 ("0".equals(mode)) { rwProt.getJSONArray("w_data").getJSONObject(0).put("value", "1"); } else if ("1".equals(mode)) { rwProt.getJSONArray("w_data").getJSONObject(1).put("value", "1"); } else if ("2".equals(mode)) { rwProt.getJSONArray("w_data").getJSONObject(2).put("value", "1"); } // 构建MQTT消息 String topic = "lanbao/nygl/sevice/kt1/down"; String message = jsonObject.toJSONString(); // 发送MQTT消息 mqttClientUtil.sendMessage(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; } } }