10 files modified
8 files added
| | |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.password", LauncherConstant.NACOS_PASSWORD); |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile)); |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile)); |
| | | // 指定命名空间 |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", "ja-dev"); |
| | | PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", "ja-dev"); |
| | | PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile)); |
| | | PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile)); |
| | | PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false"); |
| | | |
| | | props.setProperty("knife4j.enable", "true"); |
| | | props.setProperty("swagger.enabled", "true"); |
| | | props.setProperty("spring.mvc.pathmatch.matching-strategy", "ANT_PATH_MATCHER"); |
| | | // 开启elk日志 |
| | | // PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile)); |
| | | |
| | |
| | | */ |
| | | package org.sxkj.fw.record.controller; |
| | | |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | |
| | | import org.springblade.core.mp.support.Condition; |
| | | import org.springblade.core.mp.support.Query; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.sxkj.fw.record.dto.FwDroneAlarmRecordDTO; |
| | | import org.sxkj.fw.record.entity.FwDroneAlarmRecordEntity; |
| | | import org.sxkj.fw.record.vo.FwDroneAlarmRecordVO; |
| | | import org.sxkj.fw.record.excel.FwDroneAlarmRecordExcel; |
| | |
| | | import org.springblade.core.excel.util.ExcelUtil; |
| | | import org.springblade.core.tool.constant.BladeConstant; |
| | | import springfox.documentation.annotations.ApiIgnore; |
| | | |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | import java.util.Map; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 无人机告警表 分页 |
| | | */ |
| | | @GetMapping("/list") |
| | | @ApiOperationSupport(order = 2) |
| | | @ApiOperation(value = "分页", notes = "传入fwDroneAlarmRecord") |
| | | public R<IPage<FwDroneAlarmRecordVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDroneAlarmRecord, Query query) { |
| | | IPage<FwDroneAlarmRecordEntity> pages = fwDroneAlarmRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDroneAlarmRecord, FwDroneAlarmRecordEntity.class)); |
| | | return R.data(FwDroneAlarmRecordWrapper.build().pageVO(pages)); |
| | | } |
| | | // @GetMapping("/list") |
| | | // @ApiOperationSupport(order = 2) |
| | | // @ApiOperation(value = "分页", notes = "传入fwDroneAlarmRecord") |
| | | // public R<IPage<FwDroneAlarmRecordVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDroneAlarmRecord, Query query) { |
| | | // IPage<FwDroneAlarmRecordEntity> pages = fwDroneAlarmRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDroneAlarmRecord, FwDroneAlarmRecordEntity.class)); |
| | | // return R.data(FwDroneAlarmRecordWrapper.build().pageVO(pages)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机告警表 自定义分页 |
| | |
| | | /** |
| | | * 无人机告警表 新增 |
| | | */ |
| | | @PostMapping("/save") |
| | | @ApiOperationSupport(order = 4) |
| | | @ApiOperation(value = "新增", notes = "传入fwDroneAlarmRecord") |
| | | public R save(@Valid @RequestBody FwDroneAlarmRecordEntity fwDroneAlarmRecord) { |
| | | return R.status(fwDroneAlarmRecordService.save(fwDroneAlarmRecord)); |
| | | } |
| | | // @PostMapping("/save") |
| | | // @ApiOperationSupport(order = 4) |
| | | // @ApiOperation(value = "新增", notes = "传入fwDroneAlarmRecord") |
| | | // public R save(@Valid @RequestBody FwDroneAlarmRecordDTO fwDroneAlarmRecord) { |
| | | // FwDroneAlarmRecordEntity fwDroneAlarmRecordEntity = Objects.requireNonNull(BeanUtil.copy(fwDroneAlarmRecord, FwDroneAlarmRecordEntity.class)); |
| | | // return R.status(fwDroneAlarmRecordService.save(fwDroneAlarmRecordEntity)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机告警表 修改 |
| | | */ |
| | | @PostMapping("/update") |
| | | @ApiOperationSupport(order = 5) |
| | | @ApiOperation(value = "修改", notes = "传入fwDroneAlarmRecord") |
| | | public R update(@Valid @RequestBody FwDroneAlarmRecordEntity fwDroneAlarmRecord) { |
| | | return R.status(fwDroneAlarmRecordService.updateById(fwDroneAlarmRecord)); |
| | | } |
| | | // @PostMapping("/update") |
| | | // @ApiOperationSupport(order = 5) |
| | | // @ApiOperation(value = "修改", notes = "传入fwDroneAlarmRecord") |
| | | // public R update(@Valid @RequestBody FwDroneAlarmRecordEntity fwDroneAlarmRecord) { |
| | | // return R.status(fwDroneAlarmRecordService.updateById(fwDroneAlarmRecord)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机告警表 新增或修改 |
| | |
| | | @PostMapping("/submit") |
| | | @ApiOperationSupport(order = 6) |
| | | @ApiOperation(value = "新增或修改", notes = "传入fwDroneAlarmRecord") |
| | | public R submit(@Valid @RequestBody FwDroneAlarmRecordEntity fwDroneAlarmRecord) { |
| | | return R.status(fwDroneAlarmRecordService.saveOrUpdate(fwDroneAlarmRecord)); |
| | | public R submit(@Valid @RequestBody FwDroneAlarmRecordDTO fwDroneAlarmRecord) { |
| | | FwDroneAlarmRecordEntity fwDroneAlarmRecordEntity = Objects.requireNonNull(BeanUtil.copy(fwDroneAlarmRecord, FwDroneAlarmRecordEntity.class)); |
| | | return R.status(fwDroneAlarmRecordService.saveOrUpdate(fwDroneAlarmRecordEntity)); |
| | | } |
| | | |
| | | /** |
| | |
| | | //} |
| | | queryWrapper.lambda().eq(FwDroneAlarmRecordEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); |
| | | List<FwDroneAlarmRecordExcel> list = fwDroneAlarmRecordService.exportFwDroneAlarmRecord(queryWrapper); |
| | | |
| | | // String fileName = "无人机告警表数据" + DateUtil.time() + ".xlsx"; |
| | | // String filePath = "D:\\software\\" + fileName; // 替换为实际的本地路径 |
| | | // try (FileOutputStream outputStream = new FileOutputStream(filePath)) { |
| | | // ExcelWriter excelWriter = EasyExcel.write(outputStream, FwDroneAlarmRecordExcel.class) |
| | | // .autoCloseStream(true) |
| | | // .build(); |
| | | // WriteSheet writeSheet = EasyExcel.writerSheet("无人机告警表数据表").build(); |
| | | // excelWriter.write(list, writeSheet); |
| | | // excelWriter.finish(); |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | |
| | | ExcelUtil.export(response, "无人机告警表数据" + DateUtil.time(), "无人机告警表数据表", list, FwDroneAlarmRecordExcel.class); |
| | | } |
| | | |
| | |
| | | */ |
| | | package org.sxkj.fw.record.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
| | | import lombok.AllArgsConstructor; |
| | | import javax.validation.Valid; |
| | | |
| | | import org.springblade.core.secure.BladeUser; |
| | | import org.springblade.core.boot.ctrl.BladeController; |
| | | import org.springblade.core.excel.util.ExcelUtil; |
| | | import org.springblade.core.mp.support.Condition; |
| | | import org.springblade.core.mp.support.Query; |
| | | import org.springblade.core.secure.BladeUser; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.constant.BladeConstant; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.sxkj.fw.record.dto.FwDroneFlightRecordDTO; |
| | | import org.sxkj.fw.record.entity.FwDroneFlightRecordEntity; |
| | | import org.sxkj.fw.record.vo.FwDroneFlightRecordVO; |
| | | import org.sxkj.fw.record.excel.FwDroneFlightRecordExcel; |
| | | import org.sxkj.fw.record.wrapper.FwDroneFlightRecordWrapper; |
| | | import org.sxkj.fw.record.service.IFwDroneFlightRecordService; |
| | | import org.springblade.core.boot.ctrl.BladeController; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.core.excel.util.ExcelUtil; |
| | | import org.springblade.core.tool.constant.BladeConstant; |
| | | import org.sxkj.fw.record.vo.FwDroneFlightRecordVO; |
| | | import org.sxkj.fw.record.wrapper.FwDroneFlightRecordWrapper; |
| | | import springfox.documentation.annotations.ApiIgnore; |
| | | import java.util.Map; |
| | | import java.util.List; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.validation.Valid; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * 无人机飞行记录表 控制器 |
| | |
| | | /** |
| | | * 无人机飞行记录表 分页 |
| | | */ |
| | | @GetMapping("/list") |
| | | @ApiOperationSupport(order = 2) |
| | | @ApiOperation(value = "分页", notes = "传入fwDroneFlightRecord") |
| | | public R<IPage<FwDroneFlightRecordVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDroneFlightRecord, Query query) { |
| | | IPage<FwDroneFlightRecordEntity> pages = fwDroneFlightRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDroneFlightRecord, FwDroneFlightRecordEntity.class)); |
| | | return R.data(FwDroneFlightRecordWrapper.build().pageVO(pages)); |
| | | } |
| | | // @GetMapping("/list") |
| | | // @ApiOperationSupport(order = 2) |
| | | // @ApiOperation(value = "分页", notes = "传入fwDroneFlightRecord") |
| | | // public R<IPage<FwDroneFlightRecordVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDroneFlightRecord, Query query) { |
| | | // IPage<FwDroneFlightRecordEntity> pages = fwDroneFlightRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDroneFlightRecord, FwDroneFlightRecordEntity.class)); |
| | | // return R.data(FwDroneFlightRecordWrapper.build().pageVO(pages)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机飞行记录表 自定义分页 |
| | |
| | | /** |
| | | * 无人机飞行记录表 新增 |
| | | */ |
| | | @PostMapping("/save") |
| | | @ApiOperationSupport(order = 4) |
| | | @ApiOperation(value = "新增", notes = "传入fwDroneFlightRecord") |
| | | public R save(@Valid @RequestBody FwDroneFlightRecordEntity fwDroneFlightRecord) { |
| | | return R.status(fwDroneFlightRecordService.save(fwDroneFlightRecord)); |
| | | } |
| | | // @PostMapping("/save") |
| | | // @ApiOperationSupport(order = 4) |
| | | // @ApiOperation(value = "新增", notes = "传入fwDroneFlightRecord") |
| | | // public R save(@Valid @RequestBody FwDroneFlightRecordDTO fwDroneFlightRecord) { |
| | | // FwDroneFlightRecordEntity entity = Objects.requireNonNull(BeanUtil.copy(fwDroneFlightRecord, FwDroneFlightRecordEntity.class)); |
| | | // return R.status(fwDroneFlightRecordService.save(entity)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机飞行记录表 修改 |
| | | */ |
| | | @PostMapping("/update") |
| | | @ApiOperationSupport(order = 5) |
| | | @ApiOperation(value = "修改", notes = "传入fwDroneFlightRecord") |
| | | public R update(@Valid @RequestBody FwDroneFlightRecordEntity fwDroneFlightRecord) { |
| | | return R.status(fwDroneFlightRecordService.updateById(fwDroneFlightRecord)); |
| | | } |
| | | // @PostMapping("/update") |
| | | // @ApiOperationSupport(order = 5) |
| | | // @ApiOperation(value = "修改", notes = "传入fwDroneFlightRecord") |
| | | // public R update(@Valid @RequestBody FwDroneFlightRecordEntity fwDroneFlightRecord) { |
| | | // return R.status(fwDroneFlightRecordService.updateById(fwDroneFlightRecord)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机飞行记录表 新增或修改 |
| | |
| | | @PostMapping("/submit") |
| | | @ApiOperationSupport(order = 6) |
| | | @ApiOperation(value = "新增或修改", notes = "传入fwDroneFlightRecord") |
| | | public R submit(@Valid @RequestBody FwDroneFlightRecordEntity fwDroneFlightRecord) { |
| | | return R.status(fwDroneFlightRecordService.saveOrUpdate(fwDroneFlightRecord)); |
| | | public R submit(@Valid @RequestBody FwDroneFlightRecordDTO fwDroneFlightRecord) { |
| | | FwDroneFlightRecordEntity entity = Objects.requireNonNull(BeanUtil.copy(fwDroneFlightRecord, FwDroneFlightRecordEntity.class)); |
| | | return R.status(fwDroneFlightRecordService.saveOrUpdate(entity)); |
| | | } |
| | | |
| | | /** |
| | |
| | | import org.springblade.core.mp.support.Condition; |
| | | import org.springblade.core.mp.support.Query; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.sxkj.fw.record.dto.FwDroneFlightRecordDetailDTO; |
| | | import org.sxkj.fw.record.entity.FwDroneFlightRecordDetailEntity; |
| | | import org.sxkj.fw.record.entity.FwDroneFlightRecordEntity; |
| | | import org.sxkj.fw.record.vo.FwDroneFlightRecordDetailVO; |
| | | import org.sxkj.fw.record.excel.FwDroneFlightRecordDetailExcel; |
| | | import org.sxkj.fw.record.wrapper.FwDroneFlightRecordDetailWrapper; |
| | |
| | | import springfox.documentation.annotations.ApiIgnore; |
| | | import java.util.Map; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 无人机飞行记录详情表 分页 |
| | | */ |
| | | @GetMapping("/list") |
| | | @ApiOperationSupport(order = 2) |
| | | @ApiOperation(value = "分页", notes = "传入fwDroneFlightRecordDetail") |
| | | public R<IPage<FwDroneFlightRecordDetailVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDroneFlightRecordDetail, Query query) { |
| | | IPage<FwDroneFlightRecordDetailEntity> pages = fwDroneFlightRecordDetailService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDroneFlightRecordDetail, FwDroneFlightRecordDetailEntity.class)); |
| | | return R.data(FwDroneFlightRecordDetailWrapper.build().pageVO(pages)); |
| | | } |
| | | // @GetMapping("/list") |
| | | // @ApiOperationSupport(order = 2) |
| | | // @ApiOperation(value = "分页", notes = "传入fwDroneFlightRecordDetail") |
| | | // public R<IPage<FwDroneFlightRecordDetailVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDroneFlightRecordDetail, Query query) { |
| | | // IPage<FwDroneFlightRecordDetailEntity> pages = fwDroneFlightRecordDetailService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDroneFlightRecordDetail, FwDroneFlightRecordDetailEntity.class)); |
| | | // return R.data(FwDroneFlightRecordDetailWrapper.build().pageVO(pages)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机飞行记录详情表 自定义分页 |
| | |
| | | /** |
| | | * 无人机飞行记录详情表 新增 |
| | | */ |
| | | @PostMapping("/save") |
| | | @ApiOperationSupport(order = 4) |
| | | @ApiOperation(value = "新增", notes = "传入fwDroneFlightRecordDetail") |
| | | public R save(@Valid @RequestBody FwDroneFlightRecordDetailEntity fwDroneFlightRecordDetail) { |
| | | return R.status(fwDroneFlightRecordDetailService.save(fwDroneFlightRecordDetail)); |
| | | } |
| | | // @PostMapping("/save") |
| | | // @ApiOperationSupport(order = 4) |
| | | // @ApiOperation(value = "新增", notes = "传入fwDroneFlightRecordDetail") |
| | | // public R save(@Valid @RequestBody FwDroneFlightRecordDetailEntity fwDroneFlightRecordDetail) { |
| | | // return R.status(fwDroneFlightRecordDetailService.save(fwDroneFlightRecordDetail)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机飞行记录详情表 修改 |
| | | */ |
| | | @PostMapping("/update") |
| | | @ApiOperationSupport(order = 5) |
| | | @ApiOperation(value = "修改", notes = "传入fwDroneFlightRecordDetail") |
| | | public R update(@Valid @RequestBody FwDroneFlightRecordDetailEntity fwDroneFlightRecordDetail) { |
| | | return R.status(fwDroneFlightRecordDetailService.updateById(fwDroneFlightRecordDetail)); |
| | | } |
| | | // @PostMapping("/update") |
| | | // @ApiOperationSupport(order = 5) |
| | | // @ApiOperation(value = "修改", notes = "传入fwDroneFlightRecordDetail") |
| | | // public R update(@Valid @RequestBody FwDroneFlightRecordDetailEntity fwDroneFlightRecordDetail) { |
| | | // return R.status(fwDroneFlightRecordDetailService.updateById(fwDroneFlightRecordDetail)); |
| | | // } |
| | | |
| | | /** |
| | | * 无人机飞行记录详情表 新增或修改 |
| | |
| | | @PostMapping("/submit") |
| | | @ApiOperationSupport(order = 6) |
| | | @ApiOperation(value = "新增或修改", notes = "传入fwDroneFlightRecordDetail") |
| | | public R submit(@Valid @RequestBody FwDroneFlightRecordDetailEntity fwDroneFlightRecordDetail) { |
| | | return R.status(fwDroneFlightRecordDetailService.saveOrUpdate(fwDroneFlightRecordDetail)); |
| | | public R submit(@Valid @RequestBody FwDroneFlightRecordDetailDTO fwDroneFlightRecordDetail) { |
| | | FwDroneFlightRecordDetailEntity entity = Objects.requireNonNull(BeanUtil.copy(fwDroneFlightRecordDetail, FwDroneFlightRecordDetailEntity.class)); |
| | | return R.status(fwDroneFlightRecordDetailService.saveOrUpdate(entity)); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | package org.sxkj.fw.record.dto; |
| | | |
| | | import org.sxkj.fw.record.entity.FwDroneAlarmRecordEntity; |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalTime; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 无人机告警表 数据传输对象实体类 |
| | |
| | | * @since 2026-01-08 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class FwDroneAlarmRecordDTO extends FwDroneAlarmRecordEntity { |
| | | public class FwDroneAlarmRecordDTO { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("主键id") |
| | | private Long id; |
| | | /** |
| | | * 反无设备ID(关联ja_fw_device.id) |
| | | */ |
| | | @ApiModelProperty(value = "反无设备ID(关联ja_fw_device.id)") |
| | | private Long deviceId; |
| | | /** |
| | | * 无人机名称 |
| | | */ |
| | | @ApiModelProperty(value = "无人机名称") |
| | | private String droneName; |
| | | /** |
| | | * 无人机序列号 |
| | | */ |
| | | @ApiModelProperty(value = "无人机序列号") |
| | | private String droneSerialNo; |
| | | /** |
| | | * 无人机类型(微型机/植保机...) |
| | | */ |
| | | @ApiModelProperty(value = "无人机类型(微型机/植保机...)") |
| | | private String droneType; |
| | | /** |
| | | * 告警类型:实时告警/历史告警 |
| | | */ |
| | | @ApiModelProperty(value = "告警类型:实时告警/历史告警") |
| | | private String alarmType; |
| | | /** |
| | | * 告警时间 |
| | | */ |
| | | @ApiModelProperty(value = "告警时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date alarmTime; |
| | | /** |
| | | * 触发原因 |
| | | */ |
| | | @ApiModelProperty(value = "触发原因") |
| | | private String triggerReason; |
| | | /** |
| | | * 飞行状态:侦测中/反制中 |
| | | */ |
| | | @ApiModelProperty(value = "飞行状态:侦测中/反制中") |
| | | private String flightStatus; |
| | | /** |
| | | * 当前经度 |
| | | */ |
| | | @ApiModelProperty(value = "当前经度") |
| | | private Double longitude; |
| | | /** |
| | | * 当前纬度 |
| | | */ |
| | | @ApiModelProperty(value = "当前纬度") |
| | | private Double latitude; |
| | | /** |
| | | * 信号频段(MHz) |
| | | */ |
| | | @ApiModelProperty(value = "信号频段(MHz)") |
| | | private Integer signalFreqMhz; |
| | | /** |
| | | * 飞行高度(m) |
| | | */ |
| | | @ApiModelProperty(value = "飞行高度(m)") |
| | | private Integer flightHeightM; |
| | | /** |
| | | * 飞行速度(m/s) |
| | | */ |
| | | @ApiModelProperty(value = "飞行速度(m/s)") |
| | | private BigDecimal flightSpeedMs; |
| | | /** |
| | | * 停留时长(秒) |
| | | */ |
| | | @ApiModelProperty(value = "停留时长 (秒) ") |
| | | private String stayDuration; |
| | | /** |
| | | * 反制方式:信号干扰/诱导驱离/无 |
| | | */ |
| | | @ApiModelProperty(value = "反制方式:信号干扰/诱导驱离/无") |
| | | private String counterWay; |
| | | /** |
| | | * 区域id ja_fw_area_divide |
| | | */ |
| | | @ApiModelProperty(value = "区域id ja_fw_area_divide") |
| | | private String areaDivideId; |
| | | /** |
| | | * 场景id ja_fw_defense_scene.id |
| | | */ |
| | | @ApiModelProperty(value = "场景id ja_fw_defense_scene.id") |
| | | private String defenseSceneId; |
| | | /** |
| | | * 区域编码 |
| | | */ |
| | | @ApiModelProperty(value = "区域编码") |
| | | private String areaCode; |
| | | } |
| | |
| | | */ |
| | | package org.sxkj.fw.record.dto; |
| | | |
| | | import org.sxkj.fw.record.entity.FwDroneFlightRecordEntity; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.time.LocalTime; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 无人机飞行记录表 数据传输对象实体类 |
| | |
| | | * @since 2026-01-08 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class FwDroneFlightRecordDTO extends FwDroneFlightRecordEntity { |
| | | public class FwDroneFlightRecordDTO { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("主键id") |
| | | private Long id; |
| | | |
| | | /** |
| | | * 反无设备ID(关联ja_fw_device.id) |
| | | */ |
| | | @ApiModelProperty(value = "反无设备ID(关联ja_fw_device.id)") |
| | | private Long deviceId; |
| | | /** |
| | | * 无人机名称 |
| | | */ |
| | | @ApiModelProperty(value = "无人机名称") |
| | | private String droneName; |
| | | /** |
| | | * 序列号 |
| | | */ |
| | | @ApiModelProperty(value = "序列号") |
| | | private String serialNo; |
| | | /** |
| | | * 首次告警时间 |
| | | */ |
| | | @ApiModelProperty(value = "首次告警时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date alarmTime; |
| | | /** |
| | | * 触发原因/类型 |
| | | */ |
| | | @ApiModelProperty(value = "触发原因/类型") |
| | | private String triggerType; |
| | | /** |
| | | * 停留时长(HH:MM:SS) |
| | | */ |
| | | @ApiModelProperty(value = "停留时长(HH:MM:SS)") |
| | | @JsonFormat(pattern = "HH:mm:ss") |
| | | private LocalTime stayDuration; |
| | | /** |
| | | * 区域编码 |
| | | */ |
| | | @ApiModelProperty(value = "区域编码") |
| | | private String areaCode; |
| | | |
| | | } |
| | |
| | | */ |
| | | package org.sxkj.fw.record.dto; |
| | | |
| | | import org.sxkj.fw.record.entity.FwDroneFlightRecordDetailEntity; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 无人机飞行记录详情表 数据传输对象实体类 |
| | |
| | | * @since 2026-01-08 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class FwDroneFlightRecordDetailDTO extends FwDroneFlightRecordDetailEntity { |
| | | public class FwDroneFlightRecordDetailDTO { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("主键id") |
| | | private Long id; |
| | | |
| | | /** |
| | | * 飞行记录表ID |
| | | */ |
| | | @ApiModelProperty(value = "飞行记录表ID") |
| | | private Long flightRecordId; |
| | | /** |
| | | * 经度 |
| | | */ |
| | | @ApiModelProperty(value = "经度") |
| | | private Double longitude; |
| | | /** |
| | | * 纬度 |
| | | */ |
| | | @ApiModelProperty(value = "纬度") |
| | | private Double latitude; |
| | | /** |
| | | * 点位时间 |
| | | */ |
| | | @ApiModelProperty(value = "点位时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date pointTime; |
| | | /** |
| | | * 区域编码 |
| | | */ |
| | | @ApiModelProperty(value = "区域编码") |
| | | private String areaCode; |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | |
| | | */ |
| | | @TableField("alarm_time") |
| | | @ApiModelProperty(value = "告警时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date alarmTime; |
| | | /** |
| | | * 触发原因 |
| | |
| | | @ApiModelProperty(value = "飞行速度(m/s)") |
| | | private BigDecimal flightSpeedMs; |
| | | /** |
| | | * 停留时长 HH:MM:SS |
| | | * 停留时长 (秒) |
| | | */ |
| | | @TableField("stay_duration") |
| | | @ApiModelProperty(value = "停留时长 HH:MM:SS") |
| | | private LocalTime stayDuration; |
| | | @ApiModelProperty(value = "停留时长(秒)") |
| | | private String stayDuration; |
| | | /** |
| | | * 反制方式:信号干扰/诱导驱离/无 |
| | | */ |
| | |
| | | */ |
| | | package org.sxkj.fw.record.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import org.springblade.core.tenant.mp.TenantEntity; |
| | | import org.springblade.core.mp.base.BaseEntity; |
| | | |
| | | import java.util.Date; |
| | | |
| | |
| | | @TableName("ja_fw_drone_flight_record_detail") |
| | | @ApiModel(value = "FwDroneFlightRecordDetail对象", description = "无人机飞行记录详情表") |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class FwDroneFlightRecordDetailEntity extends TenantEntity { |
| | | public class FwDroneFlightRecordDetailEntity extends BaseEntity { |
| | | |
| | | /** |
| | | * 飞行记录表ID |
| | |
| | | import com.alibaba.excel.annotation.write.style.ColumnWidth; |
| | | import com.alibaba.excel.annotation.write.style.ContentRowHeight; |
| | | import com.alibaba.excel.annotation.write.style.HeadRowHeight; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import org.sxkj.fw.utils.excel.ExcelDictConverter; |
| | | import org.sxkj.fw.utils.excel.ExcelDictItem; |
| | | import org.sxkj.fw.utils.excel.ExcelDictItemLabel; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalTime; |
| | | import java.util.Date; |
| | | |
| | | |
| | |
| | | * 无人机类型(微型机/植保机...) |
| | | */ |
| | | @ColumnWidth(20) |
| | | @ExcelProperty("无人机类型(微型机/植保机...)") |
| | | @ExcelProperty( value = "无人机类型(微型机/植保机...)",converter = ExcelDictConverter.class) |
| | | @ExcelDictItemLabel(type = "droneType") |
| | | @ExcelDictItem(type = "droneType") |
| | | private String droneType; |
| | | /** |
| | | * 告警类型:实时告警/历史告警 |
| | |
| | | */ |
| | | @ColumnWidth(20) |
| | | @ExcelProperty("告警时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date alarmTime; |
| | | /** |
| | | * 触发原因 |
| | |
| | | * 飞行状态:侦测中/反制中 |
| | | */ |
| | | @ColumnWidth(20) |
| | | @ExcelProperty("飞行状态:侦测中/反制中") |
| | | @ExcelProperty(value = "飞行状态:侦测中/反制中", converter = ExcelDictConverter.class) |
| | | @ExcelDictItemLabel(type = "flightStatus") |
| | | @ExcelDictItem(type = "flightStatus") |
| | | private String flightStatus; |
| | | /** |
| | | * 当前经度 |
| | |
| | | @ExcelProperty("飞行速度(m/s)") |
| | | private BigDecimal flightSpeedMs; |
| | | /** |
| | | * 停留时长 HH:MM:SS |
| | | * 停留时长 (秒) |
| | | */ |
| | | @ColumnWidth(20) |
| | | @ExcelProperty("停留时长 HH:MM:SS") |
| | | private LocalTime stayDuration; |
| | | @ExcelProperty(value = "停留时长(秒)") |
| | | private String stayDuration; |
| | | /** |
| | | * 反制方式:信号干扰/诱导驱离/无 |
| | | */ |
| | | @ColumnWidth(20) |
| | | @ExcelProperty("反制方式:信号干扰/诱导驱离/无") |
| | | @ExcelProperty(value = "反制方式:信号干扰/诱导驱离/无", converter = ExcelDictConverter.class) |
| | | @ExcelDictItemLabel(type = "counterWay") |
| | | @ExcelDictItem(type = "counterWay") |
| | | private String counterWay; |
| | | /** |
| | | * 区域id ja_fw_area_divide |
| | |
| | | @ColumnWidth(20) |
| | | @ExcelProperty("区域编码") |
| | | private String areaCode; |
| | | /** |
| | | * 删除标志(0存在 1删除) |
| | | */ |
| | | @ColumnWidth(20) |
| | | @ExcelProperty("删除标志(0存在 1删除)") |
| | | private Byte isDeleted; |
| | | |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.alibaba.excel.write.style.row.AbstractRowHeightStyleStrategy; |
| | | import org.apache.poi.ss.usermodel.Cell; |
| | | import org.apache.poi.ss.usermodel.Row; |
| | | |
| | | import java.util.Iterator; |
| | | |
| | | /** |
| | | * 自适应行高 |
| | | * @author zhongrj |
| | | * @since 2021-10-29 |
| | | */ |
| | | public class CustomCellWriteHeightConfig extends AbstractRowHeightStyleStrategy { |
| | | /** |
| | | * 默认高度 |
| | | */ |
| | | private static final Integer DEFAULT_HEIGHT = 300; |
| | | |
| | | @Override |
| | | protected void setHeadColumnHeight(Row row, int relativeRowIndex) { |
| | | } |
| | | |
| | | @Override |
| | | protected void setContentColumnHeight(Row row, int relativeRowIndex) { |
| | | Iterator<Cell> cellIterator = row.cellIterator(); |
| | | if (!cellIterator.hasNext()) { |
| | | return; |
| | | } |
| | | |
| | | // 默认为 1行高度 |
| | | Integer maxHeight = 1; |
| | | while (cellIterator.hasNext()) { |
| | | Cell cell = cellIterator.next(); |
| | | switch (cell.getCellTypeEnum()) { |
| | | case STRING: |
| | | if (cell.getStringCellValue().indexOf("\n") != -1) { |
| | | int length = cell.getStringCellValue().split("\n").length; |
| | | maxHeight = Math.max(maxHeight, length); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | row.setHeight((short) (maxHeight * DEFAULT_HEIGHT)); |
| | | } |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.alibaba.excel.enums.CellDataTypeEnum; |
| | | import com.alibaba.excel.metadata.Head; |
| | | import com.alibaba.excel.metadata.data.CellData; |
| | | import com.alibaba.excel.metadata.data.WriteCellData; |
| | | import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; |
| | | import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy; |
| | | import org.apache.poi.ss.usermodel.Cell; |
| | | import org.apache.poi.ss.usermodel.Sheet; |
| | | import org.springblade.core.tool.utils.CollectionUtil; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 自适应行款 |
| | | * @author zhongrj |
| | | * @since 2021-10-29 |
| | | */ |
| | | public class CustomCellWriteWeightConfig extends AbstractColumnWidthStyleStrategy { |
| | | private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>(); |
| | | |
| | | @Override |
| | | protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { |
| | | // 在3.0版本中,列宽设置逻辑已改变,使用此方法进行设置 |
| | | Sheet sheet = writeSheetHolder.getSheet(); |
| | | Integer columnWidth = CACHE.get(writeSheetHolder.getSheetNo()) != null ? |
| | | CACHE.get(writeSheetHolder.getSheetNo()).get(cell.getColumnIndex()) : null; |
| | | if (columnWidth != null) { |
| | | sheet.setColumnWidth(cell.getColumnIndex(), columnWidth * 256); |
| | | } |
| | | |
| | | super.setColumnWidth(writeSheetHolder, cellDataList, cell, head, relativeRowIndex, isHead); |
| | | } |
| | | |
| | | /** |
| | | * 计算长度 |
| | | * @param cellDataList |
| | | * @param cell |
| | | * @param isHead |
| | | * @return |
| | | */ |
| | | private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) { |
| | | if (isHead) { |
| | | return cell.getStringCellValue().getBytes().length; |
| | | } else { |
| | | CellData cellData = cellDataList.get(0); |
| | | CellDataTypeEnum type = cellData.getType(); |
| | | if (type == null) { |
| | | return -1; |
| | | } else { |
| | | switch (type) { |
| | | case STRING: |
| | | // 换行符(数据需要提前解析好) |
| | | int index = cellData.getStringValue().indexOf("\n"); |
| | | return index != -1 ? |
| | | cellData.getStringValue().substring(0, index).getBytes().length + 1 : cellData.getStringValue().getBytes().length + 1; |
| | | case BOOLEAN: |
| | | return cellData.getBooleanValue().toString().getBytes().length; |
| | | case NUMBER: |
| | | return cellData.getNumberValue().toString().getBytes().length; |
| | | default: |
| | | return -1; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.alibaba.excel.converters.Converter; |
| | | import com.alibaba.excel.enums.CellDataTypeEnum; |
| | | import com.alibaba.excel.metadata.GlobalConfiguration; |
| | | import com.alibaba.excel.metadata.data.ReadCellData; |
| | | import com.alibaba.excel.metadata.data.WriteCellData; |
| | | import com.alibaba.excel.metadata.property.ExcelContentProperty; |
| | | import com.github.xiaoymin.knife4j.core.util.StrUtil; |
| | | import org.springframework.stereotype.Component; |
| | | import org.sxkj.system.cache.DictBizCache; |
| | | import org.sxkj.system.entity.DictBiz; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 字典映射 |
| | | * |
| | | * @author zhongrj |
| | | * @date 2023-11-17 |
| | | */ |
| | | @Component |
| | | public class ExcelDictConverter implements Converter<String> { |
| | | |
| | | @Override |
| | | public Class supportJavaTypeKey() { |
| | | return Integer.class; |
| | | } |
| | | |
| | | @Override |
| | | public CellDataTypeEnum supportExcelTypeKey() { |
| | | return CellDataTypeEnum.STRING; |
| | | } |
| | | |
| | | /** |
| | | * 导入excel 解析到java 对象 |
| | | * @param cellData |
| | | * @param contentProperty |
| | | * @param globalConfiguration |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { |
| | | // 获取字典类型 |
| | | Field field = contentProperty.getField(); |
| | | ExcelDictItemLabel excel = field.getAnnotation(ExcelDictItemLabel.class); |
| | | String dictType = excel.type(); |
| | | // 为空返回 |
| | | String dictLabel = cellData.getStringValue(); |
| | | if (StrUtil.isBlank(dictLabel)) { |
| | | return dictLabel; |
| | | } |
| | | // 查询字典 |
| | | List<DictBiz> list = DictBizCache.getList(dictType); |
| | | //解析返回 |
| | | String key = ""; |
| | | for (DictBiz dictBiz : list) { |
| | | if (dictBiz.getDictValue().equals(dictLabel)){ |
| | | key = dictBiz.getDictKey(); |
| | | break; |
| | | } |
| | | } |
| | | // 返回key |
| | | return key; |
| | | } |
| | | |
| | | /** |
| | | * java 导出到 excel |
| | | * |
| | | * @param dictValue |
| | | * @param excelContentProperty |
| | | * @param globalConfiguration |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public WriteCellData<?> convertToExcelData(String dictValue, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { |
| | | // 获取字典类型 |
| | | Field field = excelContentProperty.getField(); |
| | | ExcelDictItem excel = field.getAnnotation(ExcelDictItem.class); |
| | | String dictType = excel.type(); |
| | | List<DictBiz> list = DictBizCache.getList(dictType); |
| | | String value = ""; |
| | | //解析返回 |
| | | for (DictBiz dictBiz : list) { |
| | | if (dictBiz.getDictKey().equals(dictValue)){ |
| | | value = dictBiz.getDictValue(); |
| | | break; |
| | | } |
| | | } |
| | | return new WriteCellData<>(value); |
| | | } |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * excel导出字典转换注解 |
| | | * <p> |
| | | * 将excel导出的字典code自动转换为字典label |
| | | */ |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target(ElementType.FIELD) |
| | | @JacksonAnnotationsInside |
| | | public @interface ExcelDictItem { |
| | | |
| | | /** |
| | | * 字典type |
| | | */ |
| | | String type(); |
| | | |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * excel导入字典转换注解 |
| | | * <p> |
| | | * 将excel导入的字典label自动转换为字典code |
| | | */ |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target(ElementType.FIELD) |
| | | @JacksonAnnotationsInside |
| | | public @interface ExcelDictItemLabel { |
| | | |
| | | /** |
| | | * 字典type |
| | | */ |
| | | String type(); |
| | | |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.alibaba.excel.converters.Converter; |
| | | import com.alibaba.excel.converters.WriteConverterContext; |
| | | import com.alibaba.excel.enums.CellDataTypeEnum; |
| | | import com.alibaba.excel.metadata.GlobalConfiguration; |
| | | import com.alibaba.excel.metadata.data.ReadCellData; |
| | | import com.alibaba.excel.metadata.data.WriteCellData; |
| | | import com.alibaba.excel.metadata.property.ExcelContentProperty; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | |
| | | /** |
| | | * LocalDateTime转换器 |
| | | * |
| | | * @author |
| | | * @since 2026-01-08 |
| | | */ |
| | | public class LocalDateTimeConverter implements Converter<LocalDateTime> { |
| | | |
| | | private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | @Override |
| | | public Class<LocalDateTime> supportJavaTypeKey() { |
| | | return LocalDateTime.class; |
| | | } |
| | | |
| | | @Override |
| | | public CellDataTypeEnum supportExcelTypeKey() { |
| | | return CellDataTypeEnum.STRING; |
| | | } |
| | | |
| | | @Override |
| | | public LocalDateTime convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { |
| | | if (cellData == null || cellData.getStringValue() == null || cellData.getStringValue().trim().isEmpty()) { |
| | | return null; |
| | | } |
| | | try { |
| | | return LocalDateTime.parse(cellData.getStringValue(), TIME_FORMATTER); |
| | | } catch (Exception e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public WriteCellData<?> convertToExcelData(WriteConverterContext<LocalDateTime> context) throws Exception { |
| | | if (context.getValue() == null) { |
| | | return new WriteCellData<>(""); |
| | | } |
| | | return new WriteCellData<>(context.getValue().format(TIME_FORMATTER)); |
| | | } |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.alibaba.excel.write.handler.SheetWriteHandler; |
| | | import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; |
| | | import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; |
| | | import org.apache.poi.ss.usermodel.*; |
| | | import org.apache.poi.ss.util.CellRangeAddress; |
| | | |
| | | public class MySheetWriteHandler implements SheetWriteHandler { |
| | | @Override |
| | | public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { |
| | | Workbook workbook = writeWorkbookHolder.getWorkbook(); |
| | | Sheet sheet = workbook.getSheetAt(0); |
| | | Row row1 = sheet.createRow(0); |
| | | row1.setHeight((short) 500); |
| | | Cell cell = row1.createCell(0); |
| | | //设置单元格内容 |
| | | cell.setCellValue("附件2"); |
| | | //设置标题 |
| | | Row row2 = sheet.createRow(1); |
| | | row2.setHeight((short) 800); |
| | | Cell cell1 = row2.createCell(0); |
| | | cell1.setCellValue("存量建筑垃圾堆体治理进度月报表"); |
| | | CellStyle cellStyle = workbook.createCellStyle(); |
| | | cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); |
| | | cellStyle.setAlignment(HorizontalAlignment.CENTER); |
| | | Font font = workbook.createFont(); |
| | | font.setBold(true); |
| | | font.setFontHeight((short) 400); |
| | | cellStyle.setFont(font); |
| | | cell1.setCellStyle(cellStyle); |
| | | sheet.addMergedRegionUnsafe(new CellRangeAddress(1, 1, 0, 17)); |
| | | //设置填表日期,填报人,联系方式 |
| | | Row row3 = sheet.createRow(2); |
| | | row3.setHeight((short) 500); |
| | | row3.createCell(1).setCellValue("填表日期"); |
| | | row3.createCell(11).setCellValue("填表人"); |
| | | row3.createCell(15).setCellValue("联系方式"); |
| | | } |
| | | } |
| New file |
| | |
| | | package org.sxkj.fw.utils.excel; |
| | | |
| | | import com.alibaba.excel.metadata.Head; |
| | | import com.alibaba.excel.metadata.data.CellData; |
| | | import com.alibaba.excel.write.handler.CellWriteHandler; |
| | | import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; |
| | | import com.alibaba.excel.write.metadata.holder.WriteTableHolder; |
| | | import org.apache.poi.ss.usermodel.*; |
| | | import org.springblade.core.tool.utils.Func; |
| | | |
| | | /** |
| | | * 修改单元格格式为文本格式 |
| | | * @author zhongrj |
| | | * @since 2021-9-26 |
| | | */ |
| | | public class RowWriteHandler implements CellWriteHandler { |
| | | |
| | | public static CellStyle cellStyle; |
| | | |
| | | /** |
| | | * 设置全局变量,防止 cellStyle 创建过多报错 2021-12-16 zrj |
| | | * The maximum number of cell styles was exceeded. You can define up to 64000styles in a .xlsx workbook |
| | | * @param cellStyle |
| | | */ |
| | | public static void setCellStyle(CellStyle cellStyle) { |
| | | RowWriteHandler.cellStyle = cellStyle; |
| | | } |
| | | |
| | | @Override |
| | | public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) { |
| | | //设置单元格格式为文本 |
| | | Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); |
| | | //自定义样式不为空时,重复利用 |
| | | if(Func.isEmpty(cellStyle)){ |
| | | cellStyle = workbook.createCellStyle(); |
| | | setCellStyle(cellStyle); |
| | | } |
| | | DataFormat dataFormat = workbook.createDataFormat(); |
| | | cellStyle.setDataFormat(dataFormat.getFormat("@")); |
| | | cell.setCellStyle(cellStyle); |
| | | } |
| | | |
| | | //@Override 加上会报错 |
| | | public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) { |
| | | |
| | | } |
| | | |
| | | // @Override |
| | | // public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) { |
| | | // |
| | | // } |
| | | } |