guoyujie
2025-11-24 90de68b8a67ea15091fa3a4223402b4b34a36298
Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
13个文件已修改
1个文件已添加
544 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet4.vue 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/温州巨星.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/product/CreateProduct.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/ProductService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/Report.xml 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/ProductMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -494,7 +494,7 @@
      :key="index"
      :src="img.imageBase64"
      fit="contain"
      style="max-width: 400px;max-lines: 600px"
      style="max-width: 100%;"
  />
  </div>
  </div>
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue
@@ -177,7 +177,7 @@
        <th style="text-align: left;border:none;" colspan="4">客户名称:<span>{{itme1.delivery.customerName}}</span></th>
        <th style="text-align: left;border:none;" v-if="itme1.data[0].DeliveryDetail.order.batch!==''" colspan="3">
          é¡¹ç›®åç§°ï¼š<span>{{itme1.delivery.project}}({{itme1.data[0].DeliveryDetail.order.batch}})</span></th>
        <th style="text-align: left;border:none;" colspan="3">项目名称:<span>{{itme1.delivery.project}}</span></th>
        <th style="text-align: left;border:none;" v-else colspan="3">项目名称:<span>{{itme1.delivery.project}}</span></th>
        <th style="text-align: left;border:none;" colspan="2">联系人:<span>{{itme1.delivery.contacts}}</span></th>
      </tr>
      <tr>
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue
@@ -123,7 +123,7 @@
        <th style="text-align: left;border:none;" colspan="4">客户名称:<span>{{itme1.delivery.customerName}}</span></th>
        <th style="text-align: left;border:none;" v-if="itme1.data[0].DeliveryDetail.order.batch!==''" colspan="3">
          é¡¹ç›®åç§°ï¼š<span>{{itme1.delivery.project}}({{itme1.data[0].DeliveryDetail.order.batch}})</span></th>
        <th style="text-align: left;border:none;" colspan="3">项目名称:<span>{{itme1.delivery.project}}</span></th>
        <th style="text-align: left;border:none;" v-else colspan="3">项目名称:<span>{{itme1.delivery.project}}</span></th>
        <th style="text-align: left;border:none;" colspan="2">联系人:<span>{{itme1.delivery.contacts}}</span></th>
      </tr>
      <tr>
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet4.vue
New file
@@ -0,0 +1,413 @@
<script setup>
import request from "@/utils/request"
import {computed, onMounted, ref} from "vue"
import PrintFoot from "@/components/sd/order/PrintFoot.vue"
import companyInfo from "@/stores/sd/companyInfo"
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import {add,multiply,multiplyAuto,divideAuto} from '@/utils/decimal';
/*一行两列发货单打印*/
const company = companyInfo()
let produceList = ref([])
let otherMoney = []
let otherMoney1 = []
let delivery = ref([])
let money = ref("")
let otherMoneys = 0
let sumMoney = 0
let takeCare =ref("注意:请妥善保管好我司的玻璃架,如有丢失或损坏,按1500元只赔偿。谢谢配合!")
let remark =ref(company.deliveryRemark)
let props = defineProps({
  deliveryId:null
})
const form = ref({
})
let produceList2 = ref([])
const getData = () => {
  if(props.deliveryId===null  || props.deliveryId===undefined || props.deliveryId===''){
    return
  }
  form.value.deliveryId=props.deliveryId
  form.value.type=company.productName
  request.post(`/delivery/getSelectDeliveryPrinting`,form.value).then((res) => {
    if(res.code==200){
      produceList.value = deepClone(res.data)
      for(let i=0;i<produceList.value.length;i++){
        let produceList1= ({
          data:null,
          otherMoney:null,
          otherMoney1:null,
          delivery:null,
          money:null,
          otherMoneys:0,
          sumMoney:0
        })
        produceList1.data=produceList.value[i].data
        produceList1.delivery=produceList.value[i].delivery
        produceList1.money=produceList.value[i].money
        produceList1.otherMoney=produceList.value[i].otherMoney
        for(let j=0;j<produceList1.data.length;j++){
          produceList1.sumMoney+=produceList1.data[j].DeliveryDetail.money
        }
        otherMoney1=[]
        for(let i=0;i<produceList1.otherMoney.length;i++){
          if(produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery!=null){
            produceList1.otherMoneys+=produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery
            if(otherMoney1.length===0){
              otherMoney1.push(produceList1.otherMoney[i])
            }
            else{
              for(let s=0;s<otherMoney1.length;s++){
                if(produceList1.otherMoney[i].DeliveryDetailOtherMoney.alias===otherMoney1[s].DeliveryDetailOtherMoney.alias){
                  otherMoney1[s].DeliveryDetailOtherMoney.count=add(produceList1.otherMoney[i].DeliveryDetailOtherMoney.count,otherMoney1[s].DeliveryDetailOtherMoney.count)
                  otherMoney1[s].DeliveryDetailOtherMoney.monery =add(produceList1.otherMoney[i].DeliveryDetailOtherMoney.monery,otherMoney1[s].DeliveryDetailOtherMoney.monery)
                  break
                }
                if(s+1===otherMoney1.length){
                  otherMoney1.push(produceList1.otherMoney[i])
                  break
                }
              }
            }
          }
        }
        produceList1.otherMoney1=otherMoney1
        produceList2.value.push(produceList1)
      }
      for(let j=0;j<produceList2.value.length;j++){
        if(produceList2.value[j].delivery.money.toFixed(0)!==(produceList2.value[j].otherMoneys
            +produceList2.value[j].sumMoney+produceList2.value[j].delivery.freight).toFixed(0)){
          console.log(produceList2.value[j])
          console.log(produceList2.value[j].delivery.money)
          console.log((produceList2.value[j].otherMoneys
              +produceList2.value[j].sumMoney).toFixed(0))
          console.log(produceList2.value[j].delivery.deliveryId)
        }
      }
    }else{
      ElMessage.warning(res.msg)
      router.push("/login")
    }
  })
}
onMounted(() => {
  getData()
})
const  stringToJson = (productList) => {
  productList.forEach(item => {
    item.otherColumns = JSON.parse(item.otherColumns)
  })
}
const getQuantity = (productList) => {
  let quantity = 0
  productList.forEach(item => {
    quantity += item.quantity
  })
  return parseFloat(quantity.toFixed(3))
}
const getArea = (productList) => {
  let area = 0
  productList.forEach(item => {
    area += item.grossArea
  })
  return parseFloat(area.toFixed(3))
}
const getPerimeter = (productList) => {
  let perimeter = 0
  productList.forEach(item => {
    perimeter += item.perimeter
  })
  return parseFloat(perimeter.toFixed(3))
}
const printSheet = () => {
}
const groupedData = computed(() => {
  // åˆ†ç»„函数:将数组按每2条拆分
  const groupArray = (arr, size) => {
    const result = [];
    for (let i = 0; i < arr.length; i += size) {
      result.push(arr.slice(i, i + size));
    }
    return result;
  };
  // å¯¹æ¯ä¸ªitem的DeliveryDetailList进行分组
  return produceList2.value.map(produce => {
    const groupedDetails = produce.data.map(item => ({
      ...item,
      // å¯¹å½“前item的明细进行分组(每2条一组)
      groupedDeliveryDetails: groupArray(item.DeliveryDetailList, 2)
    }));
    return { ...produce, data: groupedDetails };
  });
});
defineExpose({
  printSheet
});
</script>
<template>
  <div id="sheet">
    <table class="pages" v-for="(itme1, index) in groupedData" :key="index" >
      <thead>
      <tr class="title-s">
        <th colspan="11">
          <h1>
            {{company.companyName}}
          </h1>
        </th>
      </tr>
      <tr  class="title-s">
        <th colspan="2" style="width: 20%"></th>
        <th colspan="7" style="width: 60%;">
          <h4 v-if="!company.showDeliveryCreator" >金华市乐动智能科技有限公司</h4>
          <h3>销售发货单</h3>
        </th>
        <th colspan="2" style="width: 20%;text-align: left;">发货单号:<span>{{itme1.delivery.deliveryId}}</span></th>
      </tr>
      <tr>
        <th style="text-align: left;border:none;" colspan="3">客户名称:<span>{{itme1.delivery.customerName}}</span></th>
        <th style="text-align: left;border:none;" colspan="6">项目名称:<span>{{itme1.delivery.project}}</span></th>
        <th style="text-align: left;border:none;" colspan="2">联系人:<span>{{itme1.delivery.contacts}}</span></th>
      </tr>
      <tr>
        <th style="text-align: left;border:none;" colspan="9">送货地址:<span>{{itme1.delivery.deliveryAddress}}</span></th>
        <th style="text-align: left;border:none;" colspan="2">联系电话:<span>{{itme1.delivery.contactNumber}}</span></th>
      </tr>
      </thead>
      <tr style="border-style: none">
        <td colspan="11" style="border-style: none">
          <table style="border-style: none;width: 100%;height: 100%;">
            <template v-for="(item, index) in itme1.data" :key="index" >
              <thead>
              <tr v-if="index===0">
                <th style="width: 14%;" colspan="3">宽X高</th>
                <th style="width: 8%;">数量</th>
                <th style="width: 9%;">面积</th>
                <th style="width: 1%;"></th>
                <th style="width: 14%;" colspan="3">宽X高</th>
                <th style="width: 8%;">数量</th>
                <th style="width: 9%;">面积</th>
              </tr>
              </thead>
              <tr>
                <td style="font-size: 15px;text-align: left" colspan="5">产品名称:<span>{{item.DeliveryDetail.orderDetail.productName}}</span></td>
                <td style="font-size: 15px;text-align: left" colspan="3">批次:<span>{{item.DeliveryDetail.order.batch}}</span></td>
                <td style="font-size: 15px;text-align: left" colspan="3">订单编号:<span>{{item.DeliveryDetail.orderDetail.orderId}}</span></td>
              </tr>
              <tr class="day-in" v-for="(group, groupIndex) in item.groupedDeliveryDetails" :key="groupIndex">
                <!-- ç¬¬ä¸€åˆ—数据(组内第一条) -->
                <td style="font-size: 15px;font-weight: bold;" colspan="3">
                  {{ group[0].parsedOtherColumns?.S02 ? `(${group[0].parsedOtherColumns.S02})` : '' }}
                  {{ group[0].width }}x{{ group[0].height }}
                </td>
                <td>{{ group[0].quantity }}</td>
                <td>{{ group[0].area }}</td>
                <td></td> <!-- åˆ†éš”列 -->
                <!-- ç¬¬äºŒåˆ—数据(组内第二条,若存在) -->
                <td style="font-size: 15px;font-weight: bold;" colspan="3" v-if="group[1]">
                  {{ group[1].parsedOtherColumns?.S02 ? `(${group[1].parsedOtherColumns.S02})` : '' }}
                  {{ group[1].width }}x{{ group[1].height }}
                </td>
                <td v-if="group[1]">{{ group[1].quantity }}</td>
                <td v-if="group[1]">{{ group[1].area }}</td>
                <!-- è‹¥ç»„内只有一条数据,第二列留空 -->
                <td v-else colspan="5"></td>
              </tr>
              <tr class="day-in" >
                <td style="font-size: 15px;" colspan="9">小计:</td>
                <td>{{item.DeliveryDetail.quantity}}</td>
                <td>{{item.DeliveryDetail.area}}</td>
              </tr>
            </template>
            <tr class="day-in">
              <td style="font-size: 15px;" colspan="9">合计:</td>
              <td>{{itme1.delivery.quantity}}</td>
              <td>{{itme1.delivery.area}}</td>
            </tr>
            <!--      <el-row :gutter="24">
                    <el-col :span="4"><div style="font-size: 12px" class="bottom">制单员:{{data.order.creator}}<span style="font-size: 10px"></span></div></el-col>
                    <el-col :span="6"><div style="font-size: 12px" class="bottom">制单日期:{{data.order.createTime}}<span style="font-size: 10px"></span></div></el-col>
                    <el-col :span="4"><div style="font-size: 12px" class="bottom">审核员:{{data.order.verifier}}</div></el-col>
                    <el-col :span="6"><div style="font-size: 12px" class="bottom">审核日期:{{data.order.updateTime}}</div></el-col>
                    <el-col :span="4"><div style="font-size: 12px" class="bottom">打印人:{{username}}</div></el-col>
                  </el-row>-->
            <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator">
              <td colspan="11" style="border: 0">
                <div style="display:flex;text-align: left"  class="bottom">
                  <div style="width: 15%">制单员:{{ itme1.delivery.creator }}</div>
                  <div style="width: 25%">制单日期:{{ itme1.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>
            <tr class="day-in" style="border: 0;" v-if="company.showDeliveryCreator">
              <td colspan="11" 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="11" style="border: 0;">
                <div style="display:flex;text-align: left;border: 0;margin-top: 10px " class="bottom" >
                  <el-input type="textarea" :autosize="{ minRows: 7, maxRows: 20 }" v-model="remark"/>
                </div>
              </td>
            </tr>
            <tr class="day-in" style="border: 0" v-if="!company.showDeliveryCreator">
              <td colspan="11" 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="11" style="border: 0">
                <div style="display:flex;text-align: left"  class="bottom">
                  <div style="width: 15%">制单员:{{ itme1.delivery.creator }}</div>
                  <div style="width: 15%">制单日期:{{ itme1.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>
          </table>
        </td>
      </tr>
    </table>
  </div>
</template>
<style scoped>
@media print {
  @page {
    margin: 12mm 10mm 20mm 10mm !important;
  }
  .pages {
    page-break-after: always;
  }
  @page {
    @top-right {
      margin-top: 50px;
      content: "第 " counter(page)  " é¡µ"; /* ä½¿ç”¨counter添加页码 */
    }
  }
}
h1,h3{
  left:0;
  right:0;
  top:0;
  bottom:0;
  margin:auto;
}
h1{
  font-size: 1.5rem;
}
h3{
  font-size: 1.2rem;
  font-weight: bolder;
}
table{
  border-collapse: collapse;
  width: 100%;
  text-align: center;
}
tr,td,th{
  border: 1px solid black;
}
th,.no-change-row {
  white-space: nowrap;
}
.title-1{
  width: 76px;
}
.title-s,.title-s th{
  border:0
}
.hr-border{
  height: 2px;
  width: 100%;
  background-color: black;
  color: black;
}
table {
  border-collapse: collapse;
  width: 100%;
}
td > table {
  margin: 0;
  padding: 0;
}
</style>
north-glass-erp/northglass-erp/src/stores/sd/companySet/ÎÂÖݾÞÐÇ.js
@@ -37,7 +37,7 @@
        icon:"",//商标参数,没有为空
        printShowTitle:false,//流程卡自定义打印是否显示标签
        longSide:null,//订单创建最长边提示颜色 null不提示颜色
        showDeliveryCreator:false,//发货单创建人先显示或者后显示 false后显示
        showDeliveryCreator:true,//发货单创建人先显示或者后显示 false后显示
        deliveryRemark: ['温馨提示:我司负责只送不卸。货到工地或工厂后,请于五天内安装完毕,如未能及时安装完毕,请放置于阴凉干燥处,并做好防晒防淋的措施,防止玻璃发霉;所有单片镀膜玻璃请勿用带酸性或碱性的液体清洗膜面。',
            '声明:货到工地或工厂后,如若贵司不及时的安装或未做防晒防淋措施导致的玻璃发霉,我司概不负责。',
            '收货时需验收产品数量、规格及有无破损,如发现问题需于收货三日内,以书面通知并附上现场证明材料(如破损照片等),相关证明资料不足,或在上述日期内未提出质量异议的,逾期视为产品合格,我司将不予承担任何责任。敬请留意!'],//打印发货单的备注
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
@@ -1324,7 +1324,7 @@
      //判断早晚班
      titleUploadData.value.classes=t('reportingWorks.early')
      titleUploadData.value.reportingWorkTime = formatCurrentTime()
      titleUploadData.value.reportingWorkTime = res.data.reportingWorkTiem
      //绑定下方表格
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue
@@ -19,6 +19,7 @@
import { saveAs } from "file-saver"
import companyInfo from "@/stores/sd/companyInfo";
import PrintSheet3 from "@/components/sd/delivery/PrintSheet3.vue";
import PrintSheet4 from "@/components/sd/delivery/PrintSheet4.vue";
//语言获取
const { t } = useI18n()
@@ -455,6 +456,39 @@
          break
        }
        case 'sheet8': {
          const selectRecords = $grid.getCheckboxRecords()
          if (selectRecords.length === 0) {
            if(rowClickIndex.value.deliveryState>0){
              ElMessage.warning(t('order.printingNumber')+rowClickIndex.value.printingNumber)
              let delivery=([])
              delivery.push(rowClickIndex.value)
              flowData.value.delivery=delivery
              dialogTableVisible.value = true
              sheetIndex.value=8
            }else{
              ElMessage.warning(t('order.orderNotApproved'))
            }
          }else{
            let a=0
            selectRecords.forEach((item) => {
              if(item.deliveryState==0){
                ElMessage.warning(t('order.orderNotApproved'))
                a=1
              }
            })
            if(a==0){
              flowData.value.delivery=selectRecords
              dialogTableVisible.value = true
              sheetIndex.value=8
            }
          }
          break
        }
      }
    }
  },
@@ -502,6 +536,7 @@
          { code: 'sheet5', name: t('delivery.print2'), prefixIcon: 'vxe-icon-file-txt', visible: false},
          { code: 'sheet6', name: t('delivery.print2')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: false},
          { code: 'sheet7', name: t('打印一行俩列'), prefixIcon: 'vxe-icon-file-txt', visible: true},
          { code: 'sheet8', name: t('打印一行俩列')+ t('delivery.noMoney'), prefixIcon: 'vxe-icon-file-txt', visible: true},
        ]
      ]
    }
@@ -715,6 +750,7 @@
      <print-sheet-luoyang-details id="child"  v-if="sheetIndex===5" :deliveryId="flowData.delivery" :type="3" :optionVal='optionVal'/>
      <print-sheet-luoyang-details id="child"  v-if="sheetIndex===6" :deliveryId="flowData.delivery" :type="4" :optionVal='optionVal'/>
      <print-sheet3 id="child"  v-if="sheetIndex===7" :deliveryId="flowData.delivery" />
      <print-sheet4 id="child"  v-if="sheetIndex===8" :deliveryId="flowData.delivery" />
    </el-dialog>
  </div>
north-glass-erp/northglass-erp/src/views/sd/product/CreateProduct.vue
@@ -107,7 +107,12 @@
        item.separation = JSON.parse(item.separation)
      })
      productTotal.value = res.data.title
      if(res.data.title.typeId.length===2){
        productGlassTypeStore.GlassType =[res.data.title.typeId.substring(0,2)]
      }else{
      productGlassTypeStore.GlassType =[res.data.title.typeId.substring(0,2),res.data.title.typeId]
      }
      //BasicData.value = res.data
    }else{
      ElMessage.warning(res.msg)
@@ -127,7 +132,12 @@
    ElMessage.warning(t('product.msg.glassType'))
    return
  }
  if(productGlassTypeStore.GlassType[1]!==undefined){
  productTotal.value.typeId =  productGlassTypeStore.GlassType[1]
  }else{
    productTotal.value.typeId =  productGlassTypeStore.GlassType[0]
  }
  let productName = ""
  productDetailList.value.forEach(item =>{
north-glass-erp/pom.xml
@@ -206,6 +206,7 @@
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java
@@ -134,7 +134,6 @@
    List<Map<String, String>> selectProcessCompletedMp(Date selectTime1, Date selectTime2, String orderId, String inputProject, String selectProcesses, String laminating, Report report);
    Map<String,Float> ProcessCompletedFootSum(Date selectTime1, Date selectTime2, String orderId, String inputProject, String selectProcesses, Report report);
//    Map<String, Integer> getWorkInProgressTotal(
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -161,6 +161,8 @@
            //工艺流程
            map.put("technologicalProcess", technologicalProcess);
            //获取服务器时间
            map.put("reportingWorkTiem", LocalDateTime.now());
            //设备下拉框
            map.put("device", reportingWorkMapper.SelectWorkBasicDeviceMp(process));
            //班组下拉框
north-glass-erp/src/main/java/com/example/erp/service/sd/ProductService.java
@@ -41,9 +41,16 @@
    public Map<String,Object> defaultDateProduct(Integer pageNum, Integer pageSize, List<String> glassType,Map<String,Object> config) {
        Integer offset = (pageNum-1)*pageSize;
        String glassTypeId = null;
        if(glassType.size()>1){
        if(glassType.size()==2){
            if(!Objects.equals(glassType.get(0), "")&&!Objects.equals(glassType.get(1), "")){
            glassTypeId = glassType.get(1);
        }
        }else if(glassType.size()==1){
            if(!Objects.equals(glassType.get(0), "")&& !Objects.equals(glassType.get(0), "undefined")){
                glassTypeId = glassType.get(0);
            }
        }
        JSONObject orderJson = new JSONObject(config);
        Product product = JSONObject.parseObject(JSONObject.toJSONString(orderJson.get("filter")), Product.class);
        Map<String,String> sortDate = (Map<String, String>) config.get("sort");
north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -970,7 +970,7 @@
        SUM(t.breakageQuantity) as breakageQuantity,
        SUM(t.breakageArea) as breakageArea,
        t.responsibleTeam,
        CONCAT(ROUND(ROUND(SUM(t.area)/(SUM(t.area) + SUM(t.breakageArea)),2)*100), '%') as finished,
        CONCAT(ROUND(TRUNCATE(SUM(t.area)/(SUM(t.area) + SUM(t.breakageArea)),2)*100), '%') as finished,
        t.product_name
        FROM
        (
@@ -3607,5 +3607,63 @@
        GROUP BY hz.project,hz.batch,glass_child
    </select>
    <select id="yieldProcessMp">
        SELECT
            t.this_process as process,
            SUM(t.completed_quantity) as completedQuantity,
            SUM(t.area) as completedArea,
            SUM(t.breakageQuantity) as breakageQuantity,
            SUM(t.breakageArea) as breakageArea,
            CONCAT(ROUND(TRUNCATE(SUM(t.area)/(SUM(t.area) + SUM(t.breakageArea)),2)*100), '%') as finished
        FROM
            (
                SELECT
                    rw.reporting_work_time,
                    rw.this_process,
                    o.project,
                    o.batch,
                    rw.process_id,
                    rwd.completed_quantity AS completed_quantity,
                    ROUND(MAX(ogd.child_width) * MAX(ogd.child_height) * rwd.completed_quantity / 1000000, 2) AS area,
                    IFNULL(dd.breakage_quantity,0) as breakageQuantity,
                    IFNULL(ROUND(MAX(ogd.child_width) * MAX(ogd.child_height) * dd.breakage_quantity / 1000000, 2),0) AS breakageArea,
                    IFNULL(dd.responsible_team,'') as responsibleTeam,
                    od.product_name
                FROM
                    reporting_work AS rw
                        LEFT JOIN reporting_work_detail AS rwd
                                  ON rwd.reporting_work_id = rw.reporting_work_id
                        LEFT JOIN damage_details as dd on dd.reporting_work_id = rw.reporting_work_id
                        LEFT JOIN flow_card AS fc
                                  ON fc.order_id = rw.order_id
                                      AND fc.process_id = rw.process_id
                                      AND fc.order_number = rwd.order_number
                                      AND fc.technology_number = rwd.technology_number
                        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 = ogd.order_id
                                      AND od.order_number = ogd.order_number
                        LEFT JOIN sd.`order` AS o
                                  ON o.order_id = od.order_id
                WHERE
                    o.create_order > 0
                  AND rw.reviewed_state >= 0
                  AND rwd.completed_quantity + IFNULL(dd.breakage_quantity,0)> 0
                  AND rw.reporting_work_time &gt;= #{selectTime1}
                  AND rw.reporting_work_time &lt;= #{selectTime2}
                GROUP BY
                    rw.reporting_work_id,
                    rw.process_id,
                    rw.this_process,
                    rw.teams_groups_name,
                    rwd.order_number,
                    rwd.technology_number
            ) t
        GROUP BY
            t.this_process
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/sd/ProductMapper.xml
@@ -44,7 +44,7 @@
        left join basic_glass_type bgt on bgt.type_id = a.type_id
        <where>
            <if test="glassTypeId != null and glassTypeId != ''">
                and a.type_id like concat('%',#{glassTypeId},'%')
                and a.type_id = #{glassTypeId}
            </if>
            <if test="product.id != null and product.id != ''">
                and a.id like concat('%',#{product.id},'%')