chenlu
2024-12-16 6ded5f4ababd82c4c93b5e88b1132f1869340776
Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
10个文件已修改
425 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/CheckInventory.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue 177 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintProject.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/pp/FlowCard.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -58,11 +58,9 @@
data.value.printList = JSON.parse(props.printList)
let flowCardCount = ''
onMounted(() => {
  console.log(printProject)
      if(props.printProject!=null){
        request.post(`/processCard/getSelectPrintProject/${printProject}`).then((res) => {
          if (res.code == 200) {
            console.log(res.data.data)
            load(res.data.data)
          } else {
            ElMessage.warning(res.msg)
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeProject.vue
@@ -26,15 +26,24 @@
  dataForGlassInventory.value = data;
};
//获取GlassInventory的值
const sendDataGlassInventory = ref()
const handleInventoyData = (selectedLabel1,selectedLabel2) => {
  sendDataGlassInventory.value = {
    selectedLabel1, selectedLabel2
  };
};
</script>
<template >
 <div style="width: 100%;height: 100%">
   <div id="main-body">
     <project-detail @changeDialog="changeDialog"  @forward-data-to-grandparent="handleProjectDetailData"/>
     <project-detail @changeDialog="changeDialog"  @forward-data-to-grandparent="handleProjectDetailData" @send-inventory-to-op="handleInventoyData"/>
   </div>
   <div id="main-footer">
     <glass-inventory :receivedData="dataForGlassInventory"/>
     <glass-inventory :receivedData="dataForGlassInventory" :InventoryData="sendDataGlassInventory"/>
   </div>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/CheckInventory.vue
@@ -1,5 +1,5 @@
<script setup>
import {ref} from "vue";
import {defineEmits, ref} from "vue";
const value1 = ref('')
const value2 = ref('')
@@ -40,6 +40,24 @@
    label: 'Low-e',
  },
]
const emit = defineEmits(['send-data-inventory',]);
const props = defineProps({
  closeDialog: Function
});
const CheckInventory = () => {
  const selectedLabel1 = options1.find((option) => option.value === value1.value)?.label || '';
  const selectedLabel2 = options2.find((option) => option.value === value2.value)?.label || '';
  // 判断两个值是否都被选择了,如果有一个为空字符串,则提示并返回,不执行后续操作
  if (!selectedLabel1 ||!selectedLabel2) {
    window.alert('请选择相关选项');
    return;
  }
  props.closeDialog(1);
  emit('send-data-inventory', selectedLabel1,selectedLabel2);
};
</script>
<template>
@@ -69,7 +87,7 @@
    </div>
    <div style="float: right; margin:-55px 35px 0 0;">
      <el-button type="primary">查询</el-button>
      <el-button type="primary" @click="CheckInventory">查询</el-button>
    </div>
  </div>
</template>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/GlassInventory.vue
@@ -112,6 +112,15 @@
  }
}, { immediate: true });
watch(() => props.InventoryData, (newInventoryData) => {
  if (newInventoryData) {
    thickness.value = newInventoryData.selectedLabel1;
    model.value = newInventoryData.selectedLabel2;
    // 由于 thickness 和 model 的值改变了,更新表格,调用 selectMaterialStore 重新获取数据
    selectMaterialStore();
  }
});
const props = defineProps({
  receivedData : {
    type: Object,
@@ -121,15 +130,22 @@
      quicksetBottom: { type: Number },
      quicksetRight: { type: Number },
      quicksetTop: { type: Number }
    }}
    }
  },
  InventoryData : {
    type: Object,
    required: false,
    properties: {
      selectedLabel1: { type: String },
      selectedLabel2: { type: String },
    }
  }
});
//接受SetTrimming的值 (修边)
const Trimming = (receivedData) => {
  nextTick(() => {
    const data = gridOptions.data;
    console.log('接收到的receivedData:', receivedData);
    console.log('表格原始数据:', data);
    if (data) {
      try {
        const updatedData = [];
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -7,8 +7,8 @@
import SetTrimming from "@/views/pp/glassOptimize/page/SetTrimming.vue";
import CheckInventory from "@/views/pp/glassOptimize/page/CheckInventory.vue";
import request from "@/utils/request";
import {ElMessage} from "element-plus";
import { useRoute } from 'vue-router';
import {ElMessage, ElMessageBox} from "element-plus";
import {useRoute} from 'vue-router';
const {t} = useI18n()
@@ -45,12 +45,53 @@
  columns: [
    {field: 'order_number', title: '订序', width: 70},
    {field: 'child_width', width: 100, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num2_filter'}},
    {field: 'child_height', width: 100, title: t('order.height'),filters: [{data: ''}],slots: {filter: 'num2_filter'}},
    {field: 'quantity', width: 150, title: t('order.quantity'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'longGrind1', width: 150, title: '长磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'longGrind2', width: 150, title: '长磨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'shortGrind1', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'shortGrind2', width: 150, title: '短磨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'child_height',
      width: 100,
      title: t('order.height'),
      filters: [{data: ''}],
      slots: {filter: 'num2_filter'}
    },
    {
      field: 'quantity',
      width: 150,
      title: t('order.quantity'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'longGrind1',
      width: 150,
      title: '长磨1',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'longGrind2',
      width: 150,
      title: '长磨2',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'shortGrind1',
      width: 150,
      title: '短磨1',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'shortGrind2',
      width: 150,
      title: '短磨2',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'shape',
      width: 150,
@@ -59,7 +100,14 @@
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'process_cards', width: 150, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'process_cards',
      width: 150,
      title: '流程卡号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'product_name',
      width: 150,
@@ -135,14 +183,101 @@
    },
  ],//表头参数
  data: null,//表格数据
  //右键菜单
  menuConfig: {
    body: {
      options: [
        [
          {code: 'setAmount', name: '设置统一磨量',},
          {code: 'displayProcessCard', name: '显示流程卡',},
          {code: 'hideProcessCard', name: '隐藏流程卡',},
          {code: 'setShape', name: '设置图形',},
          {code: 'Export', name: '数据导出', prefixIcon: 'vxe-icon-download', visible: true, disabled: false},
          {code: '', name: '图形另存为DXF',},
          {code: '', name: '导出数据到OPTIMA',},
        ],
        []
      ]
    },
  },
  toolbarConfig: {
    buttons: [],
    slots: {
      buttons: "toolbar"
    },
  },
})
// 右键菜单
const operationConfigs = [
  {
    code: 'setAmount', // 设置统一磨量
    successMsg: '已打开!',
    gridRef: xGrid,
    requiresRow: false,
    openAmount: async () => {
      dialogVisible.value[2] = true;
    }
  },
  {
    code: 'displayProcessCard',
    successMsg: '操作成功!',
    gridRef: xGrid,
    requiresRow: false,
  },
  {
    code: 'hideProcessCard',
    successMsg: '操作成功!',
    gridRef: xGrid,
    requiresRow: false,
  },
  {
    code: 'setShape',
    successMsg: '操作成功!',
    gridRef: xGrid,
    requiresRow: false,
  },
  {
    code: 'Export', // 导出文件操作的配置
    successMsg: '文件导出成功!',
    gridRef: xGrid,
    requiresRow: false,
  },
]
// 右键菜单点击逻辑
const gridEvents = {
  menuClick({menu}) {
    const $grid = xGrid.value;
    if ($grid) {
      const config = operationConfigs.find(c => c.code === menu.code);
      if (config) {
        if (config.code === 'Export') {
          config.gridRef.value.exportData();
          ElMessage.success(config.successMsg);
          return;
        }
        // 添加确认提示弹窗,询问用户是否进行当前操作
        ElMessageBox.confirm('是否进行当前操作?', '确认操作', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          if (config.code === 'setAmount') {
            config.openAmount();
            ElMessage.success(config.successMsg);
          }
        }).catch(() => {
          // 用户点击取消后执行的逻辑
          ElMessage.info('已取消操作');
        });
      } else {
        console.error(`未找到操作选项 ${menu.code} 对应的配置,请检查配置项`);
      }
    }
  },
};
const handleCommand = async (command) => {
  await emit('changeDialog', command)
@@ -194,8 +329,6 @@
const Amount = (amountData) => {
  nextTick(() => {
    const data = gridOptions.data;
    console.log('接收到的amountData:', amountData);
    console.log('表格原始数据:', data);
    if (data) {
      try {
        const updatedData = [];
@@ -223,15 +356,21 @@
  });
};
//中转站接受SetTrimming的值
//中转站接受SetTrimming的值(设置修边)
const emit = defineEmits([
  'changeDialog',
  'forward-data-to-grandparent'
  'forward-data-to-grandparent',
  'send-inventory-to-op'
]);
const handleTrimmingData = (data) => {
  emit('forward-data-to-grandparent', data);
};
//中转站接受CheckInventory的值(查询库存)
const handleInventory = (selectedLabel1, selectedLabel2) => {
  emit('send-inventory-to-op', selectedLabel1, selectedLabel2);
}
</script>
@@ -274,16 +413,17 @@
        <div id="header">
          <div id="title">
            <span>工程编号:</span>
            <el-input disabled  placeholder="" style="width: 150px" v-model="projectNo"></el-input>&nbsp;
            <el-input disabled placeholder="" style="width: 150px" v-model="projectNo"></el-input>&nbsp;
            <span>工程名称:</span>
            <el-input disabled placeholder="" style="width: 150px; margin-right: 350px" v-model="projectName"></el-input>
            <el-input disabled placeholder="" style="width: 150px; margin-right: 350px"
                      v-model="projectName"></el-input>
            <el-button id="checkinventory" type="primary" @click="openDialog(1)">查询库存</el-button>
            <el-dialog
                v-model="dialogVisible[1]"
                title="查询库存"
                destroy-on-close
                style="width: 35%;height:35%;">
              <check-inventory />
              <check-inventory :closeDialog="closeDialog" @send-data-inventory="handleInventory"/>
            </el-dialog>
            <el-button id="button" type="primary" @click="openDialog(2)">设置磨量</el-button>
@@ -292,7 +432,7 @@
                title="设置磨量"
                destroy-on-close
                style="width: 35%;height:80%;margin-top: 3vh;">
               <set-amount :closeDialog="closeDialog" @set-amount="Amount"/>
              <set-amount :closeDialog="closeDialog" @set-amount="Amount"/>
            </el-dialog>
            <el-button id="button" type="primary" @click="openDialog(3)">设置修边</el-button>
@@ -315,7 +455,6 @@
            >
              <optimize-compute/>
            </el-dialog>
          </div>
          <!--工程文件菜单-->
          <el-dropdown @command="handleCommand">
@@ -351,7 +490,7 @@
  margin-top: 8px;
}
#button{
#button {
  margin-left: 10px;
}
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintProject.vue
@@ -75,7 +75,6 @@
    }
    case 'edit3' :{
      printRow.value.project=row.project_no
      console.log(printRow.value.project)
      dialogTableVisible.value = true
    }
  }
north-glass-erp/src/main/java/com/example/erp/entity/pp/FlowCard.java
@@ -94,6 +94,9 @@
    //小片数量
    @TableField(select = false,exist = false)
    private String glassCount;
    //补片状态
    @TableField(select = false,exist = false)
    private Integer patchState;
    //外键订单表
    @TableField(select = false,exist= false)
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -75,7 +75,11 @@
    List<Map<String, String>> getPrimaryList(String processId, String technologyNumber, String glassChild, String process, String orderId);
    List<Map<String, String>> getPrimaryLists(String processId, String technologyNumber, String glassChild, String process, String orderId,Integer quantity);
    List<Map<String, Object>> getDetailList(String processId, String technologyNumber, String process);
    List<Map<String, Object>> getDetailLists(String processId, String technologyNumber, String process,Integer orderNumber);
    List<Map<String, Object>> getProcessList(String processId, String technologyNumber);
@@ -125,6 +129,8 @@
    List<Map<String, Object>> getDetailListLike(String processId, String technologyNumber, String process);
    List<Map<String, Object>> getDetailListLikes(String processId, String technologyNumber, String process,Integer orderNumber,Integer quantity);
    List<Map<String, String>> getPrimaryListMergeRefund(String processId, String technologyNumber, Integer orderNumber, String orderId);
    List<Map<String, Object>> getDetailListRefund(String processId, String technologyNumber, Integer orderNumber, String reportingWorkId, String patchReason);
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -377,15 +377,28 @@
                    String processSub=flowCard.getProcess().substring(0, 2);
                    if(processSub.equals("夹胶") || processSub.equals("中空")){
                        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());
                            itemmap.put("detailList", detailList);
                        }else{
                            List<Map<String, Object>> detailList = flowCardMapper.getDetailLists(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getProcess(),flowCard.getOrderNumber());
                            itemmap.put("detailList", detailList);
                        }
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getProcess());
                        itemmap.put("detailList", detailList);
                    }
                    else {
                        itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getGlassChild(),flowCard.getProcess(),flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getProcess());
                        itemmap.put("detailList", detailList);
                        if(flowCard.getPatchState().equals(0)){
                            itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getGlassChild(),flowCard.getProcess(),flowCard.getOrderId()));
                            List<Map<String, Object>> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getProcess());
                            itemmap.put("detailList", detailList);
                        }else{
                            itemmap.put("detail", flowCardMapper.getPrimaryLists(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getGlassChild(),flowCard.getProcess(),flowCard.getOrderId(),flowCard.getQuantity()));
                            List<Map<String, Object>> detailList = flowCardMapper.getDetailListLikes(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getProcess(),flowCard.getOrderNumber(),flowCard.getQuantity());
                            itemmap.put("detailList", detailList);
                        }
                    }
@@ -412,7 +425,13 @@
                itemmap.put("processList", processList);
                //  itemmap.put("numberList", numberList);
                itemmap.put("count", flowCardMapper.countFlowCard(flowCard.getOrderId()));
                if(flowCard.getPatchState().equals(0)){
                    itemmap.put("count", flowCardMapper.countFlowCard(flowCard.getOrderId()));
                }else{
                    itemmap.put("count", flowCardList.size());
                }
                itemmap.put("state", flowCard.getPatchState());
                itemmap.put("remarkList", flowCardMapper.remakList(flowCard.getProcessId()));
                list.add(itemmap);
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -660,6 +660,45 @@
        group by fc.process_id
    </select>
    <select id="getPrimaryLists">
        select o.customer_name,
               o.project,
               #{process}                                         process,
               od.edging_type,
               #{glassChild}                                   as glass_child,
               od.product_name,
               o.processing_note,
               fc.process_id,
               #{quantity}                                                      as quantity,
               round(od.width*od.height*#{quantity}/1000000, 2)                   as gross_area,
               sum(od.weight)                                  as weight,
               #{technologyNumber}                             as technologyNumber,
               concat(fc.process_id, '/', #{technologyNumber}) as processIdNumber,
               concat('对应我司单号', o.batch)                 AS otherRemarks,
               ''                                              as qrcode
        from flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
                              fc.technology_number = ogd.technology_number
                 left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number
                 left join sd.`order` as o on o.order_id = fc.order_id
                 left join sd.product as p on p.id = od.product_id
                 left join (select ogd.order_id,
                                   ogd.order_number,
                                   ogd.technology_number,
                                   ogd.glass_child,
                                   GROUP_CONCAT(glass_child SEPARATOR ' ') AS concatenated_glass_child
                            from sd.order_glass_detail as ogd
                            where ogd.order_id = #{orderId}
                              and position(ogd.technology_number in #{technologyNumber})
                            GROUP BY order_id, order_number) as ogdc
                           on ogdc.order_id = ogd.order_id and ogdc.order_number = ogd.order_number and
                              ogdc.technology_number = ogd.technology_number
        where fc.process_id = #{processId}
          and position(fc.technology_number in #{technologyNumber})
        group by fc.process_id
    </select>
    <select id="getDetailList">
        select fc.order_number,
               concat(round(ogd.child_width), "*", round(ogd.child_height))   as child_width,
@@ -688,6 +727,39 @@
                               and fcs.process = #{process}
        where fc.process_id = #{processId}
          and position(fc.technology_number in #{technologyNumber})
        group by fc.process_id, fc.order_number
        order by IF(fcs.sort != NULL or fcs.sort != '', fcs.sort, fc.order_number)
    </select>
    <select id="getDetailLists">
        select fc.order_number,
               concat(round(ogd.child_width), "*", round(ogd.child_height))   as child_width,
               fc.quantity,
               round(ogd.total_area, 2)                                       as total_area,
               od.perimeter,
               if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
               round(ogd.child_height)                                        as height,
               pd.separation,
               fc.technology_number,
               IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber,
               od.building_number
        from flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
                              fc.technology_number = ogd.technology_number
                 left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number
                 left join sd.product_detail as pd
                           on pd.prod_id = od.product_id and pd.glass_sort = ogd.technology_number
                 left join flow_card_sort as fcs
                           on fcs.process_id = fc.process_id and fcs.order_number = fc.order_number and
                              fcs.technology_number = fc.technology_number
                               and fcs.process = #{process}
        where fc.process_id = #{processId}
          and position(fc.technology_number in #{technologyNumber})
        and fc.order_sort = #{orderNumber}
        group by fc.process_id, fc.order_number
        order by IF(fcs.sort != NULL or fcs.sort != '', fcs.sort, fc.order_number)
    </select>
@@ -1239,6 +1311,39 @@
                               and fcs.process = #{process}
        where fc.process_id = #{processId}
          and position(fc.technology_number in #{technologyNumber})
        group by fc.process_id, fc.order_number, fc.technology_number
        order by IF(fcs.sort != NULL or fcs.sort != '', fcs.sort, fc.order_number)
    </select>
    <select id="getDetailListLikes">
        select fc.order_number,
               concat(round(ogd.child_width), "*", round(ogd.child_height))   as child_width,
               #{quantity} as quantity,
               round(ogd.child_width*ogd.child_height*#{quantity}/1000000, 2)                                       as total_area,
               round((ogd.child_width+ogd.child_height)*2*#{quantity}/1000, 2)    as perimeter,
               if(od.shape=2,JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S04')),od.bend_radius) as bend_radius,
               concat(IFNULL(od.processing_note, ''), IFNULL(od.remarks, '')) as remarks,
               od.other_columns,
               round(ogd.child_width)                                         as width,
               round(ogd.child_height)                                        as height,
               pd.separation,
               fc.technology_number,
               IFNULL(JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S02')),'') as mapNumber,
               od.building_number
        from flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
                              fc.technology_number = ogd.technology_number
                 left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number
                 left join sd.product_detail as pd
                           on pd.prod_id = od.product_id and pd.glass_sort = ogd.technology_number
                 left join flow_card_sort as fcs
                           on fcs.process_id = fc.process_id and fcs.order_number = fc.order_number and
                              fcs.technology_number = fc.technology_number
                               and fcs.process = #{process}
        where fc.process_id = #{processId}
          and position(fc.technology_number in #{technologyNumber})
          and fc.order_number=#{orderNumber}
        group by fc.process_id, fc.order_number, fc.technology_number
        order by IF(fcs.sort != NULL or fcs.sort != '', fcs.sort, fc.order_number)
    </select>
@@ -2511,29 +2616,26 @@
    </update>
    <select id="getFlowCardListPrintProject">
        select fc.id,
               fc.order_id,
               fc.process_id,
               o.customer_name,
               o.project,
               fc.order_number,
               ogd.technology_number,
               ogd.glass_address,
               sum(fc.quantity)                                                          as quantity,
               round(sum(ogd.child_width * ogd.child_height * fc.quantity / 1000000), 2) as total_area,
               od.product_name,
               ogd.glass_child,
               fc.founder,
               date(fc.splitFrame_time) as splitFrame_time,
            /* if(fc.print_status=0,'未打印','已打印') as  print_status*/
               fc.print_status,
               ogd.process
        from pp.flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on ogd.order_id = fc.order_id and ogd.order_number = fc.order_number and
                              ogd.technology_number = fc.technology_number
                 left join sd.order_detail as od on od.order_id = fc.order_id and od.order_number = fc.order_number
                 left join sd.`order` as o on o.order_id = fc.order_id
        select
            od.order_id,
            fc.process_id,
            o.customer_name,
            o.project,
            od.order_number,
            ogd.technology_number,
            ogd.glass_address,
            fc.quantity ,
            round(sum(ogd.child_width * ogd.child_height * fc.quantity / 1000000), 2) as total_area,
            od.product_name,
            ogd.glass_child,
            fc.patch_state,
            ogd.process
        from  (select process_id,count(*) as quantity,order_sort,project_no,layer,patch_state from pp.optimize_detail where project_no = #{printProject} group by process_id,layer) as fc
                  left join sd.order_glass_detail as ogd
                            on ogd.order_id = SUBSTRING(fc.process_id,1,10)  and ogd.order_number = fc.order_sort and
                               ogd.technology_number = fc.layer
                  left join sd.order_detail as od on od.order_id = SUBSTRING(fc.process_id,1,10)  and od.order_number = fc.order_sort
                  left join sd.`order` as o on o.order_id = SUBSTRING(fc.process_id,1,10)
        where fc.project_no = #{printProject}
        GROUP BY fc.process_id, ogd.technology_number
        order by fc.process_id, ogd.technology_number