From fcbd05ea1dc73ad52bfe336aef75bdc3a2f9e42f Mon Sep 17 00:00:00 2001 From: hupeng Date: Tue, 16 Jul 2019 13:02:52 +0800 Subject: [PATCH] =?UTF-8?q?[=E7=94=B5=E8=A1=A8][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0=E5=92=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8F=92=E5=85=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/device/KwBoxV1Controller.java | 2 + .../iformall/enums/EnumBoxOnlineStatus.java | 34 +++++ .../iformall/enums/EnumMeterOnlineStatus.java | 34 +++++ .../iformall/mapper/KwMeterDataMapper.java | 2 + .../com/iformall/service/kw/KwBoxService.java | 3 +- .../service/kw/KwMeterDataService.java | 2 + .../iformall/service/kw/KwMeterService.java | 7 +- .../service/kw/impl/KwBoxServiceImpl.java | 116 +++++++++--------- .../kw/impl/KwMeterDataServiceImpl.java | 5 + .../service/kw/impl/KwMeterServiceImpl.java | 6 + .../resources/mapper/KwMeterDataMapper.xml | 25 +++- .../main/resources/mapper/KwMeterMapper.xml | 7 ++ 12 files changed, 179 insertions(+), 64 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumBoxOnlineStatus.java create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumMeterOnlineStatus.java diff --git a/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java b/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java index 94a0aff44..82fcd81c0 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java @@ -7,6 +7,7 @@ import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.KwBox; import com.iformall.domain.po.KwBoxCmdHistory; +import com.iformall.enums.EnumBoxOnlineStatus; import com.iformall.enums.EnumBoxRegisterStatus; import com.iformall.service.kw.KwBoxCmdHistoryService; import com.iformall.service.kw.KwBoxService; @@ -166,6 +167,7 @@ public class KwBoxV1Controller extends BaseController { KwBox record = new KwBox(); record.setId(kwBox.getId()); record.setLastOnlineTime(new Date()); + record.setOnlineStatus(EnumBoxOnlineStatus.ONLINE.getCode()); kwBoxService.saveOrUpdate(record); Instant instant = deviceTime.toInstant(); diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBoxOnlineStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumBoxOnlineStatus.java new file mode 100644 index 000000000..d0d177b78 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBoxOnlineStatus.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumBoxOnlineStatus { + + OFFLINE(0, "离线"), + ONLINE(1, "在线"); + public static EnumBoxOnlineStatus getEnum(Integer code) { + for (EnumBoxOnlineStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumBoxOnlineStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMeterOnlineStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumMeterOnlineStatus.java new file mode 100644 index 000000000..e8ac5cd24 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMeterOnlineStatus.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumMeterOnlineStatus { + + OFFLINE(0, "离线"), + ONLINE(1, "在线"); + public static EnumMeterOnlineStatus getEnum(Integer code) { + for (EnumMeterOnlineStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMeterOnlineStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/KwMeterDataMapper.java b/mallinkService/src/main/java/com/iformall/mapper/KwMeterDataMapper.java index 65c6d414f..5ad733c27 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/KwMeterDataMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/KwMeterDataMapper.java @@ -11,6 +11,8 @@ public interface KwMeterDataMapper extends CommonMapper { List findList(KwMeterData param); + List findLastRecordList(KwMeterData param); + List findVoList(KwMeterDataDto param); List getPower(KwMeterDataDto param); diff --git a/mallinkService/src/main/java/com/iformall/service/kw/KwBoxService.java b/mallinkService/src/main/java/com/iformall/service/kw/KwBoxService.java index 6d970d5cf..5edcaef47 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/KwBoxService.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/KwBoxService.java @@ -79,8 +79,7 @@ public interface KwBoxService { List findMetersAddress(KwBox record); List findMeters(KwBox record); - KwMeter findMeter(KwBox record, String addr); KwBox findByImei(String imei); - KwMeterData saveMeterData(KwBox record, List> metersData, Date deviceTime); + void saveMeterData(KwBox record, List> metersData, Date deviceTime); } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/kw/KwMeterDataService.java b/mallinkService/src/main/java/com/iformall/service/kw/KwMeterDataService.java index dcf8a29e5..2b1fc15e8 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/KwMeterDataService.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/KwMeterDataService.java @@ -17,6 +17,8 @@ public interface KwMeterDataService { List findList(KwMeterData kwMeterData); + List findLastRecordList(KwMeterData kwMeterData); + int save(List recordList); KwMeterDataVo getPower(KwMeterDataDto dto); diff --git a/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java b/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java index f52183d48..6cff3fa25 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/KwMeterService.java @@ -38,7 +38,12 @@ public interface KwMeterService { */ ResultData saveOrUpdate(KwMeter record); - + /** + * 保存或更新实体 + * + * @param record + */ + ResultData updateBatch(KwMeter record); /** * 根据Id删除实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwBoxServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwBoxServiceImpl.java index 502ca5c56..8029a7073 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwBoxServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwBoxServiceImpl.java @@ -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> metersData, Date deviceTime){ + public void saveMeterData(KwBox kwBox, List> metersData, Date deviceTime){ if (!metersData.isEmpty()) { + List kwMeterList = findMeters(kwBox); + List 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 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 = 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 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 lastRecordList = kwMeterDataService.findLastRecordList(param); + kwMeterDataList.stream().forEach(md->{ + Optional 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 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 kwMeters = kwMeterService.findList(kwMeter); - if (kwMeters.isEmpty()) { - logger.info("没找到盒子关联的电表: id="+record.getId() +",addr=",kwMeter.getAddress()); - return null; - } - - return kwMeters.get(0); - } } diff --git a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java index 095c6740c..9399edc1b 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java @@ -59,6 +59,11 @@ public class KwMeterDataServiceImpl implements KwMeterDataService { return kwMeterDataMapper.insertList(recordList); } + @Override + public List findLastRecordList(KwMeterData kwMeterData) { + return kwMeterDataMapper.findLastRecordList(kwMeterData); + } + @Override public KwMeterDataVo getPower(KwMeterDataDto dto) { diff --git a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java index 0df254ed9..6f8f19358 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterServiceImpl.java @@ -50,6 +50,12 @@ public class KwMeterServiceImpl implements KwMeterService { return new ResultData(); } + @Override + public ResultData updateBatch(KwMeter record) { + + + return new ResultData(); + } @Override public void deleteById(Long id) { diff --git a/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml b/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml index e2aea070b..51e6ec697 100644 --- a/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml +++ b/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml @@ -55,13 +55,36 @@ order by ${sortColumns} - select from kw_meter_data + + diff --git a/mallinkService/src/main/resources/mapper/KwMeterMapper.xml b/mallinkService/src/main/resources/mapper/KwMeterMapper.xml index a407af102..aed8965a2 100644 --- a/mallinkService/src/main/resources/mapper/KwMeterMapper.xml +++ b/mallinkService/src/main/resources/mapper/KwMeterMapper.xml @@ -83,5 +83,12 @@ + + update kw_meter set online_status = #{onlineStatus}, update_time = #{updateTime} + where id in + + #{idItem} + +