implemented AC parameters query
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
package net.irext.decode.service.businesslogic;
|
package net.irext.decode.service.businesslogic;
|
||||||
|
|
||||||
import com.squareup.okhttp.*;
|
import com.squareup.okhttp.*;
|
||||||
|
import net.irext.decode.sdk.bean.TemperatureRange;
|
||||||
import net.irext.decode.service.cache.IDecodeSessionRepository;
|
import net.irext.decode.service.cache.IDecodeSessionRepository;
|
||||||
import net.irext.decode.service.cache.IIRBinaryRepository;
|
import net.irext.decode.service.cache.IIRBinaryRepository;
|
||||||
|
import net.irext.decode.service.model.ACParameters;
|
||||||
import net.irext.decode.service.model.RemoteIndex;
|
import net.irext.decode.service.model.RemoteIndex;
|
||||||
import net.irext.decode.service.utils.FileUtil;
|
import net.irext.decode.service.utils.FileUtil;
|
||||||
import net.irext.decode.service.utils.LoggerUtil;
|
import net.irext.decode.service.utils.LoggerUtil;
|
||||||
@@ -28,6 +30,7 @@ import java.security.MessageDigest;
|
|||||||
* Revision log:
|
* Revision log:
|
||||||
* 2018-12-08: created by strawmanbobi
|
* 2018-12-08: created by strawmanbobi
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("Duplicates")
|
||||||
public class DecodeLogic {
|
public class DecodeLogic {
|
||||||
|
|
||||||
private static final String TAG = DecodeLogic.class.getSimpleName();
|
private static final String TAG = DecodeLogic.class.getSimpleName();
|
||||||
@@ -96,7 +99,8 @@ public class DecodeLogic {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int[] decode(RemoteIndex remoteIndex, ACStatus acStatus, int keyCode, int changeWindDirection) {
|
public int[] decode(RemoteIndex remoteIndex, ACStatus acStatus,
|
||||||
|
int keyCode, int changeWindDirection) {
|
||||||
int[] decoded = null;
|
int[] decoded = null;
|
||||||
if (null != remoteIndex) {
|
if (null != remoteIndex) {
|
||||||
int categoryId = remoteIndex.getCategoryId();
|
int categoryId = remoteIndex.getCategoryId();
|
||||||
@@ -113,6 +117,34 @@ public class DecodeLogic {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ACParameters getACParameters(RemoteIndex remoteIndex, int mode) {
|
||||||
|
if (null != remoteIndex) {
|
||||||
|
ACParameters acParameters = new ACParameters();
|
||||||
|
int categoryId = remoteIndex.getCategoryId();
|
||||||
|
int subCate = remoteIndex.getSubCate();
|
||||||
|
byte[] binaryContent = remoteIndex.getBinaries();
|
||||||
|
IRDecode irDecode = IRDecode.getInstance();
|
||||||
|
int ret = irDecode.openBinary(categoryId, subCate, binaryContent, binaryContent.length);
|
||||||
|
if (0 == ret) {
|
||||||
|
int []supportedModes = irDecode.getACSupportedMode();
|
||||||
|
acParameters.setSupportedModes(supportedModes);
|
||||||
|
if (1 == supportedModes[mode]) {
|
||||||
|
// if this mode is really supported by this AC, get other parameters
|
||||||
|
TemperatureRange temperatureRange = irDecode.getTemperatureRange(mode);
|
||||||
|
int[] supportedWindSpeed = irDecode.getACSupportedWindSpeed(mode);
|
||||||
|
int[] supportedSwing = irDecode.getACSupportedSwing(mode);
|
||||||
|
acParameters.setTempMax(temperatureRange.getTempMax());
|
||||||
|
acParameters.setTempMin(temperatureRange.getTempMin());
|
||||||
|
acParameters.setSupportedWindSpeed(supportedWindSpeed);
|
||||||
|
acParameters.setSupportedSwing(supportedSwing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
irDecode.closeBinary();
|
||||||
|
return acParameters;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void close(IDecodeSessionRepository decodeSessionRepository, String sessionId) {
|
public void close(IDecodeSessionRepository decodeSessionRepository, String sessionId) {
|
||||||
decodeSessionRepository.delete(sessionId);
|
decodeSessionRepository.delete(sessionId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package net.irext.decode.service.model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filename: ACParameters.java
|
||||||
|
* Revised: Date: 2019-02-14
|
||||||
|
* Revision: Revision: 1.0
|
||||||
|
* <p>
|
||||||
|
* Description: AC parameters entity
|
||||||
|
* <p>
|
||||||
|
* Revision log:
|
||||||
|
* 2018-12-29: created by strawmanbobi
|
||||||
|
*/
|
||||||
|
public class ACParameters {
|
||||||
|
private int tempMin;
|
||||||
|
private int tempMax;
|
||||||
|
private int [] supportedModes;
|
||||||
|
private int []supportedWindSpeed;
|
||||||
|
private int []supportedSwing;
|
||||||
|
|
||||||
|
public ACParameters(int tempMin, int tempMax, int[] supportedModes,
|
||||||
|
int[] supportedWindSpeed, int[] supportedSwing) {
|
||||||
|
this.tempMin = tempMin;
|
||||||
|
this.tempMax = tempMax;
|
||||||
|
this.supportedModes = supportedModes;
|
||||||
|
this.supportedWindSpeed = supportedWindSpeed;
|
||||||
|
this.supportedSwing = supportedSwing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ACParameters() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTempMin() {
|
||||||
|
return tempMin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTempMin(int tempMin) {
|
||||||
|
this.tempMin = tempMin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTempMax() {
|
||||||
|
return tempMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTempMax(int tempMax) {
|
||||||
|
this.tempMax = tempMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getSupportedModes() {
|
||||||
|
return supportedModes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSupportedModes(int[] supportedModes) {
|
||||||
|
this.supportedModes = supportedModes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getSupportedWindSpeed() {
|
||||||
|
return supportedWindSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSupportedWindSpeed(int[] supportedWindSpeed) {
|
||||||
|
this.supportedWindSpeed = supportedWindSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getSupportedSwing() {
|
||||||
|
return supportedSwing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSupportedSwing(int[] supportedSwing) {
|
||||||
|
this.supportedSwing = supportedSwing;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package net.irext.decode.service.request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filename: GetACParametersRequest.java
|
||||||
|
* Revised: Date: 2017-05-16
|
||||||
|
* Revision: Revision: 1.0
|
||||||
|
* <p>
|
||||||
|
* Description: HTTP decode online
|
||||||
|
* <p>
|
||||||
|
* Revision log:
|
||||||
|
* 2019-02-14: created by strawmanbobi
|
||||||
|
*/
|
||||||
|
public class GetACParametersRequest {
|
||||||
|
|
||||||
|
private int remoteIndexId;
|
||||||
|
private String sessionId;
|
||||||
|
private int mode;
|
||||||
|
|
||||||
|
public GetACParametersRequest(int remoteIndexId, String sessionId, int mode) {
|
||||||
|
this.remoteIndexId = remoteIndexId;
|
||||||
|
this.sessionId = sessionId;
|
||||||
|
this.mode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetACParametersRequest() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRemoteIndexId() {
|
||||||
|
return remoteIndexId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteIndexId(int remoteIndexId) {
|
||||||
|
this.remoteIndexId = remoteIndexId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSessionId() {
|
||||||
|
return sessionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSessionId(String sessionId) {
|
||||||
|
this.sessionId = sessionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMode() {
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMode(int mode) {
|
||||||
|
this.mode = mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package net.irext.decode.service.response;
|
||||||
|
|
||||||
|
import net.irext.decode.service.model.ACParameters;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filename: ACParametersResponse.java
|
||||||
|
* Revised: Date: 2017-05-16
|
||||||
|
* Revision: Revision: 1.0
|
||||||
|
* <p>
|
||||||
|
* Description: Air conditioner support parameters response
|
||||||
|
* <p>
|
||||||
|
* Revision log:
|
||||||
|
* 2019-02-14: created by strawmanbobi
|
||||||
|
*/
|
||||||
|
public class ACParametersResponse extends ServiceResponse {
|
||||||
|
|
||||||
|
ACParameters entity;
|
||||||
|
|
||||||
|
public ACParametersResponse(Status status, ACParameters entity) {
|
||||||
|
super(status);
|
||||||
|
this.entity = entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ACParametersResponse() {
|
||||||
|
super(new Status());
|
||||||
|
this.entity = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ACParameters getEntity() {
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEntity(ACParameters entity) {
|
||||||
|
this.entity = entity;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,21 @@
|
|||||||
package net.irext.decode.service.service;
|
package net.irext.decode.service.restapi;
|
||||||
|
|
||||||
import net.irext.decode.service.businesslogic.DecodeLogic;
|
import net.irext.decode.service.businesslogic.DecodeLogic;
|
||||||
import net.irext.decode.service.cache.IDecodeSessionRepository;
|
import net.irext.decode.service.cache.IDecodeSessionRepository;
|
||||||
import net.irext.decode.service.cache.IIRBinaryRepository;
|
import net.irext.decode.service.cache.IIRBinaryRepository;
|
||||||
import net.irext.decode.service.mapper.RemoteIndexMapper;
|
import net.irext.decode.service.mapper.RemoteIndexMapper;
|
||||||
|
import net.irext.decode.service.model.ACParameters;
|
||||||
import net.irext.decode.service.model.DecodeSession;
|
import net.irext.decode.service.model.DecodeSession;
|
||||||
import net.irext.decode.service.model.RemoteIndex;
|
import net.irext.decode.service.model.RemoteIndex;
|
||||||
import net.irext.decode.service.request.CloseRequest;
|
import net.irext.decode.service.request.CloseRequest;
|
||||||
import net.irext.decode.service.request.DecodeRequest;
|
import net.irext.decode.service.request.DecodeRequest;
|
||||||
|
import net.irext.decode.service.request.GetACParametersRequest;
|
||||||
import net.irext.decode.service.request.OpenRequest;
|
import net.irext.decode.service.request.OpenRequest;
|
||||||
|
import net.irext.decode.service.response.*;
|
||||||
import net.irext.decode.service.utils.LoggerUtil;
|
import net.irext.decode.service.utils.LoggerUtil;
|
||||||
import net.irext.decode.service.utils.MD5Util;
|
import net.irext.decode.service.utils.MD5Util;
|
||||||
import net.irext.decode.service.businesslogic.IndexLogic;
|
import net.irext.decode.service.businesslogic.IndexLogic;
|
||||||
import net.irext.decode.service.response.DecodeResponse;
|
import net.irext.decode.service.restapi.base.AbstractBaseService;
|
||||||
import net.irext.decode.service.response.ServiceResponse;
|
|
||||||
import net.irext.decode.service.response.Status;
|
|
||||||
import net.irext.decode.service.response.StringResponse;
|
|
||||||
import net.irext.decode.service.service.base.AbstractBaseService;
|
|
||||||
import net.irext.decode.sdk.bean.ACStatus;
|
import net.irext.decode.sdk.bean.ACStatus;
|
||||||
import net.irext.decode.sdk.utils.Constants;
|
import net.irext.decode.sdk.utils.Constants;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -105,46 +104,51 @@ public class IRDecodeService extends AbstractBaseService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/get_ac_parameters")
|
||||||
|
public ACParametersResponse getACParameters(@RequestBody GetACParametersRequest getACParametersRequest) {
|
||||||
|
try {
|
||||||
|
int remoteIndexId = getACParametersRequest.getRemoteIndexId();
|
||||||
|
String sessionId = getACParametersRequest.getSessionId();
|
||||||
|
int mode = getACParametersRequest.getMode();
|
||||||
|
|
||||||
|
RemoteIndex cachedRemoteIndex = getCachedRemoteIndex(sessionId, remoteIndexId);
|
||||||
|
ACParametersResponse response = new ACParametersResponse();
|
||||||
|
|
||||||
|
if (null == cachedRemoteIndex) {
|
||||||
|
response.setEntity(null);
|
||||||
|
response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION,
|
||||||
|
Constants.ERROR_CODE_INVALID_SESSION_TEXT));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
ACParameters acParameters = DecodeLogic.getInstance().getACParameters(cachedRemoteIndex, mode);
|
||||||
|
|
||||||
|
response.setStatus(new Status(Constants.ERROR_CODE_SUCCESS, Constants.ERROR_CODE_SUCESS_TEXT));
|
||||||
|
response.setEntity(acParameters);
|
||||||
|
return response;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return getExceptionResponse(ACParametersResponse.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/decode")
|
@PostMapping("/decode")
|
||||||
public DecodeResponse irDecode(@RequestBody DecodeRequest decodeRequest) {
|
public DecodeResponse irDecode(@RequestBody DecodeRequest decodeRequest) {
|
||||||
try {
|
try {
|
||||||
int indexId = decodeRequest.getRemoteIndexId();
|
int remoteIndexId = decodeRequest.getRemoteIndexId();
|
||||||
ACStatus acStatus = decodeRequest.getAcStatus();
|
ACStatus acStatus = decodeRequest.getAcStatus();
|
||||||
int keyCode = decodeRequest.getKeyCode();
|
int keyCode = decodeRequest.getKeyCode();
|
||||||
int changeWindDir = decodeRequest.getChangeWindDir();
|
int changeWindDir = decodeRequest.getChangeWindDir();
|
||||||
String sessionId = decodeRequest.getSessionId();
|
String sessionId = decodeRequest.getSessionId();
|
||||||
|
|
||||||
RemoteIndex cachedRemoteIndex = null;
|
RemoteIndex cachedRemoteIndex = getCachedRemoteIndex(sessionId, remoteIndexId);;
|
||||||
DecodeResponse response = new DecodeResponse();
|
DecodeResponse response = new DecodeResponse();
|
||||||
|
|
||||||
if (null == sessionId) {
|
if (null == cachedRemoteIndex) {
|
||||||
LoggerUtil.getInstance().trace(TAG, "sessionId is not given, abort");
|
|
||||||
response.setEntity(null);
|
response.setEntity(null);
|
||||||
response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION,
|
response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION,
|
||||||
Constants.ERROR_CODE_INVALID_SESSION_TEXT));
|
Constants.ERROR_CODE_INVALID_SESSION_TEXT));
|
||||||
} else {
|
|
||||||
Integer cachedRemoteIndexId = decodeSessionRepository.find(sessionId);
|
|
||||||
if (null == cachedRemoteIndexId) {
|
|
||||||
response.setEntity(null);
|
|
||||||
response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION,
|
|
||||||
Constants.ERROR_CODE_INVALID_SESSION_TEXT));
|
|
||||||
} else {
|
|
||||||
cachedRemoteIndex = irBinaryRepository.find(cachedRemoteIndexId);
|
|
||||||
if (null == cachedRemoteIndex) {
|
|
||||||
response.setEntity(null);
|
|
||||||
response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION,
|
|
||||||
Constants.ERROR_CODE_INVALID_SESSION_TEXT));
|
|
||||||
} else {
|
|
||||||
if (indexId != cachedRemoteIndex.getId()) {
|
|
||||||
response.setEntity(null);
|
|
||||||
response.setStatus(new Status(Constants.ERROR_CODE_INVALID_SESSION,
|
|
||||||
Constants.ERROR_CODE_INVALID_SESSION_TEXT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (response.getStatus().getCode() != Constants.ERROR_CODE_SUCCESS) {
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,4 +179,23 @@ public class IRDecodeService extends AbstractBaseService {
|
|||||||
return getExceptionResponse(DecodeResponse.class);
|
return getExceptionResponse(DecodeResponse.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RemoteIndex getCachedRemoteIndex(String sessionId, int remoteIndexId) {
|
||||||
|
RemoteIndex cachedRemoteIndex = null;
|
||||||
|
|
||||||
|
if (null == sessionId) {
|
||||||
|
LoggerUtil.getInstance().trace(TAG, "sessionId is not given, abort");
|
||||||
|
} else {
|
||||||
|
Integer cachedRemoteIndexId = decodeSessionRepository.find(sessionId);
|
||||||
|
if (null != cachedRemoteIndexId) {
|
||||||
|
cachedRemoteIndex = irBinaryRepository.find(cachedRemoteIndexId);
|
||||||
|
if (null != cachedRemoteIndex) {
|
||||||
|
if (remoteIndexId != cachedRemoteIndex.getId()) {
|
||||||
|
cachedRemoteIndex = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cachedRemoteIndex;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package net.irext.decode.service.service.base;
|
package net.irext.decode.service.restapi.base;
|
||||||
|
|
||||||
import net.irext.decode.service.Constants;
|
import net.irext.decode.service.Constants;
|
||||||
import net.irext.decode.service.response.ServiceResponse;
|
import net.irext.decode.service.response.ServiceResponse;
|
||||||
@@ -11,7 +11,7 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
* Revised: Date: 2017-04-27
|
* Revised: Date: 2017-04-27
|
||||||
* Revision: Revision: 1.0
|
* Revision: Revision: 1.0
|
||||||
* <p>
|
* <p>
|
||||||
* Description: Base service abstract class implemented service interface
|
* Description: Base restapi abstract class implemented restapi interface
|
||||||
* <p>
|
* <p>
|
||||||
* Revision log:
|
* Revision log:
|
||||||
* 2017-04-27: created by strawmanbobi
|
* 2017-04-27: created by strawmanbobi
|
||||||
Reference in New Issue
Block a user