|
@@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletResponse;
|
|
|
import javax.validation.Valid;
|
|
import javax.validation.Valid;
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
@@ -435,4 +436,63 @@ public class IotRyDailyReportController {
|
|
|
BeanUtils.toBean(list, IotRyDailyReportRespVO.class));
|
|
BeanUtils.toBean(list, IotRyDailyReportRespVO.class));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @GetMapping("/exportStatistics")
|
|
|
|
|
+ @Operation(summary = "导出瑞鹰日报汇总 Excel")
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('pms:iot-ry-daily-report:export')")
|
|
|
|
|
+ @ApiAccessLog(operateType = EXPORT)
|
|
|
|
|
+ public void exportStatistics(@Valid IotRyDailyReportPageReqVO pageReqVO,
|
|
|
|
|
+ HttpServletResponse response) throws IOException {
|
|
|
|
|
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
|
|
|
+ // 根据查询参数筛选出 符合条件 的记录id 再传入 分页查询
|
|
|
|
|
+ Set<Long> projectIds = new HashSet<>();
|
|
|
|
|
+ Set<Long> taskIds = new HashSet<>();
|
|
|
|
|
+ if (StrUtil.isNotBlank(pageReqVO.getContractName())) {
|
|
|
|
|
+ IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
|
|
|
|
|
+ reqVO.setContractName(pageReqVO.getContractName());
|
|
|
|
|
+ List<IotProjectInfoDO> projects = iotProjectInfoService.getIotProjectInfos(reqVO);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(projects)) {
|
|
|
|
|
+ projects.forEach(project -> {
|
|
|
|
|
+ projectIds.add(project.getId());
|
|
|
|
|
+ });
|
|
|
|
|
+ pageReqVO.setProjectIds(projectIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StrUtil.isNotBlank(pageReqVO.getTaskName())) {
|
|
|
|
|
+ IotProjectTaskPageReqVO reqVO = new IotProjectTaskPageReqVO();
|
|
|
|
|
+ reqVO.setSearchKey(pageReqVO.getTaskName());
|
|
|
|
|
+ List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(reqVO);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(tasks)) {
|
|
|
|
|
+ tasks.forEach(task -> {
|
|
|
|
|
+ taskIds.add(task.getId());
|
|
|
|
|
+ });
|
|
|
|
|
+ pageReqVO.setTaskIds(taskIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ List<IotRyDailyReportStatisticsRespVO> statistics = iotRyDailyReportService.statistics(pageReqVO);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(statistics)) {
|
|
|
|
|
+ statistics.forEach(stat -> {
|
|
|
|
|
+ BigDecimal transitTime = stat.getTransitTime();
|
|
|
|
|
+ if (ObjUtil.isEmpty(transitTime) || transitTime.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
+ stat.setTransitTimePercent("0.00%");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 转换逻辑:乘以100 → 保留2位小数(四舍五入)→ 拼接%
|
|
|
|
|
+ BigDecimal percent = transitTime.multiply(new BigDecimal("100"))
|
|
|
|
|
+ .setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
+ stat.setTransitTimePercent(percent + "%");
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ String sheetName = StrUtil.EMPTY;
|
|
|
|
|
+ if ("1".equals(pageReqVO.getProjectClassification())) {
|
|
|
|
|
+ // 钻井日报汇总数据
|
|
|
|
|
+ sheetName = "钻井日报汇总数据";
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 修井日报汇总数据
|
|
|
|
|
+ sheetName = "修井日报汇总数据";
|
|
|
|
|
+ }
|
|
|
|
|
+ // 导出 Excel
|
|
|
|
|
+ ExcelUtils.write(response, "瑞鹰日报汇总.xls", sheetName,
|
|
|
|
|
+ IotRyDailyReportStatisticsRespVO.class, statistics);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|