package com.yssh.service.impl; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; 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.entity.DictRecord; import com.yssh.entity.DistanceSuYuan; import com.yssh.entity.FeedbackDetail; import com.yssh.entity.MonitorPointPosition; import com.yssh.entity.SuYuan; import com.yssh.entity.SuYuan2d; import com.yssh.entity.SuYuan3d; import com.yssh.entity.SuYuanMonitorData; import com.yssh.service.IAsyncService; import com.yssh.service.ICommonService; import com.yssh.service.ISuYuanService; import com.yssh.utils.CalculateUtils; import com.yssh.utils.DateUtils; import com.yssh.utils.StringUtils; import com.yssh.utils.TableStrategy; 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; private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHH"); //@Transactional @Override @Async("threadPoolTaskExecutor") public void insertSuYuanDatas(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 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(); recordList.stream().forEach(s -> { tableNames.add(s.getTableName()); }); return suYuanMapper.getMonitorData(tableNames, checkPoint.getX() + "_" + checkPoint.getY() + "_" + checkPoint.getZ()); } @Override public int updateVocsName(Date date, String id, String vocsName) { String table = "su_yuan_" + dateFormat.format(new Date()); if (isTableExists(table) == 0) { return 0; } return suYuanMapper.updateVocsName(table, id, vocsName); } }