package com.qianwen.mdc.service; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.List; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qianwen.mdc.domain.Machine; import com.qianwen.mdc.domain.MachineAccount; import com.qianwen.mdc.domain.MachineStatus; import com.qianwen.mdc.domain.MachineStatusHistory; import com.qianwen.mdc.domain.MachineUtilization; import com.qianwen.mdc.domain.Section; import com.qianwen.mdc.domain.workshop.Workshop; import com.qianwen.mdc.mapper.MachineAccountMapper; import com.qianwen.mdc.mapper.MachineMapper; import com.qianwen.mdc.mapper.MachineStatusHistoryMapper; import com.qianwen.mdc.mapper.MachineStatusMapper; import com.qianwen.mdc.mapper.MdcUtilizationMapper; import com.qianwen.mdc.mapper.SectionMapper; import com.qianwen.mdc.mapper.WorkshopMapper; import com.qianwen.mdc.utils.TimestampUtil; /** * 数据归档服务,将 machine_status 数据导入machine_status_history表,并加入最新的machine_status数据 */ @Component @Async public class MdcDataArchiveService { @Autowired private MachineMapper machineMapper; @Autowired private WorkshopMapper workshopMapper; @Autowired private SectionMapper sectionMapper; @Autowired private MachineStatusMapper machineStatusMapper; @Autowired private MachineStatusHistoryMapper machineStatusHistoryMapper; @Autowired private MachineAccountMapper machineAccountMapper; @Autowired private MdcUtilizationMapper mdcUtilizationMapper; @Scheduled(cron = "0 10 8 * * ?") public void dataArchive() { int dayStart = (int) TimestampUtil.getShiftDayStartTimestamp(); /* Example statusExample = new Example(MdcMachineStatus.class); statusExample.createCriteria().andLessThan("time", dayStart); List mdcMachineStatusList = mdcMachineStatusMapper.selectByExample(statusExample); */ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.lt(MachineStatus::getTime, dayStart); List machineStatusList = machineStatusMapper.selectList(wrapper); for (MachineStatus status : machineStatusList) { MachineStatusHistory statusHistory = new MachineStatusHistory(); BeanUtils.copyProperties(status, statusHistory); statusHistory.setId(null); machineStatusHistoryMapper.insert(statusHistory); machineStatusMapper.deleteById(status.getId()); MachineUtilization mdcUtilization = new MachineUtilization(); mdcUtilization.setId(null); /* Example accountExample = new Example(MdcMachineAccount.class); accountExample.setOrderByClause("id desc"); accountExample.createCriteria().andEqualTo("machineId", status.getMachineId()); RowBounds rowBounds = new RowBounds(0, 1); List list = mdcMachineAccountMapper.selectByExampleAndRowBounds(accountExample, rowBounds); */ QueryWrapper wrapperAcc = Wrappers.query(); wrapperAcc.eq("machine_id", status.getMachineId()); wrapperAcc.orderByDesc("id"); //List list = mdcMachineAccountMapper.selectList(wrapperAcc); List list = machineAccountMapper.lastByMachineId(status.getMachineId()); if (list.isEmpty()) { continue; } MachineAccount account = list.get(0); //统计利用率数据并入库 mdcUtilization.setUid(account.getUuid()); mdcUtilization.setName(account.getCategory()); //mdcUtilization.setModel(account.getModel()); //TODO 设备类型??如果是,就是mdcUtilization.setModel(account.getType()); //mdcUtilization.setCategory(account.getType()); mdcUtilization.setModel(account.getType()); mdcUtilization.setCategory(account.getCategory()); mdcUtilization.setCncSystem(account.getCncSystem()); Machine machine = machineMapper.selectById(status.getMachineId()); Workshop workshop = workshopMapper.selectById(machine.getWorkshopId()); Section section = sectionMapper.selectById(machine.getSectionId()); if(workshop != null) { mdcUtilization.setWorkshop(workshop.getName()); } if(section != null) { mdcUtilization.setSection(section.getName()); } mdcUtilization.setShift(machine.getShiftType()); DateFormat df = new SimpleDateFormat("yyyyMMdd"); mdcUtilization.setCdate(df.format((long) status.getTime() * 1000)); //mdcUtilization.setCutTime(Integer.valueOf(status.getVar2())); mdcUtilization.setCutTime(status.getCycleTime()); //mdcUtilization.setBootTime(Integer.valueOf(status.getVar3())); mdcUtilization.setBootTime(status.getMachineOnTime()); String downTime = status.getVar8(); if ("".equals(downTime)) { mdcUtilization.setDownTime(0); } else { mdcUtilization.setDownTime(Integer.valueOf(status.getVar8())); } mdcUtilization.setThreeShiftTime(3600 * 21); mdcUtilization.setTwoShiftTime((int) (3600 * 15.5)); mdcUtilization.setFactory(2); mdcUtilizationMapper.insert(mdcUtilization); } } }