|
@@ -12,7 +12,9 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.jeecg.common.util.DateUtils;
|
|
|
import org.jeecg.common.util.oConvertUtils;
|
|
|
import org.jeecg.modules.deviceLesm.entity.DeviceInformation;
|
|
|
+import org.jeecg.modules.deviceLesm.entity.DeviceRegion;
|
|
|
import org.jeecg.modules.deviceLesm.mapper.DeviceInformationMapper;
|
|
|
+import org.jeecg.modules.deviceLesm.mapper.DeviceRegionMapper;
|
|
|
import org.jeecg.modules.fpgLeanModel.entity.*;
|
|
|
import org.jeecg.modules.fpgLeanModel.mapper.FpgLeanModelMapper;
|
|
|
import org.jeecg.modules.fpgLeanModel.service.IFpgLeanModelService;
|
|
@@ -49,6 +51,9 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
|
|
|
@Autowired
|
|
|
private DeviceInformationMapper deviceInformationMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private DeviceRegionMapper deviceRegionMapper;
|
|
|
+
|
|
|
@Autowired
|
|
|
private MongoTemplate mongoTemplate;
|
|
|
|
|
@@ -146,7 +151,7 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
|
|
|
|
|
|
// 执行查询
|
|
|
List<DeviceStatiscsModelMongodb> deviceStatiscsModelMongodbList = mongoTemplate.find(query, DeviceStatiscsModelMongodb.class, "leanmodel_run_realtime");
|
|
|
- if (oConvertUtils.listIsEmpty(deviceStatiscsModelMongodbList)){
|
|
|
+ if (oConvertUtils.listIsEmpty(deviceStatiscsModelMongodbList)) {
|
|
|
log.info("{}{}", "leanmodel_run_realtime折线图峰平谷大屏通过设备id查询实时功率和电流为空", deviceInformationId);
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
@@ -208,7 +213,7 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
|
|
|
b.getIngTime(), b.getSelectricCurrent(), b.getPower(), b.getTopsPower(), b.getPeaksPower(), b.getFlatPower(), b.getValleysPower(),
|
|
|
b.getTopsIngTime(), b.getPeaksIngTime(), b.getFlatIngTime(), b.getValleysIngTime(),
|
|
|
b.getTopsSelectricCurrent(), b.getPeaksSelectricCurrent(), b.getFlatSelectricCurrent(), b.getValleysSelectricCurrent(),
|
|
|
- b.getTopsProportion(), b.getPeaksProportion(), b.getFlatProportion(), b.getValleysProportion(), b.getProportion(), b.getDates(), dateString);
|
|
|
+ b.getTopsProportion(), b.getPeaksProportion(), b.getFlatProportion(), b.getValleysProportion(), b.getProportion(), b.getDates(), dateString, null, null);
|
|
|
}
|
|
|
return null;
|
|
|
}).filter(x -> x != null).collect(Collectors.toList());
|
|
@@ -300,6 +305,263 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public JSONObject totalElectricityConsumptionReport() {
|
|
|
+
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ Query query = new Query();
|
|
|
+ query.with(Sort.by(Sort.Direction.ASC, "createTime"));
|
|
|
+ List<DeviceStatiscsModelMongodb> fpgStatiscsModelDataList = mongoTemplate.find(query, DeviceStatiscsModelMongodb.class, "total_day_powerproportioncurrent");
|
|
|
+
|
|
|
+ if (oConvertUtils.listIsEmpty(fpgStatiscsModelDataList)) {
|
|
|
+ log.info("{}{}", "mongo数据查询为空,峰平谷报表导出失败!", "total_day_powerproportioncurrent");
|
|
|
+ result.put("data", new JSONArray());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> deviceInformationIds = fpgStatiscsModelDataList.stream()
|
|
|
+ .map(DeviceStatiscsModelMongodb::getDeviceInformationId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DeviceInformation> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.in(DeviceInformation::getId, deviceInformationIds);
|
|
|
+ List<DeviceInformation> deviceInformationList = deviceInformationMapper.selectList(queryWrapper);
|
|
|
+//
|
|
|
+// Map<String, String> deviceInfoMap = deviceInformationList.stream()
|
|
|
+// .collect(Collectors.toMap(
|
|
|
+// DeviceInformation::getId, // Key: Device ID
|
|
|
+// DeviceInformation::getDeviceTitle // Value: Device Title
|
|
|
+// ));
|
|
|
+
|
|
|
+// // 遍历 fpgStatiscsModelDataList,匹配 deviceTitle
|
|
|
+// fpgStatiscsModelDataList.forEach(data -> {
|
|
|
+// String deviceTitle = deviceInfoMap.get(data.getDeviceInformationId());
|
|
|
+// data.setDeviceTitle(deviceTitle); // 赋值 deviceTitle
|
|
|
+// });
|
|
|
+
|
|
|
+
|
|
|
+ // 将listA转换为以(设备Id, 区域Id)为键的Map
|
|
|
+ Map<String, DeviceInformation> mapA = deviceInformationList.stream()
|
|
|
+ .collect(Collectors.toMap(a -> a.getId() + "_" + a.getDeviceRegionId(), a -> a));
|
|
|
+
|
|
|
+ // 遍历listB,根据相同的(设备Id, 区域Id)与mapA中的对象合并成新的ModelResult并添加到新列表
|
|
|
+ List<ModelReportFormResult> combinedList = fpgStatiscsModelDataList.stream()
|
|
|
+ .map(b -> {
|
|
|
+ String key = b.getDeviceInformationId() + "_" + b.getDeviceRegionId();
|
|
|
+ DeviceInformation a = mapA.get(key);
|
|
|
+ if (a != null) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String dateString = sdf.format(b.getCreateTime());
|
|
|
+ return new ModelReportFormResult(a.getDeviceTitle(), b.getDevicePointId(), b.getDeviceRegionId(), b.getDeviceInformationId(),
|
|
|
+ b.getIngTime(), b.getSelectricCurrent(), b.getPower(), b.getTopsPower(), b.getPeaksPower(), b.getFlatPower(), b.getValleysPower(),
|
|
|
+ b.getTopsIngTime(), b.getPeaksIngTime(), b.getFlatIngTime(), b.getValleysIngTime(),
|
|
|
+ b.getTopsSelectricCurrent(), b.getPeaksSelectricCurrent(), b.getFlatSelectricCurrent(), b.getValleysSelectricCurrent(),
|
|
|
+ b.getTopsProportion(), b.getPeaksProportion(), b.getFlatProportion(), b.getValleysProportion(), b.getProportion(), b.getDates(), dateString, null, null);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }).filter(x -> x != null).collect(Collectors.toList());
|
|
|
+ JSONArray jsonResult = new JSONArray();
|
|
|
+
|
|
|
+ // 龙钢变各工序报表
|
|
|
+ List<ModelDataResult> modelDataResults = new ArrayList<>();
|
|
|
+ for (ModelReportFormResult modelReportFormResult : combinedList) {
|
|
|
+
|
|
|
+ BigDecimal sum = modelReportFormResult.getTopsPower().add(modelReportFormResult.getPeaksPower()).add(modelReportFormResult.getFlatPower()).add(modelReportFormResult.getValleysPower());
|
|
|
+
|
|
|
+ // 先获取公共属性值,避免在循环内多次重复获取
|
|
|
+ String deviceTitle = modelReportFormResult.getDeviceTitle();
|
|
|
+ String deviceRegionId = modelReportFormResult.getDeviceRegionId();
|
|
|
+ String deviceInformationId = modelReportFormResult.getDeviceInformationId();
|
|
|
+ String createTime = modelReportFormResult.getDates();
|
|
|
+ for (int i = 0; i < 5; i++) {
|
|
|
+ ModelDataResult modelDataResult = new ModelDataResult();
|
|
|
+
|
|
|
+ if (i == 0) {
|
|
|
+ modelDataResult.setKey("反有总");
|
|
|
+ modelDataResult.setKey1("反有总");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getTopsPower().add(modelReportFormResult.getPeaksPower()).add(modelReportFormResult.getFlatPower()).add(modelReportFormResult.getValleysPower()));
|
|
|
+ }
|
|
|
+ if (i == 1) {
|
|
|
+ modelDataResult.setKey("尖");
|
|
|
+ modelDataResult.setKey1("尖");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getTopsPower());
|
|
|
+ }
|
|
|
+ if (i == 2) {
|
|
|
+ modelDataResult.setKey("峰");
|
|
|
+ modelDataResult.setKey1("峰");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getPeaksPower());
|
|
|
+ }
|
|
|
+ if (i == 3) {
|
|
|
+ modelDataResult.setKey("平");
|
|
|
+ modelDataResult.setKey1("平");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getFlatPower());
|
|
|
+ }
|
|
|
+ if (i == 4) {
|
|
|
+ modelDataResult.setKey("谷");
|
|
|
+ modelDataResult.setKey1("谷");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getValleysPower());
|
|
|
+ }
|
|
|
+
|
|
|
+ modelDataResult.setDeviceTitle(deviceTitle);
|
|
|
+ modelDataResult.setDeviceRegionId(deviceRegionId);
|
|
|
+ modelDataResult.setDeviceInformationId(deviceInformationId);
|
|
|
+ modelDataResult.setCreateTime(createTime);
|
|
|
+ modelDataResults.add(modelDataResult);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jsonResult = JSON.parseArray(JSON.toJSONString(modelDataResults));
|
|
|
+
|
|
|
+ log.info("{}{}", "积木报表导出总数:", jsonResult.size());
|
|
|
+ result.put("data", jsonResult);
|
|
|
+ return result;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public JSONObject electricityControl() {
|
|
|
+
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ Query query = new Query();
|
|
|
+ query.with(Sort.by(Sort.Direction.ASC, "createTime"));
|
|
|
+ List<DeviceStatiscsModelMongodb> fpgStatiscsModelDataList = mongoTemplate.find(query, DeviceStatiscsModelMongodb.class, "total_day_powerproportioncurrent");
|
|
|
+
|
|
|
+ if (oConvertUtils.listIsEmpty(fpgStatiscsModelDataList)) {
|
|
|
+ log.info("{}{}", "mongo数据查询为空,峰平谷报表导出失败!", "total_day_powerproportioncurrent");
|
|
|
+ result.put("data", new JSONArray());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> deviceInformationIds = fpgStatiscsModelDataList.stream()
|
|
|
+ .map(DeviceStatiscsModelMongodb::getDeviceInformationId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DeviceInformation> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.in(DeviceInformation::getId, deviceInformationIds);
|
|
|
+ List<DeviceInformation> deviceInformationList = deviceInformationMapper.selectList(queryWrapper);
|
|
|
+
|
|
|
+
|
|
|
+ List<String> regionIds = fpgStatiscsModelDataList.stream()
|
|
|
+ .map(DeviceStatiscsModelMongodb::getDeviceRegionId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ LambdaQueryWrapper<DeviceRegion> regionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ regionLambdaQueryWrapper.in(DeviceRegion::getId, regionIds);
|
|
|
+ List<DeviceRegion> deviceRegionList = deviceRegionMapper.selectList(regionLambdaQueryWrapper);
|
|
|
+
|
|
|
+ Map<String, String> regionMap = deviceRegionList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DeviceRegion::getId, // Key: Device ID
|
|
|
+ DeviceRegion::getRegionTitle // Value: Device Title
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 遍历 fpgStatiscsModelDataList,匹配 deviceTitle
|
|
|
+ fpgStatiscsModelDataList.forEach(data -> {
|
|
|
+ String regionTitle = regionMap.get(data.getDeviceRegionId());
|
|
|
+ data.setRegionTitle(regionTitle); // 赋值 regionTitle
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ // 将listA转换为以(设备Id, 区域Id)为键的Map
|
|
|
+ Map<String, DeviceInformation> mapA = deviceInformationList.stream()
|
|
|
+ .collect(Collectors.toMap(a -> a.getId() + "_" + a.getDeviceRegionId(), a -> a));
|
|
|
+
|
|
|
+ // 遍历listB,根据相同的(设备Id, 区域Id)与mapA中的对象合并成新的ModelResult并添加到新列表
|
|
|
+ List<ModelReportFormResult> combinedList = fpgStatiscsModelDataList.stream()
|
|
|
+ .map(b -> {
|
|
|
+ String key = b.getDeviceInformationId() + "_" + b.getDeviceRegionId();
|
|
|
+ DeviceInformation a = mapA.get(key);
|
|
|
+ if (a != null) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String dateString = sdf.format(b.getCreateTime());
|
|
|
+ return new ModelReportFormResult(a.getDeviceTitle(), b.getDevicePointId(), b.getDeviceRegionId(), b.getDeviceInformationId(),
|
|
|
+ b.getIngTime(), b.getSelectricCurrent(), b.getPower(), b.getTopsPower(), b.getPeaksPower(), b.getFlatPower(), b.getValleysPower(),
|
|
|
+ b.getTopsIngTime(), b.getPeaksIngTime(), b.getFlatIngTime(), b.getValleysIngTime(),
|
|
|
+ b.getTopsSelectricCurrent(), b.getPeaksSelectricCurrent(), b.getFlatSelectricCurrent(), b.getValleysSelectricCurrent(),
|
|
|
+ b.getTopsProportion(), b.getPeaksProportion(), b.getFlatProportion(), b.getValleysProportion(), b.getProportion(), b.getDates(), dateString, b.getRegionTitle(), mapDeviceType(a.getDeviceType()));
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }).filter(x -> x != null).collect(Collectors.toList());
|
|
|
+ JSONArray jsonResult = new JSONArray();
|
|
|
+
|
|
|
+ // 龙钢变各工序报表
|
|
|
+ List<ElectricityControlReport> modelDataResults = new ArrayList<>();
|
|
|
+ for (ModelReportFormResult modelReportFormResult : combinedList) {
|
|
|
+
|
|
|
+ BigDecimal sum = modelReportFormResult.getTopsPower().add(modelReportFormResult.getPeaksPower()).add(modelReportFormResult.getFlatPower()).add(modelReportFormResult.getValleysPower());
|
|
|
+
|
|
|
+ // 先获取公共属性值,避免在循环内多次重复获取
|
|
|
+ String deviceTitle = modelReportFormResult.getDeviceTitle();
|
|
|
+ String deviceRegionId = modelReportFormResult.getDeviceRegionId();
|
|
|
+ String deviceInformationId = modelReportFormResult.getDeviceInformationId();
|
|
|
+ String createTime = modelReportFormResult.getDates();
|
|
|
+ String regionTitle = modelReportFormResult.getRegionName();
|
|
|
+ String deviceTypeName = modelReportFormResult.getDeviceTypeName();
|
|
|
+ for (int i = 0; i < 9; i++) {
|
|
|
+
|
|
|
+ ElectricityControlReport modelDataResult = new ElectricityControlReport();
|
|
|
+ if (i == 0) {
|
|
|
+ modelDataResult.setKey("总");
|
|
|
+ modelDataResult.setKey1("总");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getTopsPower().add(modelReportFormResult.getPeaksPower()).add(modelReportFormResult.getFlatPower()).add(modelReportFormResult.getValleysPower()));
|
|
|
+ }
|
|
|
+ if (i == 1) {
|
|
|
+ modelDataResult.setKey("尖");
|
|
|
+ modelDataResult.setKey1("尖");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getTopsPower());
|
|
|
+ }
|
|
|
+ if (i == 2) {
|
|
|
+ modelDataResult.setKey("尖");
|
|
|
+ modelDataResult.setKey1("尖(%)");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getTopsPower().divide(sum, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ if (i == 3) {
|
|
|
+ modelDataResult.setKey("峰");
|
|
|
+ modelDataResult.setKey1("峰");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getPeaksPower());
|
|
|
+ }
|
|
|
+ if (i == 4) {
|
|
|
+ modelDataResult.setKey("峰");
|
|
|
+ modelDataResult.setKey1("峰(%)");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getPeaksPower().divide(sum, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ if (i == 5) {
|
|
|
+ modelDataResult.setKey("平");
|
|
|
+ modelDataResult.setKey1("平");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getFlatPower());
|
|
|
+ }
|
|
|
+ if (i == 6) {
|
|
|
+ modelDataResult.setKey("平");
|
|
|
+ modelDataResult.setKey1("平(%)");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getFlatPower().divide(sum, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ if (i == 7) {
|
|
|
+ modelDataResult.setKey("谷");
|
|
|
+ modelDataResult.setKey1("谷");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getValleysPower());
|
|
|
+ }
|
|
|
+ if (i == 8) {
|
|
|
+ modelDataResult.setKey("谷");
|
|
|
+ modelDataResult.setKey1("谷(%)");
|
|
|
+ modelDataResult.setValue(modelReportFormResult.getValleysPower().divide(sum, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ modelDataResult.setDeviceTitle(deviceTitle);
|
|
|
+ modelDataResult.setDeviceRegionId(deviceRegionId);
|
|
|
+ modelDataResult.setDeviceInformationId(deviceInformationId);
|
|
|
+ modelDataResult.setCreateTime(createTime);
|
|
|
+ modelDataResult.setRegionTitle(regionTitle);
|
|
|
+ modelDataResult.setDeviceTypeName(deviceTypeName);
|
|
|
+ modelDataResults.add(modelDataResult);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jsonResult = JSON.parseArray(JSON.toJSONString(modelDataResults));
|
|
|
+
|
|
|
+ log.info("{}{}", "积木报表导出总数:", jsonResult.size());
|
|
|
+ result.put("data", jsonResult);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 基于模型编码、采集点ID、设备ID、区域ID、峰平谷配置时间范围 动态查询mongoDB
|
|
|
*
|
|
@@ -409,4 +671,17 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
|
|
|
modelDataResult.setCreateTime(modelReportFormResult.getCreateTime());
|
|
|
}
|
|
|
|
|
|
+ public String mapDeviceType(String deviceType) {
|
|
|
+ // 定义映射关系
|
|
|
+ Map<String, String> deviceTypeMap = new HashMap<>();
|
|
|
+ deviceTypeMap.put("1", "棒一");
|
|
|
+ deviceTypeMap.put("2", "棒二");
|
|
|
+ deviceTypeMap.put("3", "棒三");
|
|
|
+ deviceTypeMap.put("4", "高线");
|
|
|
+ deviceTypeMap.put("5", "板带");
|
|
|
+
|
|
|
+ // 返回映射值,如果找不到对应的 key,则返回默认值
|
|
|
+ return deviceTypeMap.getOrDefault(deviceType, "");
|
|
|
+ }
|
|
|
+
|
|
|
}
|