|
|
@@ -490,6 +490,70 @@ public class IotRyDailyReportController {
|
|
|
return success(resultMap);
|
|
|
}
|
|
|
|
|
|
+ @GetMapping("/exportNptStatistics")
|
|
|
+ @Operation(summary = "导出 瑞鹰日报 非生产时效 统计")
|
|
|
+ @PreAuthorize("@ss.hasPermission('pms:iot-ry-daily-report:export')")
|
|
|
+ public void exportNptStatistics(@Valid IotRyDailyReportPageReqVO pageReqVO,
|
|
|
+ HttpServletResponse response) throws IOException {
|
|
|
+ // 根据查询参数筛选出 符合条件 的记录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<IotRyDailyReportNptStatisticsRespVO> statistics = iotRyDailyReportService.nptStatistics(pageReqVO);
|
|
|
+
|
|
|
+ if (CollUtil.isNotEmpty(statistics)) {
|
|
|
+ statistics.forEach(stat -> {
|
|
|
+ // 将npt合计占比转换成 % 形式
|
|
|
+ BigDecimal nptRate = stat.getNptRate();
|
|
|
+ if (ObjUtil.isEmpty(nptRate) || nptRate.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ stat.setNptRateFormat("0.00%");
|
|
|
+ } else {
|
|
|
+ // 转换逻辑:乘以100 → 保留2位小数(四舍五入)→ 拼接%
|
|
|
+ BigDecimal percent = nptRate.multiply(new BigDecimal("100"))
|
|
|
+ .setScale(2, RoundingMode.HALF_UP);
|
|
|
+ stat.setNptRateFormat(percent + "%");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ String sheetName = StrUtil.EMPTY;
|
|
|
+ if ("1".equals(pageReqVO.getProjectClassification())) {
|
|
|
+ // 钻井日报汇总数据
|
|
|
+ sheetName = "钻井日报NPT汇总";
|
|
|
+ // 导出 Excel
|
|
|
+ ExcelUtils.write(response, "瑞鹰日报非生产时效汇总.xls", sheetName,
|
|
|
+ IotRyDailyReportNptStatisticsRespVO.class, statistics);
|
|
|
+ } else {
|
|
|
+ // 修井日报汇总数据
|
|
|
+ sheetName = "修井日报NPT汇总";
|
|
|
+ // 导出 Excel
|
|
|
+ ExcelUtils.write(response, "瑞鹰日报非生产时效汇总.xls", sheetName,
|
|
|
+ IotRyDailyReportNptStatisticsRespVO.class, statistics);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
private List<IotRyDailyReportRespVO> buildProductionBriefs(List<IotRyDailyReportDO> reports, IotRyDailyReportPageReqVO pageReqVO) {
|
|
|
if (CollUtil.isEmpty(reports)) {
|
|
|
return Collections.emptyList();
|