chenlu
2025-11-26 00f14bfc32af9a921d172320212828c95a4d8f68
次破报表按时间配置
4个文件已修改
112 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/BrokenReportTemplate.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/BrokenReportTemplate.vue
@@ -10,10 +10,12 @@
import * as XLSX from "xlsx";
import {useI18n} from "vue-i18n";
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
import companyInfo from "@/stores/sd/companyInfo";
const { t } = useI18n()
const xGrid = ref()
const company = companyInfo()
let filterData = ref({})
const reportTime=company.reportTime
const orderInfo = useOrderInfoStore()
const gridOptions = reactive({
  loading:true,
@@ -184,7 +186,7 @@
    })
    return
  }
  request.post(`${props.childrenData.url}/${basicProp.value.pageNum}/${basicProp.value.pageSize}/${orderInfo.brokenDate}`,filterData.value).then(res => {
  request.post(`${props.childrenData.url}/${basicProp.value.pageNum}/${basicProp.value.pageSize}/${orderInfo.brokenDate}/${reportTime}`,filterData.value).then(res => {
    if(res.code === '200'){
      props.childrenData.data = res.data.data
      basicProp.value.pageTotal = res.data.total.pageTotal
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -475,7 +475,9 @@
      <tr v-for="(itemtextareas,index) in item.detail" :key="index">
        <td  colspan="31"  style="width: 480px;height: 150px ">
          <div style="width: 100%;height: 100%;text-align: left"><textarea style="height: 99%;width: 99%;border: none;;font-size: 14px;font-weight: bold;overflow: hidden;text-align: left;vertical-align: middle">{{itemtextareas.processing_note}}</textarea>
          <div style="width: 100%;height: 100%;text-align: left">
            <textarea v-if="!company.processFontSize" style="height: 99%;width: 99%;border: none;;font-size: 14px;font-weight: bold;overflow: hidden;text-align: left;vertical-align: middle">{{itemtextareas.processing_note}}</textarea>
            <textarea v-else style="height: 99%;width: 99%;border: none;;font-size: 36px;font-weight: bold;overflow: hidden;text-align: left;vertical-align: middle">{{itemtextareas.processing_note}}</textarea>
          </div>
        </td>
      </tr>
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java
@@ -46,22 +46,24 @@
    }
    @ApiOperation("跨工序次破")
    @PostMapping("/crossProcessBreaking/{pageNum}/{pageSize}/{selectDate}")
    @PostMapping("/crossProcessBreaking/{pageNum}/{pageSize}/{selectDate}/{reportTime}")
    public Result getOrderReport(@PathVariable Integer pageNum,
                                 @PathVariable Integer pageSize,
                                 @PathVariable List<String> selectDate,
                                 @PathVariable String reportTime,
                                 @RequestBody CrossProcessBreakingDTO crossProcessBreakingDTO) {
        return Result.success(reportService.crossProcessBreakingSv(pageNum, pageSize, selectDate, crossProcessBreakingDTO));
        return Result.success(reportService.crossProcessBreakingSv(pageNum, pageSize, selectDate,reportTime, crossProcessBreakingDTO));
    }
    @ApiOperation("非跨工序次破")
    @PostMapping("/notCrossProcessBreaking/{pageNum}/{pageSize}/{selectDate}")
    @PostMapping("/notCrossProcessBreaking/{pageNum}/{pageSize}/{selectDate}/{reportTime}")
    public Result notCrossProcessBreaking(@PathVariable Integer pageNum,
                                 @PathVariable Integer pageSize,
                                 @PathVariable List<String> selectDate,
                                 @PathVariable String reportTime,
                                 @RequestBody CrossProcessBreakingDTO crossProcessBreakingDTO) {
        return Result.success(reportService.notCrossProcessBreakingSv(pageNum, pageSize, selectDate, crossProcessBreakingDTO));
        return Result.success(reportService.notCrossProcessBreakingSv(pageNum, pageSize, selectDate,reportTime, crossProcessBreakingDTO));
    }
@@ -107,13 +109,14 @@
    }
    @ApiOperation("次破明细报表")
    @PostMapping("/damageReport/{pageNum}/{pageSize}/{selectDate}")
    @PostMapping("/damageReport/{pageNum}/{pageSize}/{selectDate}/{reportTime}")
    public Result damageReport(
            @PathVariable Integer pageNum,
            @PathVariable Integer pageSize,
            @PathVariable List<String> selectDate,
            @PathVariable String reportTime,
            @RequestBody DamageReportDTO damageReportDTO) {
        return Result.success(reportService.selectDamageReportSv(pageNum, pageSize, selectDate, damageReportDTO));
        return Result.success(reportService.selectDamageReportSv(pageNum, pageSize, selectDate,reportTime, damageReportDTO));
    }
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -26,6 +26,9 @@
import java.sql.Date;
import java.sql.SQLOutput;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.Function;
@@ -332,29 +335,47 @@
//        return map;
//    }
    private static String to080000(String s) {
        if (s == null || s.isEmpty()) return null;
        String v = s.trim();
        // 只保留日期部分(前10位 yyyy-MM-dd)
        String datePart = v.length() >= 10 ? v.substring(0, 10) : v;
        return datePart + " 08:00:00";
    private static final DateTimeFormatter DATE_TIME_FMT =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    private String toReportTime(String dateStr, String reportTime) {
        if (dateStr == null || dateStr.isEmpty()) {
            return null;
        }
        // 只保留 yyyy-MM-dd,防止前端传完整时间导致 parse 异常
        String onlyDate = dateStr.length() > 10 ? dateStr.substring(0, 10) : dateStr;
        String[] parts = reportTime.split(":");
        int hour   = Integer.parseInt(parts[0]);
        int minute = parts.length > 1 ? Integer.parseInt(parts[1]) : 0;
        int second = parts.length > 2 ? Integer.parseInt(parts[2]) : 0;
        LocalDate date = LocalDate.parse(onlyDate);
        LocalTime time = LocalTime.of(hour, minute, second);
        return LocalDateTime.of(date, time).format(DATE_TIME_FMT);
    }
    //跨工序次破
    public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize,
                                                      List<String> selectDate,
                                                      String reportTime,
                                                      CrossProcessBreakingDTO crossProcessBreakingDTO) {
        Integer offset = (pageNum - 1) * pageSize;
        // 默认时间范围:过去 15 天
        String startDate = to080000(LocalDate.now().minusDays(15).toString());
        String endDate   = to080000(LocalDate.now().toString());
        // 默认时间范围:过去 15 天(日期 + reportTime)
        String startDate = toReportTime(LocalDate.now().minusDays(15).toString(), reportTime);
        String endDate   = toReportTime(LocalDate.now().toString(), reportTime);
        // 如果前端传了时间,就用前端日期 + reportTime
        if (selectDate != null && selectDate.size() == 2) {
            if (selectDate.get(0) != null && !selectDate.get(0).isEmpty()) {
                startDate = to080000(selectDate.get(0));
                startDate = toReportTime(selectDate.get(0), reportTime);
            }
            if (selectDate.get(1) != null && !selectDate.get(1).isEmpty()) {
                endDate = to080000(selectDate.get(1));
                endDate = toReportTime(selectDate.get(1), reportTime);
            }
        }
@@ -363,7 +384,6 @@
        // 使用异步线程池
        String finalEndDate = endDate;
        String finalStartDate = startDate;
        System.out.println(finalEndDate+"==="+finalStartDate);
        CompletableFuture<List<CrossProcessBreakingDTO>> dataFuture = asyncExecutor.runAsync(() ->
                reportMapper.getProcessBreaking(offset, pageSize, finalStartDate, finalEndDate, crossProcessBreakingDTO));
@@ -392,19 +412,21 @@
    //非跨工序次破
    public Map<String, Object> notCrossProcessBreakingSv(Integer pageNum, Integer pageSize,
                                                      List<String> selectDate,
                                                      String reportTime,
                                                      CrossProcessBreakingDTO crossProcessBreakingDTO) {
        Integer offset = (pageNum - 1) * pageSize;
        // 默认时间范围:过去 15 天
        String startDate = to080000(LocalDate.now().minusDays(15).toString());
        String endDate   = to080000(LocalDate.now().toString());
        // 默认时间范围:过去 15 天(日期 + reportTime)
        String startDate = toReportTime(LocalDate.now().minusDays(15).toString(), reportTime);
        String endDate   = toReportTime(LocalDate.now().toString(), reportTime);
        // 如果前端传了时间,就用前端日期 + reportTime
        if (selectDate != null && selectDate.size() == 2) {
            if (selectDate.get(0) != null && !selectDate.get(0).isEmpty()) {
                startDate = to080000(selectDate.get(0));
                startDate = toReportTime(selectDate.get(0), reportTime);
            }
            if (selectDate.get(1) != null && !selectDate.get(1).isEmpty()) {
                endDate = to080000(selectDate.get(1));
                endDate = toReportTime(selectDate.get(1), reportTime);
            }
        }
@@ -601,25 +623,31 @@
    public Map<String, Object> selectDamageReportSv(Integer pageNum, Integer pageSize,
                                                    List<String> selectDate,
                                                    String reportTime,
                                                    DamageReportDTO damageReportDTO) {
        Integer offset = (pageNum - 1) * pageSize;
        // 默认时间范围:过去 15 天
        String startDate = to080000(LocalDate.now().minusDays(15).toString());
        String endDate   = to080000(LocalDate.now().toString());
        Integer offset = (pageNum - 1) * pageSize;
        // 默认时间范围:过去 15 天(日期 + reportTime)
        String startDate = toReportTime(LocalDate.now().minusDays(15).toString(), reportTime);
        String endDate   = toReportTime(LocalDate.now().toString(), reportTime);
        // 如果前端传了时间,就用前端日期 + reportTime
        if (selectDate != null && selectDate.size() == 2) {
            if (selectDate.get(0) != null && !selectDate.get(0).isEmpty()) {
                startDate = to080000(selectDate.get(0));
                startDate = toReportTime(selectDate.get(0), reportTime);
            }
            if (selectDate.get(1) != null && !selectDate.get(1).isEmpty()) {
                endDate = to080000(selectDate.get(1));
                endDate = toReportTime(selectDate.get(1), reportTime);
            }
        }
        Map<String, Object> result = new HashMap<>();
        String finalEndDate = endDate;
        String finalStartDate = startDate;
        // 异步任务定义
        Map<String, Object> result = new HashMap<>();
        String finalStartDate = startDate;
        String finalEndDate = endDate;
        // 异步任务定义
        CompletableFuture<List<DamageReportDTO>> dataFuture = asyncExecutor.runAsync(() ->
                reportMapper.selectDamageReportMp(offset, pageSize, finalStartDate, finalEndDate, damageReportDTO));
@@ -629,7 +657,7 @@
        CompletableFuture<Map<String, Float>> footSumFuture = asyncExecutor.runAsync(() ->
                reportMapper.damageReportFootSum(finalStartDate, finalEndDate, damageReportDTO));
        //等待全部任务完成
        // 等待全部任务完成
        CompletableFuture.allOf(dataFuture, totalFuture, footSumFuture).join();
        try {
@@ -640,6 +668,8 @@
            e.printStackTrace();
            throw new RuntimeException("并行查询异常:" + e.getMessage(), e);
        }
        // 回传前端的时间(现在是带时分秒的)
        List<String> list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);
@@ -648,6 +678,7 @@
        return result;
    }
    public Map<String, Object> splittingDetailsOutsideSv(String orderId, Report report) {
        Map<String, Object> map = new HashMap<>();
        map.put("data", reportMapper.splittingDetailsOutsideMp(orderId, report));