山东临时火点表到全国火点表的新逻辑

This commit is contained in:
liuchengqian 2022-06-02 22:43:22 +08:00
parent f4186e2841
commit 1b414a66ac
5 changed files with 218 additions and 16 deletions

View File

@ -25,6 +25,8 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;
import java.io.IOException;
import java.util.ArrayList;
@ -160,6 +162,11 @@ public class FirePointController {
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, shanDongFirePointList, locale);
}
@RequestMapping(value = "/download/vipuserfirepoint", method = RequestMethod.GET)
public String downloadVipUserFirePoint(HttpServletResponse response, HttpServletRequest request) {
return firePointService.downloadVipUserFilePoint(request, response);
}
/**
* 更新火点的街道编号数据
*

View File

@ -67,6 +67,7 @@ public interface FirePointDao extends JpaRepository<FirePointEntity, Long>, JpaS
/**
* 根据火点编码修改审核火点状态
*
* @param fireCode
* @param auditFireType
*/
@ -142,4 +143,7 @@ public interface FirePointDao extends JpaRepository<FirePointEntity, Long>, JpaS
@Query(value = "UPDATE fire_point SET street_code = ?2 WHERE id = ?1", nativeQuery = true)
void updateStreetCodeById(Integer id, String streetCode);
@Query(value = "select a.really_name 姓名, a.county_name 所在市, a.telephone 手机号, a.vip_level vip, b.satellite_time 扫描时间, " + "round(cast(b.longitude as numeric) ,6) 经度, round(cast(b.latitude as numeric) ,6) 纬度, b.fire_point_address 详细地址 from sys_user a left join fire_point b on " + "case when left(a.county_code, 4) = '0000' then left(b.county_code, 4) = left(a.county_code, 4) " + "when left(a.county_code, 2) = '00' then left(b.county_code, 2) = left(a.county_code, 2) " + "else left(b.county_code, 2) = left(a.county_code, 2) end where a.vip_level > 0 and satellite_time > ?1", nativeQuery = true)
List<Map<String, String>> downloadFirePointByVip(String yesterday);
}

View File

@ -7,6 +7,8 @@ import com.xkrs.model.qo.FirePointQo;
import com.xkrs.model.vo.AppTaskBodyVo;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -209,4 +211,12 @@ public interface FirePointService {
* 操作2将山东火点表中的这个火点的审核状态更新
*/
String updateVerifyStateByFireCode(String fireCode, String verifyState);
/**
* download vip user's fire point
*
* @param request
* @param response
*/
String downloadVipUserFilePoint(HttpServletRequest request, HttpServletResponse response);
}

View File

@ -21,15 +21,22 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject;
import static com.xkrs.utils.DateTimeUtil.dateTimeToString;
import static com.xkrs.utils.XlsxUtil.downloadXlsx;
/**
* @author XinYi Song
@ -117,7 +124,7 @@ public class FirePointServiceImpl implements FirePointService {
firePointEntity.setSatelliteType(firePointQo.getSatelliteType());
firePointEntity.setLandType(firePointQo.getLandtype());
firePointEntity.setConfidence(firePointQo.getConfidence());
firePointEntity.setAddTime(DateTimeUtil.dateTimeToString(LocalDateTime.now()));
firePointEntity.setAddTime(dateTimeToString(LocalDateTime.now()));
firePointEntity.setFireType("0");
firePointEntity.setFireImage(firePointQo.getFireImage());
firePointEntity.setSatelliteImage(firePointQo.getSatelliteImage());
@ -176,7 +183,7 @@ public class FirePointServiceImpl implements FirePointService {
firePointEntity.setSatelliteType(firePointQo.getSatelliteType());
firePointEntity.setLandType(firePointQo.getLandtype());
firePointEntity.setConfidence(firePointQo.getConfidence());
firePointEntity.setAddTime(DateTimeUtil.dateTimeToString(LocalDateTime.now()));
firePointEntity.setAddTime(dateTimeToString(LocalDateTime.now()));
firePointEntity.setFireType("0");
firePointEntity.setFireImage(firePointQo.getFireImage());
firePointEntity.setSatelliteImage(firePointQo.getSatelliteImage());
@ -399,6 +406,28 @@ public class FirePointServiceImpl implements FirePointService {
return null;
}
@Override
public String downloadVipUserFilePoint(HttpServletRequest request, HttpServletResponse response) {
LocalDate now = LocalDate.now();
List<Map<String, String>> list = firePointDao.downloadFirePointByVip(dateTimeToString(LocalDateTime.of(now.minusDays(1), LocalTime.MIN)));
if (list.size() == 0) {
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "无数据!", LocaleContextHolder.getLocale());
}
int year = now.getYear();
int month = now.getMonth().getValue();
int day = now.getDayOfMonth();
String fileName = String.format("%s_%s_%s_VIP用户火点信息列表.xlsx", year, month, day);
response.setContentType("application/octet-stream; charset=UTF8");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
try {
downloadXlsx(list, response.getOutputStream());
} catch (IOException e) {
log.error("download vip user's fire point fail: {}", e.getMessage());
}
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "ok", LocaleContextHolder.getLocale());
}
/**
* 查询今天的火点信息
*/
@ -544,7 +573,7 @@ public class FirePointServiceImpl implements FirePointService {
FireAndRanger byFireCode1 = fireAndRangerDao.findByFireCode(fireCode);
if (byFireCode1 == null) {
FirePointEntity byFireCode4 = firePointDao.findByFireCode(fireCode);
String time = DateTimeUtil.dateTimeToString(LocalDateTime.now());
String time = dateTimeToString(LocalDateTime.now());
FireAndRanger fireAndRanger = new FireAndRanger();
fireAndRanger.setFireCode(fireCode);
// 由于测试阶段先用用户账号代替后期换成getReallyName(用户真实姓名)
@ -556,7 +585,7 @@ public class FirePointServiceImpl implements FirePointService {
}
// 火点结案将护林员的状态修改为0 表示该护林员没有在执行任务处于空闲状态
forestRangerDao.updateRangerTypeByPhone(byFireCode1.getRangerName(), rangerType);
String time = DateTimeUtil.dateTimeToString(LocalDateTime.now());
String time = dateTimeToString(LocalDateTime.now());
fireAndRangerDao.updateEndTimeByFireCode(fireCode, time);
fireAndRangerDao.updateProgressTypeByFireCode(fireCode, "0");
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "结案", locale);
@ -583,7 +612,7 @@ public class FirePointServiceImpl implements FirePointService {
if (byTaskFireCode != null) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "该火点的任务已经提交,请勿重复提交", locale);
}
String s = DateTimeUtil.dateTimeToString(LocalDateTime.now());
String s = dateTimeToString(LocalDateTime.now());
FireTask fireTask = new FireTask();
fireTask.setTaskFireCode(appTaskBodyVo.getFireCode());
fireTask.setTaskInformation(appTaskBodyVo.getTaskInformation());
@ -636,10 +665,10 @@ public class FirePointServiceImpl implements FirePointService {
@Override
public List<FirePointEntity> selectFirePointBetweenSeven() {
LocalDateTime localDateTime = LocalDateTime.now();
String endTime = DateTimeUtil.dateTimeToString(localDateTime);
String endTime = dateTimeToString(localDateTime);
// 当前时间减7
LocalDateTime localDateTime1 = localDateTime.minusDays(7);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
String startTime = dateTimeToString(localDateTime1);
return query.selectFirePointBetweenThree(startTime, endTime);
}
@ -652,10 +681,10 @@ public class FirePointServiceImpl implements FirePointService {
@Override
public List<FirePointEntity> selectFirePointByMonth(String countyCode) {
LocalDateTime localDateTime = LocalDateTime.now();
String endTime = DateTimeUtil.dateTimeToString(localDateTime);
String endTime = dateTimeToString(localDateTime);
// 当前时间减31
LocalDateTime localDateTime1 = localDateTime.minusDays(31);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
String startTime = dateTimeToString(localDateTime1);
if (9 == countyCode.length()) {
return query.selectFirePointByMonthStreet(countyCode, startTime, endTime);
} else if ("0000".equals(countyCode.substring(2))) {
@ -685,10 +714,10 @@ public class FirePointServiceImpl implements FirePointService {
Map map = new HashMap(3);
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = localDateTime.plusDays(1);
String endTime = DateTimeUtil.dateTimeToString(localDateTime2);
String endTime = dateTimeToString(localDateTime2);
// 当前时间减30
LocalDateTime localDateTime1 = localDateTime.minusDays(30);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
String startTime = dateTimeToString(localDateTime1);
// 查询近一个月各植被类型的火点数量
List<Map<String, Object>> maps = firePointDao.selectNumByLandType(startTime, endTime);
map.put("land", maps);
@ -712,10 +741,10 @@ public class FirePointServiceImpl implements FirePointService {
Map map = new HashMap(3);
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = localDateTime.plusDays(1);
String endTime = DateTimeUtil.dateTimeToString(localDateTime2);
String endTime = dateTimeToString(localDateTime2);
// 当前时间减1
LocalDateTime localDateTime1 = localDateTime.minusDays(1);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
String startTime = dateTimeToString(localDateTime1);
// 查询近一个月各植被类型的火点数量
List<Map<String, Object>> maps = firePointDao.selectNumByLandType(startTime, endTime);
map.put("land", maps);
@ -739,10 +768,10 @@ public class FirePointServiceImpl implements FirePointService {
Map map = new HashMap(3);
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = localDateTime.plusDays(1);
String endTime = DateTimeUtil.dateTimeToString(localDateTime2);
String endTime = dateTimeToString(localDateTime2);
// 当前时间减7
LocalDateTime localDateTime1 = localDateTime.minusDays(7);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
String startTime = dateTimeToString(localDateTime1);
// 查询近一个月各植被类型的火点数量
List<Map<String, Object>> maps = firePointDao.selectNumByLandType(startTime, endTime);
map.put("land", maps);
@ -794,7 +823,7 @@ public class FirePointServiceImpl implements FirePointService {
firePoint.setSatelliteType(firePointQo.getSatelliteType());
firePoint.setLandType(firePointQo.getLandtype());
firePoint.setConfidence(firePointQo.getConfidence());
firePoint.setAddTime(DateTimeUtil.dateTimeToString(LocalDateTime.now()));
firePoint.setAddTime(dateTimeToString(LocalDateTime.now()));
firePoint.setFireType("0");
firePoint.setFireImage(firePointQo.getFireImage());
firePoint.setSatelliteImage(firePointQo.getSatelliteImage());

View File

@ -0,0 +1,152 @@
package com.xkrs.utils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author wudong
* @date 2021/12/22 17:47
* @description
*/
public class XlsxUtil {
private static final Logger log = LoggerFactory.getLogger(XlsxUtil.class);
/**
* 获取表格内容, 第一行为表头第二行为数据最少两行
*
* @param is
* @return
*/
public static List<Map<Object, Object>> getXlsxData(InputStream is) {
List<Map<Object, Object>> list = new ArrayList<>();
Workbook wb = null;
try {
wb = new XSSFWorkbook(is);
} catch (IOException e) {
log.error("xlsx读取数据失败");
return list;
}
Sheet sheet = wb.getSheetAt(0);
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
if (physicalNumberOfRows < 2) {
return list;
}
Row row = sheet.getRow(0);
int titNums = row.getPhysicalNumberOfCells();
Object[] tit = new String[titNums];
for (int j = 0; j < titNums; j++) {
Cell cell = row.getCell(j);
Object value = getValue(cell);
tit[j] = value;
}
for (int i = 1; i < physicalNumberOfRows; i++) {
Row contentRow = sheet.getRow(i);
int physicalNumberOfCells = contentRow.getPhysicalNumberOfCells();
Map<Object, Object> map = new HashMap<>(physicalNumberOfCells);
for (int j = 0; j < physicalNumberOfCells; j++) {
Cell cell = contentRow.getCell(j);
Object value = getValue(cell);
map.put(tit[j], value);
}
list.add(map);
}
return list;
}
/**
* 获取值
*
* @param cell
* @return
*/
private static Object getValue(Cell cell) {
CellType cellType = cell.getCellType();
Object value;
switch (cellType) {
case STRING:
value = cell.getStringCellValue().trim();
break;
case NUMERIC:
// 获取时间数据
if (DateUtil.isCellDateFormatted(cell)) {
Date tempValue = cell.getDateCellValue();
SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd");
value = simpleFormat.format(tempValue);
} else {
// 防止出现科学计数法
DecimalFormat df = new DecimalFormat("0");
value = df.format(cell.getNumericCellValue());
}
break;
case BOOLEAN:
value = cell.getBooleanCellValue();
break;
default:
value = null;
}
return value;
}
/**
* 按内容生成xlsx 不关闭输出流
*
* @param contextList 参数
* @param os
*/
public static void createXml(List<Map<String, String>> contextList, OutputStream os) {
// 提取表头
Set<String> strings = contextList.get(0).keySet();
Workbook wb = new XSSFWorkbook();
// 创建一页sheet
Sheet sheet = wb.createSheet();
// 创建表头
Row row = sheet.createRow(0);
int i = 0;
for (String key : strings) {
row.createCell(i++).setCellValue(key);
}
// 填写内容
for (int j = 0; j < contextList.size(); j++) {
Row ct = sheet.createRow(j + 1);
ct.setHeight((short) 1200);
Map<String, String> map = contextList.get(j);
for (int k = 0; k < map.size(); k++) {
ct.createCell(k).setCellValue(String.valueOf(map.get(row.getCell(k).getStringCellValue())));
}
}
try {
// 可以直接写入到zipOutputStream嘛需要转一下转为输入流再进行写入这样的话就需要把流输出不能在该地方关闭
wb.write(os);
wb.close();
System.out.println("finish");
} catch (IOException e) {
log.error("生成Xlsx失败IO操作失败 输出到IO失败", e);
}
}
/**
* 下载文件 单个
*
* @param contextList
* @param os
*/
public static void downloadXlsx(List<Map<String, String>> contextList, OutputStream os) {
createXml(contextList, os);
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}