package org.jeecg.modules.mdc.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import org.apache.commons.lang3.StringUtils;
|
import org.jeecg.modules.mdc.dto.EquipmentMachingDto;
|
import org.jeecg.modules.mdc.entity.MdcDriveTypeParamConfig;
|
import org.jeecg.modules.mdc.entity.MdcEquipment;
|
import org.jeecg.modules.mdc.mapper.EquipmentWorklineMapper;
|
import org.jeecg.modules.mdc.service.IMdcDriveTypeParamConfigService;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentWorkLineService;
|
import org.jeecg.modules.mdc.util.DateUtils;
|
import org.jeecg.modules.mdc.vo.MdcWorkChartVo;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author: LiuS
|
* @create: 2023-04-20 17:32
|
*/
|
@Service
|
public class MdcEquipmentWorkLineServiceImpl implements IMdcEquipmentWorkLineService {
|
|
@Resource
|
private IMdcEquipmentService mdcEquipmentService;
|
|
@Resource
|
private IMdcDriveTypeParamConfigService mdcDriveTypeParamConfigService;
|
|
@Resource
|
private EquipmentWorklineMapper equipmentWorklineMapper;
|
|
/**
|
* 查找指定日期的数据
|
*/
|
@Override
|
public List<EquipmentMachingDto> getWorkLineList(MdcWorkChartVo mdcWorkChartVo) {
|
|
Date startTime = DateUtils.toDateMedium(mdcWorkChartVo.getDate() + " " + mdcWorkChartVo.getStart() + ":00");
|
Date endTime;
|
if ("00:00".equals(mdcWorkChartVo.getStart()) && "23:59".equals(mdcWorkChartVo.getEnd())) {
|
endTime = DateUtils.plusTime(startTime, 1);
|
} else {
|
endTime = DateUtils.toDateMedium(mdcWorkChartVo.getDate() + " " + mdcWorkChartVo.getEnd() + ":00");
|
}
|
|
if (startTime != null && endTime != null && (startTime.getTime() > endTime.getTime() || startTime.getTime() > new Date().getTime())) {
|
return Collections.emptyList();
|
}
|
MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, mdcWorkChartVo.getEquipmentId()));
|
if (mdcEquipment == null) {
|
return null;
|
}
|
mdcWorkChartVo.setDriveType(mdcEquipment.getDriveType());
|
String saveTableName = mdcEquipment.getSaveTableName();
|
if (StringUtils.isBlank(saveTableName)) {
|
return null;
|
}
|
List<MdcDriveTypeParamConfig> mdcDriveTypeParamConfigs = mdcDriveTypeParamConfigService.getByTypeCodeMdcShowCode(mdcWorkChartVo.getCodeTypeId());
|
if (mdcDriveTypeParamConfigs == null || mdcDriveTypeParamConfigs.isEmpty()) {
|
return null;
|
}
|
List<EquipmentMachingDto> result = this.getWorkLineList(saveTableName, mdcDriveTypeParamConfigs, mdcWorkChartVo, startTime, endTime);
|
if (result == null || result.isEmpty()) {
|
return null;
|
}
|
Map<Date, List<EquipmentMachingDto>> listMap = new HashMap<>();
|
int intervalLen = (int) (endTime.getTime() - startTime.getTime());
|
int size = intervalLen / (mdcWorkChartVo.getInterval() * 1000);
|
Date index;
|
|
List<EquipmentMachingDto> datalist;
|
for (int i = 0; i < size; i++) {
|
index = DateUtils.addSecond(startTime, i * mdcWorkChartVo.getInterval());
|
listMap.put(index, new ArrayList<>());
|
}
|
for (EquipmentMachingDto equipData : result) {
|
for (int i = 0; i < size; i++) {
|
index = DateUtils.addSecond(startTime, i * mdcWorkChartVo.getInterval());
|
Date endIndex = DateUtils.addSecond(startTime, (i + 1) * mdcWorkChartVo.getInterval());
|
result = listMap.get(index);
|
if (equipData.getCollectTime().getTime() >= index.getTime() && equipData.getCollectTime().getTime() < endIndex.getTime()) {
|
result.add(equipData);
|
} else if (equipData.getCollectTime().getTime() < index.getTime()) {
|
break;
|
} else {
|
continue;
|
}
|
}
|
}
|
List<EquipmentMachingDto> resultList = new ArrayList<>();
|
for (Date date : listMap.keySet()) {
|
datalist = listMap.get(date);
|
if (!datalist.isEmpty()) {
|
resultList.add(datalist.get(0));
|
}
|
}
|
resultList = resultList.stream().sorted(Comparator.comparing(EquipmentMachingDto::getCollectTime)).collect(Collectors.toList());
|
return resultList;
|
}
|
|
private List<EquipmentMachingDto> getWorkLineList(String saveTableName, List<MdcDriveTypeParamConfig> mdcDriveTypeParamConfigs, MdcWorkChartVo mdcWorkChartVo, Date startTime, Date endTime) {
|
if (org.apache.commons.lang.StringUtils.isNotBlank(mdcWorkChartVo.getDriveType())) {
|
StringBuilder builder = new StringBuilder();
|
//待优化
|
if ("FANUC".equals(mdcWorkChartVo.getDriveType()) || "SIEMENS840D".equals(mdcWorkChartVo.getDriveType())) {
|
Map<String, Object> param = new HashMap<>();
|
param.put("columns", ",spindlespeed,spindleload,spindlebeilv,feedrate,feedbeilv");
|
param.put("tableName", saveTableName);
|
param.put("startTime", startTime);
|
param.put("endTime", endTime);
|
List<Map<String, Object>> list = equipmentWorklineMapper.getWorkLineList(param);
|
return convertData(list);
|
} else {
|
for (MdcDriveTypeParamConfig param : mdcDriveTypeParamConfigs) {
|
builder.append(",").append(param.getEnglishName()).append(" as \"").append(param.getEnglishName()).append("\" ");
|
}
|
Map<String, Object> param = new HashMap<>();
|
param.put("columns", builder.toString());
|
param.put("tableName", saveTableName);
|
param.put("startTime", startTime);
|
param.put("endTime", endTime);
|
List<Map<String, Object>> list = equipmentWorklineMapper.getWorkLineList(param);
|
return convertDataList(list, mdcDriveTypeParamConfigs);
|
}
|
}
|
return Collections.emptyList();
|
}
|
|
private List<EquipmentMachingDto> convertDataList(List<Map<String, Object>> list, List<MdcDriveTypeParamConfig> collentParams) {
|
List<EquipmentMachingDto> dto = new ArrayList<>();
|
EquipmentMachingDto ei = null;
|
for (Map<String, Object> map : list) {
|
ei = new EquipmentMachingDto();
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
|
try {
|
if (map.get("CollectTime") != null) {
|
ei.setCollectTime(df.parse(map.get("CollectTime").toString()));
|
}
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
for (int i = 1; i <= collentParams.size(); i++) {
|
try {
|
switch (i) {
|
case 1:
|
ei.setDataLine1(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
case 2:
|
ei.setDataLine2(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
case 3:
|
ei.setDataLine3(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
case 4:
|
ei.setDataLine4(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
case 5:
|
ei.setDataLine5(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
case 6:
|
ei.setDataLine6(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
case 7:
|
ei.setDataLine7(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
case 8:
|
ei.setDataLine8(map.get(collentParams.get(i - 1).getEnglishName()) == null ? null : map.get(collentParams.get(i - 1).getEnglishName()).toString());
|
break;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
dto.add(ei);
|
}
|
if (dto.isEmpty()) {
|
return Collections.emptyList();
|
}
|
return dto;
|
}
|
|
private List<EquipmentMachingDto> convertData(List<Map<String, Object>> list) {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
|
List<EquipmentMachingDto> dto = new ArrayList<>();
|
EquipmentMachingDto ei = null;
|
for (Map<String, Object> map : list) {
|
ei = new EquipmentMachingDto();
|
try {
|
if (map.get("CollectTime") != null) {
|
ei.setCollectTime(df.parse(map.get("CollectTime").toString()));
|
}
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
ei.setSpindlespeed(map.get("spindlespeed") == null ? null : map.get("spindlespeed").toString());
|
ei.setSpindleload(map.get("spindleload") == null ? null : map.get("spindleload").toString());
|
ei.setSpindlebeilv(map.get("spindlebeilv") == null ? null : map.get("spindlebeilv").toString());
|
ei.setFeedrate(map.get("feedrate") == null ? null : map.get("feedrate").toString());
|
ei.setFeedbeilv(map.get("feedbeilv") == null ? null : map.get("feedbeilv").toString());
|
ei.setProgramnumber(map.get("Programnumber") == null ? null : map.get("Programnumber").toString());
|
ei.setSequencenumber(map.get("Sequencenumber") == null ? null : map.get("Sequencenumber").toString());
|
ei.setExecutingcode(map.get("executingcode") == null ? null : map.get("executingcode").toString());
|
ei.setProductName(map.get("ProductName") == null ? null : map.get("ProductName").toString());
|
dto.add(ei);
|
}
|
if (dto.isEmpty()) {
|
return Collections.emptyList();
|
}
|
|
return dto;
|
}
|
}
|