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 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().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 mdcDriveTypeParamConfigs = mdcDriveTypeParamConfigService.getByTypeCodeMdcShowCode(mdcWorkChartVo.getCodeTypeId()); if (mdcDriveTypeParamConfigs == null || mdcDriveTypeParamConfigs.isEmpty()) { return null; } List result = this.getWorkLineList(saveTableName, mdcDriveTypeParamConfigs, mdcWorkChartVo, startTime, endTime); if (result == null || result.isEmpty()) { return null; } Map> listMap = new HashMap<>(); int intervalLen = (int) (endTime.getTime() - startTime.getTime()); int size = intervalLen / (mdcWorkChartVo.getInterval() * 1000); Date index; List 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 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 getWorkLineList(String saveTableName, List 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 param = new HashMap<>(); param.put("columns", ",spindlespeed,spindleload,spindlebeilv,feedrate,feedbeilv"); param.put("tableName", saveTableName); param.put("startTime", startTime); param.put("endTime", endTime); List> list = equipmentWorklineMapper.getWorkLineList(param); return convertData(list); } else { for (MdcDriveTypeParamConfig param : mdcDriveTypeParamConfigs) { builder.append(",").append(param.getEnglishName()).append(" as \"").append(param.getEnglishName()).append("\" "); } Map param = new HashMap<>(); param.put("columns", builder.toString()); param.put("tableName", saveTableName); param.put("startTime", startTime); param.put("endTime", endTime); List> list = equipmentWorklineMapper.getWorkLineList(param); return convertDataList(list, mdcDriveTypeParamConfigs); } } return Collections.emptyList(); } private List convertDataList(List> list, List collentParams) { List dto = new ArrayList<>(); EquipmentMachingDto ei = null; for (Map 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 convertData(List> list) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); List dto = new ArrayList<>(); EquipmentMachingDto ei = null; for (Map 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; } }