|
@@ -216,11 +216,71 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
|
|
|
meterReadRecord.setCommunityName(waterMeter.getCommunityName());
|
|
|
meterReadRecord.setChannelNumberId(waterMeter.getChannelNumberId());
|
|
|
meterReadRecord.setChannelName(waterMeter.getChannelName());
|
|
|
-
|
|
|
+ /***************************增加阀门状态**********************************/
|
|
|
+ meterReadRecord.setValveState(getValveState(waterMeter));
|
|
|
return meterReadRecord ;
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取上一次阀门状态
|
|
|
+ * 平台: 0:关 1:开 2:无阀 3:异常 4:未知
|
|
|
+ * NB:0开,1关,2故障
|
|
|
+ * Lora:00开,01关,11异常
|
|
|
+ * @param waterMeter
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ protected Integer getValveState(WaterMeter waterMeter){
|
|
|
+ Integer valveState = null ;
|
|
|
+ // 表是否支持阀控
|
|
|
+ Integer isValve = waterMeter.getIsValve();
|
|
|
+ if(isValve == 0){
|
|
|
+ // 不支持阀控,则状态为无阀
|
|
|
+ valveState = 2 ;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ // 支持阀控,则从最后一次上报数据中获取阀门状态
|
|
|
+ String lastValveState = getValveStateFromCache(waterMeter);
|
|
|
+ if(StringUtils.isNotBlank(lastValveState)){
|
|
|
+ if("00".equals(lastValveState) || "0".equals(lastValveState)){
|
|
|
+ valveState = 1 ;
|
|
|
+ }
|
|
|
+ else if("01".equals(lastValveState) || "1".equals(lastValveState)){
|
|
|
+ valveState = 0 ;
|
|
|
+ }
|
|
|
+ else if("11".equals(lastValveState) || "2".equals(lastValveState)){
|
|
|
+ valveState = 3 ;
|
|
|
+ }
|
|
|
+ else{ // 未明确的阀门状态
|
|
|
+ valveState = 4 ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ valveState = 4 ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return valveState ;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected String getValveStateFromCache(WaterMeter waterMeter){
|
|
|
+ // 默认水表止度
|
|
|
+ String lastValveState = "" ;
|
|
|
+ Map<String, MeasuringData> meterLastData = getMeterLastDataFromCache(waterMeter.getDeviceId());
|
|
|
+ if(meterLastData != null){
|
|
|
+ MeasuringData measuringData = meterLastData.get(waterMeter.getValveMeasuringCode());
|
|
|
+ if(measuringData == null){
|
|
|
+ log.error("Device measuring code get null value ? " +
|
|
|
+ "device Id ={},measuring code ={} ,meterLastData = {}",waterMeter.getDeviceId(),
|
|
|
+ waterMeter.getReadingMeasuringCode(),JSON.toJSONString(meterLastData));
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ if(StringUtils.isNotBlank(measuringData.getMeasuringVaule())){
|
|
|
+ lastValveState = measuringData.getMeasuringVaule();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return lastValveState ;
|
|
|
+ }
|
|
|
/**
|
|
|
* 获取水表最后止度,先从缓存中获取止度,缓存无数据则从数据库中获取
|
|
|
* @param waterMeter
|
|
@@ -384,6 +444,7 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
|
|
|
}
|
|
|
}
|
|
|
String currentReading = getReadingFromMeterData(waterMeter, measuringData);
|
|
|
+ Integer valveState = getValveStateFromMeterData(waterMeter, measuringData);
|
|
|
if(StringUtils.isBlank(currentReading)){
|
|
|
log.error("表{}数据异常,数据无最新止度,MeasuringData = {}",
|
|
|
waterMeter.getDeviceId(),JSON.toJSONString(measuringData));
|
|
@@ -398,6 +459,7 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
|
|
|
update.setLastCost(todayCost);
|
|
|
update.setReadData(currentReading);
|
|
|
update.setLastValid(currentReading);
|
|
|
+ update.setValveState(valveState);
|
|
|
update.setReadStatus(Constants.READ);
|
|
|
update.setDateUpdate(new Date());
|
|
|
update.setReadTime(sendTime);
|
|
@@ -425,6 +487,7 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
|
|
|
param.set("lastCost",todayCost);
|
|
|
param.set("readData",currentReading);
|
|
|
param.set("lastValid",currentReading);
|
|
|
+ param.set("valveState",valveState);
|
|
|
param.set("readStatus",Constants.READ);
|
|
|
param.set("readTime",sendTime);
|
|
|
param.set("dateUpdate",new Date());
|
|
@@ -479,6 +542,41 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService {
|
|
|
meterReading(meter,measuringData,readDay);
|
|
|
}
|
|
|
|
|
|
+ protected Integer getValveStateFromMeterData(WaterMeter waterMeter,Map<String, MeasuringData> measuringData){
|
|
|
+ Integer valveState = null ;
|
|
|
+ // 表是否支持阀控
|
|
|
+ Integer isValve = waterMeter.getIsValve();
|
|
|
+ if(isValve == 0){
|
|
|
+ // 不支持阀控,则状态为无阀
|
|
|
+ valveState = 2 ;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ MeasuringData data = measuringData.get(waterMeter.getValveMeasuringCode());
|
|
|
+ if(data == null || StringUtils.isBlank(data.getMeasuringVaule())){
|
|
|
+ log.warn("Upload Data Not Contain Valve Data , MeasuringCode = {},MeasuringData = {}",
|
|
|
+ waterMeter.getValveMeasuringCode(),
|
|
|
+ JSON.toJSONString(measuringData)
|
|
|
+ );
|
|
|
+ valveState = 4 ;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ String valveStateData = data.getMeasuringVaule();
|
|
|
+ if("00".equals(valveStateData) || "0".equals(valveStateData)){
|
|
|
+ valveState = 1 ;
|
|
|
+ }
|
|
|
+ else if("01".equals(valveStateData) || "1".equals(valveStateData)){
|
|
|
+ valveState = 0 ;
|
|
|
+ }
|
|
|
+ else if("11".equals(valveStateData) || "2".equals(valveStateData)){
|
|
|
+ valveState = 3 ;
|
|
|
+ }
|
|
|
+ else{ // 未明确的阀门状态
|
|
|
+ valveState = 4 ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return valveState ;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 从上报数据中获取当前读表数
|