Commit 08cbf091 authored by 喻训浩's avatar 喻训浩

fix: 数据清洗与运行时间计算分离

parent 44e05286
package net.vtstar.zhongtong.avi.equipment.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.scada.base.equipmgt.domain.Enum.EquipStatusEnum;
import net.vtstar.scada.base.equipmgt.service.EquipDataService;
import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.scada.base.redis.service.SimpleRedisService;
import net.vtstar.scada.base.redis.util.EquipDataUtil;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord;
import net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper;
import net.vtstar.zhongtong.avi.equipment.service.RunRecordService;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
......@@ -24,16 +16,13 @@ import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
@Slf4j
@Component
@DisallowConcurrentExecution
public class CleanAndStatisticsJob extends QuartzJobBean {
public class CleanStatusDataJob extends QuartzJobBean {
@Resource(name = "redisTemplate")
......@@ -43,15 +32,8 @@ public class CleanAndStatisticsJob extends QuartzJobBean {
@Autowired
private SimpleRedisService simpleRedisService;
@Autowired
private RunRecordService runRecordService;
@Autowired
private RuntimeRecordMapper runtimeRecordMapper;
@Autowired
private BasicInfoMapper basicInfoMapper;
@Autowired
private EquipmentDataMapper equipmentDataMapper;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
......@@ -76,7 +58,6 @@ public class CleanAndStatisticsJob extends QuartzJobBean {
EquipmentData last = equipDataService.getLast(equipCode);
final EquipmentData first = last;
int index = 1;
long totalRuntime = 0;
for (int i = 0; i < dataList.size(); i++) {
if (last == null) {
......@@ -100,12 +81,6 @@ public class CleanAndStatisticsJob extends QuartzJobBean {
// 保存
equipDataService.save(last);
}
//计算累计运行时间
if (last.getEquipStatus().equals(EquipStatusEnum.RUN)) {
long runtime = last.getEndTime().getTime() - last.getBeginTime().getTime();
totalRuntime += runtime;
}
last = d;
index++;
}
......@@ -117,25 +92,6 @@ public class CleanAndStatisticsJob extends QuartzJobBean {
equipDataService.save(last);
}
RuntimeRecord lastRecord = runRecordService.getLastByCode(equipCode);
RuntimeRecord runtimeRecord = new RuntimeRecord();
runtimeRecord.setCreateTime(new Date());
BigDecimal hours = new BigDecimal(totalRuntime).divide(new BigDecimal(3600000), 4, BigDecimal.ROUND_HALF_UP);
runtimeRecord.setCurrentRuntime(hours);
BigDecimal total = BigDecimal.ZERO;
if (null != lastRecord) {
total = lastRecord.getTotalRuntime();
}
runtimeRecord.setTotalRuntime(total.add(hours));
List<EquipInfo> list = basicInfoMapper.findList(new WhereFilter() {{
addFilter(EquipInfo.class, "equip_code", Operation.EQUAL, equipCode);
}}, EquipInfo.class);
EquipInfo eqp = list.get(0);
runtimeRecord.setMachineId(eqp.getId());
runtimeRecord.setWorkshopCode(eqp.getWorkshopCode());
List<RuntimeRecord> records = new ArrayList<>();
records.add(runtimeRecord);
runtimeRecordMapper.insertLists(records);
}
}
}
package net.vtstar.zhongtong.avi.equipment.job;
import lombok.extern.slf4j.Slf4j;
import net.vtstar.zhongtong.avi.equipment.mapper.EquipmentDataMapper;
import net.vtstar.scada.base.equipmgt.service.EquipDataService;
import net.vtstar.scada.base.gather.domain.EquipmentData;
import net.vtstar.user.mybatis.provider.Operation;
import net.vtstar.user.mybatis.provider.WhereFilter;
import net.vtstar.zhongtong.avi.equipment.domain.EquipInfo;
import net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord;
import net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper;
import net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper;
import net.vtstar.zhongtong.avi.equipment.service.RunRecordService;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
......@@ -15,12 +30,56 @@ import org.springframework.scheduling.quartz.QuartzJobBean;
public class StatisticsTimeJob extends QuartzJobBean {
@Autowired
private EquipmentDataMapper equipmentDataMapper;
private EquipDataService equipDataService;
@Autowired
private RunRecordService runRecordService;
@Autowired
private BasicInfoMapper basicInfoMapper;
@Autowired
private RuntimeRecordMapper runtimeRecordMapper;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.DATE, -1);
Date yesterday = instance.getTime();
//查询今日设备所有运行状态数据
//拿到所有设备
List<EquipInfo> equipInfo = basicInfoMapper.findList(new WhereFilter(),EquipInfo.class);
for (EquipInfo info : equipInfo) {
String equipCode = info.getEquipCode();
long totalRuntime = 0;
//查询今日设备所有运行状态数据
List<EquipmentData> runData = equipDataService.findRunByCodeAndDate(equipCode, yesterday);
if (CollectionUtils.isEmpty(runData)) {
continue;
}
//计算运行时间
for (EquipmentData data : runData) {
long runtime = data.getEndTime().getTime() - data.getBeginTime().getTime();
totalRuntime += runtime;
}
//生成运行时间记录
RuntimeRecord lastRecord = runRecordService.getLastByCode(equipCode);
RuntimeRecord runtimeRecord = new RuntimeRecord();
runtimeRecord.setCreateTime(new Date());
BigDecimal hours = new BigDecimal(totalRuntime).divide(new BigDecimal(3600000), 4, BigDecimal.ROUND_HALF_UP);
runtimeRecord.setCurrentRuntime(hours);
BigDecimal total = BigDecimal.ZERO;
if (null != lastRecord) {
total = lastRecord.getTotalRuntime();
}
runtimeRecord.setTotalRuntime(total.add(hours));
List<EquipInfo> list = basicInfoMapper.findList(new WhereFilter() {{
addFilter(EquipInfo.class, "equip_code", Operation.EQUAL, equipCode);
}}, EquipInfo.class);
EquipInfo eqp = list.get(0);
runtimeRecord.setMachineId(eqp.getId());
runtimeRecord.setWorkshopCode(eqp.getWorkshopCode());
List<RuntimeRecord> records = new ArrayList<>();
records.add(runtimeRecord);
runtimeRecordMapper.insertLists(records);
}
}
}
......@@ -26,13 +26,19 @@ quartz.job.taskInfos[0].jobDescription=\u5C01\u88C5\u7EBF\u9884\u710A\u673A\u657
quartz.job.taskInfos[0].cronExpression=0/10 * * * * ?
quartz.job.taskInfos[0].start=false
quartz.job.taskInfos[1].jobName=net.vtstar.zhongtong.avi.equipment.job.CleanAndStatisticsJob
quartz.job.taskInfos[1].jobGroup=CleanAndStatisticsJob
quartz.job.taskInfos[1].jobName=net.vtstar.zhongtong.avi.equipment.job.CleanStatusDataJob
quartz.job.taskInfos[1].jobGroup=CleanStatusDataJob
quartz.job.taskInfos[1].jobDescription=\u6E05\u6D17\u8BBE\u5907\u72B6\u6001Job
#quartz.job.taskInfos[1].cronExpression=0 0 0 * * ?
quartz.job.taskInfos[1].cronExpression=0 0/1 * * * ?
quartz.job.taskInfos[1].start=false
quartz.job.taskInfos[2].jobName=net.vtstar.zhongtong.avi.equipment.job.StatisticsTimeJob
quartz.job.taskInfos[2].jobGroup=StatisticsTimeJob
quartz.job.taskInfos[2].jobDescription=\u8ba1\u7b97\u8fd0\u884c\u65f6\u95f4Job
quartz.job.taskInfos[2].cronExpression=0 0 1 * * ?
quartz.job.taskInfos[2].start=false
#quartz.job.taskInfos[2].jobName=net.vtstar.scada.base.equipmgt.job.CleanEquipStatusJob
#quartz.job.taskInfos[2].jobGroup=CleanEquipStatusJob
#quartz.job.taskInfos[2].jobDescription=\u6E05\u6D17\u8BBE\u5907\u72B6\u6001Job
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment