廖井涛
2025-07-23 25ae4025978ef7498db9790b237fa5a26698b1ec
Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
1个文件已添加
12个文件已修改
648 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/lang/zh.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/DamageReport.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/Report.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/TeamOutput.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/WorkInProgress.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/WorkInProgressCombination.vue 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/dto/pp/WorkInProgressCombinationDTO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/Report.xml 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/zh.js
@@ -1014,7 +1014,7 @@
        },
        teamsGroupsName:'上工序报工',
        productionReport:'生产报表',
        workInProgressReport:'在制品报表',
        workInProgressReport:'在制品明细报表',
        WorkInProgressCombination:'在制品汇总报表',
        processToBeCompleted:'工序待完成报表',
        productionAndShippingProgress:'生产发货进度报表',
north-glass-erp/northglass-erp/src/views/pp/report/DamageReport.vue
@@ -6,7 +6,6 @@
import deepClone from "@/utils/deepClone";
import {ElDatePicker, ElMessage} from "element-plus";
import {useI18n} from 'vue-i18n'
import exportExcel from "@/hook/exportExcel";
import footSum from "@/hook/footSum"
import {changeFilterEvent} from "@/hook"
//语言获取
@@ -347,7 +346,41 @@
})
function exportExcel(url, fileName,date) {
  if(date===null){
    ElMessage.warning(t('report.pleaseSelectADateFirst'))
    return
  }
  const date1 = new Date(date[0]);
  const date2 = new Date(date[1]);
  const timeDiff = Math.abs(date2.getTime() - date1.getTime());
  const daysDiff = timeDiff / (1000 * 3600 * 24);
  if(Math.floor(daysDiff)>180){
    ElMessage.warning(t('report.theFilteringTimeForExportCannotExceed180Days'))
    return
  }
  let dataMp = ref({
    date: date,
  })
  request.post(url,dataMp.value,{responseType :'blob'}).then(res => {
    const blob = new Blob([res])
    if ('download' in document.createElement('a')) { // 非IE下载
      const elink = document.createElement('a')
      elink.download = `${fileName}.xlsx`
      elink.style.display = 'none'
      elink.href = URL.createObjectURL(blob)
      document.body.appendChild(elink)
      elink.click()
      URL.revokeObjectURL(elink.href) // 释放URL 对象
      document.body.removeChild(elink)
    } else { // IE10+下载
      navigator.msSaveBlob(blob, fileName)
    }
  })
}
</script>
<template>
north-glass-erp/northglass-erp/src/views/pp/report/Report.vue
@@ -46,7 +46,7 @@
        <el-sub-menu index="1" >
          <template #title >{{$t('report.productionReport')}}</template>
<!--          <el-menu-item index="/main/report/WorkInProgressCombination">{{$t('report.WorkInProgressCombination')}}</el-menu-item>-->
          <el-menu-item index="/main/report/WorkInProgressCombination">{{$t('report.WorkInProgressCombination')}}</el-menu-item>
          <el-menu-item index="/main/report/WorkInProgress">{{$t('report.workInProgressReport')}}</el-menu-item>
          <el-menu-item index="/main/report/ProcessToBeCompleted">{{$t('report.processToBeCompleted')}}</el-menu-item>
          <el-menu-item index="/main/report/ProductionSchedule">{{$t('report.productionAndShippingProgress')}}</el-menu-item>
north-glass-erp/northglass-erp/src/views/pp/report/TeamOutput.vue
@@ -1,12 +1,14 @@
<script setup>
import {reactive, ref} from "vue";
import {onMounted, reactive, ref} from "vue";
import {useRouter} from 'vue-router'
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
import {ElDatePicker, ElMessage} from "element-plus";
import {useI18n} from 'vue-i18n'
import footSum from "@/hook/footSum"
import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove"
import {VxeUI} from "vxe-pc-ui";
//语言获取
const {t} = useI18n()
let router = useRouter()
@@ -76,6 +78,11 @@
  return [start, end];
}
onMounted(() => {
  //启用表格拖动选中
  addListener(xGrid.value, gridOptions)
})
//第一次加载获取近七天时间和默认状态
form.date1 = getNowTime()
@@ -429,6 +436,10 @@
  })
}
const handleCellDblClick = ({ row, column, cell, $event }) => {
  VxeUI.clipboard.copy(row[column.property])
}
</script>
<template>
@@ -466,6 +477,7 @@
          height="100%"
          v-bind="gridOptions"
          @filter-change="filterChanged"
          @cell-dblclick="handleCellDblClick"
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
@@ -524,4 +536,11 @@
  width: 100%;
  height: calc(100% - 35px);
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/pp/report/WorkInProgress.vue
@@ -1,6 +1,6 @@
<script setup>
import {reactive, ref} from "vue";
import {onMounted, reactive, ref} from "vue";
import {useRouter} from 'vue-router'
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
@@ -8,6 +8,8 @@
import {useI18n} from 'vue-i18n'
//import {changeFilterEvent, filterChanged} from "@/hook"
import footSum from "@/hook/footSum"
import {addListener} from "@/hook/mouseMove";
import {VxeUI} from "vxe-pc-ui";
//语言获取
const {t} = useI18n()
let router = useRouter()
@@ -72,7 +74,10 @@
let pageNum = ref(1)
let pageState = null
onMounted(() => {
  //启用表格拖动选中
  addListener(xGrid.value, gridOptions)
})
//第一次加载
let selectProcesses = value.value
@@ -343,7 +348,7 @@
        const List = ["quantity",'stockNum','stockArea',]
        if (List.includes(column.field)) {
          //return footSum(data, column.field)
          return total.value?.[column.field] ?? 0
          return footSum(data, column.field)
        }
        return ''
      })
@@ -425,6 +430,10 @@
  //   VXETable.updateColumns(tableRef.value, columns);
  // }
}
const handleCellDblClick = ({ row, column, cell, $event }) => {
  VxeUI.clipboard.copy(row[column.property])
}
</script>
<template>
@@ -462,7 +471,7 @@
          v-bind="gridOptions"
          :optimize="true"
          @filter-change="filterChanged"
          @cell-dblclick="handleCellDblClick"
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
        <!--      下拉显示所有信息插槽-->
@@ -527,4 +536,11 @@
  width: 100%;
  height: calc(100% - 35px);
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/pp/report/WorkInProgressCombination.vue
@@ -1,13 +1,15 @@
<script setup>
import {reactive, ref} from "vue";
import {onMounted, reactive, ref} from "vue";
import {useRouter} from 'vue-router'
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
import {ElCheckbox, ElDatePicker, ElMessage} from "element-plus";
import {useI18n} from 'vue-i18n'
//import {changeFilterEvent, filterChanged} from "@/hook"
import { filterChanged} from "@/hook"
import footSum from "@/hook/footSum"
import {addListener} from "@/hook/mouseMove";
import {VxeUI} from "vxe-pc-ui";
//语言获取
const {t} = useI18n()
let router = useRouter()
@@ -74,7 +76,10 @@
let pageNum = ref(1)
let pageState = null
onMounted(() => {
  //启用表格拖动选中
  addListener(xGrid.value, gridOptions)
})
//第一次加载
let selectProcesses = value.value
@@ -113,7 +118,7 @@
    // total.dataTotal = res.data.total.total*1
    // total.pageTotal= res.data.total.pageTotal
    // pageTotal.value = res.data.total
    // total.value = res.data.total
     total.value = res.data.total
    // produceList = produceList.value.concat(deepClone(res.data.data))
    titleSelectJson.value.processType = res.data.process
    titleSelectJson.value.processType.splice(0,1)
@@ -179,13 +184,12 @@
      // total.dataTotal = res.data.total.total * 1
      // total.pageTotal = res.data.total.pageTotal
      // pageTotal.value = res.data.total
      // total.value = res.data.total
       total.value = res.data.total
      xGrid.value.loadData(res.data.data)
      gridOptions.loading = false
    } else {
      ElMessage.warning(res.msg)
    }
    //handleUpdateData(produceList)
  })
}
@@ -203,25 +207,7 @@
  $panel.changeOption(event, !!option.data, option)
}
function filterChanged(column){
  gridOptions.loading = true
  //筛选条件发生变化条件发生变化
  let value = column.datas[0] != undefined ? column.datas[0] : ''
  value = value.trim()
  //判断是否存在外键
  if (column.property.indexOf('.') > -1) {
    const columnArr = column.property.split('.')
    filterData.value[columnArr[0]] = {
      [columnArr[1]]: value
    }
  } else {
    filterData.value[column.property] = value
  }
  getWorkOrder()
}
/*后端返回结果多层嵌套展示*/
const hasDecimal = (value) => {
@@ -265,16 +251,20 @@
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {
      field: 'thisProcess', width: 120, title: t('report.workingProcedure'),
      visible: true
      visible: true, filters: [{data: ''}],slots: {filter: 'num1_filter'},
      filterMethod: filterChanged,
    },
    {
      field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged,
      visible: true
    },
    {field: 'stockNum', width: 120, title: t('productStock.inventoryQuantity'),visible: true},
    {field: 'stockArea', width: 120, title: t('report.inventoryArea'),visible: true},
    {field: 'glassName', width: 120, title:  t('report.workProcessName'),visible: true},
    {field: 'glassName', width: 420, title:  t('report.workProcessName'),visible: true, filters: [{data: ''}]
      ,slots: {filter: 'num1_filter'},
      filterMethod: filterChanged,},
  ],//表头按钮
  toolbarConfig: {
@@ -301,7 +291,7 @@
        const List = ["quantity",'stockNum','stockArea',]
        if (List.includes(column.field)) {
          //return footSum(data, column.field)
          return total.value?.[column.field] ?? 0
          return footSum(data, column.field)
        }
        return ''
      })
@@ -309,6 +299,10 @@
  },
})
function onlandingSequenceChange(checked) {
  projectSummary.value = checked ? 0 : 1
}
function exportExcel(url, fileName,date) {
  let processes = value.value
@@ -362,39 +356,18 @@
  })
}
const handleUpdateData = (data) =>{
  // const usedColumns = new Set();
  // data.forEach(row => {
  //   Object.keys(row).forEach(key => {
  //     usedColumns.add(key);
  //   });
  // });
  // // 更新 columns 数组的 visible 属性来控制列的显示
  // gridOptions.columns.forEach(column => {
  //
  //   column.visible = usedColumns.has(column.field);
  // });
  //const columns = gridOptions.columns;
  // const ageColumn = columns.find(col => col.property === 'age');
  // if (ageColumn) {
  //   ageColumn.visible = !ageColumn.visible;
  //   VXETable.updateColumns(tableRef.value, columns);
  // }
}
function onlandingSequenceChange(checked) {
  projectSummary.value = checked ? 0 : 1
const handleCellDblClick = ({ row, column, cell, $event }) => {
  VxeUI.clipboard.copy(row[column.property])
}
</script>
<template>
  <div  style="width: 100%;height: 100%">
    <div class="head">
      <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 130px"></el-input>
      <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 130px;display: none"></el-input>
      &nbsp;&nbsp;
      <el-input v-model="form.project" clearable :placeholder="$t('order.project')" style="width: 130px"></el-input>
      &nbsp;
      <el-input v-model="form.project" clearable :placeholder="$t('order.project')" style="width: 130px;display: none"></el-input>
      {{$t('report.workingProcedure')}}:
        <el-select v-model="value" clearable :placeholder="$t('reportingWorks.selectProcess')" default-value="default_city" style="width: 120px">
          <el-option
              v-for="item in titleSelectJson['processType']"
@@ -420,8 +393,7 @@
          height="100%"
          v-bind="gridOptions"
          :optimize="true"
          @filter-change="filterChanged"
          @cell-dblclick="handleCellDblClick"
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
        <!--      下拉显示所有信息插槽-->
@@ -444,29 +416,30 @@
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input v-model="option.data" type="text"
              <input type="text"
                     v-model="option.data"
                     @keyup.enter.native="$panel.confirmFilter()"
                     @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
        <template #pager>
          <!--使用 pager 插槽-->
          <!--        'PrevJump','NextJump', -->
          <vxe-pager
              v-model:current-page="pageNum"
              v-model:page-size="total.pageSize"
              v-model:pager-count="total.pageTotal"
              :layouts="[  'PrevPage', 'Jump','PageCount', 'NextPage',  'Total']"
              :total="total.dataTotal"
              @page-change="handlePageChange"
          >
          </vxe-pager>
        </template>
<!--        <template #pager>-->
<!--          &lt;!&ndash;使用 pager 插槽&ndash;&gt;-->
<!--          &lt;!&ndash;        'PrevJump','NextJump', &ndash;&gt;-->
<!--          <vxe-pager-->
<!--              v-model:current-page="pageNum"-->
<!--              v-model:page-size="total.pageSize"-->
<!--              v-model:pager-count="total.pageTotal"-->
<!--              :layouts="[  'PrevPage', 'Jump','PageCount', 'NextPage',  'Total']"-->
<!--              :total="total.dataTotal"-->
<!--              @page-change="handlePageChange"-->
<!--          >-->
<!--          </vxe-pager>-->
<!--        </template>-->
        <template #toolbar_buttons>
          <vxe-button style="margin-right: 0.5rem"
                      @click="exportExcel('/report/exportWorkInProgress',
                                          t('report.workInProgressReport'),
                      @click="exportExcel('/report/exportWorkInProgressCombination',
                                          t('report.WorkInProgressCombination'),
                                          form.date1)">
            {{t('basicData.export')}}</vxe-button>
        </template>
@@ -486,4 +459,11 @@
  width: 100%;
  height: calc(100% - 35px);
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java
@@ -1,32 +1,22 @@
package com.example.erp.controller.pp;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateTime;
import com.example.erp.common.Constants;
import com.example.erp.common.Result;
import com.example.erp.dto.pp.*;
import com.example.erp.entity.pp.DamageDetails;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.pp.Report;
import com.example.erp.entity.sd.Order;
import com.example.erp.entity.sd.OrderDetail;
import com.example.erp.entity.sd.OrderGlassDetail;
import com.example.erp.exception.ServiceException;
import com.example.erp.service.pp.ReportService;
import com.example.erp.service.pp.WorkOrderService;
import com.example.erp.tools.DownExcel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@RestController
@Api(value = "生产报表controller", tags = {"生产报表操作接口"})
@@ -197,7 +187,7 @@
    @ApiOperation("次破明细报表导出")
    @PostMapping("/exportDamageReport")
    public void exportDamageReport(HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException {
    public void exportDamageReport(HttpServletResponse response, @RequestBody Map<String, Object> dates) throws IOException, IllegalAccessException, InstantiationException {
        //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字
        DownExcel.download(response, DamageReportDTO.class, reportService.exportDamageReportSv(dates), "DamageReport");
    }
@@ -227,14 +217,23 @@
        DownExcel.download(response, WorkInProgressDTO.class, reportService.exportWorkInProgressSv(dates), "WorkInProgress");
    }
    @ApiOperation("在制品汇总报表导出")
    @PostMapping("/exportWorkInProgressCombination")
    public void exportWorkInProgressCombination(HttpServletResponse response,
                                     @RequestBody Map<String, Object> dates)
            throws IOException, IllegalAccessException, InstantiationException {
        //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字
        DownExcel.download(response, WorkInProgressCombinationDTO.class, reportService.exportWorkInProgressCombinationSv(dates), "WorkInProgressCombination");
    }
//
    @ApiOperation("任务完成情况导出")
    @PostMapping("/exportTaskCompletionStatus")
    public void exportTaskCompletionStatus(HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException {
        //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字
        DownExcel.download(response, TaskCompletionStatusDTO.class, reportService.exportDamageReportSv(dates), "TaskCompletionStatus");
    }
//    @ApiOperation("任务完成情况导出")
//    @PostMapping("/exportTaskCompletionStatus")
//    public void exportTaskCompletionStatus(HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException {
//        //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字
//        DownExcel.download(response, TaskCompletionStatusDTO.class, reportService.exportDamageReportSv(dates), "TaskCompletionStatus");
//    }
    @ApiOperation("原片领料导出")
    @PostMapping("/exportRawMaterialRequisition")
north-glass-erp/src/main/java/com/example/erp/dto/pp/WorkInProgressCombinationDTO.java
New file
@@ -0,0 +1,19 @@
package com.example.erp.dto.pp;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class WorkInProgressCombinationDTO {
    @ExcelProperty("工序")
    private String thisProcess;
    @ExcelProperty("项目名称")
    private String project;
    @ExcelProperty("库存数")
    private Integer stockNum;
    @ExcelProperty("库存面积")
    private Double stockArea;
    @ExcelProperty("在制品名称")
    private String glassName;
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java
@@ -8,6 +8,7 @@
import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@@ -118,6 +119,10 @@
    List<String> selectProcess();
    Map<String,Object> getWorkInProgressCombinationFootSum(String process, String laminating, String optionVal);
    List<WorkInProgressCombinationDTO> exportWorkInProgressCombination(String process, String laminating, String inputVal);
//    Map<String, Integer> getWorkInProgressTotal(
//                                                @Param("selectTime1") Date selectTime1, @Param("selectTime2") Date selectTime2,
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -18,11 +18,15 @@
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static cn.hutool.core.convert.Convert.toDouble;
@Service
@DS("pp")
@@ -243,7 +247,6 @@
        Map<String, Object> map = new HashMap<>();
        List<WorkInProgressDTO> dataList2  =reportMapper.workInProgressMpdataList2(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
        if (optionVal.equals("1")){
            System.out.println(1);
            /* 根据销售单号汇总*/
            //map.put("data", reportMapper.workInProgressOrderMp(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressOrderMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
@@ -252,7 +255,6 @@
            // map.put("total", reportMapper.workInProgressOrderTotal(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
            map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO));
        }else if(optionVal.equals("2")){
            System.out.println(2);
            /* 根据流程卡号汇总*/
            //map.put("data", reportMapper.workInProgressProcessMp(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressProcessMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
@@ -481,11 +483,18 @@
        return reportMapper.exportCrossProcessBreakingMp(dates);
    }
    public List exportDamageReportSv(List<LocalDate> dates) {
        if (dates != null && dates.size() > 1) {
            dates.set(1, dates.get(1).plusDays(1)); // 将第二个日期加一天
        }
        return reportMapper.exportDamageReportMp(dates);
    //    public List exportTeamOutputSv(Map<String, Object> dates) {
//        List<LocalDate> date= (List<LocalDate>) dates.get("date");
//        String process= (String) dates.get("processes");
//        if (process.equals("全部")){
//            process="";
//        }
//        String laminating = reportMapper.getLaminating(process);
//        return reportMapper.exportTeamOutputMp(date,process,laminating);
//    }
    public List exportDamageReportSv(Map<String, Object> dates) {
        List<LocalDate> date= (List<LocalDate>) dates.get("date");
        return reportMapper.exportDamageReportMp(date);
    }
    public List exportOrderPlanDecompositionSv(List<LocalDate> dates) {
@@ -583,8 +592,13 @@
        return reportMapper.exportTeamOutputMp(date,process,laminating);
    }
    public Map<String, Object> workInProgressCombinationSv(Integer pageNum, Integer pageSize,String orderId, String inputProject, String selectProcesses, String optionVal, WorkInProgressDTO workInProgressDTO) {
    public Map<String, Object> workInProgressCombinationSv(
            Integer pageNum, Integer pageSize,
            String orderId, String inputProject, String selectProcesses,
            String optionVal, WorkInProgressDTO workInProgressDTO) {
        Integer offset = (pageNum - 1) * pageSize;
        if ("null".equals(orderId)) {
            orderId = "";
        }
@@ -592,36 +606,128 @@
            inputProject = "";
        }
        if ("null".equals(optionVal)) {
            optionVal = ("");
            optionVal = "";
        }
        if (selectProcesses.equals("全部")){
            selectProcesses="";
        if ("全部".equals(selectProcesses)) {
            selectProcesses = "";
        }
        String laminating = "";
        Map<String, Object> map = new HashMap<>();
        // 获取所有工序
        List<String> processList  = reportMapper.selectProcess();
        // 遍历每个工序并调用新方法
        List<Map<String, Object>> resultList = new ArrayList<>();
        if (selectProcesses!=""){
            laminating = reportingWorkMapper.getProcessLaminating(selectProcesses);
            List<Map<String, Object>> singleResult = reportMapper.getWorkInProgressCombination(selectProcesses,laminating,optionVal);
        Map<String, Double> totalSumMap = new HashMap<>();
            resultList.addAll(singleResult);
        }else {
        double totalStockNum = 0;
        double totalStockArea = 0;
        // 获取所有工序
        List<String> processList = reportMapper.selectProcess();
        // 最终数据集合
        List<Map<String, Object>> resultList = new ArrayList<>();
        if (!"".equals(selectProcesses)) {
            laminating = reportingWorkMapper.getProcessLaminating(selectProcesses);
            List<Map<String, Object>> singleResult =
                    reportMapper.getWorkInProgressCombination(selectProcesses, laminating, optionVal);
            if (singleResult != null && !singleResult.isEmpty()) {
                resultList.addAll(singleResult);
            }
            Map<String, Object> total =
                    reportMapper.getWorkInProgressCombinationFootSum(selectProcesses, laminating, optionVal);
            if (total != null) {
                BigDecimal stockNum = (BigDecimal) total.get("stockNum");
                BigDecimal stockArea = (BigDecimal) total.get("stockArea");
                if (stockNum != null) {
                    totalStockNum += stockNum.doubleValue();
                }
                if (stockArea != null) {
                    totalStockArea += stockArea.doubleValue();
                }
            }
        } else {
            for (String process : processList) {
                //获取报工工序是否为复合工程
                laminating = reportingWorkMapper.getProcessLaminating(process);
                List<Map<String, Object>> singleResult = reportMapper.getWorkInProgressCombination(process,laminating,optionVal);
                List<Map<String, Object>> singleResult =
                        reportMapper.getWorkInProgressCombination(process, laminating, optionVal);
                if (singleResult != null && !singleResult.isEmpty()) {
                    resultList.addAll(singleResult);
                }
                Map<String, Object> total =
                        reportMapper.getWorkInProgressCombinationFootSum(process, laminating, optionVal);
                if (total != null) {
                    BigDecimal stockNum = (BigDecimal) total.get("stockNum");
                    BigDecimal stockArea = (BigDecimal) total.get("stockArea");
                    if (stockNum != null) {
                        totalStockNum += stockNum.doubleValue();
                    }
                    if (stockArea != null) {
                        totalStockArea += stockArea.doubleValue();
                    }
                }
            }
        }
        map.put("data",resultList);
        totalSumMap.put("stockNum", totalStockNum);
        totalSumMap.put("stockArea", totalStockArea);
        map.put("data", resultList);
        map.put("total", totalSumMap);
        map.put("process", productionSchedulingMapper.selectProcess());
        return map;
    }
    public List exportWorkInProgressCombinationSv(Map<String, Object> dates) {
        String process= (String) dates.get("processes");
        if (process.equals("全部")){
            process="";
        }
        String inputVal= (String) dates.get("inputVal");
        String project= (String) dates.get("project");
        if ("null".equals(inputVal)) {
            inputVal = "";
        }
        if ("null".equals(project)) {
            project = "";
        }
        String laminating = "";
        // 获取所有工序
        List<String> processList = reportMapper.selectProcess();
        // 最终数据集合
        List<WorkInProgressCombinationDTO> resultList = new ArrayList<>();
        if (!"".equals(process)) {
            laminating = reportingWorkMapper.getProcessLaminating(process);
            List<WorkInProgressCombinationDTO> singleResult =
                    reportMapper.exportWorkInProgressCombination(process, laminating, inputVal);
            if (singleResult != null && !singleResult.isEmpty()) {
                resultList.addAll((Collection<? extends WorkInProgressCombinationDTO>) singleResult);
            }
        } else {
            for (String processVal : processList) {
                laminating = reportingWorkMapper.getProcessLaminating(processVal);
                List<WorkInProgressCombinationDTO> singleResult =
                        reportMapper.exportWorkInProgressCombination(processVal, laminating, inputVal);
                if (singleResult != null && !singleResult.isEmpty()) {
                    resultList.addAll((Collection<? extends WorkInProgressCombinationDTO>) singleResult);
                }
            }
        }
        return resultList;
    }
}
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -762,7 +762,7 @@
               fc.quantity,
               round(ogd.total_area, 2)                                       as total_area,
               od.perimeter,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius,
        if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
@@ -819,7 +819,7 @@
               fc.quantity,
               round(ogd.total_area, 2)                                       as total_area,
               od.perimeter,
               if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
@@ -1029,7 +1029,7 @@
               ogd.glass_child,
               #{process}                                                           as process,
               JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01'))                AS glassNumber,
               if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius
        FROM flow_card AS fc
                 LEFT JOIN sd.order_glass_detail AS ogd ON fc.order_id = ogd.order_id
            AND fc.order_number = ogd.order_number
@@ -1496,7 +1496,7 @@
               fc.quantity,
               round(ogd.total_area, 2)                                       as total_area,
               od.perimeter,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius,
        if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
@@ -1552,7 +1552,7 @@
               sum(fc.quantity) as quantity,
               round(ogd.total_area, 2)                                       as total_area,
               od.perimeter,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius,
        if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
@@ -1608,7 +1608,7 @@
               count(*) as quantity,
               round(ogd.child_width*ogd.child_height*count(*)/1000000, 2)                                       as total_area,
               round((ogd.child_width+ogd.child_height)*2*count(*)/1000, 2)    as perimeter,
               if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
@@ -1683,7 +1683,7 @@
               sum(pl.patch_num)                                                 as quantity,
               round(ogd.total_area, 2)                                       as total_area,
               od.perimeter,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
@@ -1859,7 +1859,7 @@
               (pl.rework_num)                                              as quantity,
               round(ogd.total_area, 2)                                     as total_area,
               od.perimeter,
               if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius,
               if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
               concat(od.processing_note, od.remarks)                       as remarks,
               od.other_columns,
               round(ogd.child_width)                                       as width,
@@ -3291,7 +3291,7 @@
        SUM(fc.quantity) as quantity,
        round(SUM(ogd.total_area), 2)                                       as total_area,
        SUM(od.perimeter) as perimeter,
        if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),'')) as bend_radius,
        if(od.bend_radius!=null || od.bend_radius!='',od.bend_radius,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04'))) as bend_radius,
        concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
        od.other_columns,
        round(ogd.child_width)                                         as width,
north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -2652,19 +2652,21 @@
                 SELECT g.*
                      ,GROUP_CONCAT(g.glass_child SEPARATOR '+')  as childName
                 from( SELECT f.*,
                              e.reporting_work_num-f.reporting_work_num as quantity,
                              (e.reporting_work_num-f.reporting_work_num)*f.area as glassArea
        e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity,
        (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea
                       from (SELECT a.order_id,
                                    a.project,
                                    C.product_id,
                                    b.order_number,
                                    b.process_id,
                                    b.technology_number,
                                    b.reporting_work_num,
                                    b.reporting_work_num_count,
                                    d.`group` ,
                                    b.broken_num,
                                    b.id,
                                    c.area,
                                    d.glass_child
                                    d.glass_child,
                                    ifnull(cb.patchNumSum,0) as patchNumSum
                             FROM sd.`order` as a
                                      LEFT JOIN sd.order_process_detail as b
@@ -2673,17 +2675,40 @@
                                                on a.order_id = c.order_id and b.order_number =c.order_number
                                      left join sd.order_glass_detail as d
                                                on  d.order_id =a.order_id and d.order_number = b.order_number and d.technology_number = b.technology_number
                                      LEFT JOIN (
                                        SELECT
                                        IFNULL(sum( rw.rework_num ),0) AS 'patchNumSum',
                                        rw.process_id,
                                        rw.order_sort,
                                        rw.technology_number,
                                        rwk.this_process
                                        FROM
                                        pp.rework AS rw
                                        LEFT JOIN pp.reporting_work AS rwk ON rw.reporting_work_id = rwk.reporting_work_id
                                        WHERE
                                        position( #{process} IN rwk.this_process )
                                        AND rw.review_status >= 0
                                        GROUP BY
                                        rw.process_id,
                                        rw.order_sort,
                                        rw.technology_number
                                        ) AS cb ON cb.process_id = b.process_id
                                        AND cb.order_sort = b.order_number
                                        AND cb.technology_number = b.technology_number
                             where a.processing_card>0
                               and a.warehousing!=2
                                and (c.quantity-b.reporting_work_num)>0
                                and (c.quantity-b.reporting_work_num_count)>0
                             GROUP BY  b.process_id, b.order_number,
                                 b.technology_number) as f
                                LEFT JOIN sd.order_process_detail as e
                                          on e.id=(f.id-1) and e.process_id = f.process_id and e.order_number = f.order_number and e.technology_number =f.technology_number
                       where
                           e.id is not null
                         and e.reporting_work_num-f.reporting_work_num>0 ) as g
                         and (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)>0 ) as g
                            <choose>
                                <when test="laminating == 'stepC' and process == '预压'">
                                    GROUP BY g.process_id, g.order_number, g.technology_number
                                </when>
                                <when test="laminating == 'stepC'">
                                    GROUP BY g.process_id, g.order_number, g.`group`
                                </when>
@@ -2707,4 +2732,178 @@
        </choose>
    </select>
    <select id="getWorkInProgressCombinationFootSum">
        select
        SUM(h.quantity) as stockNum,
        SUM(h.glassArea) as stockArea
        from (
        SELECT g.*
        ,GROUP_CONCAT(g.glass_child SEPARATOR '+')  as childName
        from( SELECT f.*,
        e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity,
        (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea
        from (SELECT a.order_id,
        a.project,
        C.product_id,
        b.order_number,
        b.process_id,
        b.technology_number,
        b.reporting_work_num_count,
        d.`group` ,
        b.broken_num,
        b.id,
        c.area,
        d.glass_child,
        ifnull(cb.patchNumSum,0) as patchNumSum
        FROM sd.`order` as a
        LEFT JOIN sd.order_process_detail as b
        on b.process = #{process} and a.order_id =b.order_id
        LEFT JOIN sd.order_detail as c
        on a.order_id = c.order_id and b.order_number =c.order_number
        left join sd.order_glass_detail as d
        on  d.order_id =a.order_id and d.order_number = b.order_number and d.technology_number = b.technology_number
        LEFT JOIN (
        SELECT
        IFNULL(sum( rw.rework_num ),0) AS 'patchNumSum',
        rw.process_id,
        rw.order_sort,
        rw.technology_number,
        rwk.this_process
        FROM
        pp.rework AS rw
        LEFT JOIN pp.reporting_work AS rwk ON rw.reporting_work_id = rwk.reporting_work_id
        WHERE
        position( #{process} IN rwk.this_process )
        AND rw.review_status >= 0
        GROUP BY
        rw.process_id,
        rw.order_sort,
        rw.technology_number
        ) AS cb ON cb.process_id = b.process_id
        AND cb.order_sort = b.order_number
        AND cb.technology_number = b.technology_number
        where a.processing_card>0
        and a.warehousing!=2
        and (c.quantity-b.reporting_work_num_count)>0
        GROUP BY  b.process_id, b.order_number,
        b.technology_number) as f
        LEFT JOIN sd.order_process_detail as e
        on e.id=(f.id-1) and e.process_id = f.process_id and e.order_number = f.order_number and e.technology_number =f.technology_number
        where
        e.id is not null
        and e.reporting_work_num_count-f.reporting_work_num_count>0 ) as g
        <choose>
            <when test="laminating == 'stepC' and process == '预压'">
                GROUP BY g.process_id, g.order_number, g.technology_number
            </when>
            <when test="laminating == 'stepC'">
                GROUP BY g.process_id, g.order_number, g.`group`
            </when>
            <when test="laminating == 'stepD'">
                GROUP BY g.process_id, g.order_number
            </when>
            <otherwise>
                GROUP BY g.process_id, g.order_number, g.technology_number
            </otherwise>
        </choose>
        ) as h
    </select>
    <select id="exportWorkInProgressCombination">
        select
        #{process} as thisProcess,
        if(#{inputVal} = 1,'',h.project) as project,
        SUM(h.quantity) as stockNum,
        SUM(h.glassArea) as stockArea,
        if(#{inputVal} = 1,'',h.childName) as glassName
        from (
        SELECT g.*
        ,GROUP_CONCAT(g.glass_child SEPARATOR '+')  as childName
        from( SELECT f.*,
        e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity,
        (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea
        from (SELECT a.order_id,
        a.project,
        C.product_id,
        b.order_number,
        b.process_id,
        b.technology_number,
        b.reporting_work_num_count,
        d.`group` ,
        b.broken_num,
        b.id,
        c.area,
        d.glass_child,
        ifnull(cb.patchNumSum,0) as patchNumSum
        FROM sd.`order` as a
        LEFT JOIN sd.order_process_detail as b
        on b.process = #{process} and a.order_id =b.order_id
        LEFT JOIN sd.order_detail as c
        on a.order_id = c.order_id and b.order_number =c.order_number
        left join sd.order_glass_detail as d
        on  d.order_id =a.order_id and d.order_number = b.order_number and d.technology_number = b.technology_number
        LEFT JOIN (
        SELECT
        IFNULL(sum( rw.rework_num ),0) AS 'patchNumSum',
        rw.process_id,
        rw.order_sort,
        rw.technology_number,
        rwk.this_process
        FROM
        pp.rework AS rw
        LEFT JOIN pp.reporting_work AS rwk ON rw.reporting_work_id = rwk.reporting_work_id
        WHERE
        position( #{process} IN rwk.this_process )
        AND rw.review_status >= 0
        GROUP BY
        rw.process_id,
        rw.order_sort,
        rw.technology_number
        ) AS cb ON cb.process_id = b.process_id
        AND cb.order_sort = b.order_number
        AND cb.technology_number = b.technology_number
        where a.processing_card>0
        and a.warehousing!=2
        and (c.quantity-b.reporting_work_num_count)>0
        GROUP BY  b.process_id, b.order_number,
        b.technology_number) as f
        LEFT JOIN sd.order_process_detail as e
        on e.id=(f.id-1) and e.process_id = f.process_id and e.order_number = f.order_number and e.technology_number =f.technology_number
        where
        e.id is not null
        and (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)>0 ) as g
        <choose>
            <when test="laminating == 'stepC' and process == '预压'">
                GROUP BY g.process_id, g.order_number, g.technology_number
            </when>
            <when test="laminating == 'stepC'">
                GROUP BY g.process_id, g.order_number, g.`group`
            </when>
            <when test="laminating == 'stepD'">
                GROUP BY g.process_id, g.order_number
            </when>
            <otherwise>
                GROUP BY g.process_id, g.order_number, g.technology_number
            </otherwise>
        </choose>
        ) as h
        <choose>
            <when test="inputVal == 1">
                GROUP BY thisProcess
            </when>
            <otherwise>
                GROUP BY h.project,h.childName
            </otherwise>
        </choose>
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -102,7 +102,7 @@
    </select>
    <select id="SelectWorkBasicTeamsMp">
        select * from erp_user_info.`user` WHERE address=#{process}
        select id,login_name,user_name,address from erp_user_info.`user` WHERE address=#{process}
    </select>
    <!--    查询流程卡工艺流程-->