CZT
2023-11-27 c206acfaedc69c390fb67daa81bc686f58a212ef
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
package com.ld.igds.three.service.impl;
 
import com.alibaba.fastjson.JSONObject;
import com.ld.igds.common.CoreCommonService;
import com.ld.igds.common.CoreDeviceService;
import com.ld.igds.common.CoreThreeService;
import com.ld.igds.common.dto.DepotSerData;
import com.ld.igds.constant.DeviceType;
import com.ld.igds.io.constant.OrderRespEnum;
import com.ld.igds.io.request.ExeDevice;
import com.ld.igds.io.response.DeviceControlResponse;
import com.ld.igds.models.Device;
import com.ld.igds.models.ThreeConf;
import com.ld.igds.temp.dto.TempParam;
import com.ld.igds.temp.manager.TempControlManager;
import com.ld.igds.three.ThreeCodeEnum;
import com.ld.igds.three.ThreeConstant;
import com.ld.igds.three.data.Data3001;
import com.ld.igds.three.data.ThreeResponse;
import com.ld.igds.three.param.Param4001;
import com.ld.igds.three.param.ThreeRequest;
import com.ld.igds.three.service.ThreeService;
import com.ld.igds.three.util.ThreeRespUtil;
import com.ld.igds.verb.dto.VerbParam;
import com.ld.igds.verb.manager.VerbManager;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 4001-单个设备操作接口实现
 *
 * @author chen
 */
@Service
public class ThreeServiceImpl4001 implements ThreeService {
 
    @Autowired
    private CoreCommonService commonService;
    @Autowired
    private CoreThreeService coreThreeService;
    @Autowired
    private CoreDeviceService deviceService;
    @Autowired
    private VerbManager verbManager;
    @Autowired
    private TempControlManager tempManager;
 
    @Override
    public String getInterfaceId() {
        return ThreeConstant.API_THREE_4001;
    }
 
    @SuppressWarnings("unchecked")
    @Override
    public ThreeResponse<Object> execute(ThreeRequest<JSONObject> req) {
        //转化请求参数
        Param4001 param = JSONObject.parseObject(req.getData().toString(), Param4001.class);
 
        //判断uid
        if (StringUtils.isEmpty(param.getUid())) {
            return ThreeRespUtil.error(ThreeCodeEnum.CODE_1005, req);
        }
 
        //根据uid获取三维配置信息
        ThreeConf three = coreThreeService.getCacheThreeConfById(req.getCompanyId(), param.getUid());
        if (three == null) {
            return ThreeRespUtil.error(ThreeCodeEnum.CODE_1111, "未查询到此uid的配置信息,请联系管理员!", req);
        }
 
        //获取uid对应的设备信息
        Device device = getDevice(three, req.getCompanyId());
 
        if(device == null){
            return ThreeRespUtil.error(ThreeCodeEnum.CODE_1111, "未查询到此uid的配置信息,请联系管理员!", req);
        }
 
        ExeDevice exeDevice = new ExeDevice();
        exeDevice.setId(device.getId());
        exeDevice.setCompanyId(device.getCompanyId());
        exeDevice.setDepotId(device.getDepotId());
        exeDevice.setPassCode(device.getPassCode());
        exeDevice.setName(device.getName());
        exeDevice.setSerId(device.getSerId());
        exeDevice.setType(device.getType());
        exeDevice.setLink(device.getLink());
 
        DeviceControlResponse response;
        //判断设备类型,是否是空调
        if(DeviceType.TYPE_05.getCode().equals(device.getType())){
            //空调设备操作执行
            TempParam tempParam = new TempParam();
 
            //设置空调设备的目标参数
            List<ExeDevice> list = new ArrayList<>();
            list.add(exeDevice);
            tempParam.setDeviceList(list);
            tempParam.setTargetStatus(param.getStatus());
            tempParam.setTargetTemp(param.getTemp());
            tempParam.setDepotId(device.getDepotId());
            tempParam.setCompanyId(device.getCompanyId());
 
            response = tempManager.tempControl(tempParam);
 
        }else {
            //非空调设备操作执行
            VerbParam verbParam = new VerbParam();
            List<ExeDevice> list = new ArrayList<>();
 
            //设置非空调设备的目标参数
            exeDevice.setTargetStatus(param.getStatus());
            list.add(exeDevice);
            verbParam.setDepotId(list.get(0).getDepotId());
            verbParam.setCompanyId(list.get(0).getCompanyId());
            verbParam.setDeviceList(list);
 
            response = verbManager.controlDevice(verbParam);
        }
 
        //判断是否执行成功
        if (OrderRespEnum.ORDER_ERROR.getCode().equals(response.getCode())) {
            return ThreeRespUtil.error(ThreeCodeEnum.CODE_1004, response.getMsg(), req);
        } else {
            Data3001 data = new Data3001();
            data.setUid(three.getUid());
            data.setName(device.getName());
            data.setType(device.getType());
            device = getDevice(three, req.getCompanyId());
            data.setStatus(device.getStatusName());
            return ThreeRespUtil.success(data, req);
        }
    }
 
    /**
     * 根据三维配置信息,获取对应设备信息
     * @param three
     * @param companyId
     * @return
     */
    private Device getDevice(ThreeConf three, String companyId){
 
        //根据仓库编码获取分机
        List<String> depotList = new ArrayList<>();
        depotList.add(three.getDepotId());
        List<DepotSerData> depotSerList = commonService.getCacheDepotSerByDepots(companyId, depotList);
 
        //存放分机获取的设备信息
        List<Device> deviceList = new ArrayList<>();
 
        //根据分机获取设备,存入deviceList
        for (DepotSerData depotSerData : depotSerList) {
            List<Device> tempList = deviceService.getCacheDeviceBySerId(
                    depotSerData.getCompanyId(), depotSerData.getSerId());
            deviceList.addAll(tempList);
        }
 
        if(deviceList.isEmpty()){
            return null;
        }
        for (Device device : deviceList) {
            if(device.getId().equals(three.getDeviceId())){
                return device;
            }
        }
        return null;
    }
}