廖井涛
2024-04-12 9ed80e8a29d177d2360f4156c131ec53e6a52a08
修改报表
15个文件已修改
1858 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/router/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/StockMonthReport.vue 296 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/StockReport.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/StockWarehouseReport.vue 295 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/WarehouseReport.vue 408 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/DeliveryReport.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetail.xml 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/mm/FinishedOperateLog.xml 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/sd/DeliveryDetail.xml 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/router/index.js
@@ -784,7 +784,7 @@
          /*----------- 仓储报表 ----------------*/
          path: 'stockReport',
          name: 'stockReport',
          component: () => import('../views/mm/stockReport/stockReport.vue'),
          component: () => import('../views/mm/stockReport/StockReport.vue'),
          children:[
            {
              path: 'WarehouseReport',
north-glass-erp/northglass-erp/src/views/mm/stockReport/StockMonthReport.vue
@@ -1,277 +1,43 @@
<template>
  <el-container>
    <el-header class="m-header">
      <el-row :gutter="10">
        <el-col :span="6">
          <el-date-picker
              v-model="datevalue"
              type="daterange"
              unlink-panels
              range-separator="到"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              :shortcuts="shortcuts"
              :size="size"
              format="YYYY/MM/DD"
              value-format="YYYY-MM-DD"
          />
        </el-col>
        <el-col :span="2" :offset="1">
          <el-button
              id="select"
              type="primary"
              :icon="Search"
              @click="autoAddRow">查询
          </el-button>
        </el-col>
      </el-row>
    </el-header>
    <el-main style="padding-top: 5px">
      <vxe-grid
          max-height="600"
          @filter-change="filterChanged"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          @="gridEvents"
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row}">
          <ul class="expand-wrapper">
            <li v-for="(item,key,index) in row">
              <span style="font-weight: bold">{{ key + ':  ' }}</span>
              <span>{{ item }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
          <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
          <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
      </vxe-grid>
    </el-main>
  </el-container>
</template>
<script setup>
import {ref} from "vue";
import {reactive} from "vue";
import {useRouter} from 'vue-router'
import {Search} from "@element-plus/icons-vue";
import dayjs from "dayjs";
import {VXETable} from "vxe-table";
let router = useRouter()
import BasicTable from "@/components/BasicTable.vue"
import request from "@/utils/request"
import { ref} from "vue"
import { useI18n } from 'vue-i18n'
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY: {enabled: true},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
//语言获取
const { t } = useI18n()
const childrenData = ref({
  columns: [
    /* {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},*/
    {type: 'seq', fixed: "left", title: ' ', width: 50},
    /*{ type: 'checkbox',fixed:"left", title: '', width: 50 },*/
    {type: 'expand', title:'详情', fixed: "left", slots: {content: 'content'}, width: 50},
    {field: 'cgdh', width: '10%', title: '库存组织', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'cgzt', width: '10%', title: '物料编码', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'gys', width: '10%',title: '物料名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'wlbh', width: '10%',title: '产地', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'wlmc', width: '10%', title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'w', width: '8%',title: '宽度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'g', width: '8%',title: '高度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'h', width: '8%',title: '厚度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'xh', width: '8%',title: '主单位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'dw', width: '8%',title: '安全库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '6', width: '12%',title: '库存数', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '8%',title: '可用库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '12%',title: '未领数量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'je', width: '8%',title: '总面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'je', width: '12%',title: '单片面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '6', width: '8%',title: '生产日期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '8%',title: '保质期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%',title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%',title: '库区', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'cgzt', width: '10%',title: '库位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'xsdh', width: '10%',title: '积压库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '6', width: '10%',title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}
  ],//表头参数
  toolbarConfig: {
    buttons: [{type:'text'},{type:'text',name:'原片月结报表'}],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    style: 'paddling-left:10px'
  },//表头按钮
  data: [
    {},{},{},{},{},{},{},{},{},{},{},
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateType', width: '120',title:'类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: t('productStock.reviewed'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewedTime', width: '140',title: t('productStock.approvedDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 2}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
  ],//表格表头字段
  data:[],//表格数据
  url :'/FinishedGoodsInventory/getSelectFinishedOperateLogReport',
  footList:['quantity']
      })
    ]
  },
})
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' : {
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/purchaseOrder/CreatePurchaseOrder', query: {id: row.id}})
      break
    }
    case 'delete': {
      alert('我接收到子组件传送的删除信息'+row.id)
      break
    }
  }
}
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'Add': {//新增
          router.push({path: '/main/purchaseOrder/CreatePurchaseOrder'})
          break
        }
        case 'Storage': {//入库
          if ($grid.getCheckboxRecords().length === 0) {
            openAlert({type: 'message', content: '请选择至少一条数据', status: 'warning'})
            //VXETable.modal.message( '请选择一条数据!')
            return
          } else {
            const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认入库?');
            //openAlert({type:'alert', content: '成功入库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            //VXETable.modal.message( '请选择一条数据!')
            return
          }
          break
        }
        case 'Return': {//退库
          if ($grid.getCheckboxRecords().length === 0) {
            openAlert({type: 'message', content: '请选择至少一条数据', status: 'warning'})
            //VXETable.modal.message( '请选择一条数据!')
            return
          } else {
            /*            async ()=>{
              const type = await.VXETable.modal.confirm('您选择了'+$grid.getCheckboxRecords().length+'条数据!,是否确认退库?');
            }*/
            const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认退库?');
            /* if(VXETable.modal.confirm('您选择了'+$grid.getCheckboxRecords().length+'条数据!,是否确认退库?' )){
              //openAlert({type:'message', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success',lockView: false, mask: false })
            }*/
            /* if(type==='confirm'){
              openAlert({type:'message', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            }
*/
            //openAlert({type:'alert', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            //VXETable.modal.message( '请选择一条数据!')
            return
          }
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
const openAlert = (options) => {
  if(options.type==='message'){
    VXETable.modal.message(options)
  }else{
    VXETable.modal.alert(options)
  }
}
</script>
<template>
  <basic-table
      :childrenData="childrenData"/>
</template>
<style scoped>
.m-header {
  height: auto
}
</style>
north-glass-erp/northglass-erp/src/views/mm/stockReport/StockReport.vue
@@ -1,49 +1,73 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
let indexFlag=$ref(1)
function changeRouter(index){
  indexFlag=index
}
</script>
<template>
  <div class="common-layout">
    <el-container>
      <el-header style="height: 30px">
  <div id="main-div">
    <div id="div-title">
        <el-breadcrumb :separator-icon="ArrowRight">
          <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''"
<!--          <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''"
                              :to="{path:'/main/stockReport/WarehouseReport'}">原材料报表
          </el-breadcrumb-item>
          </el-breadcrumb-item>-->
          <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''"
                              :to="{path:'/main/stockReport/StockWarehouseReport'}">成品报表
          </el-breadcrumb-item>
          <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''"
<!--          <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''"
                              :to="{path:'/main/stockReport/StockMonthReport'}">原片月结报表
          </el-breadcrumb-item>
          <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''"
                              :to="{path:'/main/stockReport/SubsidiaryMonthReport'}">
            辅料月结报表
          </el-breadcrumb-item>
          <el-breadcrumb-item style="display: none"></el-breadcrumb-item>
          </el-breadcrumb-item>-->
        </el-breadcrumb>
      </el-header>
      <el-main style="padding: 0;width: 99%;height: 100%;">
        <router-view/>
      </el-main>
      <!--     <el-footer>Footer</el-footer>-->
    </el-container>
    </div>
    <div id="main-body">
      <router-view  :key="route.fullPath" />
    </div>
  </div>
</template>
<script setup>
import {nextTick, ref} from 'vue'
import {ArrowRight, Search} from "@element-plus/icons-vue";
let indexFlag = $ref(1)
function changeRouter(index) {
  indexFlag = index
}
</script>
<style scoped>
#main-div{
  width: 99%;
  height: 100%;
}
#div-title{
  height: 2%;
  width: 100%;
}
#searchButton{
  margin-top: -5px;
  margin-left: 1rem;
}
#searchButton1{
//margin-left: 10rem;
}
/*main-body样式*/
#main-body{
  width: 100%;
  height: 95%;
}
#select{
  margin-left:0.5rem;
}
:deep(.indexTag .el-breadcrumb__inner) {
  color: #5CADFE !important;
  font-weight: 900;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/stockReport/StockWarehouseReport.vue
@@ -1,272 +1,45 @@
<template>
<div style="padding: 0;width: 100%;height: 100%">
    <el-header class="m-header" style="height: auto">
    </el-header>
    <el-main style="padding-top: 5px">
      <vxe-grid
          max-height="600"
          @filter-change="filterChanged"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          v-on="gridEvents"
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row}">
          <ul class="expand-wrapper">
            <li v-for="(item,key,index) in row">
              <span style="font-weight: bold">{{ key + ':  ' }}</span>
              <span>{{ item }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
          <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
          <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
      </vxe-grid>
    </el-main>
  </div>
</template>
<script setup>
import {ref} from 'vue'
import {reactive} from "vue";
import {useRouter} from 'vue-router'
import {Search} from "@element-plus/icons-vue";
import dayjs from "dayjs";
import {VXETable} from "vxe-table";
let router = useRouter()
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY: {enabled: true},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
import BasicTable from "@/components/BasicTable.vue"
import request from "@/utils/request"
import { ref} from "vue"
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const childrenData = ref({
  columns: [
   /* {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},*/
    {type: 'seq', fixed: "left", title: ' ', width: 50},
    /*{ type: 'checkbox',fixed:"left", title: '', width: 50 },*/
    {type: 'expand', title:'详情', fixed: "left", slots: {content: 'content'}, width: 50},
    {field: 'cgdh', width: '10%', title: '库存组织', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'cgzt', width: '10%', title: '物料编码', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'gys', width: '10%',title: '物料名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'wlbh', width: '10%',title: '产地', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'wlmc', width: '10%', title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'w', width: '8%',title: '宽度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'g', width: '8%',title: '高度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'h', width: '8%',title: '厚度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'xh', width: '8%',title: '主单位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'dw', width: '8%',title: '安全库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '6', width: '12%',title: '库存数', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '8%',title: '可用库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '12%',title: '未领数量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'je', width: '8%',title: '总面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'je', width: '12%',title: '单片面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '6', width: '8%',title: '生产日期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '8%',title: '保质期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%',title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%',title: '库区', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'cgzt', width: '10%',title: '库位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'xsdh', width: '10%',title: '积压库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '6', width: '10%',title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}
  ],//表头参数
  toolbarConfig: {
    buttons: [{type:'text'},{
      'name': '成品库存',
      'code': 'ProductStockList',
    },{
      'name': '入库记录',
      'code': 'StorageRecord',
    }],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    style: 'paddling-left:10px'
  },//表头按钮
  data: [
    {},{},{},{},{},{},{},{},{},{},{},
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateType', width: '120',title:'类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'staterOperationOrderNumber', width: '150',title: '调拨销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'endOperationOrderNumber', width: '100',title: '调拨序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: t('productStock.reviewed'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewedTime', width: '140',title: t('productStock.approvedDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 2}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
  ],//表格表头字段
  data:[],//表格数据
  url :'/FinishedGoodsInventory/getSelectFinishedOperateLogReport',
  footList:['quantity']
      })
    ]
  },
})
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' : {
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/purchaseOrder/CreatePurchaseOrder', query: {id: row.id}})
      break
    }
    case 'delete': {
      alert('我接收到子组件传送的删除信息'+row.id)
      break
    }
  }
}
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'ProductStockList': {//新增
          router.push({path: '/main/productStock/ProductStockList'})
          break
        }
        case 'StorageRecord': {//入库
          if ($grid.getCheckboxRecords().length === 0) {
            openAlert({type: 'alert', content: '您点击了查看入库记录', status: 'success'})
            //VXETable.modal.message( '请选择一条数据!')
            return
          } else {
            const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认入库?');
            //openAlert({type:'alert', content: '成功入库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            //VXETable.modal.message( '请选择一条数据!')
            return
          }
          break
        }
        case 'Return': {//退库
          if ($grid.getCheckboxRecords().length === 0) {
            openAlert({type: 'message', content: '请选择至少一条数据', status: 'warning'})
            //VXETable.modal.message( '请选择一条数据!')
            return
          } else {
            /*            async ()=>{
              const type = await.VXETable.modal.confirm('您选择了'+$grid.getCheckboxRecords().length+'条数据!,是否确认退库?');
            }*/
            const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认退库?');
            /* if(VXETable.modal.confirm('您选择了'+$grid.getCheckboxRecords().length+'条数据!,是否确认退库?' )){
              //openAlert({type:'message', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success',lockView: false, mask: false })
            }*/
            /* if(type==='confirm'){
              openAlert({type:'message', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            }
*/
            //openAlert({type:'alert', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            //VXETable.modal.message( '请选择一条数据!')
            return
          }
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
const openAlert = (options) => {
  if(options.type==='message'){
    VXETable.modal.message(options)
  }else{
    VXETable.modal.alert(options)
  }
}
</script>
<template>
  <basic-table
      :childrenData="childrenData"/>
</template>
<style scoped>
.el-row {
  margin-bottom: 20px;
}
.el-row:last-child {
  margin-bottom: 0;
}
.el-col {
  border-radius: 4px;
}
.m-header {
  height: 64px;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/stockReport/WarehouseReport.vue
@@ -1,387 +1,45 @@
<template>
  <div style="padding: 0;width: 100%;height: 100%">
    <el-header class="m-header" style="height: auto">
    </el-header>
    <el-main style="padding-top: 5px">
      <vxe-grid
          max-height="600"
          @filter-change="filterChanged"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          v-on="gridEvents"
          @cell-dblclick="cellClickEvent"
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row}">
          <ul class="expand-wrapper">
            <li v-for="(item,key,index) in row">
              <span style="font-weight: bold">{{ key + ':  ' }}</span>
              <span>{{ item }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
          <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
          <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
      </vxe-grid>
      <!--      详情框 部分1-->
      <vxe-modal v-model="showDetails" title="查看详情" width="600" height="80%" :mask="false" :lock-view="false" resize>
        <el-container >
          <el-header height="35px"
                     style="margin: 0;padding: 0">
            <el-input  v-model="showNum" placeholder="采购单号" disabled >
              <template #prepend>物料编码</template>
            </el-input>
          </el-header>
          <el-main>
            <template #default>
              <vxe-table
                  border="default"
                  auto-resize
                  show-overflow
                  max-height="400"
                  :row-config="{isHover: true}"
                  :show-header="false"
                  :sync-resize="showDetails"
                  :data="detailData"
              >
                <vxe-column field="label" width="30%" class-name="v-column-label"></vxe-column>
                <vxe-column field="value"></vxe-column>
              </vxe-table>
            </template>
          </el-main>
          <el-footer height="40px">
<!--            <el-row>
              <el-col :offset="20" :span="4">
                <el-button
                    id="Sure"
                    type="primary"
                    @click="SureReturn"
                >确认退货
                </el-button>
              </el-col>
            </el-row>-->
          </el-footer>
        </el-container>
      </vxe-modal>
      <!--      详情框 部分1 结束-->
    </el-main>
  </div>
</template>
<script setup>
import {ref} from 'vue'
import {reactive} from "vue";
import {useRouter} from 'vue-router'
import {Search} from "@element-plus/icons-vue";
import dayjs from "dayjs";
import {VXETable} from "vxe-table";
let router = useRouter()
const list =  (i) => {
  return {
    'kczz':'人工库',
    'wlbm':'NGWL202312000'+i,
    'wlmc':'这是物料名称',
    'cd':'地球村',
    'kcbh':'KC202300'+i,
    'w':'0',
    'g':'0',
    'h':'0',
    'zdw':'件',
    'aqkc':'0',
    'kcs':'20',
    'kykc':'30',
    'wlsl':'20',
    'zmj':'0',
    'dpmj':'0',
    'scrq':'2023-12-20',
    'bzq':'2025-12-20',
    'kq':'2000',
    'kw':'23',
    'jykc':'5',
    'bz':'这是备注*10086'
  }
}
import BasicTable from "@/components/BasicTable.vue"
import request from "@/utils/request"
import { ref} from "vue"
import { useI18n } from 'vue-i18n'
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY: {enabled: true},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
//语言获取
const { t } = useI18n()
const childrenData = ref({
  columns: [
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateType', width: '120',title:'类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'staterOperationOrderNumber', width: '150',title: '调拨销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'endOperationOrderNumber', width: '100',title: '调拨序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: t('productStock.reviewed'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewedTime', width: '140',title: t('productStock.approvedDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {type: 'expand', title:'', fixed: "left", slots: {content: 'content'}, width: 50},/* 详情 */
    /* {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},*/
    {type: 'seq', fixed: "left", title: ' ', width: 50},
    /*{ type: 'checkbox',fixed:"left", title: '', width: 50 },*/
    {field: 'kczz', width: '13%', title: '库存组织', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'wlbm', width: '10%', title: '物料编码', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'wlmc', width: '10%',title: '物料名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'cd', width: '10%',title: '产地', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'kcbh', width: '10%', title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'w', width: '8%',title: '宽度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'g', width: '8%',title: '高度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'h', width: '8%',title: '厚度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'zdw', width: '8%',title: '主单位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'aqkc', width: '8%',title: '安全库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'kcs', width: '12%',title: '库存数', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'kykc', width: '8%',title: '可用库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'wlsl', width: '12%',title: '未领数量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'zmj', width: '8%',title: '总面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'dpmj', width: '12%',title: '单片面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'scrq', width: '8%',title: '生产日期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'bzq', width: '8%',title: '保质期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    /*{field: 'kcbh', width: '10%',title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},*/
    {field: 'kq', width: '10%',title: '库区', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'kw', width: '10%',title: '库位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'jykc', width: '10%',title: '积压库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'bz', width: '10%',title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}
  ],//表头参数
  toolbarConfig: {
    buttons: [{type:'text'},{
      'name': '入库记录',
      'code': 'StorageRecord',
    }],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    style: 'paddling-left:10px'
  },//表头按钮
  data: [
    list(0),list(1),list(2),list(3),list(4),list(5),list(6),list(7),list(8),list(9),
  ],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 2}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
  ],//表格表头字段
  data:[],//表格数据
  url :'/FinishedGoodsInventory/getSelectFinishedOperateLogReport',
  footList:['quantity']
      })
    ]
  },
})
//列表操作
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' : {
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/purchaseOrder/CreatePurchaseOrder', query: {id: row.id}})
      break
    }
    case 'delete': {
      alert('我接收到子组件传送的删除信息'+row.id)
      break
    }
  }
}
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'ProductStockList': {//新增
          router.push({path: '/main/productStock/ProductStockList'})
          break
        }
        case 'StorageRecord': {//入库
          if ($grid.getCheckboxRecords().length === 0) {
            openAlert({type: 'alert', content: '您点击了查看入库记录', status: 'success'})
            //VXETable.modal.message( '请选择一条数据!')
            return
          } else {
            const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认入库?');
            //openAlert({type:'alert', content: '成功入库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            //VXETable.modal.message( '请选择一条数据!')
            return
          }
          break
        }
        case 'Return': {//退库
          if ($grid.getCheckboxRecords().length === 0) {
            openAlert({type: 'message', content: '请选择至少一条数据', status: 'warning'})
            //VXETable.modal.message( '请选择一条数据!')
            return
          } else {
            const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认退库?');
            return
          }
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
const showNum =ref();
const showDetails =ref(false);
let detailData =[];
const cellClickEvent = ({row}) => {
  detailData = cName.map(field => {
    return { label: ModelColumnContent(field) , value: row[field] }
  })
  showDetails.value = true;
  showNum.value = row['wlbm'];
}
const cName = ['kczz','wlbm','wlmc','cd','kcbh','w','g','h','zdw','aqkc','kcs','kykc','wlsl','zmj', 'dpmj','scrq','bzq','kq','kw','jykc','bz'];
const ModelColumnContent = (text) => {
  switch (text) {
    case 'kczz':
      return "库存组织";
    case 'wlbm':
      return "物料编码";
    case 'wlmc':
      return "物料名称";
    case 'cd':
      return "产地";
    case 'kcbh':
      return "库存编号";
    case 'w':
      return "宽";
    case 'g':
      return "高";
    case 'h':
      return "厚";
    case 'zdw':
      return "主单位";
    case 'aqkc':
      return "安全库存";
    case 'kcs':
      return "库存数";
    case 'kykc':
      return "可用库存";
    case 'wlsl':
      return "未领数量";
    case 'zmj':
      return "总面积";
    case 'dpmj':
      return "单片面积";
    case 'scrq':
      return "生产日期";
    case 'bzq': return "保质期";
    case 'kq': return "库区";
    case 'kw': return "库位";
    case 'jykc': return "积压库存";
    case 'bz':
      return "备注";
    default:
      return text;
  }
}
const openAlert = (options) => {
  if(options.type==='message'){
    VXETable.modal.message(options)
  }else{
    VXETable.modal.alert(options)
  }
}
</script>
<template>
  <basic-table
      :childrenData="childrenData"/>
</template>
<style scoped>
.el-row {
  margin-bottom: 20px;
}
.el-row:last-child {
  margin-bottom: 0;
}
.el-col {
  border-radius: 4px;
}
.m-header {
  height: 64px;
}
</style>
north-glass-erp/northglass-erp/src/views/sd/delivery/DeliveryReport.vue
@@ -2,68 +2,44 @@
import BasicTable from "@/components/BasicTable.vue"
import request from "@/utils/request"
import {onMounted, reactive, ref} from "vue"
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const selectData = ref(["",""])
let filterData = ref({})
import { ref} from "vue"
const childrenData = ref({
  columns:[
    {type: 'seq', title: t('basicData.Number'), width: 80 },
    {field: 'deliveryId',width:120,  title: t('delivery.deliveryNoteId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'creator',width:120,  title: t('delivery.shipper'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDate',width:120,  title: t('delivery.deliveryDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId',width:120,   title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'paymentTerms',width:120,  title: t('delivery.paymentTerms'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'payMethod',width:120,  title:t('delivery.paymentMethod'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'area',width:120,  title: t('productStock.totalArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'createTime',width:120,  title: t('productStock.statementDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}
    {type:'expand',fixed:"left",width: 80},
    {type: 'seq',fixed:"left", title: '自序', width: 80 },
    {field: 'deliveryId',width:120, title: '发货单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'deliveryNumber',width:120, title: '发货序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.paymentTerms',width:120, title: '付款条件',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.project',width:140, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'quantity',width:120, title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'area',width:120, title: '面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'money',width:120, title: '金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.customerId',width:120, title: '客户编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.customerName',width:120, title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.deliveryDate',width:120, title: '送货日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.payMethod',width:120, title: '支付方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.payDate',width:120, title: '支付日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.salesman',width:120, title: '销售员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.creator',width:120, title: '发货员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.contacts',width:120, title: '联系人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.contactNumber',width:120, title: '联系电话',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'delivery.deliveryAddress',width:150, title: '送货地址',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderId',width:120, title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderNumber',width:120, title: '订单序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'deliveryDetailRemakes',width:120, title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'createTime',width:120, title: '报表日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
  ],//表格表头字段
  data:[],//表格数据
  pageTotal : 0,//总页数
  dataTotal : 0,//数据总条数
  pageSize : 100,//页面显示数量
  pageNum:1,//当前页
  selectDate:['',''],//查询的日期
  footList:['quantity','grossArea','computeGrossArea','perimeter','price','grossAmount']
  url :'/Delivery/getSelectDeliveryDetailReport',
  footList:['quantity','area','money']
})
//页面第一次加载
onMounted(() => {
  getReportData()
})
//封装获取数据方法方法
const  getReportData = () => {
  request.post(`/Delivery/getSelectShippingOrder/${childrenData.value.pageNum}/${childrenData.value.pageSize}/${childrenData.value.selectDate}`,filterData.value).then(res => {
    if(res.code === '200'){
      childrenData.value.data = res.data.data
      childrenData.value.pageTotal = res.data.total.pageTotal
      childrenData.value.dataTotal = res.data.total.total
      childrenData.value.selectDate = res.data.selectDate
    }
  })
}
const getData = (filter) => {
  filterData.value = filter
  getReportData()
}
</script>
<template>
  <basic-table
      @getData="getData"
      :childrenData="childrenData"/>
</template>
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
@@ -197,4 +197,10 @@
        }
    }
    @ApiOperation("成品库存记录查询接口")
    @PostMapping("/getSelectFinishedOperateLogReport/{pageNum}/{pageSize}/{selectDate}")
    public Result getSelectFinishedOperateLogReport(@PathVariable Integer pageNum, @PathVariable Integer pageSize,@PathVariable List<String> selectDate, @RequestBody FinishedOperateLog finishedOperateLog){
        return Result.seccess(finishedGoodsInventoryService.getSelectFinishedOperateLogReport(pageNum,pageSize,selectDate,finishedOperateLog));
    }
}
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
@@ -65,4 +65,12 @@
    Map<String,Integer> getSelectStorageRecordLogPageTotal(@Param("offset") Integer offset,
                                                           @Param("pageSize") Integer pageSize,String startDate, String endDate,String type,
                                                           @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog);
    List<OrderDetail> getSelectFinishedOperateLogReport(@Param("offset") Integer offset,
                                             @Param("pageSize") Integer pageSize,String startDate, String endDate,
                                             @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog);
    Map<String,Integer> getSelectFinishedOperateLogReportPageTotal(@Param("offset") Integer offset,
                                                           @Param("pageSize") Integer pageSize,String startDate, String endDate,
                                                           @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog);
}
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
@@ -565,6 +565,29 @@
        return map;
    }
    public Map<String, Object> getSelectFinishedOperateLogReport(Integer pageNum, Integer pageSize, List<String> selectDate, FinishedOperateLog finishedOperateLog) {
        Integer offset = (pageNum-1)*pageSize;
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(15).toString();
        if(selectDate !=null && selectDate.size()==2){
            if(!selectDate.get(0).isEmpty()){
                startDate = selectDate.get(0);
            }
            if(!selectDate.get(1).isEmpty()){
                endDate = selectDate.get(1);
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("data", finishedOperateLogMapper.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog));
        map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog));
        List<String> list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);
        map.put("selectDate",list);
        return map;
    }
    public Boolean cancelFinishedGoodsInventoryStorage(Map<String,Object> object) {
        boolean saveState = true;
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
@@ -75,6 +75,7 @@
                endDate = selectDate.get(1);
            }
        }
        System.out.println(pageSize);
        Map<String, Object> map = new HashMap<>();
        map.put("data", deliveryDetailMapper.getSelectDeliveryDetailReport(offset, pageSize,startDate,endDate, deliveryDetail));
        map.put("total", deliveryDetailMapper.getSelectDeliveryDetailReportPageTotal(offset, pageSize,startDate,endDate, deliveryDetail));
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
@@ -407,6 +407,148 @@
        limit #{offset},#{pageSize};
    </select>
    <select id="getSelectFinishedOperateLogReport" resultMap="selectFinishedGoodsInventory">
        select fol.id,
        fol.operation_order_number,
        fol.order_id,
        fol.operate_type,
        fol.process_id,
        fol.operation_number,
        fol.quantity,
        fol.operator,
        od.product_id,
        od.product_name,
        od.width,
        od.height,
        fol.stater_operation_order_number,
        fol.end_operation_order_number,
        fol.operate_time,
        fol.`status`,
        fol.is_state,
        fol.reviewed,
        fol.reviewed_time,
        fol.type,
        fol.remarks
        from (select *
        from mm.finished_operate_log aa where  aa.status!='已作废') fol
        left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
                and fol.operate_type regexp #{finishedOperateLog.operateType}
            </if>
            <if test="finishedOperateLog.operationOrderNumber != null and finishedOperateLog.operationOrderNumber != ''">
                and fol.operation_order_number regexp #{finishedOperateLog.operationOrderNumber}
            </if>
            <if test="finishedOperateLog.orderId != null and finishedOperateLog.orderId != ''">
                and fol.order_id regexp #{finishedOperateLog.orderId}
            </if>
            <if test="finishedOperateLog.operationNumber != null and finishedOperateLog.operationNumber != ''">
                and fol.operation_number regexp #{finishedOperateLog.operationNumber}
            </if>
            <if test="finishedOperateLog.quantity != null and finishedOperateLog.quantity != ''">
                and fol.quantity regexp #{finishedOperateLog.quantity}
            </if>
            <if test="finishedOperateLog.operator != null and finishedOperateLog.operator != ''">
                and fol.operator regexp #{finishedOperateLog.operator}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productId != null and finishedOperateLog.orderDetail.productId != ''">
                and  od.product_id regexp #{finishedOperateLog.orderDetail.productId}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productName != null and finishedOperateLog.orderDetail.productName != ''">
                and  od.product_name regexp #{finishedOperateLog.orderDetail.productName}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.width != null and finishedOperateLog.orderDetail.width != ''">
                and  od.width regexp  REGEXP_REPLACE(#{finishedOperateLog.orderDetail.width},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.height != null and finishedOperateLog.orderDetail.height != ''">
                and  od.height regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.height},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.operateTime != null and finishedOperateLog.operateTime != ''">
                and fol.operate_time regexp #{finishedOperateLog.operateTime}
            </if>
            <if test="finishedOperateLog.status != null and finishedOperateLog.status != ''">
                and fol.`status` regexp #{finishedOperateLog.status}
            </if>
            <if test="finishedOperateLog.reviewed != null and finishedOperateLog.reviewed != ''">
                and fol.reviewed regexp #{finishedOperateLog.reviewed}
            </if>
            <if test="finishedOperateLog.reviewedTime != null and finishedOperateLog.reviewedTime != ''">
                and fol.reviewed_time regexp #{finishedOperateLog.reviewedTime}
            </if>
            <if test="finishedOperateLog.type != null and finishedOperateLog.type != ''">
                and fol.type regexp #{finishedOperateLog.type}
            </if>
            <if test="finishedOperateLog.remarks != null and finishedOperateLog.remarks != ''">
                and fol.remarks regexp #{finishedOperateLog.remarksr}
            </if>
        </where>
        order by fol.`status` desc
        limit #{offset},#{pageSize};
    </select>
    <select id="getSelectFinishedOperateLogReportPageTotal">
        select CEILING(count(fol.id)/#{pageSize}) as 'pageTotal',
        count(fol.id) as 'total'
        from (select *
        from mm.finished_operate_log aa where  aa.status!='已作废') fol
        left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
                and fol.operate_type regexp #{finishedOperateLog.operateType}
            </if>
            <if test="finishedOperateLog.operationOrderNumber != null and finishedOperateLog.operationOrderNumber != ''">
                and fol.operation_order_number regexp #{finishedOperateLog.operationOrderNumber}
            </if>
            <if test="finishedOperateLog.orderId != null and finishedOperateLog.orderId != ''">
                and fol.order_id regexp #{finishedOperateLog.orderId}
            </if>
            <if test="finishedOperateLog.operationNumber != null and finishedOperateLog.operationNumber != ''">
                and fol.operation_number regexp #{finishedOperateLog.operationNumber}
            </if>
            <if test="finishedOperateLog.quantity != null and finishedOperateLog.quantity != ''">
                and fol.quantity regexp #{finishedOperateLog.quantity}
            </if>
            <if test="finishedOperateLog.operator != null and finishedOperateLog.operator != ''">
                and fol.operator regexp #{finishedOperateLog.operator}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productId != null and finishedOperateLog.orderDetail.productId != ''">
                and  od.product_id regexp #{finishedOperateLog.orderDetail.productId}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productName != null and finishedOperateLog.orderDetail.productName != ''">
                and  od.product_name regexp #{finishedOperateLog.orderDetail.productName}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.width != null and finishedOperateLog.orderDetail.width != ''">
                and  od.width regexp  REGEXP_REPLACE(#{finishedOperateLog.orderDetail.width},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.height != null and finishedOperateLog.orderDetail.height != ''">
                and  od.height regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.height},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.operateTime != null and finishedOperateLog.operateTime != ''">
                and fol.operate_time regexp #{finishedOperateLog.operateTime}
            </if>
            <if test="finishedOperateLog.status != null and finishedOperateLog.status != ''">
                and fol.`status` regexp #{finishedOperateLog.status}
            </if>
            <if test="finishedOperateLog.reviewed != null and finishedOperateLog.reviewed != ''">
                and fol.reviewed regexp #{finishedOperateLog.reviewed}
            </if>
            <if test="finishedOperateLog.reviewedTime != null and finishedOperateLog.reviewedTime != ''">
                and fol.reviewed_time regexp #{finishedOperateLog.reviewedTime}
            </if>
            <if test="finishedOperateLog.type != null and finishedOperateLog.type != ''">
                and fol.type regexp #{finishedOperateLog.type}
            </if>
            <if test="finishedOperateLog.remarks != null and finishedOperateLog.remarks != ''">
                and fol.remarks regexp #{finishedOperateLog.remarksr}
            </if>
        </where>
        order by fol.`status` desc
        limit #{offset},#{pageSize};
    </select>
    <select id="getselectFinishedOperateLog" >
        select
            *
@@ -496,12 +638,13 @@
                                            operator,
                                            quantity,
                                            operate_time,
                                            status,
                                            stater_operation_order_number,
                                            end_operation_order_number
        )
        values (
                   #{oddNumber} ,#{orderDetail.finishedGoodsInventory.orderId},#{orderDetail.finishedGoodsInventory.orderNumber}
                   ,"调拨",#{userName},#{orderDetail.quantity},now(),#{orderDetail.orderId},#{orderDetail.orderNumber}
                   ,"调拨",#{userName},#{orderDetail.quantity},now(),"未审核",#{orderDetail.orderId},#{orderDetail.orderNumber}
               )
    </insert>
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
@@ -4,6 +4,37 @@
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.erp.mapper.mm.MaterialInventoryMapper">
    <resultMap id="selectMaterialOutboundDetail" type="com.example.erp.entity.mm.MaterialOutboundDetail" >
        <id column="id" property="id"/>
        <result column="material_outbound_id" property="materialOutboundId"/>
        <result column="material_outbound_number" property="materialOutboundNumber"/>
        <result column="inventory_id" property="inventoryId"/>
        <result column="inventory_organization" property="inventoryOrganization"/>
        <result column="material_code" property="materialCode"/>
        <result column="material_name" property="materialName"/>
        <result column="use_id" property="useId"/>
        <result column="producer" property="producer"/>
        <result column="unit" property="unit"/>
        <result column="width" property="width"/>
        <result column="height" property="height"/>
        <result column="thickness" property="thickness"/>
        <result column="outbound_quantity" property="outboundQuantity"/>
        <result column="single_piece_area" property="singlePieceArea"/>
        <result column="inventory_area" property="inventoryArea"/>
        <result column="date_of_manufacture" property="dateOfManufacture"/>
        <result column="remarks" property="remarks"/>
        <result column="material_requisition_personnel" property="materialOutbound.materialRequisitionPersonnel"/>
        <result column="material_requisition_team" property="materialOutbound.materialRequisitionTeam"/>
        <result column="order_id" property="materialOutbound.orderId"/>
        <result column="outbound_type" property="materialOutbound.outboundType"/>
        <result column="warehouse_manager" property="materialOutbound.warehouseManager"/>
        <result column="material_requisition_date" property="materialOutbound.materialRequisitionDate"/>
        <result column="reviewed" property="materialOutbound.reviewed"/>
        <result column="reviewed_time" property="materialOutbound.reviewedTime"/>
    </resultMap>
    <select id="getSelectMaterialInventoryDate">
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetail.xml
@@ -63,6 +63,7 @@
        <result column="o_quantity" property="quantity"/>
        <result column="delivery_id" property="deliveryId"/>
        <result column="delivery_number" property="deliveryNumber"/>
        <result column="quantity" property="quantity"/>
        <result column="area" property="area"/>
        <result column="money" property="money"/>
        <result column="delivery_detail_remakes" property="deliveryDetailRemakes"/>
@@ -500,68 +501,69 @@
        from sd.delivery_detail dd
        left join sd.delivery d on dd.delivery_id=d.delivery_id
        <where>
               and date(dd.create_time)>=#{startDate} and date(dd.create_time) &lt;= #{endDate}
            <if test="deliveryDetail.deliveryId != null and deliveryDetail.deliveryId != ''">
                and dd.delivery_id regexp #{deliveryDetail.deliveryId}
                and dd.delivery_id like concat('%',#{deliveryDetail.deliveryId},'%')
            </if>
            <if test="deliveryDetail.deliveryNumber != null and deliveryDetail.deliveryNumber != ''">
                and dd.delivery_number regexp #{deliveryDetail.deliveryNumber}
                and dd.delivery_number like concat('%',#{deliveryDetail.deliveryNumber},'%')
            </if>
            <if test="deliveryDetail.orderId != null and deliveryDetail.orderId != ''">
                and dd.order_id regexp #{deliveryDetail.orderId}
                and dd.order_id like concat('%', #{deliveryDetail.orderId},'%')
            </if>
            <if test="deliveryDetail.orderNumber != null and deliveryDetail.orderNumber != ''">
                and dd.order_number regexp #{deliveryDetail.orderNumber}
                and dd.order_number like concat('%', #{deliveryDetail.orderNumber},'%')
            </if>
            <if test="deliveryDetail.area != null and deliveryDetail.area != ''">
                and dd.area regexp #{deliveryDetail.area}
                and dd.area like concat('%', #{deliveryDetail.area},'%')
            </if>
            <if test="deliveryDetail.money != null and deliveryDetail.money != ''">
                and dd.money regexp #{deliveryDetail.money}
                and dd.money like concat('%', #{deliveryDetail.money},'%')
            </if>
            <if test="deliveryDetail.quantity != null and deliveryDetail.quantity != ''">
                and dd.quantity regexp #{deliveryDetail.quantity}
                and dd.quantity like concat('%', #{deliveryDetail.quantity},'%')
            </if>
            <if test="deliveryDetail.deliveryDetailRemakes != null and deliveryDetail.deliveryDetailRemakes != ''">
                and dd.delivery_detail_remakes regexp #{deliveryDetail.deliveryDetailRemakes}
                and dd.delivery_detail_remakes like concat('%', #{deliveryDetail.deliveryDetailRemakes},'%')
            </if>
            <if test="deliveryDetail.createTime != null and deliveryDetail.createTime != ''">
                and dd.create_time regexp #{deliveryDetail.createTime}
                and dd.create_time like concat('%', #{deliveryDetail.createTime},'%')
            </if>
            <if test="deliveryDetail.delivery.paymentTerms != null and deliveryDetail.delivery.paymentTerms != ''">
                and d.payment_terms regexp #{deliveryDetail.delivery.paymentTerms}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.paymentTerms != null and deliveryDetail.delivery.paymentTerms != '')">
                and d.payment_terms like concat('%', #{deliveryDetail.delivery.paymentTerms},'%')
            </if>
            <if test="deliveryDetail.delivery.project != null and deliveryDetail.delivery.project != ''">
                and d.project regexp #{deliveryDetail.delivery.project}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.project != null and deliveryDetail.delivery.project != '')">
                and d.project like concat('%', #{deliveryDetail.delivery.project},'%')
            </if>
            <if test="deliveryDetail.delivery.customerId != null and deliveryDetail.delivery.customerId != ''">
                and d.customer_id regexp #{deliveryDetail.delivery.customerId}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerId != null and deliveryDetail.delivery.customerId != '')">
                and d.customer_id like concat('%', #{deliveryDetail.delivery.customerId},'%')
            </if>
            <if test="deliveryDetail.delivery.customerName != null and deliveryDetail.delivery.customerName != ''">
                and d.customer_name regexp #{deliveryDetail.delivery.customerName}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerName != null and deliveryDetail.delivery.customerName != '')">
                and d.customer_name like concat('%', #{deliveryDetail.delivery.customerName},'%')
            </if>
            <if test="deliveryDetail.delivery.deliveryDate != null and deliveryDetail.delivery.deliveryDate != ''">
                and d.delivery_date regexp #{deliveryDetail.delivery.deliveryDate}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryDate != null and deliveryDetail.delivery.deliveryDate != '')">
                and d.delivery_date like concat('%', #{deliveryDetail.delivery.deliveryDate},'%')
            </if>
            <if test="deliveryDetail.delivery.payMethod != null and deliveryDetail.delivery.payMethod != ''">
                and d.pay_method regexp #{deliveryDetail.delivery.payMethod}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payMethod != null and deliveryDetail.delivery.payMethod != '')">
                and d.pay_method like concat('%', #{deliveryDetail.delivery.payMethod},'%')
            </if>
            <if test="deliveryDetail.delivery.payDate != null and deliveryDetail.delivery.payDate != ''">
                and d.pay_date regexp #{deliveryDetail.delivery.payDate}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payDate != null and deliveryDetail.delivery.payDate != '')">
                and d.pay_date like concat('%', #{deliveryDetail.delivery.payDate},'%')
            </if>
            <if test="deliveryDetail.delivery.salesman != null and deliveryDetail.delivery.salesman != ''">
                and d.salesman regexp #{deliveryDetail.delivery.salesman}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.salesman != null and deliveryDetail.delivery.salesman != '')">
                and d.salesman like concat('%', #{deliveryDetail.delivery.salesman},'%')
            </if>
            <if test="deliveryDetail.delivery.creator != null and deliveryDetail.delivery.creator != ''">
                and d.creator regexp #{deliveryDetail.delivery.creator}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.creator != null and deliveryDetail.delivery.creator != '')">
                and d.creator like concat('%', #{deliveryDetail.delivery.creator},'%')
            </if>
            <if test="deliveryDetail.delivery.contacts != null and deliveryDetail.delivery.contacts != ''">
                and d.contacts regexp #{deliveryDetail.delivery.contacts}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contacts != null and deliveryDetail.delivery.contacts != '')">
                and d.contacts like concat('%', #{deliveryDetail.delivery.contacts},'%')
            </if>
            <if test="deliveryDetail.delivery.contactNumber != null and deliveryDetail.delivery.contactNumber != ''">
                and d.contact_number regexp #{deliveryDetail.delivery.contactNumber}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contactNumber != null and deliveryDetail.delivery.contactNumber != '')">
                and d.contact_number like concat('%', #{deliveryDetail.delivery.contactNumber},'%')
            </if>
            <if test="deliveryDetail.delivery.deliveryAddress != null and deliveryDetail.delivery.deliveryAddress != ''">
                and d.delivery_address regexp #{deliveryDetail.delivery.deliveryAddress}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryAddress != null and deliveryDetail.delivery.deliveryAddress != '')">
                and d.delivery_address like concat('%', #{deliveryDetail.delivery.deliveryAddress},'%')
            </if>
        </where>
@@ -569,78 +571,78 @@
        limit #{offset},#{pageSize};
    </select>
    <select id="getSelectDeliveryDetailReportPageTotal" resultMap="selectDeliveryDetail">
    <select id="getSelectDeliveryDetailReportPageTotal">
        select CEILING(count(dd.id)/#{pageSize}) as 'pageTotal',
        count(dd.id) as 'total'
        from sd.delivery_detail dd
        left join sd.delivery d on dd.delivery_id=d.delivery_id
        <where>
            and date(dd.create_time)>=#{startDate} and date(dd.create_time) &lt;= #{endDate}
            <if test="deliveryDetail.deliveryId != null and deliveryDetail.deliveryId != ''">
                and dd.delivery_id regexp #{deliveryDetail.deliveryId}
                and dd.delivery_id like concat('%',#{deliveryDetail.deliveryId},'%')
            </if>
            <if test="deliveryDetail.deliveryNumber != null and deliveryDetail.deliveryNumber != ''">
                and dd.delivery_number regexp #{deliveryDetail.deliveryNumber}
                and dd.delivery_number like concat('%',#{deliveryDetail.deliveryNumber},'%')
            </if>
            <if test="deliveryDetail.orderId != null and deliveryDetail.orderId != ''">
                and dd.order_id regexp #{deliveryDetail.orderId}
                and dd.order_id like concat('%', #{deliveryDetail.orderId},'%')
            </if>
            <if test="deliveryDetail.orderNumber != null and deliveryDetail.orderNumber != ''">
                and dd.order_number regexp #{deliveryDetail.orderNumber}
                and dd.order_number like concat('%', #{deliveryDetail.orderNumber},'%')
            </if>
            <if test="deliveryDetail.area != null and deliveryDetail.area != ''">
                and dd.area regexp #{deliveryDetail.area}
                and dd.area like concat('%', #{deliveryDetail.area},'%')
            </if>
            <if test="deliveryDetail.money != null and deliveryDetail.money != ''">
                and dd.money regexp #{deliveryDetail.money}
                and dd.money like concat('%', #{deliveryDetail.money},'%')
            </if>
            <if test="deliveryDetail.quantity != null and deliveryDetail.quantity != ''">
                and dd.quantity regexp #{deliveryDetail.quantity}
                and dd.quantity like concat('%', #{deliveryDetail.quantity},'%')
            </if>
            <if test="deliveryDetail.deliveryDetailRemakes != null and deliveryDetail.deliveryDetailRemakes != ''">
                and dd.delivery_detail_remakes regexp #{deliveryDetail.deliveryDetailRemakes}
                and dd.delivery_detail_remakes like concat('%', #{deliveryDetail.deliveryDetailRemakes},'%')
            </if>
            <if test="deliveryDetail.createTime != null and deliveryDetail.createTime != ''">
                and dd.create_time regexp #{deliveryDetail.createTime}
                and dd.create_time like concat('%', #{deliveryDetail.createTime},'%')
            </if>
            <if test="deliveryDetail.delivery.paymentTerms != null and deliveryDetail.delivery.paymentTerms != ''">
                and d.payment_terms regexp #{deliveryDetail.delivery.paymentTerms}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.paymentTerms != null and deliveryDetail.delivery.paymentTerms != '')">
                and d.payment_terms like concat('%', #{deliveryDetail.delivery.paymentTerms},'%')
            </if>
            <if test="deliveryDetail.delivery.project != null and deliveryDetail.delivery.project != ''">
                and d.project regexp #{deliveryDetail.delivery.project}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.project != null and deliveryDetail.delivery.project != '')">
                and d.project like concat('%', #{deliveryDetail.delivery.project},'%')
            </if>
            <if test="deliveryDetail.delivery.customerId != null and deliveryDetail.delivery.customerId != ''">
                and d.customer_id regexp #{deliveryDetail.delivery.customerId}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerId != null and deliveryDetail.delivery.customerId != '')">
                and d.customer_id like concat('%', #{deliveryDetail.delivery.customerId},'%')
            </if>
            <if test="deliveryDetail.delivery.customerName != null and deliveryDetail.delivery.customerName != ''">
                and d.customer_name regexp #{deliveryDetail.delivery.customerName}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerName != null and deliveryDetail.delivery.customerName != '')">
                and d.customer_name like concat('%', #{deliveryDetail.delivery.customerName},'%')
            </if>
            <if test="deliveryDetail.delivery.deliveryDate != null and deliveryDetail.delivery.deliveryDate != ''">
                and d.delivery_date regexp #{deliveryDetail.delivery.deliveryDate}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryDate != null and deliveryDetail.delivery.deliveryDate != '')">
                and d.delivery_date like concat('%', #{deliveryDetail.delivery.deliveryDate},'%')
            </if>
            <if test="deliveryDetail.delivery.payMethod != null and deliveryDetail.delivery.payMethod != ''">
                and d.pay_method regexp #{deliveryDetail.delivery.payMethod}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payMethod != null and deliveryDetail.delivery.payMethod != '')">
                and d.pay_method like concat('%', #{deliveryDetail.delivery.payMethod},'%')
            </if>
            <if test="deliveryDetail.delivery.payDate != null and deliveryDetail.delivery.payDate != ''">
                and d.pay_date regexp #{deliveryDetail.delivery.payDate}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payDate != null and deliveryDetail.delivery.payDate != '')">
                and d.pay_date like concat('%', #{deliveryDetail.delivery.payDate},'%')
            </if>
            <if test="deliveryDetail.delivery.salesman != null and deliveryDetail.delivery.salesman != ''">
                and d.salesman regexp #{deliveryDetail.delivery.salesman}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.salesman != null and deliveryDetail.delivery.salesman != '')">
                and d.salesman like concat('%', #{deliveryDetail.delivery.salesman},'%')
            </if>
            <if test="deliveryDetail.delivery.creator != null and deliveryDetail.delivery.creator != ''">
                and d.creator regexp #{deliveryDetail.delivery.creator}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.creator != null and deliveryDetail.delivery.creator != '')">
                and d.creator like concat('%', #{deliveryDetail.delivery.creator},'%')
            </if>
            <if test="deliveryDetail.delivery.contacts != null and deliveryDetail.delivery.contacts != ''">
                and d.contacts regexp #{deliveryDetail.delivery.contacts}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contacts != null and deliveryDetail.delivery.contacts != '')">
                and d.contacts like concat('%', #{deliveryDetail.delivery.contacts},'%')
            </if>
            <if test="deliveryDetail.delivery.contactNumber != null and deliveryDetail.delivery.contactNumber != ''">
                and d.contact_number regexp #{deliveryDetail.delivery.contactNumber}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contactNumber != null and deliveryDetail.delivery.contactNumber != '')">
                and d.contact_number like concat('%', #{deliveryDetail.delivery.contactNumber},'%')
            </if>
            <if test="deliveryDetail.delivery.deliveryAddress != null and deliveryDetail.delivery.deliveryAddress != ''">
                and d.delivery_address regexp #{deliveryDetail.delivery.deliveryAddress}
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryAddress != null and deliveryDetail.delivery.deliveryAddress != '')">
                and d.delivery_address like concat('%', #{deliveryDetail.delivery.deliveryAddress},'%')
            </if>
        </where>
        order by dd.delivery_id,dd.delivery_number
        limit #{offset},#{pageSize};
    </select>
</mapper>
north-glass-erp/target/classes/mapper/mm/FinishedOperateLog.xml
@@ -407,6 +407,148 @@
        limit #{offset},#{pageSize};
    </select>
    <select id="getSelectFinishedOperateLogReport" resultMap="selectFinishedGoodsInventory">
        select fol.id,
        fol.operation_order_number,
        fol.order_id,
        fol.operate_type,
        fol.process_id,
        fol.operation_number,
        fol.quantity,
        fol.operator,
        od.product_id,
        od.product_name,
        od.width,
        od.height,
        fol.stater_operation_order_number,
        fol.end_operation_order_number,
        fol.operate_time,
        fol.`status`,
        fol.is_state,
        fol.reviewed,
        fol.reviewed_time,
        fol.type,
        fol.remarks
        from (select *
        from mm.finished_operate_log aa where  aa.status!='已作废') fol
        left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
                and fol.operate_type regexp #{finishedOperateLog.operateType}
            </if>
            <if test="finishedOperateLog.operationOrderNumber != null and finishedOperateLog.operationOrderNumber != ''">
                and fol.operation_order_number regexp #{finishedOperateLog.operationOrderNumber}
            </if>
            <if test="finishedOperateLog.orderId != null and finishedOperateLog.orderId != ''">
                and fol.order_id regexp #{finishedOperateLog.orderId}
            </if>
            <if test="finishedOperateLog.operationNumber != null and finishedOperateLog.operationNumber != ''">
                and fol.operation_number regexp #{finishedOperateLog.operationNumber}
            </if>
            <if test="finishedOperateLog.quantity != null and finishedOperateLog.quantity != ''">
                and fol.quantity regexp #{finishedOperateLog.quantity}
            </if>
            <if test="finishedOperateLog.operator != null and finishedOperateLog.operator != ''">
                and fol.operator regexp #{finishedOperateLog.operator}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productId != null and finishedOperateLog.orderDetail.productId != ''">
                and  od.product_id regexp #{finishedOperateLog.orderDetail.productId}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productName != null and finishedOperateLog.orderDetail.productName != ''">
                and  od.product_name regexp #{finishedOperateLog.orderDetail.productName}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.width != null and finishedOperateLog.orderDetail.width != ''">
                and  od.width regexp  REGEXP_REPLACE(#{finishedOperateLog.orderDetail.width},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.height != null and finishedOperateLog.orderDetail.height != ''">
                and  od.height regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.height},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.operateTime != null and finishedOperateLog.operateTime != ''">
                and fol.operate_time regexp #{finishedOperateLog.operateTime}
            </if>
            <if test="finishedOperateLog.status != null and finishedOperateLog.status != ''">
                and fol.`status` regexp #{finishedOperateLog.status}
            </if>
            <if test="finishedOperateLog.reviewed != null and finishedOperateLog.reviewed != ''">
                and fol.reviewed regexp #{finishedOperateLog.reviewed}
            </if>
            <if test="finishedOperateLog.reviewedTime != null and finishedOperateLog.reviewedTime != ''">
                and fol.reviewed_time regexp #{finishedOperateLog.reviewedTime}
            </if>
            <if test="finishedOperateLog.type != null and finishedOperateLog.type != ''">
                and fol.type regexp #{finishedOperateLog.type}
            </if>
            <if test="finishedOperateLog.remarks != null and finishedOperateLog.remarks != ''">
                and fol.remarks regexp #{finishedOperateLog.remarksr}
            </if>
        </where>
        order by fol.`status` desc
        limit #{offset},#{pageSize};
    </select>
    <select id="getSelectFinishedOperateLogReportPageTotal">
        select CEILING(count(fol.id)/#{pageSize}) as 'pageTotal',
        count(fol.id) as 'total'
        from (select *
        from mm.finished_operate_log aa where  aa.status!='已作废') fol
        left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
                and fol.operate_type regexp #{finishedOperateLog.operateType}
            </if>
            <if test="finishedOperateLog.operationOrderNumber != null and finishedOperateLog.operationOrderNumber != ''">
                and fol.operation_order_number regexp #{finishedOperateLog.operationOrderNumber}
            </if>
            <if test="finishedOperateLog.orderId != null and finishedOperateLog.orderId != ''">
                and fol.order_id regexp #{finishedOperateLog.orderId}
            </if>
            <if test="finishedOperateLog.operationNumber != null and finishedOperateLog.operationNumber != ''">
                and fol.operation_number regexp #{finishedOperateLog.operationNumber}
            </if>
            <if test="finishedOperateLog.quantity != null and finishedOperateLog.quantity != ''">
                and fol.quantity regexp #{finishedOperateLog.quantity}
            </if>
            <if test="finishedOperateLog.operator != null and finishedOperateLog.operator != ''">
                and fol.operator regexp #{finishedOperateLog.operator}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productId != null and finishedOperateLog.orderDetail.productId != ''">
                and  od.product_id regexp #{finishedOperateLog.orderDetail.productId}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.productName != null and finishedOperateLog.orderDetail.productName != ''">
                and  od.product_name regexp #{finishedOperateLog.orderDetail.productName}
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.width != null and finishedOperateLog.orderDetail.width != ''">
                and  od.width regexp  REGEXP_REPLACE(#{finishedOperateLog.orderDetail.width},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.orderDetail!=null and finishedOperateLog.orderDetail.height != null and finishedOperateLog.orderDetail.height != ''">
                and  od.height regexp REGEXP_REPLACE(#{finishedOperateLog.orderDetail.height},'\\.0+$','')
            </if>
            <if test="finishedOperateLog.operateTime != null and finishedOperateLog.operateTime != ''">
                and fol.operate_time regexp #{finishedOperateLog.operateTime}
            </if>
            <if test="finishedOperateLog.status != null and finishedOperateLog.status != ''">
                and fol.`status` regexp #{finishedOperateLog.status}
            </if>
            <if test="finishedOperateLog.reviewed != null and finishedOperateLog.reviewed != ''">
                and fol.reviewed regexp #{finishedOperateLog.reviewed}
            </if>
            <if test="finishedOperateLog.reviewedTime != null and finishedOperateLog.reviewedTime != ''">
                and fol.reviewed_time regexp #{finishedOperateLog.reviewedTime}
            </if>
            <if test="finishedOperateLog.type != null and finishedOperateLog.type != ''">
                and fol.type regexp #{finishedOperateLog.type}
            </if>
            <if test="finishedOperateLog.remarks != null and finishedOperateLog.remarks != ''">
                and fol.remarks regexp #{finishedOperateLog.remarksr}
            </if>
        </where>
        order by fol.`status` desc
        limit #{offset},#{pageSize};
    </select>
    <select id="getselectFinishedOperateLog" >
        select
            *
@@ -496,12 +638,13 @@
                                            operator,
                                            quantity,
                                            operate_time,
                                            status,
                                            stater_operation_order_number,
                                            end_operation_order_number
        )
        values (
                   #{oddNumber} ,#{orderDetail.finishedGoodsInventory.orderId},#{orderDetail.finishedGoodsInventory.orderNumber}
                   ,"调拨",#{userName},#{orderDetail.quantity},now(),#{orderDetail.orderId},#{orderDetail.orderNumber}
                   ,"调拨",#{userName},#{orderDetail.quantity},now(),"未审核",#{orderDetail.orderId},#{orderDetail.orderNumber}
               )
    </insert>
north-glass-erp/target/classes/mapper/sd/DeliveryDetail.xml
@@ -56,6 +56,37 @@
    </resultMap>
    <resultMap id="selectDeliveryDetail" type="com.example.erp.entity.sd.DeliveryDetail">
        <result column="order_id" property="orderId"/>
        <result column="order_number" property="orderNumber"/>
        <result column="o_quantity" property="quantity"/>
        <result column="delivery_id" property="deliveryId"/>
        <result column="delivery_number" property="deliveryNumber"/>
        <result column="quantity" property="quantity"/>
        <result column="area" property="area"/>
        <result column="money" property="money"/>
        <result column="delivery_detail_remakes" property="deliveryDetailRemakes"/>
        <result column="delivery_detail_state" property="deliveryDetailState"/>
        <result column="create_time" property="createTime"/>
        <result column="customer_id" property="delivery.customerId"/>
        <result column="customer_name" property="delivery.customerName"/>
        <result column="project" property="delivery.project"/>
        <result column="pay_method" property="delivery.payMethod"/>
        <result column="payment_terms" property="delivery.paymentTerms"/>
        <result column="pay_date" property="delivery.payDate"/>
        <result column="contacts" property="delivery.contacts"/>
        <result column="contact_number" property="delivery.contactNumber"/>
        <result column="delivery_address" property="delivery.deliveryAddress"/>
        <result column="delivery_date" property="delivery.deliveryDate"/>
        <result column="creator" property="delivery.creator"/>
        <result column="salesman" property="delivery.salesman"/>
    </resultMap>
    <delete id="deleteDeliveryDetail">
        delete from sd.delivery_detail where delivery_id=#{deliveryId}
    </delete>
@@ -443,4 +474,175 @@
        </where>
        limit #{offset},#{pageSize};
    </select>
    <select id="getSelectDeliveryDetailReport" resultMap="selectDeliveryDetail">
        select dd.delivery_id,
        dd.delivery_number,
        d.payment_terms,
        d.project,
        d.customer_id,
        d.customer_name,
        d.delivery_date,
        d.pay_method,
        d.pay_date,
        d.salesman,
        d.creator,
        d.contacts,
        d.contact_number,
        d.delivery_address,
        dd.order_id,
        dd.order_number,
        dd.area,
        dd.money,
        dd.quantity,
        dd.delivery_detail_remakes,
        dd.create_time
        from sd.delivery_detail dd
        left join sd.delivery d on dd.delivery_id=d.delivery_id
        <where>
               and date(dd.create_time)>=#{startDate} and date(dd.create_time) &lt;= #{endDate}
            <if test="deliveryDetail.deliveryId != null and deliveryDetail.deliveryId != ''">
                and dd.delivery_id like concat('%',#{deliveryDetail.deliveryId},'%')
            </if>
            <if test="deliveryDetail.deliveryNumber != null and deliveryDetail.deliveryNumber != ''">
                and dd.delivery_number like concat('%',#{deliveryDetail.deliveryNumber},'%')
            </if>
            <if test="deliveryDetail.orderId != null and deliveryDetail.orderId != ''">
                and dd.order_id like concat('%', #{deliveryDetail.orderId},'%')
            </if>
            <if test="deliveryDetail.orderNumber != null and deliveryDetail.orderNumber != ''">
                and dd.order_number like concat('%', #{deliveryDetail.orderNumber},'%')
            </if>
            <if test="deliveryDetail.area != null and deliveryDetail.area != ''">
                and dd.area like concat('%', #{deliveryDetail.area},'%')
            </if>
            <if test="deliveryDetail.money != null and deliveryDetail.money != ''">
                and dd.money like concat('%', #{deliveryDetail.money},'%')
            </if>
            <if test="deliveryDetail.quantity != null and deliveryDetail.quantity != ''">
                and dd.quantity like concat('%', #{deliveryDetail.quantity},'%')
            </if>
            <if test="deliveryDetail.deliveryDetailRemakes != null and deliveryDetail.deliveryDetailRemakes != ''">
                and dd.delivery_detail_remakes like concat('%', #{deliveryDetail.deliveryDetailRemakes},'%')
            </if>
            <if test="deliveryDetail.createTime != null and deliveryDetail.createTime != ''">
                and dd.create_time like concat('%', #{deliveryDetail.createTime},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.paymentTerms != null and deliveryDetail.delivery.paymentTerms != '')">
                and d.payment_terms like concat('%', #{deliveryDetail.delivery.paymentTerms},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.project != null and deliveryDetail.delivery.project != '')">
                and d.project like concat('%', #{deliveryDetail.delivery.project},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerId != null and deliveryDetail.delivery.customerId != '')">
                and d.customer_id like concat('%', #{deliveryDetail.delivery.customerId},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerName != null and deliveryDetail.delivery.customerName != '')">
                and d.customer_name like concat('%', #{deliveryDetail.delivery.customerName},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryDate != null and deliveryDetail.delivery.deliveryDate != '')">
                and d.delivery_date like concat('%', #{deliveryDetail.delivery.deliveryDate},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payMethod != null and deliveryDetail.delivery.payMethod != '')">
                and d.pay_method like concat('%', #{deliveryDetail.delivery.payMethod},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payDate != null and deliveryDetail.delivery.payDate != '')">
                and d.pay_date like concat('%', #{deliveryDetail.delivery.payDate},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.salesman != null and deliveryDetail.delivery.salesman != '')">
                and d.salesman like concat('%', #{deliveryDetail.delivery.salesman},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.creator != null and deliveryDetail.delivery.creator != '')">
                and d.creator like concat('%', #{deliveryDetail.delivery.creator},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contacts != null and deliveryDetail.delivery.contacts != '')">
                and d.contacts like concat('%', #{deliveryDetail.delivery.contacts},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contactNumber != null and deliveryDetail.delivery.contactNumber != '')">
                and d.contact_number like concat('%', #{deliveryDetail.delivery.contactNumber},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryAddress != null and deliveryDetail.delivery.deliveryAddress != '')">
                and d.delivery_address like concat('%', #{deliveryDetail.delivery.deliveryAddress},'%')
            </if>
        </where>
        order by dd.delivery_id,dd.delivery_number
        limit #{offset},#{pageSize};
    </select>
    <select id="getSelectDeliveryDetailReportPageTotal">
        select CEILING(count(dd.id)/#{pageSize}) as 'pageTotal',
        count(dd.id) as 'total'
        from sd.delivery_detail dd
        left join sd.delivery d on dd.delivery_id=d.delivery_id
        <where>
            and date(dd.create_time)>=#{startDate} and date(dd.create_time) &lt;= #{endDate}
            <if test="deliveryDetail.deliveryId != null and deliveryDetail.deliveryId != ''">
                and dd.delivery_id like concat('%',#{deliveryDetail.deliveryId},'%')
            </if>
            <if test="deliveryDetail.deliveryNumber != null and deliveryDetail.deliveryNumber != ''">
                and dd.delivery_number like concat('%',#{deliveryDetail.deliveryNumber},'%')
            </if>
            <if test="deliveryDetail.orderId != null and deliveryDetail.orderId != ''">
                and dd.order_id like concat('%', #{deliveryDetail.orderId},'%')
            </if>
            <if test="deliveryDetail.orderNumber != null and deliveryDetail.orderNumber != ''">
                and dd.order_number like concat('%', #{deliveryDetail.orderNumber},'%')
            </if>
            <if test="deliveryDetail.area != null and deliveryDetail.area != ''">
                and dd.area like concat('%', #{deliveryDetail.area},'%')
            </if>
            <if test="deliveryDetail.money != null and deliveryDetail.money != ''">
                and dd.money like concat('%', #{deliveryDetail.money},'%')
            </if>
            <if test="deliveryDetail.quantity != null and deliveryDetail.quantity != ''">
                and dd.quantity like concat('%', #{deliveryDetail.quantity},'%')
            </if>
            <if test="deliveryDetail.deliveryDetailRemakes != null and deliveryDetail.deliveryDetailRemakes != ''">
                and dd.delivery_detail_remakes like concat('%', #{deliveryDetail.deliveryDetailRemakes},'%')
            </if>
            <if test="deliveryDetail.createTime != null and deliveryDetail.createTime != ''">
                and dd.create_time like concat('%', #{deliveryDetail.createTime},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.paymentTerms != null and deliveryDetail.delivery.paymentTerms != '')">
                and d.payment_terms like concat('%', #{deliveryDetail.delivery.paymentTerms},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.project != null and deliveryDetail.delivery.project != '')">
                and d.project like concat('%', #{deliveryDetail.delivery.project},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerId != null and deliveryDetail.delivery.customerId != '')">
                and d.customer_id like concat('%', #{deliveryDetail.delivery.customerId},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.customerName != null and deliveryDetail.delivery.customerName != '')">
                and d.customer_name like concat('%', #{deliveryDetail.delivery.customerName},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryDate != null and deliveryDetail.delivery.deliveryDate != '')">
                and d.delivery_date like concat('%', #{deliveryDetail.delivery.deliveryDate},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payMethod != null and deliveryDetail.delivery.payMethod != '')">
                and d.pay_method like concat('%', #{deliveryDetail.delivery.payMethod},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.payDate != null and deliveryDetail.delivery.payDate != '')">
                and d.pay_date like concat('%', #{deliveryDetail.delivery.payDate},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.salesman != null and deliveryDetail.delivery.salesman != '')">
                and d.salesman like concat('%', #{deliveryDetail.delivery.salesman},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.creator != null and deliveryDetail.delivery.creator != '')">
                and d.creator like concat('%', #{deliveryDetail.delivery.creator},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contacts != null and deliveryDetail.delivery.contacts != '')">
                and d.contacts like concat('%', #{deliveryDetail.delivery.contacts},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.contactNumber != null and deliveryDetail.delivery.contactNumber != '')">
                and d.contact_number like concat('%', #{deliveryDetail.delivery.contactNumber},'%')
            </if>
            <if test="deliveryDetail.delivery!=null and (deliveryDetail.delivery.deliveryAddress != null and deliveryDetail.delivery.deliveryAddress != '')">
                and d.delivery_address like concat('%', #{deliveryDetail.delivery.deliveryAddress},'%')
            </if>
        </where>
        order by dd.delivery_id,dd.delivery_number
    </select>
</mapper>