baoshiwei
2025-06-05 eb54eea87c39f35b5d0476f146bfd29d7c7841be
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
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<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 ("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;
        }
    }
}