huang
2024-11-25 4b06ec4b7bec913a5fee144b22a5e1596b70ba94
Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override

# Conflicts:
# north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
# north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
# north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
24个文件已修改
1个文件已添加
694 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/mm/PrintPackingList.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet3.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/天津北玻.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/常州吉利.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/新疆恒鑫.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/金华天成.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectList.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintProjectDetails.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintProject.vue 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/mm/PrintPackingList.vue
New file
@@ -0,0 +1,144 @@
<script setup>
import request from "@/utils/request"
import {ElDatePicker, ElMessage} from "element-plus"
import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue"
import {Search} from "@element-plus/icons-vue"
import {useRouter} from 'vue-router'
import {changeFilterEvent, filterChanged} from "@/hook"
import {useI18n} from 'vue-i18n'
import deepClone from "@/utils/deepClone";
import QRCode from "qrcode";
import companyInfo from "@/stores/sd/companyInfo";
import userInfo from "@/stores/userInfo"
//语言获取
const company = companyInfo()
const {t} = useI18n()
let router = useRouter()
let produceList = ref([])
let list = ref()
const details = ref([])
const user=userInfo()
const data = ref({
  printList: []
})
let props = defineProps({
  printList: null,
})
const {currentRoute} = useRouter()
const route = currentRoute.value
data.value.printList = JSON.parse(props.printList)
onMounted(() => {
  selectPrint()
    }
)
const selectPrint = () => {
  request.post(`/finishedGoodsInventory/getSelectPrint`, data.value).then((res) => {
    if (res.code == 200) {
      produceList.value = deepClone(res.data.data)
    } else {
      ElMessage.warning(res.msg)
      router.push("/login")
    }
  })
}
</script>
<template>
<div>
  <div style="width: 100%;height: 100%" v-for="(item,id) in produceList"  :key="id">
    <div  style="height: 100%;width: 100%;">
      <table>
        <thead>
        <tr>
          <td colspan="5" style="text-align: center;font-weight: bolder">
            <div>金华福喜天成玻璃有限公司</div>
          </td>
        </tr>
        <tr style="width: 100%;" v-for="(itemFlow,index) in item.detail" :key="index">
          <td colspan="5">
            <div>客户名称:&nbsp;&nbsp;&nbsp;{{itemFlow.customer_name}}</div>
            <div>项目名称:&nbsp;&nbsp;&nbsp;{{itemFlow.project}}</div>
            <div>订单号:&nbsp;&nbsp;&nbsp;{{itemFlow.order_id}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ç®±å·:&nbsp;&nbsp;&nbsp;{{itemFlow.remarks}}</div>
          </td>
        </tr>
        <tr>
          <td style="width: 170px;">编号</td>
          <td style="width: 70px;">宽</td>
          <td style="width: 70px;">高</td>
          <td style="width: 70px;">数量</td>
          <td style="width: 70px;">面积</td>
        </tr>
        </thead>
        <tbody>
        <tr v-for="(itemDatile,index) in item.detailList" :key="index">
          <td>{{ itemDatile.building_number }}</td>
          <td>{{ itemDatile.width }}</td>
          <td>{{ itemDatile.height }}</td>
          <td>{{ itemDatile.quantity }}</td>
          <td>{{ itemDatile.area }}</td>
        </tr>
        <tr style="width: 100%;" v-for="(itemFlows,index) in item.detail" :key="index">
          <td>合计</td>
          <td></td>
          <td></td>
          <td>{{itemFlows.quantity}}</td>
          <td>{{itemFlows.area}}</td>
        </tr>
        </tbody>
      </table>
    </div>
  </div>
</div>
</template>
<style scoped>
* {
  margin: 0;
  padding: 0;
}
#contentTable{
  width: 100%;
  height: 100%;
}
#record{
  font-size: 20px;
  text-align: left;
  display: flex;
  flex-wrap: wrap
}
table{
  width: 100%;
}
@media print {
  @page {
    size: auto;  /* auto is the initial value */
    margin: 4mm 5mm 0mm 5mm  /* this affects the margin in the printer settings */
  }
  table {
    page-break-before: always;
    page-break-inside: auto;
  }
  thead {
    display: table-header-group;
    page-break-inside: avoid;
  }
}
</style>
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -19,6 +19,8 @@
const details = ref([])
const user=userInfo()
let totalQuantity = 0;  // ç”¨äºŽè®°å½•总数量
let totalArea = 0;      // ç”¨äºŽè®°å½•总面积
const data = ref({
  printList: []
@@ -135,6 +137,7 @@
          //处理同配置打印
          handleGetQRCode()
          handleSummary()
          AreaQuantitySummary()
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
@@ -205,6 +208,20 @@
  }
}
const AreaQuantitySummary = () => {
  for (let i = 0; i < produceList.value.length; i++) {
    // éåŽ†å½“å‰é¡¹ç›®çš„ detail æ•°ç»„
    for (let j = 0; j < produceList.value[i].detail.length; j++) {
      // ç´¯åŠ æ•°é‡
      totalQuantity += produceList.value[i].detail[j].quantity;
      // ç´¯åŠ é¢ç§¯
      totalArea += produceList.value[i].detail[j].gross_area;
    }
  }
}
</script>
<template>
@@ -219,7 +236,15 @@
          <div>{{ company.companyName }}</div>
          <div>生产流程卡</div>
          <div  style="font-weight: bolder;display: flex;justify-content:space-between">
            <div>打印人:{{user.user.userName}} &nbsp;&nbsp;时间:{{formattedTime}}</div>
            <div>
              æ‰“印人:{{user.user.userName}} &nbsp;&nbsp;
              æ—¶é—´ï¼š{{formattedTime}}
              &nbsp;&nbsp;
              <span style="font-weight: bolder;" v-if="name=='金华福喜天成玻璃有限公司'">
                æ‰“印总数量:{{totalQuantity}}
              æ‰“印总面积:{{totalArea}}
              </span>
            </div>
            <div>
              <span v-if="name!='金华福喜天成玻璃有限公司'" style="font-size: 10px">{{itemFlow.otherRemarks}}</span>&nbsp;&nbsp;
              æµç¨‹å¡å·ï¼š {{
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue
@@ -16,7 +16,7 @@
let otherMoneys = 0
let sumMoney = 0
let takeCare = "注意:请妥善保管好我司的玻璃架,如有丢失或损坏,按1500元只赔偿。谢谢配合!"
let remark = "备注:本批玻璃为优等合格品,请在卸货时,当面消点验收、如有质量问题在一周内与本公司联系,否则概不负责!"
let remark = company.deliveryRemark
@@ -35,13 +35,13 @@
  request.post(`/delivery/getSelectDeliveryPrinting`,form.value).then((res) => {
    if(res.code==200){
      produceList.value = deepClone(res.data.data)
      console.log(produceList.value)
      delivery.value=deepClone(res.data.delivery)
      money.value=deepClone(res.data.money)
      otherMoney.value=deepClone(res.data.otherMoney)
      produceList.value.forEach(item => {
        sumMoney+=item.DeliveryDetail.money
      })
      console.log(otherMoney.value)
      otherMoney1=[]
      otherMoney=deepClone(res.data.otherMoney)
      for(let i=0;i<otherMoney.length;i++){
@@ -155,7 +155,7 @@
      </thead>
      <tr style="border-style: none">
        <td colspan="9" style="border-style: none">
          <table style="border-style: none;width: 100%;height: 100%">
          <table style="border-style: none;width: 100%;height: 100%;">
            <template v-for="(item, index) in produceList" :key="index" >
              <thead>
              <tr v-if="index===0">
@@ -244,9 +244,10 @@
                    <el-col :span="4"><div style="font-size: 12px" class="bottom">打印人:{{username}}</div></el-col>
                  </el-row>-->
            <tr class="day-in" style="border: 0;">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;;text-align: left"  class="bottom">
            <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator">
              <td colspan="9" style="border: 0">
                <div style="display:flex;text-align: left"  class="bottom">
                  <div style="width: 15%">制单员:{{ delivery.creator }}</div>
                  <div style="width: 25%">制单日期:{{ delivery.createTime }}</div>
                  <div style="width: 10%">发货员:</div>
@@ -254,25 +255,40 @@
                  <div style="width: 15%">客户签字:</div>
                  <div style="width: 15%">签收日期:</div>
                </div>
              </td>
            </tr>
            <tr class="day-in" style="border: 0;">
            <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;" class="bottom">
                  æž¶å­&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                  {{takeCare}}
                </div>
              </td>
            </tr>
            <tr class="day-in" style="border: 0;">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;" class="bottom">
                  {{remark}}
                <div style="display:flex;text-align: left" class="bottom" v-for="item in  remark">
                  {{item}}
                </div>
              </td>
            </tr>
            <tr class="day-in" style="border: 0" v-if="!company.showDeliveryCreator">
              <td colspan="9" style="border: 0">
                <div style="width: 100%;height: 50px"></div>
              </td>
            </tr>
            <tr class="day-in" style="border: 0" v-if="!company.showDeliveryCreator">
              <td colspan="9" style="border: 0">
                <div style="display:flex;text-align: left"  class="bottom">
                  <div style="width: 15%">制单员:{{ delivery.creator }}</div>
                  <div style="width: 15%">制单日期:{{ delivery.createTime1 }}</div>
                  <div style="width: 15%">发货员:</div>
                  <div style="width: 15%">司机:</div>
                  <div style="width: 15%">客户签字:</div>
                  <div style="width: 15%">签收日期:</div>
                </div>
              </td>
            </tr>
@@ -488,7 +504,6 @@
  margin: 0;
  padding: 0;
}
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue
@@ -12,7 +12,7 @@
let money = ref("")
let otherMoneys = 0
let takeCare = "注意:请妥善保管好我司的玻璃架,如有丢失或损坏,按1500元只赔偿。谢谢配合!"
let remark = "备注:本批玻璃为优等合格品,请在卸货时,当面消点验收、如有质量问题在一周内与本公司联系,否则概不负责!"
let remark = company.deliveryRemark
@@ -178,7 +178,7 @@
                    <el-col :span="4"><div style="font-size: 12px" class="bottom">打印人:{{username}}</div></el-col>
                  </el-row>-->
            <tr class="day-in" style="border: 0;">
            <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;;text-align: left"  class="bottom">
                  <div style="width: 15%">制单员:{{ delivery.creator }}</div>
@@ -192,7 +192,7 @@
              </td>
            </tr>
            <tr class="day-in" style="border: 0;">
            <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;" class="bottom">
                  æž¶å­&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@@ -203,13 +203,34 @@
            </tr>
            <tr class="day-in" style="border: 0;">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;" class="bottom">
                  {{remark}}
                <div style="display:flex;text-align: left" class="bottom" v-for="item in  remark">
                  {{item}}
                </div>
              </td>
            </tr>
            <tr class="day-in" style="border: 0" v-if="!company.showDeliveryCreator">
              <td colspan="9" style="border: 0">
                <div style="width: 100%;height: 50px"></div>
              </td>
            </tr>
            <tr class="day-in" style="border: 0;" v-if="!company.showDeliveryCreator">
              <td colspan="9" style="border: 0;">
                <div style="display:flex;;text-align: left"  class="bottom">
                  <div style="width: 15%">制单员:{{ delivery.creator }}</div>
                  <div style="width: 25%">制单日期:{{ delivery.createTime }}</div>
                  <div style="width: 10%">发货员:</div>
                  <div style="width: 10%">司机:</div>
                  <div style="width: 15%">客户签字:</div>
                  <div style="width: 15%">签收日期:</div>
                </div>
              </td>
            </tr>
          </table>
        </td>
      </tr>
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet3.vue
@@ -187,7 +187,7 @@
      <tr  class="title-s">
        <th colspan="2"></th>
        <th colspan="5">
          <h3>销售发货单</h3>
          <h3>销售确认单</h3>
        </th>
        <th colspan="2" style="text-align: left;font-weight: bold;">发货单号:<span>{{delivery.deliveryId}}</span></th>
      </tr>
@@ -212,7 +212,7 @@
      </tr>
      <template v-for="(item, index) in produceList" :key="index" >
        <tr>
          <td style="font-size: 15px;font-weight: bold;text-align: left" colspan="4">产品名称:<span>{{item.DeliveryDetail.productName}}</span></td>
          <td style="font-size: 15px;font-weight: bold;text-align: left" colspan="4">产品名称:<span>{{item.productName}}</span></td>
          <td style="font-size: 15px;font-weight: bold;text-align: left" colspan="2">对方单号:</td>
          <td style="font-size: 15px;font-weight: bold;text-align: left" colspan="3">订单编号:<span>{{item.DeliveryDetail.orderId}}</span></td>
        </tr>
@@ -271,19 +271,19 @@
    </table>
    <el-row :gutter="20">
      <el-col :span="4"><div class="bottom">制单员:<span style="font-size: 10px">{{delivery.creator}}</span></div></el-col>
      <el-col :span="4"><div class="bottom">制单日期:<span style="font-size: 10px">{{delivery.createTime}}</span></div></el-col>
      <el-col :span="4"><div class="bottom">发货员:</div></el-col>
      <el-col :span="3"><div class="bottom">司机:</div></el-col>
      <el-col :span="4"><div class="bottom">客户签字:</div></el-col>
      <el-col :span="4"><div class="bottom">签收日期:</div></el-col>
      <el-col :span="4">制单员:<span style="font-size: 10px">{{delivery.creator}}</span></el-col>
      <el-col :span="4">制单日期:<span style="font-size: 10px">{{delivery.createTime}}</span></el-col>
      <el-col v-if="company.showDeliveryCreator" :span="4">发货员:</el-col>
      <el-col v-if="company.showDeliveryCreator" :span="3">司机:</el-col>
      <el-col v-if="company.showDeliveryCreator" :span="4">客户签字:</el-col>
      <el-col v-if="company.showDeliveryCreator" :span="4">签收日期:</el-col>
    </el-row>
    <el-row :gutter="20" style="margin-top: 20px;">
    <el-row :gutter="20" style="margin-top: 20px;" v-if="company.showDeliveryCreator">
      <el-col :span="4"><div class="bottom">架子&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只</div></el-col>
      <el-col :span="20"><div class="bottom">{{takeCare}}</div></el-col>
    </el-row>
    <el-row :gutter="20" style="margin-top: 20px;">
    <el-row :gutter="20" style="margin-top: 20px;" v-if="company.showDeliveryCreator">
      <el-col :span="24"><div class="bottom">{{remark}}</div></el-col>
    </el-row>
north-glass-erp/northglass-erp/src/stores/sd/companySet/Ìì½ò±±²£.js
@@ -25,6 +25,8 @@
        remarkSwitch:1,//流程卡上是否显示其它备注,1显示,2不显示
        icon:"",//商标参数
        longSide:null,//订单创建最长边提示颜色 null不提示颜色
        showDeliveryCreator:true,//发货单创建人先显示或者后显示 false后显示
        deliveryRemark: ['备注:本批玻璃为优等合格品,请在卸货时,当面消点验收、如有质量问题在一周内与本公司联系,否则概不负责!'],
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/stores/sd/companySet/³£ÖݼªÀû.js
@@ -25,7 +25,8 @@
        remarkSwitch:2,//流程卡上是否显示其它备注,1显示,2不显示
        icon:"奥飞久通",//商标参数
        longSide:6500,//订单创建最长边提示颜色
        showDeliveryCreator:true,//发货单创建人先显示或者后显示 false后显示
        deliveryRemark: ['备注:本批玻璃为优等合格品,请在卸货时,当面消点验收、如有质量问题在一周内与本公司联系,否则概不负责!'],
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/stores/sd/companySet/н®ºãöÎ.js
@@ -26,7 +26,8 @@
        remarkSwitch:2,//流程卡上是否显示其它备注,1显示,2不显示
        icon:"奥飞久通",//商标参数
        longSide:null,//订单创建最长边提示颜色
        showDeliveryCreator:true,//发货单创建人先显示或者后显示 false后显示
        deliveryRemark: ['备注:本批玻璃为优等合格品,请在卸货时,当面消点验收、如有质量问题在一周内与本公司联系,否则概不负责!'],
        //天津
        printLabel: {
north-glass-erp/northglass-erp/src/stores/sd/companySet/½ð»ªÌì³É.js
@@ -25,6 +25,10 @@
        remarkSwitch:2,//流程卡上是否显示其它备注,1显示,2不显示
        icon:"",//商标参数
        longSide:null,//订单创建最长边提示颜色 null不提示颜色
        showDeliveryCreator:false,//发货单创建人先显示或者后显示 false后显示
        deliveryRemark: ['温馨提示:货到工地或工厂后,请于五天内安装完毕,如未能及时安装完毕,请放置于阴凉干燥处,并做好防晒防淋的措施,防止玻璃发霉;所有单片镀膜玻璃请勿用带酸性或碱性的液体清洗膜面。',
            '声明:货到工地或工厂后,如若贵司不及时的安装或未做防晒防淋措施导致的玻璃发霉,我司概不负责。',
            '收货时需验收产品数量、规格及有无破损,如发现问题需于收货三日内,以书面通知并附上现场证明材料(如破损照片等),相关证明资料不足,或在上述日期内未提出质量异议的,逾期视为产品合格,我司将不予承担任何责任。敬请留意!'],
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue
@@ -10,14 +10,16 @@
import {Search} from "@element-plus/icons-vue";
import { useI18n } from 'vue-i18n'
import footSum from "@/hook/footSum";
import {VXETable} from "vxe-table";
import PrintPackingList from "@/components/mm/PrintPackingList.vue";
import {CircleCheck, Download, Printer} from "@element-plus/icons-vue/global";
import print from "vue3-print-nb";
//语言获取
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
const userStore = useUserInfoStore()
const username = userStore.user.userName
const userid = userStore.user.userId
const dialogTableVisible = ref(false)
let produceList = ref([])
const getTableRow = (row,type) =>{
  switch (type) {
@@ -31,6 +33,15 @@
    }
  }
}
//打印
let printRow = ref({
  list: null
})
const printRecord = ref({
  id: 'record'
})
const hasDecimal=(value)=>{
  const regex=/\./ // å®šä¹‰æ­£åˆ™è¡¨è¾¾å¼ï¼ŒæŸ¥æ‰¾å°æ•°ç‚¹
@@ -76,7 +87,6 @@
    request.post(`/finishedGoodsInventory/getSelectStorageRecordPint/1/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => {
      if(res.code==200){
        console.log(res.data)
        total.dataTotal = res.data.total.total*1
        total.pageTotal= res.data.total.pageTotal
        selectDate.value = res.data.selectDate
@@ -251,7 +261,7 @@
    if ($grid) {
      switch (code) {
        case 'cancel': {
        case 'pint': {
          const $table = xGrid.value
          //gridOptions.columns.unshift(a)
          if ($table) {
@@ -261,27 +271,8 @@
              ElMessage.warning(t('productStock.unselectedData'))
              return
            }
            let flowData = ref({
              userId:userid,
              userName:username,
              orderDetail:selectRecords
            })
            request.post("/finishedGoodsInventory/cancelFinishedGoodsInventoryStorage",flowData.value).then((res) => {
              if(res.code==200 && res.data==="true"){
                ElMessage.success(t('productStock.invalidSuccessfully'))
                router.push({path:'/main/productStock/storageRecord',query:{random:Math.random(),storageType: type.value}})
              }else if(res.data==="false1"){
                ElMessage.warning("发货单已创建")
              }else{
                ElMessage.warning(t('productStock.cancellationFailed'))
              }
            }).catch((err)=>{
              ElMessage.error(t('basicData.msg.ServerConnectionError'))
              router.push("/login")
            })
            printRow.value.list = JSON.stringify(selectRecords)
            dialogTableVisible.value = true
          }
          return;
@@ -385,6 +376,22 @@
    </vxe-grid>
<!--    è£…箱单打印-->
    <el-dialog
        id="sizePrintCalrd"
        v-model="dialogTableVisible"
        title="装箱单打印"
        destroy-on-close
        style="width: 75%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-button v-print="printRecord" :icon="Printer" circle/>
      </template>
      <print-packing-list
          id="record"
          :printList="printRow.list"
          style="width: 100%;height: 100%"/>
    </el-dialog>
  </div>
</template>
@@ -393,4 +400,11 @@
  width: 99%;
  height: 100%;
}
:deep(#sizePrintCalrd .el-dialog__body) {
  height: 90%;
  width: 100%;
  overflow-y: auto;
  display: flex;
  flex-wrap: wrap
}
</style>
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectList.vue
@@ -1,6 +1,9 @@
<script setup>
import {reactive, ref} from "vue";
import {onMounted, reactive, ref} from "vue";
import {useI18n} from "vue-i18n";
import request from "@/utils/request";
import {ElMessage} from "element-plus";
import {hiprint} from "vue-plugin-hiprint";
const { t } = useI18n()
const xGrid = ref()
@@ -55,28 +58,45 @@
  },*/
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
    {field: 'id',width: 70,  title: 'ID',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field: 'id',width: 100, title:'工程号',filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field: 'id',width: 150, title: '名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: '膜系',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: '厚度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: '类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: '状态',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: t('order.grossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: '流程数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: '流程卡号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'id',width: 150, title: 'ID',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'project_no',width: 150, title: '工程号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'project_name',width: 150, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'glass_type',width: 150, title: '膜系',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'glass_thickness',width: 150, title: '厚度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'type',width: 150, title: '类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'state',width: 150, title: '状态',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'glass_total',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'glass_total_area',width: 150, title: t('order.grossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'process_qty',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},
  ],//表头参数
  data:null,//表格数据
  toolbarConfig: {
    buttons: [],
    slots:{
      buttons: "toolbar_buttons"
    },
    buttons: [
    ],
    import: false,
    // export: true,
    // print: true,
    zoom: true,
    custom: true
  },
})
onMounted(async () => {
  getProject();
})
const getProject = ()=>{
  request.post(`/glassOptimize/getProjectList`).then((res) => {
    if(res.code==200){
      xGrid.value.loadData(res.data.data)
    }else{
      ElMessage.warning(res.msg)
    }
  })
}
</script>
<template>
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintProjectDetails.vue
@@ -290,7 +290,7 @@
const printObjectProcess = () => {
  hiprintTemplate.value.print(lastList.value)
  hiprintTemplate.value.print({table:lastList.value})
}
</script>
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintProject.vue
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import {onMounted, reactive, ref} from "vue";
import {reactive, ref} from "vue";
import {useRouter} from 'vue-router'
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
@@ -13,26 +13,19 @@
import {Printer} from "@element-plus/icons-vue/global";
import companyInfo from "@/stores/sd/companyInfo"
import {remove} from "xe-utils";
import PrintCustomLabelProject from "@/components/pp/PrintCustomLabelProject.vue";
//语言获取
const {t} = useI18n()
let router = useRouter()
const dialogTableVisibleLabelXJTwo = ref(false)
const dialogTableVisibleLabelProject = ref(false)
let rowClickIndex = ref(null)
let lastList = ref([])
const tags = ref([])
const tagType=ref()
//定义数据返回结果
let produceList = ref([])
let titleStyleVisible = ref(false)
let print = ref("1")
//标签
let labelRow = ref({
@@ -41,11 +34,9 @@
  type: "",//标签模板
  lableType: null,//标签类型
  dataType: 0,//标签类型
  projectNo:null,
  detailType:0//是否是工程明细打印
  projectNo:null
})
const company = companyInfo()
let name=company.companyName
let hidePrintLabels = company.printLabel.hideButton;
const form = reactive({
@@ -53,60 +44,11 @@
  orderId: '',
  project: ''
})
const tag = ref({
  id:null,
  name:null,
  type:1,
  tagWidth:null,
  tagHeight:null,
  value:null,
  size:null
})
onMounted(async  () => {
  await getTags();
  await   hiprint.init();
})
let hiprintTemplate = ref()
const changeTag = () => {
  hiprintTemplate.value = new hiprint.PrintTemplate({});
  const json = JSON.parse(tag.value.value)
  hiprintTemplate.value.update(json)
}
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' :{
      if(parseInt(print.value)==1){
        if (name.indexOf('吉利玻璃')!=-1){
          router.push({path: '/main/processCard/PrintLabel', query: { projectNo: row.project_no,type:1 }})
        }
        else {
          if (tag.value.name==null || tag.value.name==''){
            ElMessage.warning(t('请选择标签模板'))
            return
          }
          let name=company.companyName
          labelRow.value.list = JSON.stringify([row])
          if (name == '金华福喜天成玻璃有限公司'){
            labelRow.value.type = tag.value.name
            labelRow.value.dataType=3
            labelRow.value.lableType = 1
            labelRow.value.switch=true
            labelRow.value.detailType=1
            lastList.value = []
            dialogTableVisibleLabelProject.value = true
          }
          else {
            labelRow.value.type = '恒鑫带数量'
            labelRow.value.dataType=3
            dialogTableVisibleLabelXJTwo.value = true
          }
        }
          return
        router.push({path: '/main/processCard/PrintLabel', query: { projectNo: row.project_no,type:1 }})
      }else{
        router.push({path: '/main/processCard/PrintCustomLabelSemi2', query: { projectNo: row.project_no,type:1 }})
      }
@@ -115,6 +57,10 @@
    }
    case 'edit1' :{
      router.push({path: '/main/processCard/PrintLabel', query: { projectNo: row.project_no,type:2 }})
      break
    }
    case 'edit2' :{
      router.push({path: '/main/processCard/PrintLabel', query: { projectNo: row.project_no,type:3 }})
      break
    }
  }
@@ -158,12 +104,6 @@
let endTime = form.date1[1]
let orderId=form.orderId
let project=form.project
const getTags = () => {
  request.get('tagStyle/getTagList').then(res => {
    tags.value = res.data
  })
}
//第一次加载数据
@@ -234,7 +174,7 @@
    useKey: true
  },
  filterConfig: {   //筛选配置项
                    // remote: true
    // remote: true
  },
  customConfig: {
    storage: true
@@ -248,7 +188,7 @@
  //表头参数
  columns: [
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {title: t('basicData.operate'), width: 120, slots: { default: 'button_slot' },fixed:"left"},
    {title: t('basicData.operate'), width: 140, slots: { default: 'button_slot' },fixed:"left"},
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {
      field: 'project_no',
@@ -345,8 +285,15 @@
  id: 'childLabel',
})
const printObjectProcess = () => {
  hiprintTemplate.value.print(lastList.value)
const hideButton = () => {
  let name=company.companyName
  // æ ¹æ®æ¡ä»¶å€¼ hidePrintLabels è¿‡æ»¤æŒ‰é’®æ•°ç»„
  gridOptions.toolbarConfig.buttons = gridOptions.toolbarConfig.buttons.filter(button => {
    // è¿™é‡Œæ ¹æ® hidePrintLabels çš„值决定是否隐藏 printLabel å’Œ printLabel2
    if (name == '金华福喜天成玻璃有限公司') {
      return button.code !== 'printLabel';
    }
  })
}
</script>
@@ -370,26 +317,7 @@
            :icon="Search"
            type="primary" @click="getWorkOrder">{{ $t('basicData.search') }}
        </el-button>
        &nbsp;&nbsp;
        &nbsp;&nbsp;
        <el-row v-if="name.indexOf('吉利玻璃')==-1">
          æ ‡ç­¾æ¨¡æ¿ï¼š
          <el-select v-model="tag" @change="changeTag" placeholder="标签模板列表" style="width: 140px" >
            <el-option
                v-for="(tag,index) in tags"
                :key="index"
                :label="tag.name"
                :value="tag"
            />
          </el-select>
        </el-row>
      </el-row>
      <el-row>
      </el-row>
      <div>
      </div>
    </div>
    <vxe-grid
        ref="xGrid"
@@ -412,9 +340,9 @@
      </template>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button v-if="name.indexOf('吉利玻璃')!=-1" @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('machine.cutting')}}</el-button>
        <el-button v-else @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('machine.tempering')}}</el-button>
        <el-button v-if="name.indexOf('吉利玻璃')!=-1" @click="getTableRow(row,'edit1')" link type="primary" size="small">{{$t('machine.tempering')}}</el-button>
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('machine.cutting')}}</el-button>
        <el-button @click="getTableRow(row,'edit1')" link type="primary" size="small">{{$t('machine.tempering')}}</el-button>
        <el-button @click="getTableRow(row,'edit2')" link type="primary" size="small">{{$t('components.finishedProduct')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
@@ -464,30 +392,6 @@
                                  :projectNo="labelRow.projectNo"
                                  style="width: 100%;height: 100%"/>
    </el-dialog>
    <!--    æˆå“æ ‡ç­¾å·¥ç¨‹æ‰“印-->
    <el-dialog
        id="sizeCustom"
        v-model="dialogTableVisibleLabelProject"
        :title="$t('processCard.printLabel')"
        destroy-on-close
        style="width: 80%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-button @click="printObjectProcess" :icon="Printer" circle/>
      </template>
      <print-custom-label-project id="childLabel"
                                  :lastList = 'lastList'
                                  :faceOrientation="labelRow.faceOrientation"
                                  :lableType="labelRow.lableType"
                                  :list="labelRow.list"
                                  :type="labelRow.type"
                                  :titleList="labelRow.titleList"
                                  :switch="labelRow.switch"
                                  :detailType="labelRow.detailType"
                                  style="width: 100%;height: 100%"/>
    </el-dialog>
  </div>
</template>
@@ -499,7 +403,7 @@
  height: 93%;
}
#selectForm {
  width: 50%;
  width: 60%;
}
:deep(#titleStyle .el-dialog__body){
  height: 90%;
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
@@ -193,4 +193,12 @@
    public Result getSelectStorageRecordPint(@PathVariable Integer pageNum, @PathVariable Integer pageSize,@PathVariable List<String> selectDate, @RequestBody FinishedOperateLog finishedOperateLog){
        return Result.seccess(finishedGoodsInventoryService.getSelectStorageRecordPint(pageNum,pageSize,selectDate,finishedOperateLog));
    }
    /*装箱打印查询*/
    @ApiOperation("装箱打印内容查询接口")
    @SaCheckPermission("storageRecordPint.search")
    @PostMapping("/getSelectPrint")
    public Result getSelectPrint( @RequestBody Map<String, Object> object){
        return Result.seccess(finishedGoodsInventoryService.getSelectPrintSv(object));
    }
}
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -28,6 +28,13 @@
        return Result.seccess(glassOptimizeService.getFlowCardList(optionVal,radio));
    }
    //工程查询流程卡
    @ApiOperation("工程查询流程卡")
    @PostMapping  ("/getProjectList")
    public Result getProjectList(){
        return Result.seccess(glassOptimizeService.getProjectListSv());
    }
    //工程管理查询
    @ApiOperation("工程管理查询接口")
    @PostMapping("/optimizeProjectMange/{startSelectTime}/{endSelectTime}")
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
@@ -88,4 +88,7 @@
    Map<String,Integer> getSelectStorageRecordPintPageTotal(@Param("offset") Integer offset,@Param("pageSize") Integer pageSize,String startDate, String endDate,
                                                            @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog);
    List<Map<String, String>> getPrimaryListLimt(String orderId, String processId, String remarks);
    List<Map<String, Object>> getDetailList(String orderId, String processId, String remarks);
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -188,4 +188,6 @@
    List<Map<String, Object>> getPrintCustomDataProjectDetail(String projectNo, String stockId);
    List<Map<String, Object>> getPrintCustomDataProject(String projectNo);
    List<Map<String, String>> getPrintLabel3(String projectNo);
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -22,6 +22,7 @@
    //修改工程状态
    Boolean updateProjectStateMp(String projectNumber,Integer state);
    List<Map<String, Object>> getProjectListMp();
    //删除工程
    int deleteProjectMp(String projectNumber);
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
@@ -876,9 +876,34 @@
    }
    public Map<String, Object> getSelectPrintSv(Map<String, Object> object) {
        Map<String, Object> map = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//最终结果
        List<FinishedOperateLog> finishedOperateLogList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FinishedOperateLog.class);
        if (!finishedOperateLogList.isEmpty()) {
            Set<String> processedProcessIds = new HashSet<>();
            for (FinishedOperateLog finishedOperateLog : finishedOperateLogList) {
                String OrderId = finishedOperateLog.getOrderId();
                String Remarks = finishedOperateLog.getRemarks();
                // æ£€æŸ¥æ˜¯å¦å·²ç»å¤„理过该 OrderId,如果处理过则跳过
                if (processedProcessIds.contains(OrderId) && processedProcessIds.contains(Remarks)) {
                    continue;
                }
                Map<String, Object> itemmap = new HashMap<>();
                itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimt(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks()));
                List<Map<String, Object>> detailList = finishedOperateLogMapper.getDetailList(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks());
                itemmap.put("detailList", detailList);
                list.add(itemmap);
                processedProcessIds.add(OrderId);
                processedProcessIds.add(Remarks);
            }
        }
        map.put("data", list);
        return map;
    }
}
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -382,6 +382,8 @@
            map.put("data", flowCardMapper.getPrintLabel(projectNo));
        } else if (Objects.equals(type, "2")) {
            map.put("data", flowCardMapper.getPrintLabel2(projectNo));
        } else if (Objects.equals(type, "3")) {
            map.put("data", flowCardMapper.getPrintLabel3(projectNo));
        }
        return map;
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -49,4 +49,10 @@
        map.put("data", glassOptimizeMapper.deleteProjectMp(projectNumber));
        return map;
    }
}
    public Map<String, Object> getProjectListSv() {
        Map<String, Object> map = new HashMap<>();
        map.put("data", glassOptimizeMapper.getProjectListMp());
        return map;
    }}
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
@@ -808,7 +808,41 @@
    </select>
<select id="getPrimaryListLimt">
    select  o.order_id,
    o.customer_name,
    o.project,
    fol.remarks,
    SUM(fol.quantity) as quantity,
    ROUND( sum(od.width * od.height * fol.quantity) / 1000000, 2 ) as area
    from (select *
    from mm.finished_operate_log aa where aa.operate_type = '入库'  and aa.status!='已作废') fol
    left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
    left join sd.`order` o on o.order_id=fol.order_id
    where
    o.order_id=#{orderId}  and fol.remarks=#{remarks}
    and (fol.remarks is not null and fol.remarks !="") and (fol.process_id !="" and fol.process_id is not null)
    group by fol.remarks,od.order_id
    order by fol.operate_time desc
</select>
<select id="getDetailList">
    SELECT
        od.building_number,
        od.width,
        od.height,
        fol.quantity,
        ROUND( od.width * od.height * fol.quantity / 1000000, 2 ) as area
    FROM
        ( SELECT * FROM mm.finished_operate_log aa WHERE aa.operate_type = '入库' AND aa.STATUS != '已作废' ) fol
            LEFT JOIN sd.order_detail od ON fol.order_id = od.order_id
            AND fol.operation_number = od.order_number
            LEFT JOIN sd.`order` o ON o.order_id = fol.order_id
    WHERE
        o.order_id=#{orderId} and fol.remarks=#{remarks}
    ORDER BY
        fol.operate_time DESC
</select>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -2431,4 +2431,37 @@
        order by opt.heat_layout_id, opt.heat_layout_sort desc
    </select>
    <select id="getPrintLabel3">
        select o.order_id,
               c.customer_abbreviation as customer_name,
               o.project,
               od.building_number,
               od.processing_note,
               ogd.child_width         as width,
               ogd.child_height        as height,
               od.product_name  as glass_child,
               ogd.process,
               e.type_name,
               opd.stock_id,
               od.quantity,
               od.other_columns,
               od.bend_radius,
               od.order_number as heat_layout_id,
               a.id as heat_layout_sort
        from pp.optimize_detail opd
                 left join sd.`order` o on SUBSTR(opd.process_id, 1, 10) = o.order_id
                 left join sd.order_detail od
                           on SUBSTR(opd.process_id, 1, 10) = od.order_id and opd.order_sort = od.order_number
                 left join sd.order_glass_detail ogd
                           on SUBSTR(opd.process_id, 1, 10) = ogd.order_id and opd.order_sort = ogd.order_number and
                              opd.layer = ogd.technology_number
                 left join sd.product p on od.product_id = p.id
                 left join sd.basic_glass_type e on e.type_id = p.type_id
                 left join sd.customer c on c.id = o.customer_id
                 left join
             (select (@row_number := @row_number + 1) as id,process_id as process_id from (select process_id from pp.optimize_detail tt where project_no =#{projectNo} group by process_id) tt,(select @row_number := 0) as t) a
             on a.process_id=opd.process_id
        where opd.project_no = #{projectNo}
        order by opd.stock_id,opd.polys_id
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -182,4 +182,34 @@
        where project_no = #{projectNumber}
    </delete>
    <select id="getProjectListMp">
        SELECT
            p.id,
            p.project_no,
            p.project_name,
            p.glass_type,
            p.glass_thickness,
            p.type,
            p.state,
            p.glass_total,
            p.glass_total_area,
            p.process_qty,
            p.process_cards,
            p.remark,
            a.name,
            p.create_time,
            p.update_time
        FROM
            (
                pp.optimize_project p
                    LEFT JOIN pp.optimize_admin a ON ((
                    p.creater = a.Id
                    )))
        WHERE
            ( p.state = 1 )
        ORDER BY
            p.create_time DESC,
            p.project_no
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml
@@ -978,7 +978,7 @@
    </select>
    <select id="getSelectDeliveryPrinting" resultMap="selectDeliveryDetailOrderDetail" >
        select dd.delivery_id,od.order_id,od.product_id,pt.remarks as product_name,sum(dd.area) as area,sum(dd.money) as money,sum(dd.quantity) as quantity from
        select dd.delivery_id,od.order_id,od.product_id,od.product_name,sum(dd.area) as area,sum(dd.money) as money,sum(dd.quantity) as quantity from
        delivery_detail dd left join order_detail od on dd.order_id=od.order_id and dd.order_number=od.order_number
                                                            left join product pt on pt.id=od.product_id
@@ -992,7 +992,7 @@
    </select>
    <select id="getSelectOrderPrinting"  >
        select od.order_id,od.product_id,p.remarks as product_name,sum(od.compute_gross_area) as area,sum(od.gross_amount) as gross_amount ,sum(od.quantity) as quantity from
        select od.order_id,od.product_id,od.product_name,sum(od.compute_gross_area) as area,sum(od.gross_amount) as gross_amount ,sum(od.quantity) as quantity from
         order_detail od left join product p on od.product_id=p.id
        where od.order_id = #{orderId}
        and od.product_id = #{productId}
@@ -1002,7 +1002,7 @@
    <select id="getSelectDeliveryDetailPrinting" >
        select od.order_id,
               od.order_number,
               p.remarks as product_name,
               od.product_name,
               od.width,
               od.height,
               dd.quantity,