package org.jeecg.modules.mdc.job; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.mdc.dto.CurrentElectricDto; import org.jeecg.modules.mdc.dto.EquipmentMachiningHistoryDto; import org.jeecg.modules.mdc.dto.MachineXYZHistoryDto; import org.jeecg.modules.mdc.entity.Equipment; import org.jeecg.modules.mdc.entity.EquipmentElectricStatistical; import org.jeecg.modules.mdc.service.*; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.entity.SysQuartzLog; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.jeecg.modules.quartz.service.ISysQuartzLogService; import org.jeecg.modules.system.service.ISysAnnouncementService; import org.jeecg.modules.system.service.ISysDictService; import org.quartz.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 设备运行最大电流统计 * * @author Lius * @date 2024/7/18 15:59 */ @PersistJobDataAfterExecution @DisallowConcurrentExecution @Slf4j public class StatisticalElectricJob implements Job { @Resource private IQuartzJobService quartzJobService; @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private ISysAnnouncementService sysAnnouncementService; @Resource private IEquipmentService equipmentService; @Resource private ISysDictService sysDictService; @Resource private IEquipmentElectricStatisticalService equipmentElectricStatisticalService; @Resource private IEquipmentWorkLineService equipmentWorkLineService; @Resource private IEquipmentXYZService equipmentXYZService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } log.info("设备运行最大电流统计 StatisticalElectricJob start! 时间:" + DateUtils.getNow()); long startTime = System.currentTimeMillis(); try { List equipmentList = equipmentService.list(); if (equipmentList != null && !equipmentList.isEmpty()) { Date initDate = null; EquipmentElectricStatistical electricStatistical; List resultList = new ArrayList<>(); List dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.AXIS_TYPE); if (dictList != null && !dictList.isEmpty()) { for (Equipment equipment : equipmentList) { if (equipment.getDrivetype().equals("SIEMENSOpcUa")) { String saveTableName = equipment.getSavetablename(); Date lastDate = equipmentElectricStatisticalService.getMaxDate(equipment.getEquipmentid()); if (lastDate == null) { Date minCollectTime = equipmentWorkLineService.getMinDate(saveTableName); if (minCollectTime == null) { continue; } initDate = DateUtils.removeTime(minCollectTime); } else { initDate = DateUtils.plusTime(lastDate, 1); } for (DictModel dictModel : dictList) { electricStatistical = new EquipmentElectricStatistical(); Integer axisType = Integer.parseInt(dictModel.getValue()); CurrentElectricDto currentElectricDto = equipmentWorkLineService.getMaxElectric(saveTableName, axisType, initDate, DateUtils.plusTime(initDate, 1)); if (currentElectricDto == null) { continue; } electricStatistical.setAxistype(axisType); electricStatistical.setEquipmentid(equipment.getEquipmentid()); electricStatistical.setEquipmentname(equipment.getEquipmentname()); electricStatistical.setElectrictime(currentElectricDto.getCollectTime()); electricStatistical.setElectricvalue(currentElectricDto.getCurrentValue()); electricStatistical.setCreatedate(initDate); EquipmentMachiningHistoryDto machiningHistoryDto = equipmentWorkLineService.getNearTimeSpindleLoad(saveTableName, initDate, DateUtils.plusTime(initDate, 1), currentElectricDto.getCollectTime()); if (machiningHistoryDto != null) { electricStatistical.setSpindlespeed(machiningHistoryDto.getSpindleSpeed()); electricStatistical.setSpindleload(machiningHistoryDto.getSpindleLoad()); electricStatistical.setSpindletime(machiningHistoryDto.getCollectTime()); } MachineXYZHistoryDto machineXYZHistoryDto = equipmentXYZService.getNearAxisType(equipment.getEquipmentid(), initDate, DateUtils.plusTime(initDate, 1), currentElectricDto.getCollectTime()); if (machineXYZHistoryDto != null) { electricStatistical.setAxistime(machineXYZHistoryDto.getCollectTime()); if (axisType == 1) { electricStatistical.setAxisvalue(machineXYZHistoryDto.getXMachine()); } else if (axisType == 2) { electricStatistical.setAxisvalue(machineXYZHistoryDto.getYMachine()); } else if (axisType == 3) { electricStatistical.setAxisvalue(machineXYZHistoryDto.getZMachine()); } else if (axisType == 4) { electricStatistical.setAxisvalue(machineXYZHistoryDto.getAMachine()); } else if (axisType == 5) { electricStatistical.setAxisvalue(machineXYZHistoryDto.getBMachine()); } } resultList.add(electricStatistical); } } } } if(!resultList.isEmpty()) { equipmentElectricStatisticalService.saveBatch(resultList); } } quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); // 发送消息通知 sysAnnouncementService.jobSendMessage("设备运行最大电流统计", quartzLog.getExceptionDetail()); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } }