|
|
@ -1,14 +1,19 @@ |
|
|
|
package com.lzbi.task.service; |
|
|
|
|
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS; |
|
|
|
import com.baomidou.mybatisplus.extension.service.IService; |
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
import com.lzbi.task.domain.DcBusiWorkReadLog; |
|
|
|
import com.lzbi.task.domain.ReadQueryParams; |
|
|
|
import com.lzbi.task.domain.WorkParamInfo; |
|
|
|
import com.lzbi.task.domain.*; |
|
|
|
import com.lzbi.task.mapper.WorkParamReadMapper; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
import java.util.List; |
|
|
|
import java.lang.reflect.Field; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.math.RoundingMode; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
@ -17,14 +22,137 @@ import java.util.List; |
|
|
|
* @author win |
|
|
|
* @date 2023-11-29 |
|
|
|
*/ |
|
|
|
//@DS("workDB")
|
|
|
|
@DS("workDB") |
|
|
|
@Service |
|
|
|
public class WorkParamReadService extends ServiceImpl<WorkParamReadMapper, WorkParamInfo> implements IService<WorkParamInfo> |
|
|
|
@Slf4j |
|
|
|
public class WorkParamReadService extends ServiceImpl<WorkParamReadMapper, WorkParamInfo> implements IService<WorkParamInfo> { |
|
|
|
|
|
|
|
{ |
|
|
|
/*获取生产单元的参数读取配置 |
|
|
|
* */ |
|
|
|
public List<DcBusiWorkReadLog> readWorkValue(ReadQueryParams readQueryParams){ |
|
|
|
public List<DcBusiWorkReadLog> readWorkValue(ReadQueryParams readQueryParams) { |
|
|
|
return baseMapper.readWorkValue(readQueryParams); |
|
|
|
} |
|
|
|
|
|
|
|
public List<MultipleDeviceDataVO> getMultipleDeviceData(ReadQueryParams readQueryParams) { |
|
|
|
String[] DEVICE_CODE_ARR = new String[]{"00011","00053","00054","00050","00055","00051","00052","00059","00056","00057","00022","00023","00024","00009","00058","00026","00029","00030","00031","00032","00044","00013","00007","00017","00046","00042","00019","00016","00001","00028","00045","00021","00010","00041","00015","00014","00005","00006","00002","00003","00004","00008","00018","00027","00043","00020","00040"}; |
|
|
|
String[] PARAM_CODE_ARR = new String[]{"007", "009", "011", "012", "013", "014", "045", "046", "047", "048", "028", "029"}; |
|
|
|
readQueryParams.setParamCodes(Arrays.asList(PARAM_CODE_ARR)); |
|
|
|
readQueryParams.setDeviceCodes(Arrays.asList(DEVICE_CODE_ARR)); |
|
|
|
Class<MultipleDeviceDataVO> clazz = MultipleDeviceDataVO.class; |
|
|
|
Field[] fields = clazz.getDeclaredFields(); |
|
|
|
List<MultipleDeviceDataVO> list = new ArrayList<>(); |
|
|
|
List<WorkDataDTO> workDataDTOS = baseMapper.readWorkData(readQueryParams); |
|
|
|
if (!CollectionUtils.isEmpty(workDataDTOS)) { |
|
|
|
Map<Date, List<WorkDataDTO>> timeMap = workDataDTOS.stream().collect(Collectors.groupingBy(WorkDataDTO::getThour)); |
|
|
|
timeMap.forEach((key, value) -> { |
|
|
|
Map<String, List<WorkDataDTO>> deviceMap = value.stream().collect(Collectors.groupingBy(WorkDataDTO::getDeviceCode)); |
|
|
|
for (String deviceCode : DEVICE_CODE_ARR) { |
|
|
|
if (deviceMap.containsKey(deviceCode)) { |
|
|
|
List<WorkDataDTO> workDataDTOList = deviceMap.get(deviceCode); |
|
|
|
Map<String, List<WorkDataDTO>> partionMap = workDataDTOList.stream().collect(Collectors.groupingBy(WorkDataDTO::getPartion)); |
|
|
|
partionMap.forEach((p, l) -> { |
|
|
|
Map<String, List<WorkDataDTO>> paramModelMap = l.stream().collect(Collectors.groupingBy(WorkDataDTO::getParamModelId)); |
|
|
|
MultipleDeviceDataVO multipleDeviceDataVO = new MultipleDeviceDataVO(); |
|
|
|
multipleDeviceDataVO.setThour(key); |
|
|
|
multipleDeviceDataVO.setDeviceName(deviceMap.get(deviceCode).get(0).getDeviceName()); |
|
|
|
multipleDeviceDataVO.setPartion(p); |
|
|
|
for (int i = 0, len = PARAM_CODE_ARR.length; i < len; i++) { |
|
|
|
try { |
|
|
|
if (!fields[i].isAccessible()) { |
|
|
|
fields[i].setAccessible(true); |
|
|
|
} |
|
|
|
List<WorkDataDTO> workDataDTOList1 = paramModelMap.get(PARAM_CODE_ARR[i]); |
|
|
|
if (!CollectionUtils.isEmpty(workDataDTOList1)) { |
|
|
|
WorkDataDTO workDataDTO1 = workDataDTOList1.get(0); |
|
|
|
Double v = 0D; |
|
|
|
if (i == 1) { |
|
|
|
if (null != workDataDTO1.getLastVal()) { |
|
|
|
v = workDataDTO1.getLastVal(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (null != workDataDTO1.getTotal() && null != workDataDTO1.getCountsZero()) { |
|
|
|
v = workDataDTO1.getTotal() / workDataDTO1.getCountsZero(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (null != v && !Double.isNaN(v)) { |
|
|
|
v = BigDecimal.valueOf(v).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); |
|
|
|
fields[i].set(multipleDeviceDataVO, v); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (IllegalAccessException e) { |
|
|
|
throw new RuntimeException(e); |
|
|
|
} |
|
|
|
} |
|
|
|
list.add(multipleDeviceDataVO); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
return list; |
|
|
|
} |
|
|
|
|
|
|
|
public List<DaTangGuanJingDataVO> getDaTangGuanJingDataVO(ReadQueryParams readQueryParams) { |
|
|
|
String[] DEVICE_CODE_ARR = new String[]{"00033"}; |
|
|
|
String[] PARAM_CODE_ARR = new String[]{"007", "009", "011", "012", "013", "014", "049", "054", "030", "031", "028", "029"}; |
|
|
|
readQueryParams.setParamCodes(Arrays.asList(PARAM_CODE_ARR)); |
|
|
|
readQueryParams.setDeviceCodes(Arrays.asList(DEVICE_CODE_ARR)); |
|
|
|
Class<DaTangGuanJingDataVO> clazz = DaTangGuanJingDataVO.class; |
|
|
|
Field[] fields = clazz.getDeclaredFields(); |
|
|
|
List<DaTangGuanJingDataVO> list = new ArrayList<>(); |
|
|
|
List<WorkDataDTO> workDataDTOS = baseMapper.readWorkData(readQueryParams); |
|
|
|
if (!CollectionUtils.isEmpty(workDataDTOS)) { |
|
|
|
Map<Date, List<WorkDataDTO>> timeMap = workDataDTOS.stream().collect(Collectors.groupingBy(WorkDataDTO::getThour)); |
|
|
|
timeMap.forEach((key, value) -> { |
|
|
|
Map<String, List<WorkDataDTO>> deviceMap = value.stream().collect(Collectors.groupingBy(WorkDataDTO::getDeviceCode)); |
|
|
|
for (String deviceCode : DEVICE_CODE_ARR) { |
|
|
|
if (deviceMap.containsKey(deviceCode)) { |
|
|
|
List<WorkDataDTO> workDataDTOList = deviceMap.get(deviceCode); |
|
|
|
Map<String, List<WorkDataDTO>> partionMap = workDataDTOList.stream().collect(Collectors.groupingBy(WorkDataDTO::getPartion)); |
|
|
|
partionMap.forEach((p, l) -> { |
|
|
|
Map<String, List<WorkDataDTO>> paramModelMap = l.stream().collect(Collectors.groupingBy(WorkDataDTO::getParamModelId)); |
|
|
|
DaTangGuanJingDataVO daTangGuanJingDataVO = new DaTangGuanJingDataVO(); |
|
|
|
daTangGuanJingDataVO.setThour(key); |
|
|
|
daTangGuanJingDataVO.setDeviceName(deviceMap.get(deviceCode).get(0).getDeviceName()); |
|
|
|
daTangGuanJingDataVO.setPartion(p); |
|
|
|
for (int i = 0, len = PARAM_CODE_ARR.length; i < len; i++) { |
|
|
|
try { |
|
|
|
if (!fields[i].isAccessible()) { |
|
|
|
fields[i].setAccessible(true); |
|
|
|
} |
|
|
|
List<WorkDataDTO> workDataDTOList1 = paramModelMap.get(PARAM_CODE_ARR[i]); |
|
|
|
if (!CollectionUtils.isEmpty(workDataDTOList1)) { |
|
|
|
WorkDataDTO workDataDTO1 = workDataDTOList1.get(0); |
|
|
|
Double v = 0D; |
|
|
|
if (i == 1) { |
|
|
|
if (null != workDataDTO1.getLastVal()) { |
|
|
|
v = workDataDTO1.getLastVal(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (null != workDataDTO1.getTotal() && null != workDataDTO1.getCountsZero()) { |
|
|
|
v = workDataDTO1.getTotal() / workDataDTO1.getCountsZero(); |
|
|
|
} |
|
|
|
} |
|
|
|
if (null != v && !Double.isNaN(v)) { |
|
|
|
v = BigDecimal.valueOf(v).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); |
|
|
|
fields[i].set(daTangGuanJingDataVO, v); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (IllegalAccessException e) { |
|
|
|
throw new RuntimeException(e); |
|
|
|
} |
|
|
|
} |
|
|
|
list.add(daTangGuanJingDataVO); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
return list; |
|
|
|
} |
|
|
|
|
|
|
|
public List<ThourWeatherVO> getThourWeather(ReadQueryParams readQueryParams) { |
|
|
|
return baseMapper.getThourWeather(readQueryParams); |
|
|
|
} |
|
|
|
} |
|
|
|