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 execute(ThreeRequest 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 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 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 depotList = new ArrayList<>(); depotList.add(three.getDepotId()); List depotSerList = commonService.getCacheDepotSerByDepots(companyId, depotList); //存放分机获取的设备信息 List deviceList = new ArrayList<>(); //根据分机获取设备,存入deviceList for (DepotSerData depotSerData : depotSerList) { List 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; } }