guoyujie
2025-05-26 02609fcedd8fb55383da0a1f823a8cba913510e7
Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
29个文件已修改
2707 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcessReplenish.vue 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcessStraight.vue 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintReworkProcess.vue 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/Optimization.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizationRectPrint.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectMange.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ComputeCard.vue 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizeCompute.vue 1537 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/RectRenderer.vue 223 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetAmount.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 145 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -174,33 +174,33 @@
    produceList.value[j].detail[0].weight = sumWeight
  }
  //处理合并打印
  if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
    produceList.value.forEach(item => {
      item.detail[0].technologyNumber = printMerge;
    });
    //合并打印工艺流程处理
    if (like == null) {
      let process = produceList.value[0].detail[0].process
      let indexOfJiaJiao = process.indexOf('夹胶');
      if (indexOfJiaJiao !== -1) {
        // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
        let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
        produceList.value.forEach(item => {
          item.detail[0].process = afterJiaJiao
        })
      }
      let indexOfProceList = produceList.value[0].processList
      let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
      if (getProceList !== -1) {
        // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
        produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
      }
    }
  }
  // if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
  //
  //   produceList.value.forEach(item => {
  //     item.detail[0].technologyNumber = printMerge;
  //   });
  //
  //   //合并打印工艺流程处理
  //   if (like == null) {
  //     let process = produceList.value[0].detail[0].process
  //     let indexOfJiaJiao = process.indexOf('夹胶');
  //     if (indexOfJiaJiao !== -1) {
  //       // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
  //       let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
  //       produceList.value.forEach(item => {
  //         item.detail[0].process = afterJiaJiao
  //       })
  //     }
  //
  //     let indexOfProceList = produceList.value[0].processList
  //     let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
  //
  //     if (getProceList !== -1) {
  //       // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
  //       produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
  //     }
  //   }
  // }
  // produceList.value.forEach(item => {
north-glass-erp/northglass-erp/src/components/pp/PrintProcessReplenish.vue
@@ -21,7 +21,8 @@
const data = ref({
  printList: []
  printList: [],
  processName:[]
})
let props = defineProps({
@@ -71,6 +72,7 @@
  request.post(`/processCard/getSelectPrintingRefund/${merge}/${like}/${mergeTechnologyNumber}`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.data)
          data.processName   = res.data.data[0].processNameList
          //处理单片厚度
          for (let j = 0; j < produceList.value.length; j++) {
@@ -93,33 +95,34 @@
            produceList.value[j].detail[0].weight = sumWeight
          }
          //处理合并打印
          if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
            produceList.value.forEach(item => {
              item.detail[0].technologyNumber = printMerge;
            });
            //合并打印工艺流程处理
            if (like == null) {
              let process = produceList.value[0].detail[0].process
              let indexOfJiaJiao = process.indexOf('夹胶');
              if (indexOfJiaJiao !== -1) {
                // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
                let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
                produceList.value.forEach(item => {
                  item.detail[0].process = afterJiaJiao
                })
              }
              let indexOfProceList = produceList.value[0].processList
              let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
              if (getProceList !== -1) {
                // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
                produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
              }
            }
          }
          // if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
          //
          //   produceList.value.forEach(item => {
          //     item.detail[0].technologyNumber = printMerge;
          //   });
          //
          //   //合并打印工艺流程处理
          //   if (like == null) {
          //     let process = produceList.value[0].detail[0].process
          //     console.log(process)
          //     let indexOfJiaJiao = process.indexOf('夹胶');
          //     if (indexOfJiaJiao !== -1) {
          //       // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
          //       let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
          //       produceList.value.forEach(item => {
          //         item.detail[0].process = afterJiaJiao
          //       })
          //     }
          //
          //     let indexOfProceList = produceList.value[0].processList
          //     let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
          //
          //     if (getProceList !== -1) {
          //       // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
          //       produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
          //     }
          //   }
          // }
          produceList.value.forEach(item => {
north-glass-erp/northglass-erp/src/components/pp/PrintProcessStraight.vue
@@ -173,33 +173,33 @@
    produceList.value[j].detail[0].weight = sumWeight
  }
  //处理合并打印
  if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
    produceList.value.forEach(item => {
      item.detail[0].technologyNumber = printMerge;
    });
    //合并打印工艺流程处理
    if (like == null) {
      let process = produceList.value[0].detail[0].process
      let indexOfJiaJiao = process.indexOf('夹胶');
      if (indexOfJiaJiao !== -1) {
        // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
        let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
        produceList.value.forEach(item => {
          item.detail[0].process = afterJiaJiao
        })
      }
      let indexOfProceList = produceList.value[0].processList
      let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
      if (getProceList !== -1) {
        // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
        produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
      }
    }
  }
  // if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
  //
  //   produceList.value.forEach(item => {
  //     item.detail[0].technologyNumber = printMerge;
  //   });
  //
  //   //合并打印工艺流程处理
  //   if (like == null) {
  //     let process = produceList.value[0].detail[0].process
  //     let indexOfJiaJiao = process.indexOf('夹胶');
  //     if (indexOfJiaJiao !== -1) {
  //       // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
  //       let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
  //       produceList.value.forEach(item => {
  //         item.detail[0].process = afterJiaJiao
  //       })
  //     }
  //
  //     let indexOfProceList = produceList.value[0].processList
  //     let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
  //
  //     if (getProceList !== -1) {
  //       // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
  //       produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
  //     }
  //   }
  // }
  // produceList.value.forEach(item => {
north-glass-erp/northglass-erp/src/components/pp/PrintReworkProcess.vue
@@ -70,33 +70,33 @@
            produceList.value[j].detail[0].weight = sumWeight
          }
          //处理合并打印
          if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
            produceList.value.forEach(item => {
              item.detail[0].technologyNumber = printMerge;
            });
            //合并打印工艺流程处理
            if (like == null) {
              let process = produceList.value[0].detail[0].process
              let indexOfJiaJiao = process.indexOf('夹胶');
              if (indexOfJiaJiao !== -1) {
                // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
                let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
                produceList.value.forEach(item => {
                  item.detail[0].process = afterJiaJiao
                })
              }
              let indexOfProceList = produceList.value[0].processList
              let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
              if (getProceList !== -1) {
                // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
                produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
              }
            }
          }
          // if (printMerge !== null && printMerge !== undefined && printMerge !== "") {
          //
          //   produceList.value.forEach(item => {
          //     item.detail[0].technologyNumber = printMerge;
          //   });
          //
          //   //合并打印工艺流程处理
          //   if (like == null) {
          //     let process = produceList.value[0].detail[0].process
          //     let indexOfJiaJiao = process.indexOf('夹胶');
          //     if (indexOfJiaJiao !== -1) {
          //       // 使用 substring 截取 "夹胶" 后面的部分,包括 "夹胶" 本身
          //       let afterJiaJiao = process.substring(indexOfJiaJiao).trim();
          //       produceList.value.forEach(item => {
          //         item.detail[0].process = afterJiaJiao
          //       })
          //     }
          //
          //     let indexOfProceList = produceList.value[0].processList
          //     let getProceList = indexOfProceList.findIndex(item => item.process === '夹胶');
          //
          //     if (getProceList !== -1) {
          //       // 使用 filter 方法过滤出 "夹胶" 及其之后的对象
          //       produceList.value[0].processList = indexOfProceList.filter((item, index) => index >= getProceList);
          //     }
          //   }
          // }
          produceList.value.forEach(item => {
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue
@@ -15,8 +15,8 @@
let money = ref("")
let otherMoneys = 0
let sumMoney = 0
let takeCare = "注意:请妥善保管好我司的玻璃架,如有丢失或损坏,按1500元只赔偿。谢谢配合!"
let remark = company.deliveryRemark
let takeCare =ref("注意:请妥善保管好我司的玻璃架,如有丢失或损坏,按1500元只赔偿。谢谢配合!")
let remark =ref(company.deliveryRemark)
@@ -298,8 +298,8 @@
            </tr>
            <tr class="day-in" style="border: 0;">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;text-align: left" class="bottom" v-for="item in  remark">
                  {{item}}
                <div style="display:flex;text-align: left;border: 0;margin-top: 10px " class="bottom" >
                  <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 20 }" v-model="remark"/>
                </div>
              </td>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/Optimization.vue
@@ -29,25 +29,26 @@
const dataLoaded = ref(false);
const selectLayout = () => {
  request.post(`/glassOptimize/selectOptimizeResult/${processId}`)
    .then((res) => {
      if (res.code == 200) {
        try {
          const parsedData = JSON.parse(res.data.data[0].Layouts);
          layoutData.value = parsedData;
          dataLoaded.value = true;
          ElMessage.success("打开版图成功");
        } catch (error) {
          ElMessage.error("解析数据时出错:", error);
        }
      } else {
        ElMessage.error(t('basicData.msg.requestFailed'));
      }
    })
    .catch((error) => {
      console.error("请求失败:", error);
      ElMessage.error(t('basicData.msg.requestFailed'));
    });
  if(processId!=="undefined"){
    request.post(`/glassOptimize/selectOptimizeResult/${processId}`)
        .then((res) => {
          if (res.code == 200) {
            try {
              const parsedData = JSON.parse(res.data.data[0].Layouts);
              layoutData.value = parsedData;
              dataLoaded.value = true;
              ElMessage.success("打开版图成功");
            } catch (error) {
              ElMessage.error("解析数据时出错:", error);
            }
          }
        })
        .catch((error) => {
          console.error("请求失败:", error);
          ElMessage.error(t('basicData.msg.ServerConnectionError'));
        });
  }
}
onMounted(() => {
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizationRectPrint.vue
@@ -1,16 +1,6 @@
<template>
  <div>
    <el-button id="button" type="primary" @click="handlePrint">打印版图</el-button>
    <el-select
      v-model="printLayout"
      placeholder="选择打印布局"
      @change="handleLayoutChange"
      style="width: 150px; margin-bottom: 10px;">
      <el-option label="四行两列" value="4rows-2cols"></el-option>
      <el-option label="三行两列" value="3rows-2cols"></el-option>
      <el-option label="三行一列" value="3rows-1col"></el-option>
      <el-option label="两行两列" value="2rows-2cols"></el-option>
    </el-select>
    <el-button id="button" type="primary" @click="handlePrint">打印</el-button>
    
    <div ref="printContainer" style="position: relative;">
      <RectRenderer 
@@ -21,7 +11,9 @@
        :printLayout="printLayout"
        :printWidth="currentPrintWidth"
        :printHeight="currentPrintHeight"
        style="position: absolute;"
        :materialDetails="materialDetails"
        :state="state"
        style=""
        v-if="dataLoaded"
      />
    </div>
@@ -33,12 +25,18 @@
import RectRenderer from './page/RectRenderer.vue';
import request from "@/utils/request";
const props = defineProps({
  project : null,
  state : null
});
const printLayout = ref('2rows-2cols');
const rectRenderer = ref(null);
const savedProjectNo = localStorage.getItem('projectNo');
const processId = savedProjectNo;
const layoutData = ref(null);
let processId = null;
const layoutData = ref();
const dataLoaded = ref(false);
const materialDetails = ref();
const state = ref();
// 定义不同布局对应的尺寸
const layoutDimensions = {
  '4rows-2cols': { width: 1000, height: 1000 },
@@ -58,9 +56,9 @@
    .then((res) => {
      if (res.code == 200) {
        try {
          const parsedData = JSON.parse(res.data.data[0].Layouts);
          layoutData.value = parsedData;
          dataLoaded.value = true;
          layoutData.value = JSON.parse(res.data.data[0].Layouts);
          materialDetails.value=res.data.optimizeUse;
          dataLoaded.value=true;
        } catch (error) {
          console.error("解析布局数据失败:", error);
        }
@@ -74,7 +72,12 @@
};
onMounted(() => {
  selectLayout();
  if (props.project) {
    processId=props.project.projectNumber;
    state.value=props.state;
    selectLayout();
  }
});
const handlePrint = () => {
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
@@ -4,6 +4,7 @@
    :layoutData="layoutData" 
    :gw="1400"
    :gh="800"
    :state=0
    style="width: 1500px; height: 800px; position: relative;"
    v-if="dataLoaded"
  />
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue
@@ -349,7 +349,8 @@
                >
                  <option 
                    v-for="option in getOptions(param.key)" 
                    :key="option.value"
                    :key="option.value"
                    :value="option.value"
                    :selected="option.value === settings.optimization[param.key]"
                  >
                    {{ option.label }}
@@ -369,7 +370,7 @@
      </template>
    </div>
    <button class="button" @click="saveToDatabase">保存</button>
    <button class="button" style="height: 40px;" @click="saveToDatabase">保存</button>
  </div>
</template>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue
@@ -4,11 +4,13 @@
import ProjectCreate from "@/views/pp/glassOptimize/ProjectCreate.vue"
import GlassComputed from "@/views/pp/glassOptimize/GlassComputed.vue";
import ProjectMange from "@/views/pp/glassOptimize/ProjectMange.vue";
import OptimizationRectPrint from "@/views/pp/glassOptimize/OptimizationRectPrint.vue";
import {ref} from "vue";
import {ElMessage} from "element-plus";
let dialogVisible = ref(false)
let detailPage = ref(0)
let state = ref(1)
const changeDialog = (value) => {
  dialogVisible.value = true
  detailPage.value = value
@@ -21,6 +23,18 @@
const switchDialog = (number) => {
  projectNumber.value = number;
  detailPage.value = 3;
};
const switchDialog1 = (number) => {
  projectNumber.value = number;
  detailPage.value = 4;
  state.value=1;
};
const switchDialog2 = (number) => {
  projectNumber.value = number;
  detailPage.value = 4;
  state.value=2;
};
//工程管理关闭弹窗
@@ -79,12 +93,14 @@
       v-model="dialogVisible"
       :title="detailPage ===1? '创建工程' : detailPage ===2? '工程管理' : detailPage ===3? '模拟计算':''"
       destroy-on-close
       style="width: 90%;height:90%;margin-top: 3vh"
       style="width: 90%;height:90%;margin-top: 3vh;overflow: auto"
       z-index="100"
   >
     <project-create v-if="detailPage===1" @switch-dialog="switchDialog"/>
     <project-mange  v-if="detailPage===2" @switch-dialog="switchDialog" @closeDetailPage="handlePopupClose"/>
     <project-mange  v-if="detailPage===2" @switch-dialog="switchDialog" @switch-dialog-print="switchDialog1"
                     @switch-dialog-print2="switchDialog2" @closeDetailPage="handlePopupClose"/>
     <glass-computed v-if="detailPage===3" :project="projectNumber"/>
     <optimization-rect-print  v-if="detailPage===4"  :project="projectNumber" :state="state"/>
     <div v-else></div>
   </el-dialog>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/ProjectMange.vue
@@ -104,6 +104,8 @@
          {code: 'viewTempered', name: '查看钢化版图', prefixIcon: 'vxe-icon-custom-column'},
          {code: 'viewOptimize', name: '查看优化版图', prefixIcon: 'vxe-icon-layout'},
          {code: 'Export', name: '数据导出', prefixIcon: 'vxe-icon-download', visible: true, disabled: false},
          {code: 'print', name: '打印优化报告', prefixIcon: 'vxe-icon-layout'},
          {code: 'print2', name: '打印优化版图报告', prefixIcon: 'vxe-icon-layout'},
        ],
        []
@@ -153,6 +155,32 @@
    actionFunction: async ({row}) => {
      const projectNo = row.projectNumber;
      emit('switch-dialog', row);
    }
  },
  {
    code: 'print', // 打印
    initialState: '1',
    temperingState: '0',
    targetState: null,
    successMsg: '模拟计算已启动!',
    checkMessage: '当前工程状态不符合模拟计算条件,请确认工程状态后再操作!',
    requiresRow: true,
    actionFunction: async ({row}) => {
      const projectNo = row.projectNumber;
      emit('switch-dialog-print', row);
    }
  },
  {
    code: 'print2', // 打印
    initialState: '1',
    temperingState: '0',
    targetState: null,
    successMsg: '模拟计算已启动!',
    checkMessage: '当前工程状态不符合模拟计算条件,请确认工程状态后再操作!',
    requiresRow: true,
    actionFunction: async ({row}) => {
      const projectNo = row.projectNumber;
      emit('switch-dialog-print2', row);
    }
  },
  {
@@ -301,6 +329,22 @@
        }
        if (config.code === 'compute') {
          if(row.state===1 && row.temperingState===0){
            config.actionFunction({row});
          }else{
            ElMessage.warning(config.checkMessage);
          }
          return;
        }
        if (config.code === 'print') {
          if(row.optimizeState===1 ){
            config.actionFunction({row});
          }else{
            ElMessage.warning(config.checkMessage);
          }
          return;
        }
        if (config.code === 'print2') {
          if(row.optimizeState===1 ){
            config.actionFunction({row});
          }else{
            ElMessage.warning(config.checkMessage);
@@ -537,7 +581,7 @@
}
//定义切换模拟计算弹窗
const emit = defineEmits(['switch-dialog', 'close-detail-page']);
const emit = defineEmits(['switch-dialog', 'close-detail-page','switch-dialog-print','switch-dialog-print2']);
//定义工程状态
const optionVal = ref('all')
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ComputeCard.vue
@@ -4,6 +4,7 @@
import {useI18n} from "vue-i18n";
import {ElMessage} from "element-plus";
import deepClone from "@/utils/deepClone";
import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
const { t } = useI18n()
const xGrid = ref()
@@ -31,6 +32,16 @@
  scrollX:{enabled: true},
  scrollY:{ enabled: true ,gt:0},//开启虚拟滚动
  showOverflow:true,
  menuConfig: {
    body: {
      options: [
        [
          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          { code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false },
        ]
      ]
    }
  },
  columnConfig: {
    resizable: true,
    useKey: true
@@ -96,6 +107,7 @@
watch(() => props.tableData, async (newData) => {
  if (Array.isArray(newData)) {
    addListener(xGrid.value,gridOptions)
    console.log(newData)
    xGrid.value.loadData(deepClone(newData))
    const data = xGrid.value.getTableData().fullData
@@ -119,6 +131,70 @@
    // Emit 事件将更新后的值传递给父组件
    emit('upProcessId', rowClickIndex.value.processId,rowClickIndex.value.patch_state,rowClickIndex.value.technologyNumber);
    emit('updateTechnologyNumber', rowClickIndex.value.processId,rowClickIndex.value.patch_state,rowClickIndex.value.technologyNumber);
  },
  menuClick ({ menu, row, column }) {
    const $grid = xGrid.value
    if ($grid) {
      switch (menu.code) {
        case 'copyChecked' :{
          let result = toolbarButtonClickEvent()
          if(result){
            const dataList = xGrid.value.getTableData().visibleData
            let firstVal=null;
            if(result.cell.indexOf('.')>-1){
              firstVal = eval("dataList["+result.start +"]."+result.cell)
            }else {
              firstVal=dataList[result.start][result.cell];
            }
            dataList.forEach((item,index) =>{
              if(index>=result.start && index<=result.end){
                //取消选中
                if(parseInt(firstVal)<=0){
                  xGrid.value.setCheckboxRow(item, false);
                }
                if(result.cell.indexOf('.')>-1){
                  const  columnArr = result.cell.split('.')
                  item[columnArr[0]][columnArr[1]]  = firstVal
                }else{
                  item[result.cell]  = firstVal
                }
              }
            })
          }
          break
        }
        case 'copyAll' :{
          let result = toolbarButtonClickEvent()
          if(result){
            const dataList = xGrid.value.getTableData().visibleData
            let firstVal=null;
            if(result.cell.indexOf('.')>-1){
              firstVal = eval("dataList["+result.start +"]."+result.cell)
            }else {
              firstVal=dataList[result.start][result.cell];
            }
            dataList.forEach((item,index) =>{
              if(index>=result.start){
                //取消选中
                if(parseInt(firstVal)<=0){
                  xGrid.value.setCheckboxRow(item, false);
                }
                if(result.cell.indexOf('.')>-1){
                  const  columnArr = result.cell.split('.')
                  item[columnArr[0]][columnArr[1]]  = firstVal
                }else{
                  item[result.cell]  = firstVal
                }
              }
            })
          }
          break
        }
      }
    }
  }
}
@@ -181,5 +257,12 @@
  height: 20px;
  margin-top: -20px;
}
.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/glassOptimize/page/GlassInventory.vue
@@ -6,8 +6,11 @@
import {useRoute} from "vue-router";
import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
import useUserInfoStore from "@/stores/userInfo";
const { t } = useI18n()
const userStore = useUserInfoStore()
const orderInfo = useOrderInfoStore()
const username = userStore.user.userName
const xGrid = ref()
const gridOptions = reactive({
@@ -163,7 +166,7 @@
let type = ref(1);
const selectMaterialStore = async () =>{
  request.get(`/glassOptimize/materialStore/${thickness.value}/${model.value}/${projectNo.value}?type=${type.value}`).then((res) => {
  request.get(`/glassOptimize/materialStore/${thickness.value}/${model.value}/${projectNo.value}?type=${type.value}&username=${username}`).then((res) => {
    if (Number(res.code) === 200) {
      const rawData = res.data.data;
      const edgeTrimming = res.data.edgeTrimming;
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue
@@ -9,7 +9,7 @@
        @click="selectLayout(layoutIndex)"
        :class="{ 'selected': selectedLayoutIndex === layoutIndex }"
      >
        {{ layout.width }} × {{ layout.height }} × {{ layout.quantity  }}
        {{ layout.realWidth }} × {{ layout.realHeight }} × {{ layout.quantity  }}
      </div>
    </div>
@@ -27,6 +27,7 @@
        </div>
        <!-- Layout Container -->
        <div class="layout-container" :style="layoutContainerStyle1(layoutIndex)">
        <div class="layout-container" :style="layoutContainerStyle(layoutIndex)">
          <!-- 灰色矩形 -->
          <div
@@ -34,7 +35,7 @@
            :key="`gray-${rectIndex}`"
            :ref="(el) => { if (el) rectsElements[layoutIndex + '-' + rectIndex] = el }"
            class="layout-glassDetail"
            :style="rectStyle(glassDetail, layoutIndex)"
            :style="rectStyle1(glassDetail, layoutIndex)"
            @contextmenu.prevent="handleGrayRectRightClick(layoutIndex, rectIndex,glassDetail)"
          >
<!--            <div class="glassDetail-content">
@@ -60,11 +61,12 @@
          >
            <div class="glassDetail-content">
              <div class="size">{{ glassDetail.realWidth }}×{{ glassDetail.realHeight }}</div>
              <div>{{rectIndex }}</div>
              <div>{{glassDetail.polySort }}</div>
              <div v-if="showJiaHao" class="jia-hao">{{ glassDetail.rackNo }}</div>
              <div v-if="showProcessId" class="liuchengka">{{ glassDetail.processId }}</div>
            </div>
          </div>
        </div>
        </div>
      </div>
    </div>
@@ -248,12 +250,28 @@
  );
  return {
    position: 'absolute',
    left: `20px`,
    top: `140px`,
    left: `${layout.leftTrim * scale}px`,
    top: `${layout.upTrim * scale}px`,
    width: `${layout.width * scale}px`,
    height: `${layout.height * scale}px`,
    overflow: 'visible',
    border: '1px solid #ccc',
    //border: '1px solid #ccc',
    background: '#fff'
  };
};
const layoutContainerStyle1 = (layoutIndex) => {
  const layout = layouts.value[layoutIndex];
  const scale = Math.min(0.25
  );
  return {
    position: 'absolute',
    left: `20px`,
    top: `140px`,
    width: `${layout.realWidth * scale}px`,
    height: `${layout.realHeight * scale}px`,
    overflow: 'visible',
    //border: '1px solid #ccc',
    background: '#fff'
  };
};
@@ -282,6 +300,24 @@
    position: 'absolute',
    left: `${glassDetail.x * scale}px`,
    bottom: `${glassDetail.y * scale}px`,
    width: `${glassDetail.width * scale}px`,
    height: `${glassDetail.height * scale}px`,
    backgroundColor: glassDetail.isRemain ? '#f0f0f0' : themeColor.value,
    border: '1px solid #000',
    cursor: 'pointer',
    draggable: !glassDetail.isRemain,
    zIndex: glassDetail.isRemain ? 1 : 2
  };
};
const rectStyle1 = (glassDetail, layoutIndex) => {
  const layout = layouts.value[layoutIndex];
  const scale = Math.min(0.25
  );
  return {
    position: 'absolute',
    left: `${glassDetail.x * scale}px`,
    top: `${glassDetail.y * scale}px`,
    width: `${glassDetail.width * scale}px`,
    height: `${glassDetail.height * scale}px`,
    backgroundColor: glassDetail.isRemain ? '#f0f0f0' : themeColor.value,
@@ -891,8 +927,8 @@
  if (!glassDetail) return '';*/
  const totalRects = layouts.value.length;
  const currentRectIndex = layoutIndex + 1;
  const width = layout.width;
  const height = layout.height;
  const width = layout.realWidth;
  const height = layout.realHeight;
  const percentage = (layout.usageRate * 100).toFixed(2) + '%';
  return `${currentRectIndex}/${totalRects} ${width}×${height} ×1 ${percentage}`;
};
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizeCompute.vue
@@ -70,164 +70,1381 @@
    mockData.value = {
      code: 200,
      data: [{
        "projectNo":"P25041001",
        "totalQuantity":1,
        "glassTotalQuantity":1,
        "glassTotalArea":1,
        "avgCutRate":1,
        "lastCutRate":1,
        "validCutRate":1,
        "layouts":[
          {
            "stockId":3,
            "usageRate":0.9,
            "width":4500,
            "height":2440,
            "stockCode":11,
            "upTrim":12,
            "downTrim":12,
            "leftTrim":12,
            "rightTrim":12,
            "quantity":1,
            "glassQuantity":6,
            "glassArea":45,
            "materialType":1,
            "mergeID":1,
            "glassDetails":[
              {"isRemain":false,
                "width":2070,
                "height":725,
                "realWidth":2070,
                "realHeight":725,
                "layer":1,
                "totalLayer":2,
                "orderSort":1,
                "processId":"NG22091408A06",
                "stockSort":1,
                "polySort":1,
                "markIcon":"",
                "x":0,
                "y":0,
                "patchState":0,
                "isRotate":0,
                "rackNo":1,
                "glassPoint":{}
              },
              {"isRemain":false,
                "width":2070,
                "height":725,
                "realWidth":2070,
                "realHeight":725,
                "layer":1,
                "totalLayer":2,
                "orderSort":1,
                "processId":"NG22091408A06",
                "stockSort":1,
                "polySort":2,
                "markIcon":"",
                "x":2070,
                "y":0,
                "patchState":0,
                "isRotate":0,
                "rackNo":1,
                "glassPoint":{}
              },
              {"isRemain":false,
                "width":2070,
                "height":725,
                "realWidth":2070,
                "realHeight":725,
                "layer":1,
                "totalLayer":2,
                "orderSort":1,
                "processId":"NG22091408A06",
                "stockSort":1,
                "polySort":3,
                "markIcon":"",
                "x":0,
                "y":725,
                "patchState":0,
                "isRotate":0,
                "rackNo":1,
                "glassPoint":{}
              },
              {"isRemain":false,
                "width":2070,
                "height":725,
                "realWidth":2070,
                "realHeight":725,
                "layer":1,
                "totalLayer":2,
                "orderSort":1,
                "processId":"NG22091408A06",
                "stockSort":1,
                "polySort":4,
                "markIcon":"",
                "x":2070,
                "y":725,
                "patchState":0,
                "isRotate":0,
                "rackNo":1,
                "glassPoint":{}
              },
              {"isRemain":false,
                "width":2070,
                "height":725,
                "realWidth":2070,
                "realHeight":725,
                "layer":1,
                "totalLayer":2,
                "orderSort":1,
                "processId":"NG22091408A06",
                "stockSort":1,
                "polySort":5,
                "markIcon":"",
                "x":0,
                "y":1450,
                "patchState":0,
                "isRotate":0,
                "rackNo":1,
                "glassPoint":{}
              },
              {"isRemain":false,
                "width":2070,
                "height":725,
                "realWidth":2070,
                "realHeight":725,
                "layer":1,
                "totalLayer":2,
                "orderSort":1,
                "processId":"NG22091408A06",
                "stockSort":1,
                "polySort":6,
                "markIcon":"",
                "x":2070,
                "y":1450,
                "patchState":0,
                "isRotate":0,
                "rackNo":1,
                "glassPoint":{}
              },
              {"isRemain":true,
                "width":2070,
                "height":265,
                "x":0,
                "y":2175
              },
              {"isRemain":true,
                "width":2070,
                "height":265,
                "x":2070,
                "y":2175
              },
              {"isRemain":true,
                "width":360,
                "height":2440,
                "x":4140,
                "y":0
              }]
          }
        ]}]
        "projectNo": "P25051501",
        "totalQuantity": 3,
        "glassTotalQuantity": 52,
        "glassTotalArea": "22.65",
        "avgCutRate": "91.06",
        "lastCutRate": "85.06",
        "validCutRate": "95.63",
        "layouts": [{
          "width": 3285.0,
          "height": 2125.0,
          "stockId": 1,
          "realWidth": 3300.0,
          "realHeight": 2140.0,
          "usageRate": "0.9595522",
          "stockCode": "138",
          "upTrim": 0.0,
          "downTrim": 15.0,
          "leftTrim": 15.0,
          "rightTrim": 0.0,
          "quantity": 1,
          "glassQuantity": 0,
          "glassArea": 0.0,
          "materialType": 1,
          "mergeId": 1,
          "glassDetails": [{
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1100.0,
            "realHeight": 1037.0,
            "width": 1102.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 17,
            "stockSort": 1,
            "polySort": 1,
            "x": 0.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 0.0,
              "Y": 1086.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 0.0,
              "Y": 2125.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1102.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 1102.0,
              "Y": 2125.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 1102.0,
              "Y": 1086.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1102.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1098.0,
            "realHeight": 1037.0,
            "width": 1100.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 21,
            "stockSort": 1,
            "polySort": 2,
            "x": 1102.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 1102.0,
              "Y": 1086.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 1102.0,
              "Y": 2125.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2202.0,
              "Y": 2125.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 2202.0,
              "Y": 1086.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1058.0,
            "realHeight": 1037.0,
            "width": 1060.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 5,
            "stockSort": 1,
            "polySort": 3,
            "x": 2202.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2202.0,
              "Y": 1086.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2202.0,
              "Y": 2125.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1060.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 3262.0,
              "Y": 2125.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 3262.0,
              "Y": 1086.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1060.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1098.0,
            "realHeight": 1037.0,
            "width": 1100.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 21,
            "stockSort": 1,
            "polySort": 4,
            "x": 0.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 0.0,
              "Y": 47.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 0.0,
              "Y": 1086.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 1100.0,
              "Y": 1086.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 1100.0,
              "Y": 47.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1098.0,
            "realHeight": 1037.0,
            "width": 1100.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 21,
            "stockSort": 1,
            "polySort": 5,
            "x": 1100.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 1100.0,
              "Y": 47.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 1100.0,
              "Y": 1086.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2200.0,
              "Y": 1086.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 2200.0,
              "Y": 47.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1058.0,
            "realHeight": 1037.0,
            "width": 1060.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 5,
            "stockSort": 1,
            "polySort": 6,
            "x": 2200.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2200.0,
              "Y": 47.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2200.0,
              "Y": 1086.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1060.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 3260.0,
              "Y": 1086.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 3260.0,
              "Y": 47.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1060.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 25.0,
            "realHeight": 1086.0,
            "width": 25.0,
            "height": 1086.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 1,
            "polySort": 1,
            "x": 3260.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 3260.0,
            "realHeight": 47.0,
            "width": 3260.0,
            "height": 47.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 1,
            "polySort": 2,
            "x": 0.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 23.0,
            "realHeight": 1039.0,
            "width": 23.0,
            "height": 1039.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 1,
            "polySort": 3,
            "x": 3262.0,
            "y": 1086.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }]
        }, {
          "width": 3285.0,
          "height": 2125.0,
          "stockId": 2,
          "realWidth": 3300.0,
          "realHeight": 2140.0,
          "usageRate": "0.9530787",
          "stockCode": "138",
          "upTrim": 0.0,
          "downTrim": 15.0,
          "leftTrim": 15.0,
          "rightTrim": 0.0,
          "quantity": 1,
          "glassQuantity": 0,
          "glassArea": 0.0,
          "materialType": 1,
          "mergeId": 2,
          "glassDetails": [{
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1085.0,
            "realHeight": 1037.0,
            "width": 1087.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 20,
            "stockSort": 2,
            "polySort": 1,
            "x": 0.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 0.0,
              "Y": 1086.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 0.0,
              "Y": 2125.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1087.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 1087.0,
              "Y": 2125.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 1087.0,
              "Y": 1086.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1087.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1055.0,
            "realHeight": 1037.0,
            "width": 1057.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 8,
            "stockSort": 2,
            "polySort": 2,
            "x": 1087.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 1087.0,
              "Y": 1086.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 1087.0,
              "Y": 2125.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1057.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2144.0,
              "Y": 2125.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 2144.0,
              "Y": 1086.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1057.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1098.0,
            "realHeight": 1037.0,
            "width": 1100.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 21,
            "stockSort": 2,
            "polySort": 3,
            "x": 2144.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2144.0,
              "Y": 1086.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2144.0,
              "Y": 2125.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 3244.0,
              "Y": 2125.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 3244.0,
              "Y": 1086.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1098.0,
            "realHeight": 1037.0,
            "width": 1100.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 21,
            "stockSort": 2,
            "polySort": 4,
            "x": 0.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 0.0,
              "Y": 47.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 0.0,
              "Y": 1086.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 1100.0,
              "Y": 1086.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 1100.0,
              "Y": 47.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1100.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1065.0,
            "realHeight": 1037.0,
            "width": 1067.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 9,
            "stockSort": 2,
            "polySort": 5,
            "x": 1100.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 1100.0,
              "Y": 47.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 1100.0,
              "Y": 1086.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1067.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2167.0,
              "Y": 1086.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 2167.0,
              "Y": 47.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1067.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1065.0,
            "realHeight": 1037.0,
            "width": 1067.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 9,
            "stockSort": 2,
            "polySort": 6,
            "x": 2167.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2167.0,
              "Y": 47.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2167.0,
              "Y": 1086.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1067.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 3234.0,
              "Y": 1086.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 3234.0,
              "Y": 47.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1067.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 51.0,
            "realHeight": 1086.0,
            "width": 51.0,
            "height": 1086.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 2,
            "polySort": 1,
            "x": 3234.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 3234.0,
            "realHeight": 47.0,
            "width": 3234.0,
            "height": 47.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 2,
            "polySort": 2,
            "x": 0.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 41.0,
            "realHeight": 1039.0,
            "width": 41.0,
            "height": 1039.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 2,
            "polySort": 3,
            "x": 3244.0,
            "y": 1086.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }]
        }, {
          "width": 3755.0,
          "height": 2835.0,
          "stockId": 3,
          "realWidth": 3770.0,
          "realHeight": 2850.0,
          "usageRate": "0.8505788",
          "stockCode": "117",
          "upTrim": 0.0,
          "downTrim": 15.0,
          "leftTrim": 15.0,
          "rightTrim": 0.0,
          "quantity": 1,
          "glassQuantity": 0,
          "glassArea": 0.0,
          "materialType": 1,
          "mergeId": 3,
          "glassDetails": [{
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1037.0,
            "realHeight": 908.0,
            "width": 1039.0,
            "height": 910.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 19,
            "stockSort": 3,
            "polySort": 2,
            "x": 0.0,
            "y": 1007.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 0.0,
              "Y": 1828.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 1828.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 910.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 918.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 0.0,
              "Y": 918.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 910.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1037.0,
            "realHeight": 1005.0,
            "width": 1039.0,
            "height": 1007.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 18,
            "stockSort": 3,
            "polySort": 1,
            "x": 0.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 0.0,
              "Y": 2835.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 2835.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1007.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 1828.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 0.0,
              "Y": 1828.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1007.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1037.0,
            "realHeight": 810.0,
            "width": 1039.0,
            "height": 812.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 12,
            "stockSort": 3,
            "polySort": 3,
            "x": 0.0,
            "y": 1917.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 0.0,
              "Y": 918.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 918.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 812.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 106.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 0.0,
              "Y": 106.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 812.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1037.0,
            "realHeight": 908.0,
            "width": 1039.0,
            "height": 910.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 19,
            "stockSort": 3,
            "polySort": 5,
            "x": 1039.0,
            "y": 1032.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 1039.0,
              "Y": 1803.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 1803.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 910.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 893.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 893.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 910.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1037.0,
            "realHeight": 1030.0,
            "width": 1039.0,
            "height": 1032.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 10,
            "stockSort": 3,
            "polySort": 4,
            "x": 1039.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 1039.0,
              "Y": 2835.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 2835.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1032.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 1803.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 1803.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1032.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 1037.0,
            "realHeight": 823.0,
            "width": 1039.0,
            "height": 825.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 13,
            "stockSort": 3,
            "polySort": 6,
            "x": 1039.0,
            "y": 1942.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 1039.0,
              "Y": 893.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 893.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 68.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 1039.0,
              "Y": 68.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 823.0,
            "realHeight": 1037.0,
            "width": 825.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 13,
            "stockSort": 3,
            "polySort": 7,
            "x": 2078.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2078.0,
              "Y": 1796.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 2835.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2903.0,
              "Y": 2835.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 2903.0,
              "Y": 1796.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 823.0,
            "realHeight": 1037.0,
            "width": 825.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 13,
            "stockSort": 3,
            "polySort": 9,
            "x": 2078.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2078.0,
              "Y": 757.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2078.0,
              "Y": 1796.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 2903.0,
              "Y": 1796.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 2903.0,
              "Y": 757.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 823.0,
            "realHeight": 1037.0,
            "width": 825.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 13,
            "stockSort": 3,
            "polySort": 8,
            "x": 2903.0,
            "y": 0.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2903.0,
              "Y": 1796.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2903.0,
              "Y": 2835.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 3728.0,
              "Y": 2835.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 3728.0,
              "Y": 1796.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": false,
            "isRotate": false,
            "realWidth": 823.0,
            "realHeight": 1037.0,
            "width": 825.0,
            "height": 1039.0,
            "processId": "NG24090106A003",
            "layer": 2,
            "totalLayer": 1,
            "orderSort": 13,
            "stockSort": 3,
            "polySort": 10,
            "x": 2903.0,
            "y": 1039.0,
            "markIcon": "{\"trademark\":\"3C\",\"xImage\":false,\"yImage\":false,\"tag\":true,\"tag2\":true,\"tag3\":true,\"xMargin\":30,\"yMargin\":30,\"location\":\"右下\"}",
            "patchState": 0,
            "rackNo": "0",
            "glassPoint": [{
              "X": 2903.0,
              "Y": 757.0,
              "theta": 1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 0,
              "L": 1.0
            }, {
              "X": 2903.0,
              "Y": 1796.0,
              "theta": 0.0,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 3,
              "L": 1.0
            }, {
              "X": 3728.0,
              "Y": 1796.0,
              "theta": -1.5707963267948966,
              "angle": 1.5707963705062866,
              "distance": 1039.0,
              "index": 2,
              "L": 1.0
            }, {
              "X": 3728.0,
              "Y": 757.0,
              "theta": 3.1415926535897931,
              "angle": 1.5707963705062866,
              "distance": 825.0,
              "index": 1,
              "L": 1.0
            }]
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 1039.0,
            "realHeight": 106.0,
            "width": 1039.0,
            "height": 106.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 3,
            "polySort": 1,
            "x": 0.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 27.0,
            "realHeight": 2835.0,
            "width": 27.0,
            "height": 2835.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 3,
            "polySort": 2,
            "x": 3728.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 1039.0,
            "realHeight": 68.0,
            "width": 1039.0,
            "height": 68.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 3,
            "polySort": 3,
            "x": 1039.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }, {
            "isRemain": true,
            "isRotate": false,
            "realWidth": 1650.0,
            "realHeight": 757.0,
            "width": 1650.0,
            "height": 757.0,
            "processId": null,
            "layer": 0,
            "totalLayer": 0,
            "orderSort": 0,
            "stockSort": 3,
            "polySort": 4,
            "x": 2078.0,
            "y": 0.0,
            "markIcon": null,
            "patchState": 0,
            "rackNo": null,
            "glassPoint": null
          }]
        }]
      }]
    }
    }
@@ -279,8 +1496,8 @@
        })
        orderInfo.optimizeData.originalFilm=originalFilm.value
        totalUtilizationRate.value=mockData.value.data[0].avgCutRate*100
        tailPieceRate.value=mockData.value.data[0].layouts*100
        totalUtilizationRate.value=mockData.value.data[0].avgCutRate
        tailPieceRate.value=mockData.value.data[0].lastCutRate
        pauseTimer()
        document.getElementById("complete").style.display="block"
        document.getElementById("start").disabled=false
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -11,12 +11,14 @@
import {useRoute} from 'vue-router';
import useUserInfoStore from "@/stores/userInfo";
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
const { t } = useI18n();
const userStore = useUserInfoStore()
const orderInfo = useOrderInfoStore()
const username = userStore.user.userName
let cellArea = ref()
const xGrid = ref()
const gridOptions = reactive({
  height: '100%',
@@ -41,7 +43,7 @@
    storage: true
  },
  editConfig: {
    trigger: 'click',
    trigger: 'dblclick',
    mode: 'row',
    showStatus: true
  },
@@ -72,32 +74,28 @@
      field: 'longGrind1',
      width: 150,
      title: '长磨1',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },
      sortable: true
    },
    {
      field: 'longGrind2',
      width: 150,
      title: '长磨2',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },
      sortable: true
    },
    {
      field: 'shortGrind1',
      width: 150,
      title: '短磨1',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },
      sortable: true
    },
    {
      field: 'shortGrind2',
      width: 150,
      title: '短磨2',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },
      sortable: true
    },
    {
@@ -166,7 +164,7 @@
    },
    {
      field: 'layout_id',
      field: 'rackNo',
      width: 150,
      title: '架号',
      filters: [{data: ''}],
@@ -220,6 +218,8 @@
          {code: 'Export', name: '数据导出', prefixIcon: 'vxe-icon-download', visible: true, disabled: false},
          {code: 'safeDXF', name: '图形另存为DXF',},
          {code: 'exportOPTIMA', name: '导出数据到OPTIMA',},
          {code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          {code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false },
        ],
        []
      ]
@@ -311,6 +311,22 @@
      ElMessage.info('此功能暂未完善,暂时无法执行导出数据到OPTIMA操作。');
    }
  },
  {
    code: 'copyChecked',
    successMsg: '操作成功!',
    gridRef: xGrid,
    requiresRow: false,
    hideProcess: () => {
    }
  },
  {
    code: 'copyAll',
    successMsg: '操作成功!',
    gridRef: xGrid,
    requiresRow: false,
    hideProcess: () => {
    }
  },
]
// 右键菜单点击逻辑
@@ -323,6 +339,62 @@
        if (config.code === 'Export') {
          config.gridRef.value.exportData();
          ElMessage.success(config.successMsg);
          return;
        }
        if (config.code === 'copyChecked') {
          let result = toolbarButtonClickEvent()
          if(result){
            const dataList = xGrid.value.getTableData().visibleData
            let firstVal=null;
            if(result.cell.indexOf('.')>-1){
              firstVal = eval("dataList["+result.start +"]."+result.cell)
            }else {
              firstVal=dataList[result.start][result.cell];
            }
            dataList.forEach((item,index) =>{
              if(index>=result.start && index<=result.end){
                //取消选中
                if(parseInt(firstVal)<=0){
                  xGrid.value.setCheckboxRow(item, false);
                }
                if(result.cell.indexOf('.')>-1){
                  const  columnArr = result.cell.split('.')
                  item[columnArr[0]][columnArr[1]]  = firstVal
                }else{
                  item[result.cell]  = firstVal
                }
              }
            })
          }
          return;
        }
        if (config.code === 'copyAll') {
          let result = toolbarButtonClickEvent()
          if(result){
            const dataList = xGrid.value.getTableData().visibleData
            let firstVal=null;
            if(result.cell.indexOf('.')>-1){
              firstVal = eval("dataList["+result.start +"]."+result.cell)
            }else {
              firstVal=dataList[result.start][result.cell];
            }
            dataList.forEach((item,index) =>{
              if(index>=result.start){
                //取消选中
                if(parseInt(firstVal)<=0){
                  xGrid.value.setCheckboxRow(item, false);
                }
                if(result.cell.indexOf('.')>-1){
                  const  columnArr = result.cell.split('.')
                  item[columnArr[0]][columnArr[1]]  = firstVal
                }else{
                  item[result.cell]  = firstVal
                }
              }
            })
          }
          return;
        }
        // 添加确认提示弹窗,询问用户是否进行当前操作
@@ -372,6 +444,8 @@
  optimizeMode:null,
  travType:null,
  rackCycleQty:null,
  glassThickness:null,
  glassType:null,
  glassDetails :[],
  materialDetails:[]
});
@@ -403,7 +477,7 @@
      }
      detail.width=items.width
      detail.height=items.height
      detail.processId=items.process_id
      detail.processId=items.process_ids
      detail.layer=items.layer
      detail.totalLayer=items.total_layer
      detail.orderSort=items.order_number
@@ -414,6 +488,7 @@
      detail.downGrind=items.longGrind2
      detail.leftGrind=items.shortGrind1
      detail.rightGrind=items.shortGrind2
      detail.rackNo=items.id
      optimizeData.value.glassDetails .push(detail)
    })
@@ -482,8 +557,8 @@
const projectName = ref('');
const thickNess = ref(route.params.thickNess);
const model = ref(route.params.model);
const quantitys = ref(route.params.quantity);
const areas = ref(route.params.area);
const quantitys = ref();
const areas = ref();
const optimizeState = ref(route.params.optimizeState);
onBeforeUnmount(() => {
  localStorage.setItem('projectNo', projectNo.value);
@@ -491,16 +566,21 @@
const saveOptimizeData = () => {
  if(orderInfo.optimizeData!==null){
    request.post(`/glassOptimize/saveOptimizeData/${projectNo.value}`,orderInfo.optimizeData).then((res) => {
      if ((Number(res.code) === 200)) {
        ElMessage.success("保存成功");
      } else {
        ElMessage.warning(res.msg);
      }
    if(quantitys.value===orderInfo.optimizeData.optimalResults.glassTotalQuantity){
      request.post(`/glassOptimize/saveOptimizeData/${projectNo.value}`,orderInfo.optimizeData).then((res) => {
        if ((Number(res.code) === 200)) {
          ElMessage.success("保存成功");
        } else {
          ElMessage.warning(res.msg);
        }
    }).catch((error) => {
      console.error("获取数据出错:", error);
    });
      }).catch((error) => {
        console.error("获取数据出错:", error);
      });
    }else{
      ElMessage.warning("原片不足,小片未全部优化");
    }
  }else {
    ElMessage.warning("数据未优化");
  }
@@ -508,7 +588,9 @@
}
const fetchData = () => {
  request.post(`/glassOptimize/projectInfo/${projectNo.value}`).then((res) => {
  //启用表格拖动选中
  addListener(xGrid.value,gridOptions,cellArea.value)
  request.post(`/glassOptimize/projectInfo/${projectNo.value}/${username}`).then((res) => {
    if ((Number(res.code) === 200)) {
      const data = res.data.data;
      const grindingTrimming = res.data.grindingTrimming;
@@ -533,14 +615,10 @@
            item.shortGrind1=0
            item.shortGrind2=0
            if(item.width>=formattedData[0].minAutoLenght){
              item.width+=parseFloat(formattedData[0].leftEdge)
              item.width+=parseFloat(formattedData[0].rightEdge)
              item.longGrind1 = formattedData[0].leftEdge;
              item.longGrind2 = formattedData[0].rightEdge;
            }
            if(item.height>=formattedData[0].minAutoLenght){
              item.height+=parseFloat(formattedData[0].upEdge)
              item.height+=parseFloat(formattedData[0].downEdge)
              item.shortGrind1 = formattedData[0].upEdge;
              item.shortGrind2 = formattedData[0].downEdge;
            }
@@ -553,6 +631,8 @@
      xGrid.value.loadData(data);
      gridOptions.data = data;
      projectName.value = data[0].project_name;
      quantitys.value=res.data.project.glass_total
      areas.value=res.data.project.glass_total_area
    } else {
      ElMessage.warning(res.msg);
    }
@@ -566,6 +646,8 @@
    if (res.code == "200") {
      const parsedData = JSON.parse(res.data);
      optimizeData.value.projectNo=projectNo.value
      optimizeData.value.glassType=model.value
      optimizeData.value.glassThickness=thickNess.value
      optimizeData.value.allowRotate=parsedData.optimization.smallPieceRotationProhibited
      optimizeData.value.optimizeMode=parsedData.optimization.optimizationMethod
      optimizeData.value.minCutDistance=parsedData.optimization.bendEdgeDistance
@@ -586,6 +668,8 @@
    firstLoading();
  }else if(orderInfo.projectNo!==null){
    projectNo.value=orderInfo.projectNo.projectNo
    model.value=orderInfo.projectNo.model
    thickNess.value=orderInfo.projectNo.thickNess
    fetchData();
    firstLoading();
  }
@@ -765,6 +849,11 @@
      </vxe-grid>
    </div>
    <div class="vxe-table--cell-area" ref="cellArea" >
      <span  class="vxe-table--cell-main-area"  ></span>
      <span class="vxe-table--cell-active-area"  ></span>
    </div>
  </div>
</template>
@@ -803,4 +892,12 @@
  margin-left: 10px;
}
.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/glassOptimize/page/RectRenderer.vue
@@ -1,25 +1,70 @@
<template>
  <div ref="layoutPanel" :class="panelClass" :style="panelStyle">
    <div id="printFlowCard">
      <div v-for="(layout, layoutIndex) in layouts" :key="layoutIndex" class="layout-wrapper">
        <div class="header" :style="headerStyle(layoutIndex)">
          工程号{{ processId }}
          {{ getCurrentRectInfo(layoutIndex) }}
        </div>
  <div ref="layoutPanel" id="printFlowCard" :class="panelClass" :style="panelStyle">
    <div v-if="dataLoadeds">
      <h3>工程号【{{ processId }}】</h3>
      <div style="width: 400px;margin: auto;">
        <h1 style="margin: auto;text-align: center;">上海北玻自动化</h1>
        <h2 style="margin: auto;text-align: center;">优化报告</h2>
        优化报工
        <el-table :data="layoutDetails">
          <el-table-column prop="avgCutRate" label="切裁率"></el-table-column>
          <el-table-column prop="validCutRate" label="有效切割"></el-table-column>
          <el-table-column prop="lastCutRate" label="尾片"></el-table-column>
          <el-table-column prop="" label="原片类型"></el-table-column>
          <el-table-column prop="totalQuantity" label="版面数量"></el-table-column>
        </el-table>
        <br>
        物料信息
        <el-table :data="materialDetails">
          <el-table-column prop="width" label="原片宽"></el-table-column>
          <el-table-column prop="height" label="原片高"></el-table-column>
          <el-table-column prop="processingQuantity" label="数量"></el-table-column>
        </el-table>
      </div>
    </div>
    <div
        v-for="(layout, layoutIndex) in layouts"
        :key="layoutIndex"
        class="layout-wrapper"
        :style="titleStyle(layoutIndex)"
        v-if="dataLoaded"
    >
      <!-- Layout Info Label -->
      <div class="layout-info" :style="layoutInfoStyle(layoutIndex)">
        工程号{{ processId }}
        {{ getCurrentRectInfo(layoutIndex) }}
      </div>
      <!-- Layout Container -->
      <div class="layout-container" :style="layoutContainerStyle1(layoutIndex)">
        <div class="layout-container" :style="layoutContainerStyle(layoutIndex)">
          <div class="grid-container" :class="`cols-${printColumns}`">
            <div
              v-for="(glassDetail, rectIndex) in layout.glassDetails"
              :key="rectIndex"
          <!-- 灰色矩形 -->
          <div
              v-for="(glassDetail, rectIndex) in layout.glassDetails.filter(r => r.isRemain)"
              :key="`gray-${rectIndex}`"
              :ref="(el) => { if (el) rectsElements[layoutIndex + '-' + rectIndex] = el }"
              :class="rectClass"
              class="layout-glassDetail"
              :style="rectStyle1(glassDetail, layoutIndex)"
          >
            <!--            <div class="glassDetail-content">
                          <div class="size">{{ glassDetail.width }}×{{ glassDetail.height }}</div>
                          <div v-if="showJiaHao" class="jia-hao">{{ glassDetail.JiaHao }}</div>
                          <div v-if="showProcessId" class="liuchengka">{{ glassDetail.liuchengka }}</div>
                        </div>-->
          </div>
          <!-- 蓝色矩形 -->
          <div
              v-for="(glassDetail, rectIndex) in layout.glassDetails.filter(r => !r.isRemain)"
              :key="`blue-${rectIndex}`"
              :ref="(el) => { if (el) rectsElements[layoutIndex + '-' + rectIndex] = el }"
              class="layout-glassDetail"
              :style="rectStyle(glassDetail, layoutIndex)"
              @click="handleRectClick(layoutIndex, rectIndex)"
            >
              <div v-if="!glassDetail.isRemain" class="glassDetail-content">
                <div class="size">{{ glassDetail.realWidth }}×{{ glassDetail.realHeight }}</div>
                <div class="jia-hao">{{ glassDetail.rackNo}}</div>
              </div>
          >
            <div class="glassDetail-content">
              <div class="size">{{ glassDetail.realWidth }}×{{ glassDetail.realHeight }}</div>
              <div>{{glassDetail.polySort }}</div>
            </div>
          </div>
        </div>
@@ -38,7 +83,9 @@
  gh: { type: Number, default: 800 },
  style: { type: String, default: 'width:100%;height:800px;display:block;background:gray' },
  printLayout: { type: String, default: '2rows-2cols' }, // 可选值:4rows-2cols, 3rows-2cols, 3rows-1col, 2rows-2cols
  fixedPageHeight: { type: Number, default: 1100 } // 固定页面高度
  fixedPageHeight: { type: Number, default: 1100 }, // 固定页面高度
  materialDetails:null,
  state:null
});
const emit = defineEmits(['rectClicked']);
@@ -46,12 +93,20 @@
const rectsElements = ref({});
const focusIndex = ref(null);
const layouts = ref([]);
const materialDetails = ref([]);
const panelClass = ref('');
const panelStyle = ref(props.style);
const rectClass = ref('layout-glassDetail');
const processId = ref();
const printColumns = ref(2); // 初始化为2列
const layoutsPerPage = ref(4); // 默认每页显示4个布局(2行×2列)
const selectedLayoutIndex = ref(0);
const layoutDetails = ref([]);
const dataLoaded = ref(false);
const dataLoadeds = ref(false);
const scale = 0.1;
let tops = 0;
let lefts = 0;
// 定义不同布局的放大比例
const layoutScales = {
@@ -67,57 +122,78 @@
  updateLayout();
});
const layoutContainerStyle = (layoutIndex) => {
  const containerWidth = (props.gw - 20) / printColumns.value; // 减少边距
  const containerHeight = (props.gh - 20) / Math.ceil(layoutsPerPage.value / printColumns.value);
  const x = (layoutIndex % printColumns.value) * containerWidth;
  const y = Math.floor(layoutIndex / printColumns.value) * containerHeight;
const titleStyle = (layoutIndex) => {
  const layout = layouts.value[layoutIndex-1];
  if(layoutIndex<2){
    if(layoutIndex===0){
      tops = 0;
      lefts = 0;
    }else{
      lefts = "50%";
    }
  }else{
    if(layoutIndex%2===0){
      tops = tops+layout.height*scale+50;
      lefts=0;
    }else{
      lefts = "50%";
    }
  }
  return {
    position: 'absolute',
    left: `${x}px`,
    top: `${y-25}px`,
    width: `${containerWidth}px`,
    height: `${containerHeight}px`,
    overflow: 'visible',
    padding: '10px' // 添加内边距
    width: `50%`,
    left: `${lefts}`,
    top: `${tops}px`,
  };
};
const headerStyle = (layoutIndex) => {
  const containerWidth = (props.gw - 20) / printColumns.value;
  const containerHeight = (props.gh - 20) / Math.ceil(layoutsPerPage.value / printColumns.value);
  const x = (layoutIndex % printColumns.value) * containerWidth;
  const y = Math.floor(layoutIndex / printColumns.value) * containerHeight;
  const scale = Math.min(
    containerWidth,
    containerHeight
  ) * 1.2; // 放大1.2倍
const layoutContainerStyle = (layoutIndex) => {
  const layout = layouts.value[layoutIndex];
  return {
    position: 'absolute',
    left: `${x}px`,
    top: `${y-25}px`,
    width: `${scale}px`,
    left: `${layout.leftTrim * scale}px`,
    top: `${layout.upTrim * scale}px`,
    width: `${layout.width * scale}px`,
    height: `${layout.height * scale}px`,
    overflow: 'visible',
    //border: '1px solid #ccc',
    background: '#fff'
  };
};
const layoutContainerStyle1 = (layoutIndex) => {
  const layout = layouts.value[layoutIndex];
  return {
    position: 'absolute',
    left: `20px`,
    top: `40px`,
    width: `${layout.realWidth * scale}px`,
    height: `${layout.realHeight * scale}px`,
    overflow: 'visible',
    //border: '1px solid #ccc',
    background: '#fff'
  };
};
//版图内容头部样式加载
const layoutInfoStyle = (layoutIndex) => {
  const layout = layouts.value[layoutIndex];
  return {
    position: 'absolute',
    left: `40px`,
    top: `0px`,
    textAlign: 'center',
    zIndex: 1000,
    background: '#ffffff',
    padding: '5px',
    fontSize: '12px'
    fontSize: '15px'
  };
};
//版图内容小片样式加载
const rectStyle = (glassDetail, layoutIndex) => {
  const layout = layouts.value[layoutIndex];
  const containerWidth = (props.gw - 100) / printColumns.value;
  const containerHeight = (props.gh - 100) / Math.ceil(layoutsPerPage.value / printColumns.value);
  // 根据当前打印布局获取放大比例
  const currentScale = layoutScales[props.printLayout] || 1.0;
  const scale = Math.min(
    containerWidth / layout.width,
    containerHeight / layout.height
  ) ; // 应用当前布局的放大比例
  return {
    position: 'absolute',
    left: `${glassDetail.x * scale}px`,
@@ -126,7 +202,25 @@
    height: `${glassDetail.height * scale}px`,
    backgroundColor: glassDetail.isRemain ? '#f0f0f0' : '#a0d8ef',
    border: '1px solid #000',
    cursor: 'pointer'
    cursor: 'pointer',
    draggable: !glassDetail.isRemain,
    zIndex: glassDetail.isRemain ? 1 : 2
  };
};
const rectStyle1 = (glassDetail, layoutIndex) => {
  const layout = layouts.value[layoutIndex];
  return {
    position: 'absolute',
    left: `${glassDetail.x * scale}px`,
    top: `${glassDetail.y * scale}px`,
    width: `${glassDetail.width * scale}px`,
    height: `${glassDetail.height * scale}px`,
    backgroundColor: glassDetail.isRemain ? '#f0f0f0' : '#a0d8ef',
    border: '1px solid #000',
    cursor: 'pointer',
    draggable: !glassDetail.isRemain,
    zIndex: glassDetail.isRemain ? 1 : 2
  };
};
@@ -140,8 +234,8 @@
  const layout = layouts.value[layoutIndex];
  const totalRects = layouts.value.length;
  const currentRectIndex = layoutIndex + 1;
  const width = layout.width;
  const height = layout.height;
  const width = layout.realWidth;
  const height = layout.realHeight;
  const sum = layout.glassDetails.reduce((sum, r) => sum + (width * height), 0);
  const percentage = (layout.usageRate * 100).toFixed(2) + '%';
  return `${currentRectIndex}/${totalRects} ${width}X${height}X${layout.quantity} ${percentage}`;
@@ -187,13 +281,22 @@
        }
      })
  layouts.value=originalFilm.value
  layoutDetails.value.push(props.layoutData)
  materialDetails.value=props.materialDetails
  console.log(layouts.value)
  adjustPrintLayout();
  // 强制重新渲染
  layoutPanel.value.offsetHeight; // 触发布局更新
};
onMounted(() => {
updateLayout();
  if(props.state===2||props.state===0){
    dataLoaded.value=true
  }
  if(props.state>0){
    dataLoadeds.value=true
  }
  updateLayout();
});
onUnmounted(() => {
@@ -309,7 +412,7 @@
.layout-wrapper {
  position: relative;
  margin-top: 50px;
  display: block;
}
.header {
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetAmount.vue
@@ -3,13 +3,19 @@
import {defineEmits} from 'vue';
import request from "@/utils/request";
import {ElMessage} from "element-plus";
import useUserInfoStore from "@/stores/userInfo";
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
const userStore = useUserInfoStore()
const orderInfo = useOrderInfoStore()
const username = userStore.user.userName
onMounted(async() => {
  await firstLoading()
})
const firstLoading = async() => {
  request.post(`/glassOptimize/getConfiguration/磨量`).then((res) => {
  request.post(`/glassOptimize/getConfiguration/磨量/${username}`).then((res) => {
    if (res.code == "200") {
      const rawData = res.data.data;
      if (Array.isArray(rawData) && rawData.length > 0) {
@@ -102,7 +108,7 @@
    json:json,
  }
  request.post(`/glassOptimize/saveConfiguration/磨量`,configuration).then((res) => {
  request.post(`/glassOptimize/saveConfiguration/磨量/${username}`,configuration).then((res) => {
    if(res.code==200 && res.data===true){
      const amountData = {
        quicksetTop: quicksetTop.value,
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/SetTrimming.vue
@@ -3,14 +3,19 @@
import {defineEmits} from 'vue';
import request from "@/utils/request";
import {ElMessage} from "element-plus";
import useUserInfoStore from "@/stores/userInfo";
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
const userStore = useUserInfoStore()
const orderInfo = useOrderInfoStore()
const username = userStore.user.userName
onMounted(async() => {
  await firstLoading()
})
const firstLoading = async() => {
  request.post(`/glassOptimize/getConfiguration/修边`).then((res) => {
  request.post(`/glassOptimize/getConfiguration/修边/${username}`).then((res) => {
    if (res.code == "200") {
      const rawData = res.data.data;
      if (Array.isArray(rawData) && rawData.length > 0) {
@@ -94,7 +99,7 @@
      json:json,
    }
  request.post(`/glassOptimize/saveConfiguration/修边`,configuration).then((res) => {
  request.post(`/glassOptimize/saveConfiguration/修边/${username}`,configuration).then((res) => {
    if(res.code==200 && res.data===true){
      const dataToSend = {
        quicksetTop: quicksetTop.value,
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
@@ -73,6 +73,7 @@
let detail = ref([])
let layer=''
let technologicalProcess=''
let processName = ref([])
//定义接收加载表头下拉数据
const titleSelectJson = ref({
@@ -818,6 +819,7 @@
  await request.post(`/reportingWork/selectProcess/${user.user.userId}`).then((res) => {
    if (res.code == 200) {
      titleSelectJson.value.processType = res.data.process
      processName  = res.data.processNameList
      if(user.user.address!==null && user.user.address!==''){
        titleUploadData.value.thisProcess = user.user.address
        titleUploadData.value.teamsGroupsName = user.user.userName
@@ -896,10 +898,12 @@
  let process = titleUploadData.value.thisProcess
  //暂时取消
  for(let item of uniqueByOrderNum){
    if(!checkSameNumForId(notFinishList,item.order_number ) && (process=='夹胶' || process=='中空' || process=='包装' ||process=='打胶和粘框')){
    const result = processName.find(item => item.basic_name === process);
    const nickname = result ? result.nickname : null;
    if(!checkSameNumForId(notFinishList,item.order_number ) &&  nickname &&  nickname.includes('step')){
      ElMessage.error(`${t('reportingWorks.pleaseCheckTheOrderNumber1')}:
      ${item.order_number}
       ${t('reportingWorks.pleaseCheckTheOrderNumber1')}`)
       ${t('reportingWorks.pleaseCheckTheOrderNumber2')}`)
      return false
    }
  }
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -33,10 +33,10 @@
    private UserService userService;
    //工程信息
    @ApiOperation("工程信息接口")
    @PostMapping  ("/projectInfo/{projectNo}")
    @PostMapping  ("/projectInfo/{projectNo}/{username}")
    public Result projectInfo(
            @PathVariable String projectNo){
        return Result.seccess(glassOptimizeService.projectInfoSv(projectNo));
            @PathVariable String projectNo,@PathVariable String username){
        return Result.seccess(glassOptimizeService.projectInfoSv(projectNo,username));
    }
    //工程信息流程卡
@@ -53,8 +53,8 @@
    public Result materialStore(
            @PathVariable  String thickness,
            @PathVariable  String model,@PathVariable  String projectNumber,
            @RequestParam(name = "type", required = false) Integer type ){
        return Result.seccess(glassOptimizeService.materialStoreSv(thickness,model,projectNumber,type));
            @RequestParam(name = "type", required = false) Integer type,@RequestParam(name = "username", required = false) String username  ){
        return Result.seccess(glassOptimizeService.materialStoreSv(thickness,model,projectNumber,type,username));
    }
@@ -271,15 +271,15 @@
        return new ResponseEntity<>(optContent.getBytes(), headers, HttpStatus.OK);
    }
    @PostMapping("/getConfiguration/{type}")
    public Result getConfiguration(@PathVariable String type) {
        return Result.seccess(glassOptimizeService.getConfiguration(type));
    @PostMapping("/getConfiguration/{type}/{username}")
    public Result getConfiguration(@PathVariable String type,@PathVariable String username) {
        return Result.seccess(glassOptimizeService.getConfiguration(type,username));
    }
    @ApiOperation("修片磨量修改")
    @PostMapping("/saveConfiguration/{type}")
    public Result saveConfiguration(@PathVariable String type, @RequestBody Map<String,Object>  object){
        return Result.seccess(glassOptimizeService.saveConfiguration(object,type));
    @PostMapping("/saveConfiguration/{type}/{username}")
    public Result saveConfiguration(@PathVariable String type,@PathVariable String username, @RequestBody Map<String,Object>  object){
        return Result.seccess(glassOptimizeService.saveConfiguration(object,type,username));
    }
    @ApiOperation("模拟排版")
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -247,4 +247,8 @@
    Boolean updateFlowCardIsMerge(String processId);
    Integer flowCardDetailMergeMp(String processId);
    String getProcessName(String processSub);
    List<Map<String, Object>> getProcessNameList();
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -19,6 +19,8 @@
    List<Map<String, Object>> analogComputationOptimization(String projectNo);
    List<Map<String, Object>> getOptimizeDetail(String projectNo);
    List<Map<String, Object>> simulatedTypesettingUsingOpt(List<String> processId,List<Integer> technologyNumber);
    //工程信息流程卡
@@ -146,13 +148,13 @@
    Boolean updateProjectMp(String projectId, String projectNmae, String glassThickness, String glassType,
                         Integer sumQuantity, Double sumArea, String userName,Integer processIdCount, String processId, Integer type);
    List<Map<String, Object>> getTemperedConfiguration();
    List<Map<String, Object>> getTemperedConfiguration(String username);
    List<Map<String, Object>> getGrindingTrimming();
    List<Map<String, Object>> getGrindingTrimming(String username);
    List<Map<String, Object>> getEdgeTrimming();
    List<Map<String, Object>> getEdgeTrimming(String username);
    Boolean updateOptimizeConfig(String json,Integer type);
    Boolean updateOptimizeConfig(String json,Integer type,String username);
    List<Map<String, Object>> getFlowCardListSimulated(String optionVal);
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -313,7 +313,9 @@
                    //是否包含切割
                    //boolean containsCutting = flowCard.getProcess().contains("切割");
                    String processSub = flowCard.getProcess().substring(0, 2);
                    if (processSub.equals("夹胶") || processSub.equals("中空")) {//工艺是否包含夹胶中空
                    //获取工序对应的别称
                    String processName = flowCardMapper.getProcessName(processSub);
                    if (processName.equals("stepC") || processName.equals("stepD")) {//工艺是否包含夹胶中空
                        itemmap.put("detail", flowCardMapper.getPrimaryListLimt(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess());
@@ -406,7 +408,9 @@
                //是否包含切割
                //boolean containsCutting = flowCard.getProcess().contains("切割");
                String processSub = flowCard.getProcess().substring(0, 2);
                if (processSub.equals("夹胶") || processSub.equals("中空")) {
                //获取工序对应的别称
                String processName = flowCardMapper.getProcessName(processSub);
                if (processName.equals("stepC") || processName.equals("stepD")) {//工艺是否包含夹胶中空
                    itemmap.put("detail", flowCardMapper.getPrimaryListLimt(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId()));
                    if (flowCard.getPatchState().equals(0)) {
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess());
@@ -723,8 +727,10 @@
                //工艺流程
                List<Map<String, Object>> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber());
                //工序列表
                List<Map<String, Object>> processNameList = flowCardMapper.getProcessNameList();
                itemmap.put("processList", processList);
                itemmap.put("processNameList", processNameList);
                //  itemmap.put("numberList", numberList);
                list.add(itemmap);
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -304,21 +304,29 @@
    public Map<String, Object> selectOptimizeResult(String processId) {
        Map<String, Object> map = new HashMap<>();
        map.put("data", glassOptimizeMapper.selectOptimizeResult(processId));
        map.put("optimizeUse", glassOptimizeMapper.materialStoreOptimizeUse(processId));
        return map;
    }
    //工程信息
    public Map<String, Object> projectInfoSv(String projectNo) {
    public Map<String, Object> projectInfoSv(String projectNo,String username) {
        Map<String, Object> stringObjectMap = glassOptimizeMapper.selectProjectCount(projectNo);
        Map<String, Object> map = new HashMap<>();
        if(Integer.parseInt(stringObjectMap.get("optimize_state").toString())==1||Integer.parseInt(stringObjectMap.get("tempering_state").toString())==1){
        if(Integer.parseInt(stringObjectMap.get("optimize_state").toString())==1){
            map.put("optimizeState", Integer.parseInt(stringObjectMap.get("optimize_state").toString()));
            map.put("data", glassOptimizeMapper.getOptimizeDetail(projectNo));
            map.put("project", glassOptimizeMapper.selectProjectCount(projectNo));
            map.put("grindingTrimming", null);
        } else if (Integer.parseInt(stringObjectMap.get("tempering_state").toString())==1) {
            map.put("optimizeState", Integer.parseInt(stringObjectMap.get("optimize_state").toString()));
            map.put("data", glassOptimizeMapper.analogComputationOptimization(projectNo));
            map.put("grindingTrimming", glassOptimizeMapper.getGrindingTrimming());
        }else{
            map.put("project", glassOptimizeMapper.selectProjectCount(projectNo));
            map.put("grindingTrimming", glassOptimizeMapper.getGrindingTrimming(username));
        } else{
            map.put("optimizeState", Integer.parseInt(stringObjectMap.get("optimize_state").toString()));
            map.put("data", glassOptimizeMapper.firstOptimization(projectNo));
            map.put("grindingTrimming", glassOptimizeMapper.getGrindingTrimming());
            map.put("project", glassOptimizeMapper.selectProjectCount(projectNo));
            map.put("grindingTrimming", glassOptimizeMapper.getGrindingTrimming(username));
        }
        return map;
    }
@@ -332,7 +340,7 @@
    }
    //库存信息
    public Map<String, Object> materialStoreSv(String thickness, String model, String projectNumber,Integer type) {
    public Map<String, Object> materialStoreSv(String thickness, String model, String projectNumber,Integer type,String username) {
        Map<String, Object> stringObjectMap = glassOptimizeMapper.selectProjectCount(projectNumber);
        Map<String, Object> map = new HashMap<>();
        if(Integer.parseInt(stringObjectMap.get("optimize_state").toString())==0){
@@ -343,12 +351,13 @@
            }else{
                map.put("data", glassOptimizeMapper.materialStoreSurplusMp(thickness,model));
            }
            map.put("edgeTrimming", glassOptimizeMapper.getEdgeTrimming());
            map.put("edgeTrimming", glassOptimizeMapper.getEdgeTrimming(username));
        }else{
            map.put("data", glassOptimizeMapper.materialStoreOptimizeUse(projectNumber));
            map.put("edgeTrimming", null);
        }
        map.put("state", Integer.parseInt(stringObjectMap.get("state").toString()));
        return map;
    }
@@ -602,30 +611,30 @@
    }
    public Map<String, Object> getConfiguration(String type) {
    public Map<String, Object> getConfiguration(String type,String username) {
        Map<String, Object> map = new HashMap<>();
        if(type.equals("钢化")){
            map.put("data", glassOptimizeMapper.getTemperedConfiguration());
            map.put("data", glassOptimizeMapper.getTemperedConfiguration(username));
        }else if(type.equals("磨量")){
            map.put("data", glassOptimizeMapper.getGrindingTrimming());
            map.put("data", glassOptimizeMapper.getGrindingTrimming(username));
        }else if(type.equals("修边")){
            map.put("data", glassOptimizeMapper.getEdgeTrimming());
            map.put("data", glassOptimizeMapper.getEdgeTrimming(username));
        }
        return map;
    }
    public Boolean saveConfiguration(Map<String,Object> object,String type) {
    public Boolean saveConfiguration(Map<String,Object> object,String type,String username) {
        String json = "";
        if (object.get("json") != null) {
            json = object.get("json").toString();
        }
        if(type.equals("钢化")){
            glassOptimizeMapper.updateOptimizeConfig(json,1);
            glassOptimizeMapper.updateOptimizeConfig(json,1,username);
        } else if (type.equals("修边")) {
            glassOptimizeMapper.updateOptimizeConfig(json,5);
            glassOptimizeMapper.updateOptimizeConfig(json,5,username);
        }else if (type.equals("磨量")) {
            glassOptimizeMapper.updateOptimizeConfig(json,4);
            glassOptimizeMapper.updateOptimizeConfig(json,4,username);
        }
        return true;
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -217,6 +217,8 @@
    public Map<String, Object> SelectProcessSv(String userId) {
        Map<String, Object> map = new HashMap<>();
        String process = reportingWorkMapper.selectUserProcess(userId);
        //工序列表
        List<Map<String, Object>> processNameList = flowCardMapper.getProcessNameList();
        if (process==null) {
            map.put("process", reportingWorkMapper.SelectProcessMp());
        }
@@ -229,7 +231,7 @@
                map.put("process",reportingWorkMapper.getSelectProcessDuoqu() );
            }
        }
        map.put("processNameList", processNameList);
        return map;
    }
@@ -403,7 +405,7 @@
        //获取报工工序是否为复合工程
        String laminating = reportingWorkMapper.getProcessLaminating(thisProcess);
//合片工序
if (laminating.equals("stepA") || laminating.equals("stepB")){
if (laminating.indexOf("step")!=-1){
    LambdaUpdateWrapper
                <ReportingWork> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -3072,4 +3072,12 @@
        update  pp.flow_card fc set fc.merge=0
        where fc.process_id = #{processId}
    </update>
    <select id="getProcessName">
        select IFNULL(nickname,'') from sd.basic_data where basic_category='process' and basic_name=#{processSub}
    </select>
    <select id="getProcessNameList">
        SELECT id,basic_name,IFNULL(nickname,"") as nickname FROM sd.`basic_data` where basic_category='process'
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -95,39 +95,45 @@
    <!--第一次优化查询-->
    <select id="firstOptimization">
        ( SELECT
              c.project_no,
              d.child_width as 'width',
              d.child_height as 'height',
              c.quantity,
              o.shape,
              concat( c.process_id, '-', c.technology_number ) AS 'process_id',
              c.technology_number as layer,
              c.layers_number as total_layer,
              d.glass_child,
              o.product_name,
              o.price,
              o.remarks,
              o.building_number,
              round( d.area * c.quantity, 4 ) as 'area',
              c.order_number,
              d.icon,
              op.project_name,
              0 as patch_state
          FROM
              pp.flow_card c
                  LEFT JOIN sd.order_detail o ON c.order_id = o.order_id
                  AND c.order_number = o.order_number
                  LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
                  AND c.order_number = d.order_number
                  AND c.technology_number = d.technology_number
                  INNER JOIN pp.optimize_project AS op ON op.project_no = c.project_no
          WHERE
              c.project_no IS NOT NULL
            and c.project_no = #{projectNo}
          ORDER BY
              c.process_id,
              c.order_number
        (SELECT
             c.project_no,
             d.child_width as 'width',
             d.child_height as 'height',
             c.quantity,
             o.shape,
             concat( c.process_id, '-', c.technology_number ) AS 'process_id',
             c.process_id AS 'process_ids',
             c.technology_number as layer,
             c.layers_number as total_layer,
             d.glass_child,
             o.product_name,
             o.price,
             o.remarks,
             o.building_number,
             round( d.area * c.quantity, 4 ) as 'area',
             c.order_number,
             d.icon,
             op.project_name,
             0 as patch_state,
             a.id as rackNo
         FROM
             pp.flow_card c
                 LEFT JOIN sd.order_detail o ON c.order_id = o.order_id
                 AND c.order_number = o.order_number
                 LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
                 AND c.order_number = d.order_number
                 AND c.technology_number = d.technology_number
                 INNER JOIN pp.optimize_project AS op ON op.project_no = c.project_no
                 left join
             (select (@row_number := @row_number + 1) as id,process_id as process_id,technology_number as technology_number from (select process_id,technology_number from pp.flow_card tt where project_no =#{projectNo} group by process_id,technology_number) tt,(select @row_number := 0) as t) a
             on a.process_id=c.process_id and a.technology_number=c.technology_number
         WHERE
             c.project_no IS NOT NULL
           and c.project_no = #{projectNo}
         ORDER BY
             a.id,
             c.process_id,
             c.order_number
        ) union
        (
            SELECT
@@ -137,6 +143,7 @@
                c.patch_num as quantity,
                o.shape,
                concat( c.process_id, '-', c.technology_number ) AS 'process_id',
                c.process_id AS 'process_ids',
                c.technology_number as layer,
                fc.layers_number as total_layer,
                d.glass_child,
@@ -148,7 +155,8 @@
                c.order_sort as order_number,
                d.icon,
                op.project_name,
                1 as patch_state
                1 as patch_state,
                a.id as rackNo
            FROM
                pp.patch_log c
                    LEFT JOIN sd.order_detail o ON c.order_id = o.order_id
@@ -158,10 +166,14 @@
                    AND c.technology_number = d.technology_number
                    INNER JOIN pp.optimize_project AS op ON op.project_no = c.project_no
                    LEFT JOIN pp.flow_card fc ON c.process_id = fc.process_id and fc.technology_number=c.technology_number
                    left join
                    (select (@row_number := @row_number + 1) as id,process_id as process_id,technology_number as technology_number from (select process_id,technology_number from pp.flow_card tt where project_no =#{projectNo} group by process_id,technology_number) tt,(select @row_number := 0) as t) a
            on a.process_id=c.process_id and a.technology_number=c.technology_number
            WHERE
                c.project_no IS NOT NULL
              and c.project_no = #{projectNo}
            ORDER BY
                a.id,
                c.process_id,
                c.order_sort)
    </select>
@@ -171,7 +183,7 @@
    <select id="analogComputationOptimization">
        SELECT
            h.project_no,
            h.layout_id,
            h.layout_id as rackNo,
            h.width AS width,
            h.height AS height,
            count( 1 ) AS quantity,
@@ -225,6 +237,57 @@
        ORDER BY
            LENGTH( h.layout_id ),
            h.layout_id;
    </select>
    <select id="getOptimizeDetail">
        SELECT
            h.project_no,
            h.heat_layout_id as rackNo,
            h.o_width AS width,
            h.o_height AS height,
            (h.height-h.o_height)/2 as shortGrind1,
            (h.height-h.o_height)/2 as shortGrind2,
            (h.width-h.o_width)/2 as longGrind2,
            (h.width-h.o_width)/2  as longGrind1,
            count( 1 ) AS quantity,
            o.shape,
            concat( h.process_id, '-', h.layer ) AS 'process_id',
            h.process_id as process_ids,
            h.layer,
            h.total_layer as total_layer,
            d.glass_child,
            o.product_name,
            o.price,
            o.remarks,
            o.building_number,
            round( d.area * count( 1 ), 4 ) AS 'area',
            c.order_number,
            d.icon,
            o.price,
            h.patch_state
        from
            pp.`optimize_detail` h
                LEFT JOIN pp.flow_card c ON h.process_id = c.process_id
                AND h.layer = c.technology_number
                AND h.order_sort = c.order_number
                LEFT JOIN sd.order_detail o ON c.order_id = o.order_id
                AND c.order_number = o.order_number
                LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
                AND c.order_number = d.order_number
                AND c.technology_number = d.technology_number
        WHERE
            h.project_no =#{projectNo}
        GROUP BY
            h.project_no,
            h.heat_layout_id,
            h.width,
            h.height,
            h.process_id,
            h.layer,
            c.order_number
        ORDER BY
            h.heat_layout_id;
    </select>
    <!--工程信息流程卡-->
@@ -1063,8 +1126,8 @@
            #{glass.orderSort},
            #{glass.stockSort},
            #{glass.polySort},
            #{glass.realwidth},
            #{glass.realheight},
            #{glass.realWidth},
            #{glass.realHeight},
            #{glass.width},
            #{glass.height},
            #{glass.x},
@@ -1219,7 +1282,7 @@
               JSON_EXTRACT( oc.config_detail, '$.load_length' ) as load_length,
               JSON_EXTRACT( oc.config_detail, '$.x_space' ) as x_space,
               JSON_EXTRACT( oc.config_detail, '$.y_space' ) as y_space
        from pp.optimize_admin oa left join pp.optimize_config oc on oa.h_id=oc.id where name='admin'
        from pp.optimize_admin oa where config_type=1 and creater=#{username}
    </select>
    <select id="getEdgeTrimming">
@@ -1229,7 +1292,7 @@
               JSON_EXTRACT( oc.config_detail, '$.down_trim' ) as downTrim,
               JSON_EXTRACT( oc.config_detail, '$.auto_fill_trim' ) as autoFillTrim,
               JSON_EXTRACT( oc.config_detail, '$.quick_trim' ) as quickTrim
        from  pp.optimize_config oc where config_type=5
        from  pp.optimize_config oc where config_type=5 and creater=#{username}
    </select>
    <select id="getGrindingTrimming">
@@ -1240,12 +1303,12 @@
               JSON_EXTRACT( oc.config_detail, '$.auto_fill_edge' ) as autoFillEdge,
               JSON_EXTRACT( oc.config_detail, '$.quick_edge' ) as quickEdge,
                JSON_EXTRACT( oc.config_detail, '$.min_auto_lenght' ) as minAutoLenght
        from  pp.optimize_config oc where config_type=4
        from  pp.optimize_config oc where config_type=4 and creater=#{username}
    </select>
    <update id="updateOptimizeConfig">
        UPDATE pp.optimize_config set config_detail=#{json},create_time=now()
        where config_type=#{type}
        where config_type=#{type} and creater=#{username}
    </update>
    <select id="simulatedTypesettingUsingOpt">
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -215,7 +215,7 @@
        LEFT JOIN sd.order_glass_detail AS ogd
        ON od.order_id = ogd.order_id
        AND od.order_number = ogd.order_number
        <if test="laminating == 'stepA'" >
        <if test="laminating == 'stepA' || laminating == 'stepC'" >
            AND ogd.`group` = (select `group`
            from sd.order_glass_detail
            where order_id = ogd.order_id
@@ -952,7 +952,7 @@
        LEFT JOIN sd.order_glass_detail AS ogd
        ON od.order_id = ogd.order_id
        AND od.order_number = ogd.order_number
        <if test="laminating == 'stepA'" >
        <if test="laminating == 'stepA' || laminating == 'stepC'" >
            AND ogd.`group` = (select `group`
            from sd.order_glass_detail
            where order_id = ogd.order_id