|
@@ -70,8 +70,6 @@ public abstract class MqttBaseHandler {
|
|
*/
|
|
*/
|
|
protected static final Map<String, Map<String, String>> attrCache = new ConcurrentHashMap<>();
|
|
protected static final Map<String, Map<String, String>> attrCache = new ConcurrentHashMap<>();
|
|
|
|
|
|
- protected static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* 最后一次消息时间缓存key
|
|
* 最后一次消息时间缓存key
|
|
*/
|
|
*/
|
|
@@ -217,11 +215,16 @@ public abstract class MqttBaseHandler {
|
|
try {
|
|
try {
|
|
List<MeterDevice> deviceList = getMeterDeviceList();
|
|
List<MeterDevice> deviceList = getMeterDeviceList();
|
|
List<ElecMeterH> meterHList = new ArrayList<>();
|
|
List<ElecMeterH> meterHList = new ArrayList<>();
|
|
|
|
+ Map<String, Price> priceMap = new ConcurrentHashMap<>();
|
|
|
|
+ Date date = DateUtils.adjustHour(new Date(), -1);
|
|
|
|
|
|
for (MeterDevice device : deviceList) {
|
|
for (MeterDevice device : deviceList) {
|
|
ElecMeterH elecMeterH = meterHourProdSub(device);
|
|
ElecMeterH elecMeterH = meterHourProdSub(device);
|
|
|
|
|
|
if (null != elecMeterH) {
|
|
if (null != elecMeterH) {
|
|
|
|
+ Price price = priceMap.computeIfAbsent(device.getAreaCode(),
|
|
|
|
+ k -> priceService.getElecHourPrice(device.getAreaCode(), date));
|
|
|
|
+ completePrice(device, elecMeterH, price);
|
|
meterHList.add(elecMeterH);
|
|
meterHList.add(elecMeterH);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -237,6 +240,16 @@ public abstract class MqttBaseHandler {
|
|
return cnt;
|
|
return cnt;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void completePrice(MeterDevice device, ElecMeterH elecMeterH, Price price) {
|
|
|
|
+ if (null != price) {
|
|
|
|
+ BigDecimal useQuantity = new BigDecimal(String.valueOf(elecMeterH.getElecQuantity()));
|
|
|
|
+ BigDecimal cost = useQuantity.multiply(new BigDecimal(String.valueOf(price.getPriceValue())));
|
|
|
|
+ elecMeterH.setMeterType(price.getMeterType());
|
|
|
|
+ elecMeterH.setMeterUnitPrice(price.getPriceValue());
|
|
|
|
+ elecMeterH.setUseElecCost(cost.doubleValue());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
private ElecMeterH meterHourProdSub(MeterDevice device) {
|
|
private ElecMeterH meterHourProdSub(MeterDevice device) {
|
|
ElecMeterH elecMeterH = null;
|
|
ElecMeterH elecMeterH = null;
|
|
|
|
|
|
@@ -246,9 +259,11 @@ public abstract class MqttBaseHandler {
|
|
String lastMeterReading = attrMap.get(LAST_HOUR_READING);
|
|
String lastMeterReading = attrMap.get(LAST_HOUR_READING);
|
|
String newMeterReading = attrMap.get("energy");
|
|
String newMeterReading = attrMap.get("energy");
|
|
|
|
|
|
|
|
+ // 缓存不为空,使用缓存抄表计算
|
|
if (StringUtils.isNotEmpty(lastMeterReading)) {
|
|
if (StringUtils.isNotEmpty(lastMeterReading)) {
|
|
elecMeterH = execHourMeter(device, lastMeterReading, newMeterReading);
|
|
elecMeterH = execHourMeter(device, lastMeterReading, newMeterReading);
|
|
}
|
|
}
|
|
|
|
+ // 缓存为空,使用数据库记录计算
|
|
else {
|
|
else {
|
|
ElecMeterH dbElecMeterH = elecMeterHService.selectLatelyItem(device.getDeviceCode());
|
|
ElecMeterH dbElecMeterH = elecMeterHService.selectLatelyItem(device.getDeviceCode());
|
|
|
|
|
|
@@ -302,15 +317,6 @@ public abstract class MqttBaseHandler {
|
|
elecMeterH.setElecQuantity(useQuantity.doubleValue());
|
|
elecMeterH.setElecQuantity(useQuantity.doubleValue());
|
|
elecMeterH.setMeterReading(newEngValue.doubleValue());
|
|
elecMeterH.setMeterReading(newEngValue.doubleValue());
|
|
|
|
|
|
- Price price = priceService.getElecHourPrice(device.getAreaCode(), date);
|
|
|
|
-
|
|
|
|
- if (null != price) {
|
|
|
|
- BigDecimal cost = useQuantity.multiply(new BigDecimal(String.valueOf(price.getPriceValue())));
|
|
|
|
- elecMeterH.setMeterType(price.getMeterType());
|
|
|
|
- elecMeterH.setMeterUnitPrice(price.getPriceValue());
|
|
|
|
- elecMeterH.setUseElecCost(cost.doubleValue());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return elecMeterH;
|
|
return elecMeterH;
|
|
}
|
|
}
|
|
|
|
|