package com.yssh.service.impl; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import com.yssh.dao.QxshMapper; import com.yssh.entity.*; import com.yssh.utils.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.google.common.collect.Lists; import com.yssh.dao.DictRecordMapper; import com.yssh.dao.FeedbackMapper; import com.yssh.dao.SuYuanMapper; import com.yssh.service.IAsyncService; import com.yssh.service.ICommonService; import com.yssh.service.ISuYuanService; import javax.annotation.Resource; @Service public class SuYuanServiceImpl implements ISuYuanService { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @Resource private SuYuanMapper suYuanMapper; @Resource private IAsyncService asyncService; @Resource private DictRecordMapper dictRecordMapper; @Resource private ICommonService commonService; @Resource private FeedbackMapper feedbackMapper; @Resource private QxshMapper qxshMapper; private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHH"); //@Transactional //@Override @Async("threadPoolTaskExecutor") public void insertSuYuanDatasAsync(List lists, String time) throws Exception { //插入数据 List> list = Lists.partition(lists, IAsyncService.BATCH_INSERT_NUMBER); CountDownLatch countDownLatch = new CountDownLatch(list.size()); for (List corpReserveList : list) { asyncService.executeAsync(TableStrategy.getTableStrategy(time), corpReserveList, suYuanMapper, countDownLatch); } countDownLatch.await(); logger.info(lists.size() + "条数据入库完成-----"); } @Override public void insertSuYuanDatas(List lists, String time) { List> subLists = Lists.partition(lists, IAsyncService.BATCH_INSERT_NUMBER); for (List sub : subLists) { suYuanMapper.batchInsert(TableStrategy.getTableStrategy(time), sub); } logger.info("------ " + time + ".csv," + lists.size() + " 条数据已入库 ------"); } @Override public Integer isTableExists(String tableName) { return suYuanMapper.isTableExists(tableName); } @Override public int createNewTable(String tableName) { return suYuanMapper.createTable(tableName); } @Override public List selectSuYuan2d(Date date) { String time = DateUtils.parseDateToStr(DateUtils.YYYYMMDDHH, date); List ids2d = CalculateUtils.assembleId(commonService.getCheckPoints2d()); DictRecord dictRecord = dictRecordMapper.selectByCreateTime(Long.parseLong(time)); if (StringUtils.isNull(dictRecord)) { return null; } return suYuanMapper.get2d(dictRecord.getTableName(), ids2d); } @Override public List selectSuYuan3d(String name, Date date) { MonitorPointPosition checkPoint = commonService.select3dCheckPointByName(name); if (StringUtils.isNull(checkPoint)) { return null; } int range = 10; String time = DateUtils.parseDateToStr(DateUtils.YYYYMMDDHH, date); List ids3d = CalculateUtils.aloneCrosswiseExtend(checkPoint, range); DictRecord dictRecord = dictRecordMapper.selectByCreateTime(Long.parseLong(time)); if (StringUtils.isNull(dictRecord)) { return null; } return suYuanMapper.get3d(dictRecord.getTableName(), ids3d); } @Override public Map selectSuYuan100(String name, Date date) { Map result = new HashMap(); MonitorPointPosition checkPoint = commonService.select3dCheckPointByName(name); if (StringUtils.isNull(checkPoint)) { return null; } int range = 10; String time = DateUtils.parseDateToStr(DateUtils.YYYYMMDDHH, date); List ids3d = CalculateUtils.aloneCrosswiseExtend(checkPoint, range); DictRecord dictRecord = dictRecordMapper.selectByCreateTime(Long.parseLong(time)); if (StringUtils.isNull(dictRecord)) { return null; } List list = suYuanMapper.getDistanceSuYuan(dictRecord.getTableName(), ids3d); AtomicInteger i = new AtomicInteger(0); list.stream().forEach(s -> { s.setName(checkPoint.getName()); i.getAndIncrement(); s.setVocsName(checkPoint.getName() + "-" + i.longValue()); }); if (StringUtils.isNotEmpty(list)) { Collections.sort(list); DistanceSuYuan max = list.get(0); FeedbackDetail feedbackDetail = new FeedbackDetail(null, dictRecord.getTableName(), max.getName(), max.getId(), max.getVocsName(), max.getVocsValue(), null, null, null, DateUtils.getNowDate()); feedbackMapper.insert(feedbackDetail); result.put("feedbackId", feedbackDetail.getId()); } result.put("data", list); return result; } @Override public Map selectSuYuan200(String name, Date date) { Map result = new HashMap(); MonitorPointPosition checkPoint = commonService.select3dCheckPointByName(name); if (StringUtils.isNull(checkPoint)) { return null; } int range = 20; String time = DateUtils.parseDateToStr(DateUtils.YYYYMMDDHH, date); List ids3d = CalculateUtils.aloneCrosswiseExtend(checkPoint, range); DictRecord dictRecord = dictRecordMapper.selectByCreateTime(Long.parseLong(time)); if (StringUtils.isNull(dictRecord)) { return null; } List list = suYuanMapper.getDistanceSuYuan(dictRecord.getTableName(), ids3d); AtomicInteger i = new AtomicInteger(0); list.stream().forEach(s -> { s.setName(checkPoint.getName()); i.getAndIncrement(); s.setVocsName(checkPoint.getName() + "-" + i.longValue()); }); if (StringUtils.isNotEmpty(list)) { Collections.sort(list); DistanceSuYuan max = list.get(0); FeedbackDetail feedbackDetail = new FeedbackDetail(null, dictRecord.getTableName(), max.getName(), max.getId(), max.getVocsName(), max.getVocsValue(), null, null, null, DateUtils.getNowDate()); feedbackMapper.insert(feedbackDetail); result.put("feedbackId", feedbackDetail.getId()); } result.put("data", list); return result; } @Override public Map selectSuYuan300(String name, Date date) { Map result = new HashMap(); MonitorPointPosition checkPoint = commonService.select3dCheckPointByName(name); if (StringUtils.isNull(checkPoint)) { return null; } int range = 30; String time = DateUtils.parseDateToStr(DateUtils.YYYYMMDDHH, date); List ids3d = CalculateUtils.aloneCrosswiseExtend(checkPoint, range); DictRecord dictRecord = dictRecordMapper.selectByCreateTime(Long.parseLong(time)); if (StringUtils.isNull(dictRecord)) { return null; } List list = suYuanMapper.getDistanceSuYuan(dictRecord.getTableName(), ids3d); AtomicInteger i = new AtomicInteger(0); list.stream().forEach(s -> { s.setName(checkPoint.getName()); i.getAndIncrement(); s.setVocsName(checkPoint.getName() + "-" + i.longValue()); }); if (StringUtils.isNotEmpty(list)) { Collections.sort(list); DistanceSuYuan max = list.get(0); FeedbackDetail feedbackDetail = new FeedbackDetail(null, dictRecord.getTableName(), max.getName(), max.getId(), max.getVocsName(), max.getVocsValue(), null, null, null, DateUtils.getNowDate()); feedbackMapper.insert(feedbackDetail); result.put("feedbackId", feedbackDetail.getId()); } result.put("data", list); return result; } @Override public Map selectSuYuan500(String name, Date date) { Map result = new HashMap(); MonitorPointPosition checkPoint = commonService.select3dCheckPointByName(name); if (StringUtils.isNull(checkPoint)) { return null; } int range = 50; String time = DateUtils.parseDateToStr(DateUtils.YYYYMMDDHH, date); List ids3d = CalculateUtils.aloneCrosswiseExtend(checkPoint, range); DictRecord dictRecord = dictRecordMapper.selectByCreateTime(Long.parseLong(time)); if (StringUtils.isNull(dictRecord)) { return null; } List list = suYuanMapper.getDistanceSuYuan(dictRecord.getTableName(), ids3d); AtomicInteger i = new AtomicInteger(0); list.stream().forEach(s -> { s.setName(checkPoint.getName()); i.getAndIncrement(); s.setVocsName(checkPoint.getName() + "-" + i.longValue()); }); if (StringUtils.isNotEmpty(list)) { Collections.sort(list); DistanceSuYuan max = list.get(0); FeedbackDetail feedbackDetail = new FeedbackDetail(null, dictRecord.getTableName(), max.getName(), max.getId(), max.getVocsName(), max.getVocsValue(), null, null, null, DateUtils.getNowDate()); feedbackMapper.insert(feedbackDetail); result.put("feedbackId", feedbackDetail.getId()); } result.put("data", list); return result; } @Override public List getMonitorData(String name) { MonitorPointPosition checkPoint = commonService.select3dCheckPointByName(name); if (StringUtils.isNull(checkPoint)) { return null; } /*List recordList = dictRecordMapper.selectDictRecordList(new DictRecord()); List tableNames = new ArrayList(); for (DictRecord dr : recordList) { if (suYuanMapper.isTableExists(dr.getTableName()) > 0) { tableNames.add(dr.getTableName()); } } return suYuanMapper.getMonitorData(tableNames, checkPoint.getX() + "_" + checkPoint.getY() + "_" + checkPoint.getZ());*/ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23); String end = dateFormat.format(calendar.getTime()); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.add(Calendar.DATE, -7); String start = dateFormat.format(calendar.getTime()); return suYuanMapper.getNewMonitorData(checkPoint.getName(), start, end); } @Override public int updateVocsName(Date date, String id, String vocsName) { String table = "su_yuan_" + dateFormat.format(date); // new Date() if (isTableExists(table) == 0) { return 0; } //return suYuanMapper.updateVocsName(table, id, vocsName); return 1; } @Override public List queryQxsh(Date date) { String time = dateFormat.format(date); return qxshMapper.selectByTime(time); } }