|
|
|
@@ -8,23 +8,19 @@ import com.iformall.common.ResultData; |
|
|
|
import com.iformall.domain.po.KwBox; |
|
|
|
import com.iformall.domain.po.KwMeter; |
|
|
|
import com.iformall.domain.po.KwMeterData; |
|
|
|
import com.iformall.enums.EnumBoxStatus; |
|
|
|
import com.iformall.enums.EnumMeterBindStatus; |
|
|
|
import com.iformall.enums.EnumMeterStatus; |
|
|
|
import com.iformall.enums.*; |
|
|
|
import com.iformall.mapper.KwBoxMapper; |
|
|
|
import com.iformall.service.kw.KwBoxService; |
|
|
|
import com.iformall.service.kw.KwMeterDataService; |
|
|
|
import com.iformall.service.kw.KwMeterService; |
|
|
|
import io.netty.util.internal.StringUtil; |
|
|
|
import org.apache.rocketmq.common.filter.impl.Op; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
@@ -91,54 +87,71 @@ public class KwBoxServiceImpl implements KwBoxService { |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public KwMeterData saveMeterData(KwBox kwBox, List<Map<String,String>> metersData, Date deviceTime){ |
|
|
|
public void saveMeterData(KwBox kwBox, List<Map<String,String>> metersData, Date deviceTime){ |
|
|
|
|
|
|
|
if (!metersData.isEmpty()) { |
|
|
|
|
|
|
|
List<KwMeter> kwMeterList = findMeters(kwBox); |
|
|
|
|
|
|
|
List<KwMeterData> kwMeterDataList = new ArrayList<>(); |
|
|
|
Date recordTime = new Date(); |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
metersData.stream().forEach(m->{ |
|
|
|
String addr = m.get(KwBoxService.METER_ADDRESS); |
|
|
|
String activePower = m.get(KwBoxService.METER_ACTIVE_POWER); //active power |
|
|
|
|
|
|
|
KwMeter kwMeter = findMeter(kwBox, addr); |
|
|
|
if (kwMeter==null) return; |
|
|
|
KwMeterData kwMeterData = new KwMeterData(); |
|
|
|
|
|
|
|
kwMeterData.setId(idWorker.nextId()); |
|
|
|
kwMeterData.setTenantId(kwBox.getTenantId()); |
|
|
|
kwMeterData.setAddress(addr); |
|
|
|
kwMeterData.setBoxId(kwBox.getId()); |
|
|
|
kwMeterData.setCreateTime(recordTime); |
|
|
|
kwMeterData.setDeviceTime(deviceTime); |
|
|
|
kwMeterData.setMeterId(kwMeter.getId()); |
|
|
|
if (!StringUtil.isNullOrEmpty(activePower)) { |
|
|
|
kwMeterData.setTotalPower(Integer.parseInt(activePower)); |
|
|
|
} |
|
|
|
|
|
|
|
if (kwMeterData.getTotalPower() != null) { |
|
|
|
KwMeterData record = new KwMeterData(); |
|
|
|
record.setBoxId(kwBox.getId()); |
|
|
|
record.setMeterId(kwMeter.getId()); |
|
|
|
record.setTotalPower(0); //set in sql not null |
|
|
|
record.setSortColumns(KwMeterData.Field.DeviceTime_DESC); |
|
|
|
PageInfo<KwMeterData> kwMeterDataPage = kwMeterDataService.listAsPage(record,1,1); |
|
|
|
|
|
|
|
if (kwMeterDataPage.getList().size() > 0) { |
|
|
|
kwMeterData.setUsedPower( |
|
|
|
kwMeterData.getTotalPower()-kwMeterDataPage.getList().get(0).getTotalPower()); |
|
|
|
kwMeterData.setLastDeviceTime(kwMeterDataPage.getList().get(0).getDeviceTime()); |
|
|
|
kwMeterData.setLastTotalPower(kwMeterDataPage.getList().get(0).getTotalPower()); |
|
|
|
metersData.stream().forEach(md->{ |
|
|
|
String address = md.get(KwBoxService.METER_ADDRESS); |
|
|
|
String activePower = md.get(KwBoxService.METER_ACTIVE_POWER); //active power |
|
|
|
|
|
|
|
Optional<KwMeter> kwMeter = kwMeterList.stream().filter(m->m.getAddress().equals(address)).findAny(); |
|
|
|
|
|
|
|
if (kwMeter.isPresent()) { |
|
|
|
KwMeterData kwMeterData = new KwMeterData(); |
|
|
|
|
|
|
|
kwMeterData.setId(idWorker.nextId()); |
|
|
|
kwMeterData.setTenantId(kwBox.getTenantId()); |
|
|
|
kwMeterData.setAddress(address); |
|
|
|
kwMeterData.setBoxId(kwBox.getId()); |
|
|
|
kwMeterData.setCreateTime(recordTime); |
|
|
|
kwMeterData.setDeviceTime(deviceTime); |
|
|
|
kwMeterData.setMeterId(kwMeter.get().getId()); |
|
|
|
if (!StringUtil.isNullOrEmpty(activePower)) { |
|
|
|
kwMeterData.setTotalPower(Integer.parseInt(activePower)); |
|
|
|
} |
|
|
|
|
|
|
|
kwMeterDataList.add(kwMeterData); |
|
|
|
} |
|
|
|
kwMeterDataList.add(kwMeterData); |
|
|
|
}); |
|
|
|
|
|
|
|
KwMeter kwMeter = new KwMeter(); |
|
|
|
List<Long> onlines = kwMeterDataList.stream().filter(md->md.getTotalPower()!=null).map(KwMeterData::getMeterId).collect(Collectors.toList()); |
|
|
|
if (onlines.size() > 0) { |
|
|
|
kwMeter.setIds(onlines); |
|
|
|
kwMeter.setOnlineStatus(EnumMeterOnlineStatus.ONLINE.getCode()); |
|
|
|
kwMeter.setUpdateTime(new Date()); |
|
|
|
kwMeterService.updateBatch(kwMeter); |
|
|
|
|
|
|
|
KwMeterData param = new KwMeterData(); |
|
|
|
param.setIds(onlines); |
|
|
|
List<KwMeterData> lastRecordList = kwMeterDataService.findLastRecordList(param); |
|
|
|
kwMeterDataList.stream().forEach(md->{ |
|
|
|
Optional<KwMeterData> data = lastRecordList.stream().filter(lr->lr.getMeterId() == md.getMeterId()).findAny(); |
|
|
|
if (data.isPresent()) { |
|
|
|
md.setUsedPower( |
|
|
|
md.getTotalPower()-data.get().getTotalPower()); |
|
|
|
md.setLastDeviceTime(data.get().getDeviceTime()); |
|
|
|
md.setLastTotalPower(data.get().getTotalPower()); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
List<Long> offlines = kwMeterDataList.stream().filter(md->md.getTotalPower()==null).map(KwMeterData::getMeterId).collect(Collectors.toList()); |
|
|
|
if (offlines.size() > 0) { |
|
|
|
kwMeter.setIds(onlines); |
|
|
|
kwMeter.setOnlineStatus(EnumMeterOnlineStatus.OFFLINE.getCode()); |
|
|
|
kwMeter.setUpdateTime(new Date()); |
|
|
|
kwMeterService.updateBatch(kwMeter); |
|
|
|
} |
|
|
|
|
|
|
|
kwMeterDataService.save(kwMeterDataList); |
|
|
|
} |
|
|
|
|
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@@ -164,21 +177,4 @@ public class KwBoxServiceImpl implements KwBoxService { |
|
|
|
return kwMeterService.findList(kwMeter); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public KwMeter findMeter(KwBox record, String addr) { |
|
|
|
|
|
|
|
KwMeter kwMeter = new KwMeter(); |
|
|
|
kwMeter.setBoxId(record.getId()); |
|
|
|
kwMeter.setBindStatus(EnumMeterBindStatus.BIND.getCode()); |
|
|
|
kwMeter.setStatus(EnumMeterStatus.VALID.getCode()); |
|
|
|
kwMeter.setAddress(addr); |
|
|
|
|
|
|
|
List<KwMeter> kwMeters = kwMeterService.findList(kwMeter); |
|
|
|
if (kwMeters.isEmpty()) { |
|
|
|
logger.info("没找到盒子关联的电表: id="+record.getId() +",addr=",kwMeter.getAddress()); |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
return kwMeters.get(0); |
|
|
|
} |
|
|
|
} |