package com.ycl.service.unlawful.impl; import com.ycl.dto.statistics.CategoryDto; import com.ycl.dto.statistics.StatusDto; import com.ycl.dto.statistics.TimeDto; import com.ycl.dto.statistics.UnlawfulDto; import com.ycl.mapper.unlawful.UnlawfulMapper; import com.ycl.service.unlawful.UnlawfulService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.RoundingMode; import java.text.NumberFormat; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @Service public class UnlawfulServiceImpl implements UnlawfulService { @Resource private UnlawfulMapper unlawfuldao; /** * 按类型 */ @Override public List getUnlawfulByType(Integer currentPage, Integer pageSize, String startTime, String endTime) { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataByType(currentPage, pageSize, startTime, endTime); data.forEach(categoryDto -> { StatusDto statusData = unlawfuldao.getStatusDataByType(startTime, endTime, categoryDto.getId()); format(res, total, categoryDto, statusData); }); return res; } @Override public List getUnlawfulByTypeExport() { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataByTypeExp(); data.forEach(categoryDto -> { StatusDto statusData = unlawfuldao.getStatusDataByType(null, null, categoryDto.getId()); format(res, total, categoryDto, statusData); }); return res; } @Override public Integer getTotalByType(String startTime, String endTime) { return unlawfuldao.getTotalByType(startTime, endTime); } /** * 按区域 */ @Override public List getUnlawfulByStreet(Integer currentPage, Integer pageSize, String startTime, String endTime) { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataByStreet(currentPage, pageSize, startTime, endTime); data.forEach(categoryDto -> { StatusDto statusData = unlawfuldao.getStatusDataByStreet(startTime, endTime, categoryDto.getId()); format(res, total, categoryDto, statusData); }); return res; } @Override public List getUnlawfulByStreetExport() { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataByStreetExp(); data.forEach(categoryDto -> { StatusDto statusData = unlawfuldao.getStatusDataByStreet(null, null, categoryDto.getId()); format(res, total, categoryDto, statusData); }); return res; } @Override public Integer getTotalByStreet(String startTime, String endTime) { return unlawfuldao.getTotalByStreet(startTime, endTime); } /** * 按报警点位 */ @Override public List getUnlawfulBySite(Integer currentPage, Integer pageSize, String startTime, String endTime) { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataBySite(currentPage, pageSize, startTime, endTime); data.forEach(site -> { StatusDto statusData = unlawfuldao.getStatusDataBySite(startTime, endTime, site); format1(res, total, site, statusData); }); return res; } @Override public List getUnlawfulBySiteExport() { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataBySiteExp(); data.forEach(site -> { StatusDto statusData = unlawfuldao.getStatusDataBySite(null, null, site); format1(res, total, site, statusData); }); return res; } @Override public Integer getTotalBySite(String startTime, String endTime) { return unlawfuldao.getTotalBySite(startTime, endTime); } @Override public List getUnlawfulByTime(Integer currentPage, Integer pageSize, String startTime, String endTime) { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataByTime(currentPage, pageSize, startTime, endTime); data.forEach(timeDto -> { StatusDto statusData = unlawfuldao.getStatusDataByTime(startTime, endTime, timeDto.getId()); format2(res, total, timeDto, statusData); }); return res; } @Override public List getUnlawfulByTimeExport() { List res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List data = unlawfuldao.getDataByTimeExp(); data.forEach(timeDto -> { StatusDto statusData = unlawfuldao.getStatusDataByTime(null, null, timeDto.getId()); format2(res, total, timeDto, statusData); }); return res; } @Override public Integer getTotalByTime(String startTime, String endTime) { return unlawfuldao.getTotalBySite(startTime, endTime); } private Double changeFormat(Double previous){ NumberFormat numberInstance = NumberFormat.getNumberInstance(); numberInstance.setMaximumFractionDigits(3); numberInstance.setRoundingMode(RoundingMode.HALF_UP); String format = numberInstance.format(previous); return Double.parseDouble(format); } private void format(List res, Double total, CategoryDto categoryDto, StatusDto statusData) { UnlawfulDto build = UnlawfulDto.builder().name(categoryDto.getName()) //类型名称 .count(statusData.getTotal()) //事件总数 .ratio(changeFormat(statusData.getTotal().doubleValue() / total)) //占比 .register(statusData.getRegister()) //立案 .notRegister(statusData.getNotRegister()) //暂不立案 .closing(statusData.getClosing()) //结案 .relearn(statusData.getRelearn()) //在学习 .checked(statusData.getChecked()) //已审核 .checkedRatio(changeFormat(statusData.getChecked().doubleValue() / statusData.getTotal().doubleValue())) //审核率 .registerRatio(changeFormat(statusData.getRegister().doubleValue() / statusData.getTotal().doubleValue())) //立案率 .build(); res.add(build); } private void format2(List res, Double total, TimeDto timeDto, StatusDto statusData) { DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); UnlawfulDto build = UnlawfulDto.builder().name(timeDto.getTime().format(fmt)) //类型名称 .count(statusData.getTotal()) //事件总数 .ratio(changeFormat(statusData.getTotal().doubleValue() / total)) //占比 .register(statusData.getRegister()) //立案 .notRegister(statusData.getNotRegister()) //暂不立案 .closing(statusData.getClosing()) //结案 .relearn(statusData.getRelearn()) //在学习 .checked(statusData.getChecked()) //已审核 .checkedRatio(changeFormat(statusData.getChecked().doubleValue() / statusData.getTotal().doubleValue())) //审核率 .registerRatio(changeFormat(statusData.getRegister().doubleValue() / statusData.getTotal().doubleValue())) //立案率 .build(); res.add(build); } private void format1(List res, Double total, String site, StatusDto statusData) { UnlawfulDto build = UnlawfulDto.builder().name(site) //类型名称 .count(statusData.getTotal()) //事件总数 .ratio(changeFormat(statusData.getTotal().doubleValue() / total)) //占比 .register(statusData.getRegister()) //立案 .notRegister(statusData.getNotRegister()) //暂不立案 .closing(statusData.getClosing()) //结案 .relearn(statusData.getRelearn()) //在学习 .checked(statusData.getChecked()) //已审核 .checkedRatio(changeFormat(statusData.getChecked().doubleValue() / statusData.getTotal().doubleValue())) //审核率 .registerRatio(changeFormat(statusData.getRegister().doubleValue() / statusData.getTotal().doubleValue())) //立案率 .build(); res.add(build); } }