廖井涛
2025-08-21 bf90cf8568301edb38920e8b0a0ce7e137a668ef
Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
37个文件已修改
904 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/mm/PrintPackingListLuoyang.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/ar.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/en.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/kr.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/ru.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/zh.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecord.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedGoodsInventory.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedGoodsInventoryMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/DamageDetailsMapper.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java 173 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/DamageDetails.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/Report.xml 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetailMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/mm/PrintPackingListLuoyang.vue
@@ -217,7 +217,6 @@
          sum:sum
        })
      })
      console.log(orderDetailList.value)
    } else {
      ElMessage.warning(res.msg)
      router.push("/login")
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyang.vue
@@ -213,7 +213,7 @@
<template>
  <div >
    <div v-for="(page,pageIndex) in pageData" class="content1">
    <div v-for="(page,pageIndex) in pageData" class="content1" >
      <table>
        <thead>
        <tr style="height: 3.6cm"><td></td></tr>
@@ -311,7 +311,7 @@
        </tr>
        </tbody>
      </table>
      <table class="foot">
      <table class="foot" >
        <tr >
          <td style="width: 5cm"></td>
          <td  style="width: 150px" ></td>
@@ -330,6 +330,7 @@
                :value="getMoneySum(pageIndex)"
                style="font-size: 17px;border: 0;width: 100%"/>
          </td>
          <td></td>
        </tr>
        <tr style="height: 0.65cm"><td></td></tr>
        <tr>
north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheetLuoyangDetails.vue
@@ -319,7 +319,7 @@
              <el-col :span="5" style="font-size: 16px;white-space: nowrap;">
                <input v-model="delivery.project"
                       style="border: 0;width: 100%;
                       style="border: 0;width: 250%;
                         height: 100%;font-size:16px;white-space: nowrap; "/>
              </el-col>
            </el-row>
@@ -515,7 +515,7 @@
  }*/
  .foot{
    position: absolute;
    bottom: 1cm;
    bottom: 0.1cm;
  //transform: translateY(8cm);
  }
  /*#table-sum {
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue
@@ -163,7 +163,7 @@
      gridOptions.columns.forEach(item =>{
        item.filterMethod = filterChanged
      })
      list.value = ['quantity','Storage','gross_area','shippedQuantity','shippedArea','glassQuantity','StorageArea']
      list.value = ['quantity','Storage','grossArea','shippedQuantity','shippedArea','glassQuantity','StorageArea','broken_num']
      title.value = res.data.title
      res.data.title.forEach((item,index) =>{
        list.value.push('reportWorkQuantity.'+item.process)
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcessCollect.vue
@@ -41,7 +41,7 @@
  mergeCells:[],
  toolbarConfig: {
    zoom: true,
    /*custom: true*/
     // custom: true
  },
  cellClassName ({ row, column,columnIndex})  {
    if (columnIndex>10 && row.thisQuantity*1 === row.reportWorkQuantity[column.title]*1){
@@ -69,24 +69,19 @@
  orderId:null
})
const columns = [
  {field: 'order_number',fixed:"left", width: 90,title: t('order.OrderNum'),showOverflow:"ellipsis"},
  // {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
  {field: 'product_name', width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  {field: 'glass_child',width: 130, title: t('reportingWorks.glassChild') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  {field: 'order_type', width: 120,title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  {field: 'process_id',width: 110, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  {field: 'technology_number', width: 90,title:  t('processCard.technologyNumber'),showOverflow:"ellipsis"},
  {field: 'child_width', width: 90,title:  t('order.width'),showOverflow:"ellipsis"},
  {field: 'child_height', width: 90,title:  t('order.height'),showOverflow:"ellipsis"},
  {field: 'quantity', width: 90,title: t('order.quantity')},
  {field: 'glassQuantity', width: 90,title: t('order.glassQuantity')},
  {field: 'gross_area', width: 90,title: t('order.area')},
  {field: 'shippedQuantity',width: 120, title: t('delivery.deliveryQuantity')},
  {field: 'inventory',width: 120, title: t('productStock.inventoryQuantity')},
  {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')},
  {field: 'technology_number', width: 90,title:  t('processCard.technologyNumber'),showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  {field: 'quantity',slots: { default: 'show'}, width: 90,title: t('order.quantity')},
  {field: 'thisQuantity', width: 90,title: t('order.glassQuantity')},
  {field: 'gross_area',slots: { default: 'show'}, width: 90,title: t('order.area')},
  {field: 'inventory',slots: { default: 'show'},width: 120, title: t('report.inventoryNum')},
  {field: 'inventoryArea',slots: { default: 'show'},width: 120, title: t('report.StorageArea')},
  {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')},
]
let column = [0,1,3,6,7,8,10,11,12,13]
let column = [0,2,3,5,7,8,9]
onMounted(()=>{
@@ -96,7 +91,9 @@
watch(()=>props.orderId,(newValue)=>{
  getWorkOrder()
})
const show = (row,column ) =>{
  return row[column.field+'Show']
}
let mergeCells = ref()
const getWorkOrder = () => {
@@ -107,7 +104,9 @@
      gridOptions.columns.forEach(item =>{
        item.filterMethod = filterChanged
      })
      list.value = ['quantity','inventory','inventoryArea','gross_area','shippedQuantity','glassQuantity']
      console.log(res)
      list.value = ['quantity','thisQuantity','inventory','inventoryArea','gross_area','glassQuantity','broken_num']
      res.data.title.forEach((item,index) =>{
        list.value.push('reportWorkQuantity.'+item.process)
        let column = {slots: { default: 'quantitySum'},
@@ -119,7 +118,7 @@
      res.data.data.forEach(item => {
        item.reportWorkQuantity=JSON.parse(item.reportWorkQuantity)
        item.reportWorkQuantityCount=JSON.parse(item.reportWorkQuantityCount)
        item.reportWorkQuantityShow=JSON.parse(item.reportWorkQuantityShow)
         item.reportWorkQuantityShow=JSON.parse(item.reportWorkQuantityShow)
      })
      await xGrid.value.loadData(res.data.data)
@@ -145,19 +144,22 @@
}
const footSum =(list, field) => {
  if(xGrid.value.isFilter()){
    return
  }
  let count = 0
  list.forEach(item => {
    if(field.indexOf('.')>-1){
      let  array = field.split('.')
      count += Number(item[array[0]][array[1]]) || 0
      //判断是否为筛选状态和非订单合并状态
      if(xGrid.value.isFilter() ){
        count += Number(item[array[0]+'Show'][array[1]]) || 0
      }else{
        count += Number(item[array[0]][array[1]]) || 0
      }
    }else {
      count += Number(item[field])  || 0
    }
  })
  return count.toFixed(2)
  return count.toFixed(2).replace(/\.?0+$/, '');
}
const quantitySum = ( row,column )=>{
@@ -200,6 +202,10 @@
      <template #quantitySum="{ row,column }">
        <span>{{ quantitySum(row,column) }} </span>
      </template>
      <template #show="{ row,column }">
        <span>{{ show(row,column) }} </span>
      </template>
    </vxe-grid>
  </div>
north-glass-erp/northglass-erp/src/lang/ar.js
@@ -311,7 +311,8 @@
        glassQuantity:'小片数量',
        merge:'完整模式',
        layer:'单片模式',
        notFinish:'待完成'
        notFinish:'待完成',
        processCardCollect:'流程卡汇总',
    },
    searchOrder:{
@@ -662,6 +663,7 @@
        pleaseNumber12:'本工序报工数:',
        pleaseNumber13:'下工序报工数:',
        pleaseNumber14:'本工序修改数不能小于下工序报工数',
        pleaseNumber15:'已入库数量不能大于已完工数量',
    },
    productStock:{
        page:{
north-glass-erp/northglass-erp/src/lang/en.js
@@ -312,7 +312,8 @@
        glassQuantity:'小片数量',
        merge:'完整模式',
        layer:'单片模式',
        notFinish:'待完成'
        notFinish:'待完成',
        processCardCollect:'流程卡汇总',
    },
    searchOrder:{
@@ -664,7 +665,7 @@
        pleaseNumber12:'本工序报工数:',
        pleaseNumber13:'下工序报工数:',
        pleaseNumber14:'本工序修改数不能小于下工序报工数',
        pleaseNumber15:'已入库数量不能大于已完工数量',
    },
    productStock:{
        page:{
north-glass-erp/northglass-erp/src/lang/kr.js
@@ -321,7 +321,8 @@
        glassQuantity:'小片数量',
        merge:'完整模式',
        layer:'单片模式',
        notFinish:'待完成'
        notFinish:'待完成',
        processCardCollect:'流程卡汇总',
    },
    searchOrder:{
@@ -671,6 +672,7 @@
        pleaseNumber12:'本工序报工数:',
        pleaseNumber13:'下工序报工数:',
        pleaseNumber14:'本工序修改数不能小于下工序报工数',
        pleaseNumber15:'已入库数量不能大于已完工数量',
    },
    productStock:{
        page:{
north-glass-erp/northglass-erp/src/lang/ru.js
@@ -311,8 +311,8 @@
        glassQuantity:'小片数量',
        merge:'完整模式',
        layer:'单片模式',
        notFinish:'待完成'
        notFinish:'待完成',
        processCardCollect:'流程卡汇总',
    },
    searchOrder:{
        createOrder:'Выписать заказ',
@@ -660,6 +660,7 @@
        pleaseNumber12:'本工序报工数:',
        pleaseNumber13:'下工序报工数:',
        pleaseNumber14:'本工序修改数不能小于下工序报工数',
        pleaseNumber15:'已入库数量不能大于已完工数量',
    },
    productStock:{
        page:{
north-glass-erp/northglass-erp/src/lang/zh.js
@@ -321,7 +321,8 @@
        glassQuantity:'小片数量',
        merge:'完整模式',
        layer:'单片模式',
        notFinish:'待完成'
        notFinish:'待完成',
        processCardCollect:'流程卡汇总',
    },
    searchOrder:{
@@ -675,6 +676,7 @@
        pleaseNumber12:'本工序报工数:',
        pleaseNumber13:'下工序报工数:',
        pleaseNumber14:'本工序修改数不能小于下工序报工数',
        pleaseNumber15:'已入库数量不能大于已完工数量',
    },
    productStock:{
        page:{
@@ -827,7 +829,7 @@
        produce:'生产',
        traveler:'流程卡',
        warehousing:'入库',
        unpaidQuantity:"未发数量 ",
        unpaidQuantity:"订单未发数量 ",
        availableStock:'可用库存',
        deliveryQuantity:'发货数量',
        pleaseEnterTheAmountOfFunds:'请输入项目名称',
north-glass-erp/northglass-erp/src/views/mm/productStock/CreateProductStock.vue
@@ -284,7 +284,6 @@
              container: container.value,
              flowCard: selectRecords
            })
            request.post("/finishedGoodsInventory/addSelectWarehousing",flowData.value).then((res) => {
              if(res.code==200 && res.data==="true"){
                ElMessage.success(t('productStock.receivedSuccessfully'))
north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue
@@ -8,11 +8,14 @@
import { useI18n } from 'vue-i18n'
import footSum from "@/hook/footSum";
import {addListener} from "@/hook/mouseMove";
import  useUserInfoStore from '@/stores/userInfo'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
let router=useRouter()
let produceList = ref([])
let dialogTableVisible = ref(false)
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
@@ -122,7 +125,6 @@
    filterData.value[column.property] = value
  }
  request.post(`/finishedGoodsInventory/getSelect/1/${total.pageSize}`,filterData.value).then((res) => {
    if(res.code==200){
      total.dataTotal = res.data.total.total*1
      total.pageTotal= res.data.total.pageTotal
@@ -139,7 +141,6 @@
const selectOrderList = ()=>{
  request.post(`/finishedGoodsInventory/getSelect/${pageNum.value}/${total.pageSize}`,filterData.value).then((res) => {
    if(res.code==200){
      if (res.data.total!=null){
        total.dataTotal = res.data.total.total*1
@@ -233,6 +234,7 @@
      { 'code' :'issue','name':t('productStock.orderTransfer'),status: 'primary'},
      { 'code' :'out','name':t('productStock.finishedProductPickup'),status: 'primary'},
      /*{ 'code' :'rework','name':t('productStock.finishedProductRework'),status: 'primary'},*/
      { 'code' :'changeRack','name':'装箱调架',status: 'primary'},
    ],
    /*import: false,
@@ -261,7 +263,7 @@
})
let currentRecord = ref(null)
const  xGrid = ref();
const gridEvents = {
  toolbarButtonClick({ code }) {
@@ -270,23 +272,49 @@
      switch (code){
        case 'issue':{
          /*VXETable.modal.confirm('点击了库存调拨');*/
          router.push({path: '/main/productStock/OrderAllocation'});
          return;
          router.push({path: '/main/productStock/OrderAllocation'})
          break
        }
        case 'out':{
          router.push({path: '/main/productStock/FinishedGoodsIssue'});
          return;
          break;
          router.push({path: '/main/productStock/FinishedGoodsIssue'})
          break
        }
        case 'rework':{
          router.push({path: '/main/productStock/FinishedProductRework'});
          return;
          break;
          router.push({path: '/main/productStock/FinishedProductRework'})
          break
        }
        case 'changeRack':{
          currentRecord.value = null
          if(xGrid.value.getCurrentRecord()===null){
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
          currentRecord.value = JSON.parse(JSON.stringify(xGrid.value.getCurrentRecord()))
          dialogTableVisible.value = true
          break
        }
      }
    }
  }
}
const changeRack =async () => {
  const max = xGrid.value.getCurrentRecord().quantityAvailable*1 || 0
  if(currentRecord.value.quantityAvailable<=0 || parseInt(currentRecord.value.quantityAvailable)>max){
    ElMessage.warning(`0<value<=${xGrid.value.getCurrentRecord().quantityAvailable}`)
    return
  }
  if(currentRecord.value.boxNo.length>255 || currentRecord.value.remark.length>255){
    ElMessage.warning('箱号或备注'+t('basicData.msg.max255'))
    return
  }
  await request.post(`/finishedGoodsInventory/changeRack/${userStore.user.userName}`,currentRecord.value).then((res) => {
    if(res.code==200 ){
      ElMessage.success('装箱调架成功')
      router.push({path: '/main/productStock/productStockList', query:{random:Math.random()}})
    }else{
      ElMessage.warning(res.msg)
    }
  })
}
@@ -345,6 +373,40 @@
      </template>
    </vxe-grid>
    <el-dialog v-model="dialogTableVisible"  style="width: 400px;height:250px;margin-top: 25vh">
      <el-row>
        <el-col :span="8">
          <el-text>箱号:</el-text>
        </el-col>
        <el-col :span="16">
          <el-input v-model="currentRecord.boxNo"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="8">
          <el-text>数量:</el-text>
        </el-col>
        <el-col :span="16">
          <el-input v-model="currentRecord.quantityAvailable" type="number"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="8">
          <el-text>备注:</el-text>
        </el-col>
        <el-col :span="16">
          <el-input v-model="currentRecord.remark"/>
        </el-col>
      </el-row>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="changeRack">
            调架
          </el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>
@@ -360,4 +422,7 @@
  -ms-user-select: none;
  user-select: none;
}
.el-row {
  margin-bottom: 10px;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecord.vue
@@ -293,6 +293,8 @@
              }else if(res.data==="false1"){
                ElMessage.warning("发货单已创建")
              }else if(res.data==="false2"){
                ElMessage.warning("物料可能存在装箱调架,无法退回")
              }else{
                ElMessage.warning(t('productStock.cancellationFailed'))
              }
north-glass-erp/northglass-erp/src/views/mm/productStock/StorageRecordPint.vue
@@ -25,18 +25,7 @@
const dialogTableVisible = ref(false)
const dialogTableVisible1 = ref(false)
let produceList = ref([])
const getTableRow = (row,type) =>{
  switch (type) {
    case 'add' :{
      alert('我接收到子组件传送的编辑信息')
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
//打印
let printRow = ref({
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -531,7 +531,14 @@
          downGrind: item.downGrind,
          leftGrind: item.leftGrind,
          rightGrind:item.rightGrind,
          layoutId:item.layoutId,
          heatLayoutId:item.heatLayoutId,
          process:item.process,
          orderNo:item.orderNo,
          customerName:item.customerName,
          processingNote:item.processingNote,
          projectName:item.projectName,
          productName:item.productName,
          buildingNumber:item.buildingNumber,
          rackNo: rackNoValue
        };
      });
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
@@ -431,8 +431,15 @@
          }else  if(row.quantity_card<row.completedQuantity){
            return new Error(t('reportingWorks.pleaseNumber10'))
          }
          const nextProcess = titleUploadData.value.nextProcess//下工序
          const completedSum = Number(row.thisQuantitySum) //总完工数量
          const nextQuantitySum = Number(row.nextQuantitySum) //总下工序完工数量
          let nextQuantitySum = ''
          if (nextProcess!=''){
             nextQuantitySum = Number(row.nextQuantitySum) //总下工序完工数量
          }else {
             nextQuantitySum = Number(row.received_quantity) //总下工序完工数量
          }
          const totalQuantity = Number(row.quantity) //可完工数量
          const val = Number(cellValue) //输入值
@@ -450,21 +457,37 @@
            `)
          }
          if(titleUploadData.value.reportingWorkId!=null){
            if(row.completedQuantityComputed>=row.minQuantity ){
              if((val<(row.completedQuantityComputed-row.minQuantity || val>=row.completedQuantityComputed))){
                return new Error(`${row.completedQuantityComputed-row.minQuantity}
            if (nextProcess!=''){//非最后一道工序
              if(row.completedQuantityComputed>=row.minQuantity ){
                if((val<(row.completedQuantityComputed-row.minQuantity || val>=row.completedQuantityComputed))){
                  return new Error(`${row.completedQuantityComputed-row.minQuantity}
                                  <=val<=
                                  ${row.completedQuantityComputed}`)
              }
            }else{
              if((val>row.completedQuantityComputed)){
                return new Error(`val
                }
              }else{
                if((val>row.completedQuantityComputed)){
                  return new Error(`val
                                  <=
                                  ${row.completedQuantityComputed}`)
                }
              }
            }else {//最后一道工序
              if (val<row.completedQuantityComputed){
                         //库存数量、已入库数量
                if (val>(row.inventory_quantity-row.received_quantity)){
                  return new Error(`val
                                  <=
                                  ${row.inventory_quantity-row.received_quantity}`)
                }else {
                  if (val < (row.inventory_quantity-row.received_quantity)){
                        //完工总数、本次完工数、已入库数量
                    if (completedSum-row.completedQuantityComputed <row.received_quantity){
                      return new Error(`${t('reportingWorks.pleaseNumber15')}`)
                    }
                  }
                }
              }
            }
          }
        }
@@ -1523,7 +1546,8 @@
      orderId: titleUploadData.value.orderId
    },
    processId:processIdStr,
    orderNumber:item.order_number
    orderNumber:item.order_number,
    inventoryQuantity:item.completedQuantity
  }));
  let flowData = ref({
    decValue:company.decValue,
north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
@@ -119,38 +119,28 @@
  columns:[
    {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",},
    {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left",},
    {field:'createOrder',title: t('searchOrder.createOrder'), width: 40, slots: { default: 'state' }},
    {field:'processReview',title: t('order.technology'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field:'orderReview',title: t('basicData.review'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field:'productionOrder',title: t('searchOrder.production'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field:'processingCard',title: t('searchOrder.process'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field:'warehousing',title: t('searchOrder.storage'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field:'delivery',title: t('searchOrder.delivery'), width: 40,filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
    {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'goodsQuantity',width:120,  title: t('searchOrder.inventoryNum'), sortable: true},
   // {field: 'goodsQuantity',width:120,  title: t('searchOrder.inventoryNum'), sortable: true},
    {field: 'area',width:120,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'bomPrice',width:120,  title: 'BOM成本',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'money',width:120,  title: t('order.money'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'createTime',width:120,filters:[{ data: '' }],slots: { filter: 'num1_filter' },   title: t('basicData.reportData'), sortable: true},
    {field: 'updateTime',width:120,   title: t('productStock.approvedDate'), sortable: true},
    {field: 'packType',width:120,  title: t('order.packType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderType',width:120,  title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'salesman',width:120,  title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'creator',width:120,  title: t('product.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'verifier',width:120,  title: t('basicData.review'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    //{field: 'verifier',width:120,  title: t('basicData.review'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'perimeter',width:120,  title: t('searchOrder.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'deliveryDate',width:120,  title: t('order.deliveryDate'), sortable: true},
    {field: 'customerBatch',width:120,  title: t('order.customerBatch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    //{field: '14',width:120,  title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'deliveryAddress',width:120,  title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    //{field: 'deliveryAddress',width:120,  title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'processingNote',width:120,  title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
  ],
@@ -180,10 +170,10 @@
        if (columnIndex === 0) {
          return t('basicData.total')
        }
        const List = ["quantity",'goodsQuantity','area','perimeter','money']
        const List = ["quantity",'goodsQuantity','area','perimeter','money','bomPrice']
        if (List.includes(column.field)) {
          //return footSum(data, column.field)
          return total.value[column.field]
          return footSum(data, column.field)
          //return total.value[column.field]
        }
        return ''
      })
@@ -383,6 +373,9 @@
      /*total.dataTotal = res.data.total.dataTotal*1
      total.pageTotal= res.data.total.pageTotal*/
      orderInfo.selectDate = res.data.selectDate
      res.data.data.forEach((item)=>{
        item.bomPrice=(item.money/1.3).toFixed(2)
      })
      orderList.value = deepClone(res.data.data)
      xGrid.value.loadData(orderList.value)
    }else{
@@ -598,7 +591,7 @@
                     link
                     type="primary"
                     size="small">
            生成BOM
            BOM查询
          </el-button>
        </template>
@@ -693,6 +686,7 @@
          <el-col :span="8">其他:</el-col>
          <el-col :span="8">5</el-col>
        </el-row>
        <template #footer>合计xxx元</template>
      </el-card>
@@ -725,7 +719,7 @@
          <el-col :span="8">5</el-col>
        </el-row>
<!--          <template #footer>合计xx元</template>-->
          <template #footer>合计xxx元</template>
      </el-card>
      <el-card style="max-width: 480px;margin-left: 45px;margin-top: 20px">
@@ -753,8 +747,16 @@
          <el-col :span="8">853.11㎡</el-col>
        </el-row>
        <!--          <template #footer>合计xx元</template>-->
                  <template #footer>合计xxx元</template>
      </el-card>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary">转采购单</el-button>
          <el-button type="primary">
            领料
          </el-button>
        </div>
      </template>
    </el-dialog>
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -320,13 +320,14 @@
    {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"},
    {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderNumber',width:120,  title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.boxNo',width:120,  title: t('箱号'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:120,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:120,  title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.quantity',width:120,  title: t('delivery.deliveryQuantity'),editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.quantity',width:120,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.quantity',width:160,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    //{field: 'buildingNumber',width:120,  title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productId',width:120,   title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
@@ -21,6 +21,7 @@
import PrintSheet3 from "@/components/sd/order/PrintSheet3.vue"
import PrintSheet4 from "@/components/sd/order/PrintSheet4.vue"
import PrintSheet5 from "@/components/sd/order/PrintSheet5.vue"
import OrderProcessCollect from "@/components/sd/order/OrderProcessCollect.vue";
  const { t } = useI18n()
  const orderInfo = useOrderInfoStore()
  const userStore = useUserInfoStore()
@@ -753,6 +754,13 @@
              :row="rowClickIndex===null?{}:rowClickIndex"
          />
        </el-tab-pane>
        <el-tab-pane :label="$t('order.processCardCollect')" name="4">
          <order-process-collect
              v-if="tabsValue==='4'"
              :orderId="rowClickIndex===null?null:rowClickIndex.orderId"
              :row="rowClickIndex===null?{}:rowClickIndex"
          />
        </el-tab-pane>
      </el-tabs>
    </div>
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
@@ -209,4 +209,12 @@
    public Result getSelectPrints( @RequestBody Map<String, Object> object){
        return Result.seccess(finishedGoodsInventoryService.getSelectPrintSvs(object));
    }
    @ApiOperation("成品装箱调架")
    @SaCheckPermission("createProductStock.add")
    @PostMapping("/changeRack/{user}")
    public Result changeRack( @RequestBody FinishedGoodsInventory  finishedGoodsInventory,@PathVariable String user){
        return Result.seccess(finishedGoodsInventoryService.changeRack(finishedGoodsInventory,user));
    }
}
north-glass-erp/src/main/java/com/example/erp/entity/mm/FinishedGoodsInventory.java
@@ -1,6 +1,7 @@
package com.example.erp.entity.mm;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.example.erp.entity.sd.*;
import lombok.Data;
@@ -27,8 +28,11 @@
    private LocalDate endTime;
    private String processId;
    private String boxNo;
    @TableField(select = false,exist = false)
    private Order order;
    @TableField(select = false,exist = false)
    private OrderDetail orderDetail;
    @TableField(select = false,exist = false)
    private Double weight;
}
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedGoodsInventoryMapper.java
@@ -1,20 +1,20 @@
package com.example.erp.mapper.mm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.erp.dto.otherSystem.GlassDetailList;
import com.example.erp.entity.mm.FinishedGoodsInventory;
import com.example.erp.entity.mm.FinishedOperateLog;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.sd.*;
import com.example.erp.entity.userInfo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.repository.CrudRepository;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
@Mapper
public interface FinishedGoodsInventoryMapper extends CrudRepository<FinishedGoodsInventory,Long> {
public interface FinishedGoodsInventoryMapper  extends BaseMapper<FinishedGoodsInventory>  {
@@ -34,7 +34,7 @@
    Map<String,Integer> getSelectWarehousingPageTotal(Integer offset, Integer pageSize,FlowCard flowCard);
    Integer findOrderNumberdcount(@Param("orderId") String orderId,
                                  @Param("orderNumber") Integer orderNumber);
                                  @Param("orderNumber") Integer orderNumber, String boxNo);
    FinishedGoodsInventory findOrderNumberd(@Param("orderId") String orderId,
                                  @Param("orderNumber") Integer orderNumber);
@@ -88,7 +88,7 @@
    Boolean updateDeliveryDeliveryState(String deliveryId,Integer state);
    Boolean updateDeliveryDetailState(@Param("orderId") String orderId,
                                      @Param("orderNumber") Integer orderNumber,@Param("deliveryId") String deliveryId,Integer state);
                                      @Param("orderNumber") Integer orderNumber, @Param("deliveryId") String deliveryId, Integer state, String remarks);
    Boolean insertFinishedGoodsInventory(@Param("flowCard") FlowCard flowCard,
                                         @Param("storageRegion") String storageRegion,
@@ -117,18 +117,22 @@
                                               @Param("quantity") Integer quantity);
    Boolean updateInventoryquantityOut(@Param("orderId") String orderId,
                                               @Param("orderNumber") Integer orderNumber,
                                               @Param("quantity") Integer quantity);
                                       @Param("orderNumber") Integer orderNumber,
                                       @Param("quantity") Integer quantity,
                                       @Param("boxNo") String boxNo);
    Boolean updateInventoryquantityInt(@Param("orderId") String orderId,
                                               @Param("orderNumber") Integer orderNumber,
                                               @Param("quantity") Integer quantity);
                                       @Param("orderNumber") Integer orderNumber,
                                       @Param("quantity") Integer quantity);
    Boolean updateInventoryquantityIntBybox(@Param("orderId") String orderId,
                                       @Param("orderNumber") Integer orderNumber,
                                       @Param("quantity") Integer quantity, String boxNo);
    Boolean updateInventoryInventoryOut(@Param("orderId") String orderId,
                                               @Param("orderNumber") Integer orderNumber,
                                               @Param("quantity") Integer quantity);
                                        @Param("orderNumber") Integer orderNumber,
                                        @Param("quantity") Integer quantity, String boxNo);
    Boolean updateInventoryInventoryInt(@Param("orderId") String orderId,
                                               @Param("orderNumber") Integer orderNumber,
                                               @Param("quantity") Integer quantity);
                                        @Param("orderNumber") Integer orderNumber,
                                        @Param("quantity") Integer quantity, String remarks);
    List<OrderDetail> getSelectOrderDetail(String orderId);
@@ -139,7 +143,7 @@
    FlowCard findFlowCard(FlowCard flowCard);
    DeliveryDetail findDeliverydetail(@Param("orderId") String orderId,
                                      @Param("orderNumber") Integer orderNumber,@Param("deliveryId") String deliveryId);
                                      @Param("orderNumber") Integer orderNumber, @Param("deliveryId") String deliveryId, String boxNo);
    Integer findOrderNumberdContainercount(String orderId, Integer orderNumber, String container);
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
@@ -1,7 +1,7 @@
package com.example.erp.mapper.mm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.erp.dto.mm.FinishedOperateLogDTO;
import com.example.erp.entity.mm.FinishedGoodsInventory;
import com.example.erp.entity.mm.FinishedOperateLog;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.sd.OrderDetail;
@@ -14,14 +14,14 @@
import java.util.Map;
@Mapper
public interface FinishedOperateLogMapper extends CrudRepository<FinishedOperateLog,Long> {
public interface FinishedOperateLogMapper extends BaseMapper<FinishedOperateLog> {
    FinishedOperateLog getselectFinishedOperateLog();
    Boolean insertIntFinishedOperateLog(@Param("flowCard") FlowCard flowCard ,@Param("userName") String userName,
                                        @Param("oddNumber") String oddNumber,@Param("container") String container,
                                        @Param("deliveryDetailMoney") Double deliveryDetailMoney,@Param("deliveryDetailArea") Double deliveryDetailArea);
    Boolean insertOutFinishedOperateLog(@Param("orderDetail") OrderDetail orderDetail,@Param("userName") String userName,@Param("oddNumber") String oddNumber);
    Boolean insertOutFinishedOperateLog(@Param("orderDetail") OrderDetail orderDetail, @Param("userName") String userName, @Param("oddNumber") String oddNumber, String boxNo);
    Boolean insertFinishedOperateLogAllocate(@Param("orderDetail") OrderDetail orderDetail,@Param("userName") String userName,@Param("oddNumber") String oddNumber);
north-glass-erp/src/main/java/com/example/erp/mapper/pp/DamageDetailsMapper.java
@@ -1,10 +1,15 @@
package com.example.erp.mapper.pp;
import com.baomidou.mybatisplus.core.assist.ISqlRunner;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.erp.entity.pp.DamageDetails;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface DamageDetailsMapper extends BaseMapper<DamageDetails> {
    Integer getBehindDamageSum(String processId, String orderNumber, String technologyNumber, String behindProcess);
    Integer getBehindDamageSum(String processId, String orderNumber, String technologyNumber, String behindProcess,Integer needOrderNumber);
    List<DamageDetails> getNotReview(String processId, String orderNumber,String technologyNumber);
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java
@@ -21,6 +21,7 @@
    List<Map<String,String>> filterOrderProcess(String orderId);
    List<Map<String,Object>> getGlassLRow(String orderId);
    List<Map<String,Object>> getProcessGlassLRow(String orderId);
    List<Map<String, String>> filterLastProcess(String orderId, String orderNumber, String technologyNumber,String id);
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
@@ -3,7 +3,9 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.example.erp.dto.mm.FinishedOperateLogDTO;
import com.example.erp.entity.mm.FinishedGoodsInventory;
import com.example.erp.entity.mm.FinishedOperateLog;
@@ -28,12 +30,9 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.SQLException;
import java.sql.Wrapper;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@Service
@DS("mm")
@@ -424,7 +423,7 @@
                    //添加领出记录
                    finishedOperateLogMapper.insertFinishedOperateLogTakeOut(orderDetail,userName,oddNumber,operateType,remarks);
                    //修改库存数量
                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()), orderDetail.getDeliveryDetail().getBoxNo());
                    //修改订单明细表数量
                    finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
                    if (Objects.equals(oldordersum, oldordernumbersum)){
@@ -507,7 +506,7 @@
                    //添加领出记录
                    finishedOperateLogMapper.insertFinishedOperateLogRework(orderDetail,userName,oddNumber,operateType,remarks);
                    //修改库存数量
                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
                    finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()), orderDetail.getDeliveryDetail().getBoxNo());
                    //修改订单明细表数量
                    finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity()));
                    if (Objects.equals(oldordersum, oldordernumbersum)){
@@ -557,13 +556,13 @@
                        //审核修改领出记录
                        finishedOperateLogMapper.updateToExamine(finishedOperateLog,userName,"已审核");
                        //审核修改库存数量
                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()));
                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()),finishedOperateLog.getRemarks());
                        log.setFunction("updateFinishedGoodsInventoryToExamine审核");
                    } else if (Objects.equals(type, "反审")) {
                        //审核修改领出记录
                        finishedOperateLogMapper.updateToExamine(finishedOperateLog,userName,"未审核");
                        //审核修改库存数量
                        finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()));
                        finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()), finishedOperateLog.getRemarks());
                        log.setFunction("updateFinishedGoodsInventoryToExamine反审");
                    }
@@ -800,6 +799,8 @@
            alias="LC";
        }else if(Objects.equals(type, "返工")){
            alias="FG";
        }else if(Objects.equals(type, "调架")){
            alias="TJ";
        }
        //查询当天的最大数量
        Integer maximum=finishedOperateLogMapper.getmaximum(type);
@@ -861,7 +862,10 @@
                }
                Map<String, Object> itemmap = new HashMap<>();
                itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimts(finishedOperateLog.getOrder().getCustomerName(),finishedOperateLog.getOrder().getProject(),finishedOperateLog.getRemarks()));
                itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimts(
                        finishedOperateLog.getOrder().getCustomerName(),
                        finishedOperateLog.getOrder().getProject(),
                        finishedOperateLog.getRemarks()));
                List<Map<String, Object>> detailList = finishedOperateLogMapper.getDetailList2(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks());
@@ -904,21 +908,33 @@
            String oddNumber= orderNumberSetting("出库");
            OrderDetail orderDetailNew= finishedGoodsInventoryMapper.findOrderDetailNumberd(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber());
            //添加出入库记录
            finishedOperateLogMapper.insertOutFinishedOperateLog(orderDetail,userName,oddNumber);
            Integer finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber());
            finishedOperateLogMapper.insertOutFinishedOperateLog(orderDetail,userName,oddNumber,orderDetail.getDeliveryDetail().getBoxNo());
            //判断发货单的库存是否存在
            Integer finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getBoxNo());
            //获取订单总数量
            Integer ordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getDeliveryDetail().getOrderId());
            //获取库存总数量
            Integer orderNumberdsum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getDeliveryDetail().getOrderId());
            //获取发货总数量
            Integer orderNumberdDeliverysum = finishedGoodsInventoryMapper.findOrderDeliveryQuantitySum(orderDetail.getDeliveryDetail().getOrderId());
            //获取此发货单 发货总数量
            Integer deliverysum = finishedGoodsInventoryMapper.findDeliveryQuantity(orderDetail.getDeliveryDetail().getDeliveryId());
            //获取已经出库的数量
            Integer deliverydetailsum = finishedGoodsInventoryMapper.findDeliverydetailsum(orderDetail.getDeliveryDetail().getDeliveryId(),0);
            if(deliverydetailsum==null){
                deliverydetailsum=0;
            }
            DeliveryDetail deliveryDetail=finishedGoodsInventoryMapper.findDeliverydetail(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getDeliveryId());
            DeliveryDetail deliveryDetail=finishedGoodsInventoryMapper.
                    findDeliverydetail(orderDetail.getDeliveryDetail().getOrderId(),
                            orderDetail.getDeliveryDetail().getOrderNumber(),
                            orderDetail.getDeliveryDetail().getDeliveryId(),
                            orderDetail.getDeliveryDetail().getBoxNo()
                    );
                    /*System.out.println("订单总数:" + ordersum + "订单库存数:" + orderNumberdsum + "准备出库数量" +
                            orderDetail.getWarehouseNum()+ "发货数量" + orderDetail.getDeliveryDetail().getQuantity()+ "发货总数" +
                            deliverysum+ "已发数量" + deliverydetailsum);*/
@@ -928,9 +944,9 @@
                if(deliveryDetail==null){
                    if(orderDetailNew.getWarehouseNum()>=orderDetail.getDeliveryDetail().getQuantity()){
                        //修改库存表库存数量
                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getQuantity());
                        finishedGoodsInventoryMapper.updateInventoryInventoryOut(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getQuantity(),orderDetail.getDeliveryDetail().getBoxNo());
                        //修改发货明细表状态
                        finishedGoodsInventoryMapper.updateDeliveryDetailState(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getDeliveryId(),0);
                        finishedGoodsInventoryMapper.updateDeliveryDetailState(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getDeliveryId(),0, orderDetail.getDeliveryDetail().getBoxNo());
                        //修改发货表状态
                        finishedGoodsInventoryMapper.updateDeliveryDeliveryState(orderDetail.getDeliveryDetail().getDeliveryId(),1);
                        //修改订单明细表发货数量
@@ -974,7 +990,19 @@
            if(Objects.equals(finishedOperateLog.getOperateType(), "入库")){
                Delivery delivery = finishedGoodsInventoryMapper.findOrderDelivery(finishedOperateLog.getOrderId());
                if(delivery==null){
                FinishedGoodsInventory existFinishedGoodsInventory = finishedGoodsInventoryMapper.
                        selectOne(new LambdaQueryWrapper<FinishedGoodsInventory>()
                                .eq(FinishedGoodsInventory::getOrderId, finishedOperateLog.getOrderId())
                                .eq(FinishedGoodsInventory::getOrderNumber, finishedOperateLog.getOperationNumber())
                                .eq(FinishedGoodsInventory::getBoxNo, finishedOperateLog.getRemarks())
                        );
                if(delivery!=null){
                    return "false1";
                }
                if(existFinishedGoodsInventory.getQuantityAvailable()<finishedOperateLog.getQuantity()){
                    return "false2";
                }
                    //修改记录表
                    finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"已作废");
                    //修改库存表入库数量
@@ -996,9 +1024,7 @@
                        finishedGoodsInventoryMapper.updateOrderWarehousingState(finishedOperateLog.getOrderId(),0);
                    }
                    log.setFunction("cancelFinishedGoodsInventoryStorage入库");
                }else{
                    return "false1";
                }
@@ -1006,9 +1032,19 @@
                //修改记录表
                finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"已作废");
                //修改库存表库存数量
                finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getQuantity());
                finishedGoodsInventoryMapper.updateInventoryInventoryInt(
                        finishedOperateLog.getOrderId(),
                        finishedOperateLog.getOperationNumber(),
                        finishedOperateLog.getQuantity(),
                        finishedOperateLog.getRemarks()
                );
                //修改发货明细表状态
                finishedGoodsInventoryMapper.updateDeliveryDetailState(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getOperationOrderNumber(),1);
                finishedGoodsInventoryMapper.updateDeliveryDetailState(
                        finishedOperateLog.getOrderId(),
                        finishedOperateLog.getOperationNumber(),
                        finishedOperateLog.getOperationOrderNumber(),
                        1,
                        finishedOperateLog.getRemarks());
                //修改发货表状态
                finishedGoodsInventoryMapper.updateDeliveryDeliveryState(finishedOperateLog.getOperationOrderNumber(),1);
                //修改订单明细表库内数量
@@ -1032,4 +1068,103 @@
        }
        return "true";
    }
    public Map<String,Object> changeRack(FinishedGoodsInventory finishedGoodsInventory, String user) {
        Long id = finishedGoodsInventory.getId();
        Map<String,Object> map = new HashMap<>();
        FinishedGoodsInventory oldFinishedGoodsInventory = finishedGoodsInventoryMapper.selectById(finishedGoodsInventory.getId());
        //查询此此序号箱号的库存是否存在
        FinishedGoodsInventory existFinishedGoodsInventory = finishedGoodsInventoryMapper
                .selectOne(new LambdaQueryWrapper<FinishedGoodsInventory>()
                        .eq(FinishedGoodsInventory::getOrderId, finishedGoodsInventory.getOrderId())
                        .eq(FinishedGoodsInventory::getOrderNumber, finishedGoodsInventory.getOrderNumber())
                        .eq(FinishedGoodsInventory::getBoxNo, finishedGoodsInventory.getBoxNo())
                        .last("limit 1")
                );
        String operationOrderNumber = orderNumberSetting("调架");
        FinishedOperateLog finishedOperateLog = new FinishedOperateLog();
        finishedOperateLog.setOperationOrderNumber(operationOrderNumber);
        finishedOperateLog.setOrderId(oldFinishedGoodsInventory.getOrderId());
        finishedOperateLog.setOperationNumber(oldFinishedGoodsInventory.getOrderNumber());
        finishedOperateLog.setProcessId(oldFinishedGoodsInventory.getProcessId());
        finishedOperateLog.setOperateType("调架");
        finishedOperateLog.setOperator(user);
        //当成品箱号不存在,则新增
        if(existFinishedGoodsInventory==null){
            //当转移数量大于实际库存箱号时,则不能转移
            if(oldFinishedGoodsInventory.getQuantityAvailable()<finishedGoodsInventory.getQuantityAvailable()){
                map.put("code",0);
                return map;
            }
            //原库存 数量面积减少
            oldFinishedGoodsInventory.setInventory(oldFinishedGoodsInventory.getInventory()-finishedGoodsInventory.getQuantityAvailable());
            oldFinishedGoodsInventory.setQuantityAvailable(oldFinishedGoodsInventory.getQuantityAvailable()-finishedGoodsInventory.getQuantityAvailable());
            oldFinishedGoodsInventory.setArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getActualSignalArea());
            //新库存数据增加
            finishedGoodsInventory.setId(null);
            finishedGoodsInventory.setInventory(finishedGoodsInventory.getQuantityAvailable());
            finishedGoodsInventory.setArea(finishedGoodsInventory.getQuantityAvailable()*finishedGoodsInventory.getActualSignalArea());
            finishedGoodsInventoryMapper.
                    update(oldFinishedGoodsInventory,
                            new LambdaUpdateWrapper<FinishedGoodsInventory>()
                                    .eq(FinishedGoodsInventory::getId,id)
                    ) ;
            finishedGoodsInventoryMapper.insert(finishedGoodsInventory);
            //往操作日志表添加数据
            finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable());
            finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+finishedGoodsInventory.getBoxNo());
            finishedOperateLogMapper.insert(finishedOperateLog);
            map.put("code",1);
            return map;//库存转移成功,新增箱号
        }else{
            //当id不变时,修改备注
            if(Objects.equals(id, existFinishedGoodsInventory.getId())){
                finishedGoodsInventoryMapper.
                        update(null,new LambdaUpdateWrapper<FinishedGoodsInventory>()
                                .eq(FinishedGoodsInventory::getId,id)
                                .set(FinishedGoodsInventory::getRemark,finishedGoodsInventory.getRemark()));
                map.put("code",2);
                return map;//库存备注修改成功
            }else{
                //原库存 数量面积减少
                oldFinishedGoodsInventory.setInventory(oldFinishedGoodsInventory.getInventory()-finishedGoodsInventory.getQuantityAvailable());
                oldFinishedGoodsInventory.setQuantityAvailable(oldFinishedGoodsInventory.getQuantityAvailable()-finishedGoodsInventory.getQuantityAvailable());
                oldFinishedGoodsInventory.setArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getActualSignalArea());
                existFinishedGoodsInventory.setInventory(existFinishedGoodsInventory.getInventory()+finishedGoodsInventory.getQuantityAvailable());
                existFinishedGoodsInventory.setQuantityAvailable(existFinishedGoodsInventory.getQuantityAvailable()+finishedGoodsInventory.getQuantityAvailable());
                existFinishedGoodsInventory.setArea(existFinishedGoodsInventory.getInventory()*existFinishedGoodsInventory.getActualSignalArea());
                finishedGoodsInventoryMapper.
                        update(oldFinishedGoodsInventory,
                                new LambdaUpdateWrapper<FinishedGoodsInventory>()
                                        .eq(FinishedGoodsInventory::getId,id)
                        ) ;
                finishedGoodsInventoryMapper.
                        update(existFinishedGoodsInventory,
                                new LambdaUpdateWrapper<FinishedGoodsInventory>()
                                        .eq(FinishedGoodsInventory::getId,existFinishedGoodsInventory.getId())
                        ) ;
                //往操作日志表添加数据
                finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable());
                finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+existFinishedGoodsInventory.getBoxNo());
                finishedOperateLogMapper.insert(finishedOperateLog);
                map.put("code",3);
                List<String> list = new ArrayList<>();
                list.add(oldFinishedGoodsInventory.getBoxNo());
                list.add(existFinishedGoodsInventory.getBoxNo());
                map.put("msg",list);
                return map;//库存转移成功,修改箱号
            }
        }
    }
}
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -193,14 +193,11 @@
                    });
           //判断后工序此流程卡号是否有次破
            List<DamageDetails> hasBreak = damageDetailsMapper
                    .selectList(new LambdaQueryWrapper<DamageDetails>()
                            .eq(DamageDetails::getProcessId, dataList.get(i).get("processId"))
                            .eq(DamageDetails::getOrderNumber, dataList.get(i).get("order_number"))
                            .eq(DamageDetails::getTechnologyNumber, dataList.get(i).get("technology_number"))
                            .eq(DamageDetails::getPatchStatus, 0)
                            .gt(DamageDetails::getBreakageQuantity,0)
                    .getNotReview(dataList.get(i).get("process_id"),
                            String.valueOf(dataList.get(i).get("order_number")),
                            String.valueOf(dataList.get(i).get("technology_number"))
                    );
            if(!hasBreak.isEmpty()){
                int finalI = i;
                data.forEach((thisProcess, index)->{
@@ -216,7 +213,7 @@
                                dataList.get(finalI).get("processId"),
                                String.valueOf(dataList.get(finalI).get("order_number")),
                                String.valueOf(dataList.get(finalI).get("technology_number")),
                                behindProcess
                                behindProcess,1
                        );
                        if(behindDamageSum>0){
                            data.put(thisProcess, String.valueOf(Integer.parseInt(data.get(thisProcess) )- behindDamageSum));
@@ -826,9 +823,138 @@
        List<Map<String, String>> dataList = reportMapper.processCardProgressCollectMp(orderId);
        //获取表头工序筛选数据
        List<Map<String, String>> uniqueList = orderProcessDetailMapper.filterOrderProcess(orderId);
        map.put("title", uniqueList);
        return  null;
        Map<String,Map<String,Object>> clos = new HashMap<>();
        for (int i=0;i<uniqueList.size();i++){
            //根据流程查询基础数据
            BasicData basicData =  basicDataMapper.selectOne(
                    new QueryWrapper<BasicData>()
                            .eq("basic_category","process")
                            .eq("basic_name",uniqueList.get(i).get("process"))
                            .last("limit 1")
            );
            Map<String,Object> getCol = new HashMap<>();
            //判断夹胶和夹胶后工序
            //Objects.equals(basicData.getNickname(), "stepA") || Objects.equals(basicData.getNickname(), "stepC")
            if(Objects.equals(basicData.getNickname(), "stepA") || Objects.equals(basicData.getNickname(), "stepC")){
                getCol.put("col", 11+i);
                getCol.put("step","stepA");
                clos.put(uniqueList.get(i).get("process"), getCol);
            }
            //判断中空和中空后工序
            //Objects.equals(basicData.getNickname(), "stepB") || Objects.equals(basicData.getNickname(), "stepD")
            if(Objects.equals(basicData.getNickname(), "stepB") || Objects.equals(basicData.getNickname(), "stepD")){
                columns.add(11+i);
                getCol.put("col", 11+i);
                getCol.put("step","stepB");
                clos.put(uniqueList.get(i).get("process"), getCol);
            }
        }
        List<Map<String, Object>> getRowCount = orderProcessDetailMapper.getGlassLRow(orderId);
        List<Map<String, Integer>> rowCount = new ArrayList<>();
        columns.forEach(col -> {
            getRowCount.forEach(row -> {
                Map<String, Integer> getRow = new HashMap<>();
                // { row: 0, col: 1, rowspan: 3, colspan: 0},
                getRow.put("row", ((Number) row.get("RowNum")).intValue());
                getRow.put("col", col);
                getRow.put("rowspan", ((Number) row.get("rowCount")).intValue());
                getRow.put("colspan", 0);
                rowCount.add(getRow);
            });
        });
        //循环结果
        for (int i=0;i<dataList.size();i++ ) {
            dataList.get(i).put("reportWorkQuantityShow",dataList.get(i).get("reportWorkQuantity"));
            Map<String, String> data = JSON.parseObject(dataList.get(i).get("reportWorkQuantity"),
                    new TypeReference<Map<String, String>>() {
                    });
            Map<String, String> dataShow = JSON.parseObject(dataList.get(i).get("reportWorkQuantityShow"),
                    new TypeReference<Map<String, String>>() {
                    });
            //判断后工序此流程卡号是否有次破
            List<DamageDetails> hasBreak = damageDetailsMapper
                    .getNotReview(dataList.get(i).get("process_id"),
                            null,
                            String.valueOf(dataList.get(i).get("technology_number"))
                    );
            if(!hasBreak.isEmpty()){
                int finalI = i;
                data.forEach((thisProcess, index)->{
                    String behindProcess = orderProcessDetailMapper.getBehindProcess(
                            dataList.get(finalI).get("process_id"),
                            String.valueOf(dataList.get(finalI).get("order_number")),
                            String.valueOf(dataList.get(finalI).get("technology_number")),
                            thisProcess,
                            orderId
                    );
                    if(behindProcess!=null &&!behindProcess.isEmpty()){
                        Integer behindDamageSum = damageDetailsMapper.getBehindDamageSum(
                                dataList.get(finalI).get("process_id"),
                                String.valueOf(dataList.get(finalI).get("order_number")),
                                String.valueOf(dataList.get(finalI).get("technology_number")),
                                behindProcess,
                                null
                        );
                        if(behindDamageSum>0){
                            data.put(thisProcess, String.valueOf(Integer.parseInt(data.get(thisProcess) )- behindDamageSum));
                            dataShow.put(thisProcess, String.valueOf(Integer.parseInt(dataShow.get(thisProcess) )- behindDamageSum));
                        }
                    }
                });
            }
            if(!clos.isEmpty()){
                Integer max = orderGlassDetailMapper
                        .getMaxTechnologyNumberByGroup(dataList.get(i).get("order_id"),
                                String.valueOf(dataList.get(i).get("order_number")),
                                String.valueOf(dataList.get(i).get("group"))
                        );
                Integer min = orderGlassDetailMapper
                        .getMinTechnologyNumberByGroup(dataList.get(i).get("order_id"),
                                String.valueOf(dataList.get(i).get("order_number")),
                                String.valueOf(dataList.get(i).get("group"))
                        );
                for (String key : clos.keySet()) {
                    if(data.get(key) != null){
                        //判断是夹胶工序
                        if( clos.get(key).get("step")=="stepA"){
                            if(min == Integer.parseInt(String.valueOf(dataList.get(i).get("technology_number")))  ){
                                Map<String, Integer> getRow = new HashMap<>();
                                getRow.put("row", i );
                                getRow.put("col", (Integer) clos.get(key).get("col"));
                                getRow.put("rowspan", max-min+1);
                                getRow.put("colspan", 0);
                                rowCount.add(getRow);
                            }else{
                                data.put(key,"0");
                            }
                        }else{//中空,中空后工序
                            //小片序号不是1 的时候赋值0
                            if(Integer.parseInt(String.valueOf(dataList.get(i).get("technology_number")))  !=1){
                                data.put(key,"0");
                            }
                        }
                    }
                }
            }
            dataList.get(i).put("reportWorkQuantity",JSON.toJSONString(data));
            dataList.get(i).put("reportWorkQuantityShow",JSON.toJSONString(dataShow));
        }
        map.put("mergeCells", rowCount);
        map.put("data",dataList);
        return  map;
    }
    public Map<String, Object> processCardProgressReportSv(String orderId, List<Integer> columns) {
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -636,18 +636,7 @@
                    log.setFunction("deleteWork报工删除");
                    log.setOperatorId(userId);
                    log.setOperator(userName);
                    if(reportingWork.getReviewedState()==0){
                        //查询当前报工编号完工次破数量的数据
                        List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
                        for (Map<String, Object> item : workDateList) {
                            //更新报工流程表数据
                            reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
                        }
                        //删除报工,将审核状态改为-1
                        reportingWorkMapper.deleteWork(reportingWorkId);
                        logService.saveLog(log);
                        return true;
                    }
                    //判断是否是入库工序
                    if (lastProcess.equals(thisProcess)) {//是入库工序
@@ -683,6 +672,19 @@
                        }
                    } else {//不是入库工序
                        if(reportingWork.getReviewedState()==0){
                            //查询当前报工编号完工次破数量的数据
                            List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
                            for (Map<String, Object> item : workDateList) {
                                //更新报工流程表数据
                                reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
                            }
                            //删除报工,将审核状态改为-1
                            reportingWorkMapper.deleteWork(reportingWorkId);
                            logService.saveLog(log);
                            return true;
                        }
                        if (count == 0) {
                            //查询当前报工编号完工次破数量的数据
                            List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
@@ -6,11 +6,9 @@
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.erp.dto.mm.FinishedOperateLogDTO;
import com.example.erp.dto.sd.DeliveryDetailDTO;
import com.example.erp.dto.sd.DeliveryDetailProductDTO;
import com.example.erp.entity.mm.FinishedOperateLog;
import com.example.erp.entity.pp.BasicDataProduce;
import com.example.erp.entity.sd.*;
import com.example.erp.entity.userInfo.Log;
import com.example.erp.entity.userInfo.SysError;
@@ -21,22 +19,13 @@
import com.example.erp.service.userInfo.LogService;
import com.example.erp.service.userInfo.SysErrorService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
@@ -221,7 +210,7 @@
                if (!deliveryDetaillist.isEmpty()) {
                    for (DeliveryDetail deliveryDetail : deliveryDetaillist) {
                        //还原库存数以及订单明细的发货数
                        finishedGoodsInventoryMapper.updateInventoryquantityInt(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
                        finishedGoodsInventoryMapper.updateInventoryquantityIntBybox(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity(),deliveryDetail.getBoxNo());
                        deliveryDetailMapper.updateIsNotOrderDetailDeliveryNum(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
                    }
                }
@@ -380,7 +369,7 @@
                            //修改订单明细
                            deliveryDetailMapper.updateOrderDetailDeliveryNum(orderDetail);
                            //修改库存表出库数量
                            finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getOrderId(), orderDetail.getOrderNumber(), orderDetail.getDeliveryDetail().getQuantity());
                            finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getOrderId(), orderDetail.getOrderNumber(), orderDetail.getDeliveryDetail().getQuantity(),orderDetail.getFinishedGoodsInventory().getBoxNo());
                        }else{
                            TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
                            return "false2";
@@ -494,7 +483,7 @@
            if (!deliveryDetaillist.isEmpty()) {
                for (DeliveryDetail deliveryDetail : deliveryDetaillist) {
                    //还原库存数以及订单明细的发货数
                    finishedGoodsInventoryMapper.updateInventoryquantityInt(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
                    finishedGoodsInventoryMapper.updateInventoryquantityIntBybox(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity(), deliveryDetail.getBoxNo());
                    deliveryDetailMapper.updateIsNotOrderDetailDeliveryNum(deliveryDetail.getOrderId(), deliveryDetail.getOrderNumber(), deliveryDetail.getQuantity());
                }
            }
north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml
@@ -7,6 +7,10 @@
    <!--映射成品库存-->
    <resultMap id="selectFinishedGoodsInventory" type="com.example.erp.entity.mm.FinishedGoodsInventory">
        <id column="fid" property="id"/>
        <result column="id" property="id"/>
        <result column="order_id" property="orderId"/>
        <result column="order_number" property="orderNumber"/>
        <result column="process_id" property="processId"/>
        <result column="inventory" property="inventory"/>
        <result column="area" property="area"/>
        <result column="actual_signal_area" property="actualSignalArea"/>
@@ -88,6 +92,7 @@
        <result column="order_id" property="deliveryDetail.orderId"/>
        <result column="create_time" property="deliveryDetail.createTime"/>
        <result column="dd_quantity" property="deliveryDetail.quantity"/>
        <result column="box_no" property="deliveryDetail.boxNo"/>
        <result column="project" property="order.project"/>
@@ -140,24 +145,30 @@
            update_time=now(),area=actual_signal_area*quantity_available
        where order_number=#{orderNumber}  and order_id=#{orderId}
    </update>
    <update id="updateInventoryquantityIntBybox">
        update mm.finished_goods_inventory
        set quantity_available=quantity_available+#{quantity},
            update_time=now(),area=actual_signal_area*quantity_available
        where order_number=#{orderNumber}  and order_id=#{orderId} and trim(box_no) = trim(#{boxNo})
    </update>
    <update id="updateInventoryquantityOut">
        update mm.finished_goods_inventory
        set quantity_available=quantity_available-#{quantity},
            update_time=now(),area=actual_signal_area*quantity_available
        where order_number=#{orderNumber}  and order_id=#{orderId}
        where order_id=#{orderId}  and order_number=#{orderNumber}  and trim(box_no) = trim(#{boxNo})
    </update>
    <update id="updateInventoryInventoryInt">
        update mm.finished_goods_inventory
        set inventory=inventory+#{quantity}
        where order_number=#{orderNumber}  and order_id=#{orderId}
        where order_number=#{orderNumber}  and order_id=#{orderId} and trim(box_no) = trim(#{remarks})
    </update>
    <update id="updateInventoryInventoryOut">
        update mm.finished_goods_inventory
        set inventory=inventory-#{quantity}
        where order_number=#{orderNumber}  and order_id=#{orderId}
        where order_number=#{orderNumber}  and order_id=#{orderId} and trim(box_no) = trim(#{boxNo})
    </update>
    <select id="getSelectAllocate"  resultMap="selectDeliveryFinishedGoodsInventory">
@@ -219,7 +230,7 @@
                and fgi.storage_region regexp #{orderDetail.finishedGoodsInventory.storageRegion}
            </if>
        </where>
        group by fgi.order_id, fgi.order_number
        group by fgi.order_id, fgi.order_number,fgi.box_no
        limit #{offset},#{pageSize};
    </select>
@@ -281,7 +292,7 @@
    <update id="updateDeliveryDetailState">
        update sd.delivery_detail
        set delivery_detail_state=#{state}
        where order_number=#{orderNumber}  and order_id=#{orderId} and delivery_id=#{deliveryId}
        where order_number=#{orderNumber}  and order_id=#{orderId} and delivery_id=#{deliveryId} and trim(box_no) = trim(#{remarks})
    </update>
    <update id="updateInventoryquantityavailable">
@@ -372,7 +383,8 @@
               od.building_number,
               d.creator,
               dd.delivery_detail_remakes,
               dd.create_time
               dd.create_time,
               dd.box_no
        from sd.delivery_detail dd
                 left join sd.delivery d on dd.delivery_id = d.delivery_id
                 left join sd.order_detail od on od.order_id = dd.order_id and dd.order_number = od.order_number
@@ -529,6 +541,7 @@
        set inventory=inventory-${finishedOperateLog.quantity},quantity_available=quantity_available-${finishedOperateLog.quantity},
        update_time=now(),area=actual_signal_area*quantity_available
        where order_number=#{finishedOperateLog.operationNumber}  and order_id=#{finishedOperateLog.orderId}
        and box_no=#{finishedOperateLog.remarks}
    </update>
    <insert id="insertFinishedGoodsInventory"  useGeneratedKeys="true"  >
@@ -559,7 +572,7 @@
    <select id="findOrderNumberdcount" >
        select count(*)
        from  mm.`finished_goods_inventory`
        where order_number = #{orderNumber} and order_id=#{orderId};
        where order_number = #{orderNumber} and order_id=#{orderId} and box_no=#{boxNo};
    </select>
@@ -764,7 +777,10 @@
    <select id="defaultfinishedGoods" resultMap="selectFinishedGoodsInventory">
        select od.order_number,
        select
        fgi.id,
        fgi.process_id,
        od.order_number,
        o.order_id,
        o.project,
        o.order_type,
@@ -1017,7 +1033,11 @@
    <select id="findDeliverydetail">
        select * from sd.delivery_detail
        where order_number=#{orderNumber}  and order_id=#{orderId} and delivery_id=#{deliveryId} and delivery_detail_state=0
        where order_number=#{orderNumber}
          and order_id=#{orderId}
          and delivery_id=#{deliveryId}
          and delivery_detail_state=0
        and trim(#{boxNo}) =box_no
    </select>
    <select id="getSelectDeliveryDetailDeliveryId"  resultMap="selectDelivery">
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
@@ -633,11 +633,12 @@
                                            operator,
                                            quantity,
                                            operate_time,
                                            status
                                            status,
                                            remarks
        )
        values (
                   #{orderDetail.deliveryDetail.deliveryId} ,#{orderDetail.deliveryDetail.orderId},#{orderDetail.deliveryDetail.orderNumber}
                   ,"出库",#{userName},#{orderDetail.deliveryDetail.quantity},now(),"未审核"
                   ,"出库",#{userName},#{orderDetail.deliveryDetail.quantity},now(),"未审核",#{boxNo}
               )
    </insert>
@@ -853,7 +854,9 @@
                and fol.remarks regexp #{finishedOperateLog.remarks}
            </if>
        </where>
        group by fol.remarks,od.order_id,fol.process_id) as zu
        group by fol.remarks,od.order_id
                 -- ,fol.process_id
            ) as zu
    </select>
north-glass-erp/src/main/resources/mapper/pp/DamageDetails.xml
@@ -9,7 +9,9 @@
    left join pp.reporting_work as b
    on a.reporting_work_id = b.reporting_work_id
    WHERE a.process_id = #{processId}
    <if test="needOrderNumber!=null">
    and a.order_number = #{orderNumber}
    </if>
    and a.technology_number =#{technologyNumber}
    and a.breakage_quantity>0
    and a.patch_status=0
@@ -24,5 +26,19 @@
                           WHERE REGEXP_SUBSTR(#{behindProcess}, '[^,]+', 1, n) IS NOT NULL)
</select>
    <select id="getNotReview">
    select a.*
    from damage_details as a
    left join reporting_work as b
    on a.reporting_work_id = b.reporting_work_id
    where a.process_id=#{processId}
     and b.reviewed_state>=0
  <if test="orderNumber!=null">
      and a.order_number = #{orderNumber}
  </if>
    and a.technology_number = #{technologyNumber}
     and     a.patch_status=0
    and a.breakage_quantity>0
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -196,13 +196,22 @@
             op.project_name,
             0 as patchState,
             c.rack AS rackNo,
             0 as layoutId
             0 as heatLayoutId,
             d.process,
             o.order_id AS orderNo,
             o.customer_name AS customerName,
             o.processing_note AS processingNote,
             o.project AS projectName,
             od.product_name AS productName,
             od.building_number AS buildingNumber
         FROM
             pp.flow_card c
                 LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
                 AND c.order_number = d.order_number
                 AND c.technology_number = d.technology_number
                 INNER JOIN pp.optimize_project AS op ON op.project_no = c.project_no
                 LEFT JOIN sd.ORDER o ON o.order_id = c.order_id
                 LEFT JOIN order_detail od ON c.order_id = od.order_id
         WHERE
             c.project_no IS NOT NULL
           and c.project_no = #{projectNo}
@@ -226,7 +235,14 @@
                op.project_name,
                1 as patch_state,
                a.id as rackNo,
                0 as layoutId
                0 as heatLayoutId,
                d.process,
                o.order_id AS orderNo,
                o.customer_name AS customerName,
                o.processing_note AS processingNote,
                o.project AS projectName,
                od.product_name AS productName,
                od.building_number AS buildingNumber
            FROM
                pp.patch_log c
                    LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
@@ -234,6 +250,8 @@
                    AND c.technology_number = d.technology_number
                    INNER JOIN pp.optimize_project AS op ON op.project_no = c.project_no
                    LEFT JOIN pp.flow_card fc ON c.process_id = fc.process_id and fc.technology_number=c.technology_number
                    LEFT JOIN sd.ORDER o ON o.order_id = c.order_id
                    LEFT JOIN order_detail od ON c.order_id = od.order_id
                    left join
                (select (@row_number := @row_number + 1) as id,process_id as process_id,technology_number as technology_number from (select process_id,technology_number from pp.flow_card tt where project_no =#{projectNo} group by process_id,technology_number) tt,(select @row_number := 0) as t) a
                on a.process_id=c.process_id and a.technology_number=c.technology_number
@@ -311,7 +329,7 @@
    <select id="computeAndOptimization">
        SELECT
            c.rack AS rackNo,
            h.layout_id as layoutId,
            h.layout_id as heatLayoutId,
            h.width AS width,
            h.height AS height,
            count( 1 ) AS quantity,
@@ -323,7 +341,14 @@
            c.order_number,
            h.order_sort AS orderSort,
            d.icon AS markIcon,
            h.patch_state  AS patchState
            h.patch_state  AS patchState,
            d.process,
            o.order_id AS orderNo,
            o.customer_name AS customerName,
            o.processing_note AS processingNote,
            o.project AS projectName,
            od.product_name AS productName,
            od.building_number AS buildingNumber
        from
            pp.`optimize_heat_detail` h
                LEFT JOIN pp.flow_card c ON h.process_id = c.process_id
@@ -332,6 +357,8 @@
                LEFT JOIN sd.order_glass_detail d ON c.order_id = d.order_id
                AND c.order_number = d.order_number
                AND c.technology_number = d.technology_number
                LEFT JOIN sd.order o on  o.order_id = c.order_id
                LEFT JOIN order_detail od on  c.order_id = od.order_id
        WHERE
            h.project_no = #{projectNo}
        GROUP BY
north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -2973,30 +2973,50 @@
    
    
    <select id="processCardProgressCollectMp">
       select * from (select b.product_name,
            c.detail as 'glassName',
       select * from (select
              a.order_id,
              a.order_number,
              c.glass_group as 'group',
              a.technology_number,
            b.product_name,
            c.detail as glass_child,
            d.order_type,
            concat(a.process_id,'/',a.technology_number)  as processID,
            a.process_id,
            a.quantity,
            a.received_quantity,
            round(sum(a.received_quantity*b.area),2) as received_area,
            if(a.technology_number=1,sum(a.quantity-ifnull(a.termination_quantity,0)),0) as quantity,
            sum(a.quantity)-ifnull(a.termination_quantity,0) as thisQuantity,/*用于判断是否改变颜色*/
            if(a.technology_number=1, round(sum((a.quantity-ifnull(a.termination_quantity,0)))*b.compute_area,2),0) as gross_area,
            if(a.technology_number=1, sum(a.received_quantity),0) as inventory,
            if(a.technology_number=1, round(sum(a.received_quantity*b.area),2),0) as inventoryArea,
            a.technology_number
            -- show
            sum(a.quantity-ifnull(a.termination_quantity,0)) as quantityShow ,
            round(sum((a.quantity-ifnull(a.termination_quantity,0)))*b.compute_area,2) as gross_areaShow,
            sum(a.received_quantity) as inventoryShow,
            round(sum(a.received_quantity*b.area),2) as inventoryAreaShow
            from pp.flow_card as a
            left join sd.order_detail as b
            on a.order_id = b.order_id and a.order_number = b.order_number
            left join sd.product_detail as c
            on c.prod_id = b.product_id and c.glass_sort = a.technology_number
            LEFT JOIN sd.`order` as d
            on a.order_id = d.order_id
            where a.order_id = #{orderId} group by processID
            ) as a
       left join (SELECT process_id,
                         technology_number,
                         sum(broken_num) as broken_num,
                         concat('{',GROUP_CONCAT(reporting_work_nums),'}') as reporting_work_num
                         concat('{',GROUP_CONCAT(reporting_work_nums),'}') as reportWorkQuantity,
                         concat('{',GROUP_CONCAT(reporting_work_counts),'}') as reportWorkQuantityCount
                  from (select
                            opd.process_id,
                            opd.technology_number,
                            concat("\"", process, "\":\"", SUM(reporting_work_num), "\"") as  reporting_work_nums,
                            concat("\"", process, "\":\"", SUM(reporting_work_num_count), "\"") as  reporting_work_counts,
                            sum(broken_num) as broken_num
                        from sd.order_process_detail as opd
                        where opd.order_id = #{orderId}
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -452,13 +452,13 @@
                    )  as minQuantity -- 修改最小数
            </if>
            <if test="nextProcess == null or nextProcess == ''">  -- 最后一道工序
#               c.received_quantity, -- 已入库数量
#               c.inventory_quantity, --   库存数量
               c.received_quantity, -- 已入库数量
               c.inventory_quantity, --   库存数量
              if(ifnull(inventory_quantity,0)
                 -ifnull(c.received_quantity,0)
                 &gt;= a.completed_quantity,0,
                (a.completed_quantity-(ifnull(c.inventory_quantity,0)
                    -ifnull(c.received_quantity,0)))
                 &gt;= a.completed_quantity,a.completed_quantity,
                (ifnull(c.inventory_quantity,0)
                -ifnull(c.received_quantity,0))
                )
                as minQuantity -- 修改最小数
            </if>
north-glass-erp/src/main/resources/mapper/sd/DeliveryDetailMapper.xml
@@ -54,6 +54,7 @@
        <result column="storage_region" property="finishedGoodsInventory.storageRegion"/>
        <result column="actual_signal_area" property="finishedGoodsInventory.actualSignalArea"/>
        <result column="box_no" property="finishedGoodsInventory.boxNo"/>
        <result column="id" property="finishedGoodsInventory.id"/>
    </resultMap>
@@ -181,7 +182,7 @@
               fgi.quantity_available + dd.quantity as quantity_available,
               od.order_number,
               od.quantity-od.delivery_num as t_quantity,
               od.quantity as o_quantity,
        (fgi.quantity_available+ifnull(dd1.sumQuantity,0)) as o_quantity,
               dd.quantity as d_quantity,
               od.building_number,
               od.product_id,
@@ -207,10 +208,14 @@
        left join sd.delivery d on dd.delivery_id=d.delivery_id
        left join sd.order_detail od on dd.order_id=od.order_id and dd.order_number=od.order_number
        left join sd.`order` o on dd.order_id=o.order_id
        left join mm.finished_goods_inventory fgi on dd.order_id=fgi.order_id and dd.order_number=fgi.order_number
        left join mm.finished_goods_inventory fgi on dd.order_id=fgi.order_id and dd.order_number=fgi.order_number and fgi.box_no = dd.box_no
        left join (SELECT IFNULL(sum(quantity),0) as sumQuantity,dd.*
                    from sd.delivery_detail dd
                    GROUP BY dd.order_id,dd.order_number,dd.box_no) AS dd1
        on od.order_id = dd1.order_id and od.order_number = dd1.order_number and dd1.box_no = fgi.box_no
        <where>
            <if test="orderDetail.deliveryDetail.deliveryId != null and orderDetail.deliveryDetail.deliveryId != ''">
                and dd.delivery_id regexp #{orderDetail.deliveryDetail.deliveryId}
                and dd.delivery_id = #{orderDetail.deliveryDetail.deliveryId}
            </if>
            <if test="orderDetail.orderId != null and orderDetail.orderId != ''">
                and od.order_id regexp #{orderDetail.orderId}
@@ -371,14 +376,16 @@
    </select>
    <select id="getSelectShippingOrderDetails" resultMap="selectDeliveryFinishedGoodsInventoryOrderDetail">
        select od.order_id,
        select
        fgi.id,
                od.order_id,
               od.order_number,
               o.batch,
               o.calculate_type,
               fgi.quantity_available,
               od.quantity- od.delivery_num as t_quantity,
               od.quantity as o_quantity,
               fgi.quantity_available as d_quantity,
               od.quantity- od.delivery_num as t_quantity,-- 未发数量
        ifnull(dd1.sumQuantity,0)+fgi.quantity_available as o_quantity,-- 数量
               fgi.quantity_available as d_quantity,-- 发货数量
               od.building_number,
               od.product_id,
               od.product_name,
@@ -401,6 +408,13 @@
                 left join sd.`order` o on od.order_id = o.order_id
                 left join mm.finished_goods_inventory fgi
                 on od.order_id = fgi.order_id and od.order_number = fgi.order_number
        left join (SELECT IFNULL(sum(quantity),0) as sumQuantity,dd.*
                    from sd.delivery_detail dd
                    where dd.order_id regexp #{orderDetail.orderId}
                    GROUP BY dd.order_id,dd.order_number,dd.box_no) AS dd1
        on od.order_id = dd1.order_id and od.order_number = dd1.order_number and dd1.box_no = fgi.box_no
        <where>
            fgi.quantity_available > 0 and od.quantity > od.delivery_num
            <if test="orderDetail.orderId != null and orderDetail.orderId != ''">
north-glass-erp/src/main/resources/mapper/sd/OrderProcessDetailMapper.xml
@@ -133,6 +133,25 @@
        order by RowNum
    </select>
    <select id="getProcessGlassLRow">
        select
            max(a.technology_number) as rowCount,
            RowNum
        from pp.flow_card as a
                 left join
             (select min((@i:=@i+1)) AS RowNum,c.*
              from pp.flow_card  as c,
                   (SELECT @i:=-1) as d
              where order_id = #{orderId}
              GROUP BY process_id
             ) as b
             on b.id = a.id
        where a.order_id = #{orderId}
        group by a.process_id
        order by RowNum
    </select>
    <update id="insertByReportingWorkDetail">
        update sd.order_process_detail as a
        set