guoyuji
2024-02-27 37532f5802eae207940b8bd9812ee0b4ca308d65
订单,产品前后端数据提交
26个文件已修改
634 ■■■■ 已修改文件
north-glass-erp/.idea/dataSources.local.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/hook/index.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/Order.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/product/CreateProduct.vue 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/product/Product.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/product/SelectProduct.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/sd/BasicDataController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/sd/ProductController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderGlassDetail.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/sd/Product.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/sd/ProductDetail.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/BasicDateMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/ProductDetailMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/ProductMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/BasicDateService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/ProductService.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/BasicData.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/OrderGlassDetailMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/Product.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/sd/BasicData.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/sd/OrderGlassDetailMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/sd/Product.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/.idea/dataSources.local.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="dataSourceStorageLocal" created-in="IU-232.8660.185">
  <component name="dataSourceStorageLocal" created-in="IU-232.9559.62">
    <data-source name="@localhost [2]" uuid="165c5447-d19a-4aaf-af5f-cee92ae696c2">
      <database-info product="MySQL" version="8.0.22" jdbc-version="4.2" driver-name="MySQL Connector/J" driver-version="mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0)" dbms="MYSQL" exact-version="8.0.22" exact-driver-version="8.0">
        <extra-name-characters>#@</extra-name-characters>
north-glass-erp/northglass-erp/src/hook/index.js
@@ -0,0 +1,17 @@
//前端筛选功能
//筛选手动触发
function changeFilterEvent (event, option, $panel)  {
    // 手动触发筛选
    $panel.changeOption(event, !!option.data, option)
}
// 筛选函数
const filterChanged = ({ option, row, column }) => {
    if (option.data) {
        return row[column.field].toString().toLowerCase().indexOf(option.data) > -1
    }
    return true
}
export {changeFilterEvent,filterChanged}
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -6,7 +6,11 @@
import request from "@/utils/request"
import deepClone from "@/utils/deepClone"
import  useUserInfoStore from '@/stores/userInfo'
import SelectProduct from "@/views/sd/product/SelectProduct.vue"
import {changeFilterEvent,filterChanged} from "@/hook"
let dialogTableVisible = ref(false)
let productVisible = ref(false)
const userStore = useUserInfoStore()
const router = useRouter()
const route = useRoute()
@@ -51,13 +55,8 @@
  saleMan:[]
})
let filterData = ref({})
const filterChanged = ({ option, row, column }) => {
  if (option.data) {
    return row[column.field].toString().toLowerCase().indexOf(option.data) > -1
  }
  return true
  //@filter-change="filterChanged"
}
let rowIndex = ref(null)
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
@@ -147,7 +146,14 @@
      }
    ],
    quantity: [
      { type: 'number', min: 0, message: '请输入大于等于0的数值' }
        //type: 'number', min: 0, message: '请输入大于等于0的数值' ,
      {
        validator ({ cellValue }) {
          const regex = /^[1-9]\d*$/
          if (!regex.test(cellValue)) {
            return new Error('输入大于0的整数')
          }
        }}
    ],
    width:[
      {
@@ -289,8 +295,17 @@
  },
  cellDblclick (params) {//表格内容双击打开产品界面
    const { row } = params
    productVisible.value = true
    rowIndex=row
    //console.log(row)
    //alert("我打开了产品界面")
  }
}
//获取子页面产品方法
const getProductRow = (row) => {
  rowIndex.productName = row.productName
  rowIndex.productId = row.id
  productVisible.value = false
}
//初始化判断是否有id传入
@@ -402,7 +417,7 @@
  const area = parseFloat((row.width * row.height/1000000).toFixed(2))
  return parseFloat((area * row.quantity).toFixed(2))
}
//计算金钱
const countMoney = (list) => {
  let  countMoney = 0
  list.forEach((item)=>{
@@ -458,11 +473,7 @@
    titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString()
}
// 手动触发筛选
const changeFilterEvent = (event, option, $panel) => {
  // 手动触发筛选
  $panel.changeOption(event, !!option.data, option)
}
@@ -627,6 +638,10 @@
          :autosize="{ minRows: 2, maxRows: 20 }"
      />
    </el-dialog>
    <el-dialog v-model="productVisible"  style="width: 80%;height:75% ">
      <select-product :rowIndex="rowIndex" @getProductRow="getProductRow" style="width: 100%;height: 100%" />
    </el-dialog>
  </div>
</template>
north-glass-erp/northglass-erp/src/views/sd/order/Order.vue
@@ -1,8 +1,6 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
import {watch} from "vue";
const router = useRouter()
const route = useRoute()
let indexFlag=$ref(1)
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
@@ -267,7 +267,6 @@
      </template>
      <template #state="{ row,column}">
<!--        <p>{{row[column.field]}}</p>-->
        <el-checkbox @click.native.prevent  :indeterminate="row[column.field]===1" :checked="row[column.field]===2"/>
      </template>
@@ -299,9 +298,10 @@
      <template #pager>
        <!--使用 pager 插槽-->
<!--        'PrevJump','NextJump', -->
        <vxe-pager
            @page-change="handlePageChange"
            :layouts="[ 'PrevJump', 'PrevPage', 'Jump','PageCount', 'NextPage', 'NextJump',  'Total']"
            :layouts="[  'PrevPage', 'Jump','PageCount', 'NextPage',  'Total']"
            v-model:current-page="pageNum"
            v-model:page-size="total.pageSize"
            v-model:pager-count="total.pageTotal"
north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue
@@ -1,11 +1,15 @@
<script setup>
import {onMounted, reactive, ref} from "vue"
import {computed, onMounted, reactive, ref} from "vue"
import {useRouter,useRoute} from "vue-router"
import request from "@/utils/request"
import {ElMessage} from "element-plus";
import {ElMessage} from "element-plus"
import {changeFilterEvent,filterChanged} from "@/hook"
import SelectProduct from "@/views/sd/product/SelectProduct.vue";
const router = useRouter()
const route = useRoute()
let dialogTableVisible = ref(false)
let craftVisible = ref(false)
const xGrid = ref()
const gridOptions = reactive({
  border:  "full",//表格加边框
@@ -25,7 +29,7 @@
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
   // remote: true
  },
  customConfig: {
    storage: true
@@ -37,23 +41,24 @@
  },//表头参数
  columns:[
    {title: '操作', width: 110, slots: { default: 'button_slot' },fixed:"left",},
    {field: 'orderNumber',width:120,  title: '序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderNumber',width:120,  title: '序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    //{field: 'orderDetail.buildingNumber',width:120,  title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.productName',width:120,  title: '成品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'glassAddress',width:120,  title: '标记',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'glassChild',width:120,  title: '子产品',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.width',width:120,  title: '成品宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.height',width:120,  title: '成品高',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.shape',width:120,  title: '形状',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.grossArea',width:120,  title: '总尺寸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'childWidth',width:120,  title: '单片宽',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'childHeight',width:120,  title: '单片高',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.area',width:120,  title: '单片尺寸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.quantity',width:120,  title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'process',width:120,  title: '工艺流程',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.processingNote',width:120,  title: '加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.remarks',width:120,  title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.edgingType',width:120,  title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
    {field: 'orderDetail.productName',width:120,  title: '成品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'glassAddress',width:120,  title: '标记',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'glassChild',width:120,  title: '子产品',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.width',width:120,  title: '成品宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.height',width:120,  title: '成品高',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.shape',width:120,  title: '形状',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'totalArea',width:120,  title: '总尺寸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'childWidth',width:120,  title: '单片宽',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'childHeight',width:120,  title: '单片高',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'area',width:120,  title: '单片尺寸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.quantity',width:120,  title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'process',width:120,  title: '工艺流程',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'icon',width:120,  title: '商标',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.processingNote',width:120,  title: '加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.remarks',width:120,  title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.edgingType',width:120,  title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}
  ],//表头按钮
  mergeCells: [
    /*{ row: 0, col: 1, rowspan: 4, colspan: 1 },
@@ -144,6 +149,41 @@
  processingNote:''
})
let process =  ref([])
request.get(`/basicData/BasicDataByType/product/process`).then((res) =>{
  if (res.code==200){
    process.value=res.data
  }
})
let rowIndex = ref({})
const updateCraft = (row) => {
  craftVisible.value= true
  Object.keys(craftObj).forEach((key) =>{
    craftObj[key] = row['process'].split('->')
  })
  rowIndex.value = row
}
const  craftObj  = reactive({
  newCraft: [],
  oldCraft: []
})
const resetCraft = () => {
  craftObj.newCraft = []
}
const saveCraft = () => {
  rowIndex.value.process = craftObj.newCraft.join('->')
  craftVisible.value= false
}
const newCraftComputed = computed(() =>{
  return craftObj.newCraft.join('->')
})
const oldCraftComputed = computed(() =>{
  return craftObj.oldCraft.join('->')
})
//初始化判断是否有id传入
onMounted(()=>{
  const str = route.query.orderId
@@ -152,7 +192,6 @@
  }
  request.post(`/order/getOrderCraftById/${str}`).then((res) => {
    if(res.code==200){
      console.log(res.data)
      titleUploadData.value = res.data.order
      //取消审核按钮禁用
@@ -177,6 +216,7 @@
    }
  })
})
//保存修改工艺
const reviewOrderCraft = (state) => {
  request.post(`/order/reviewProcessById/${titleUploadData.value.orderId}/${state}`,xGrid.value.getRecordset().updateRecords).then(res =>{
@@ -196,6 +236,10 @@
    }
  })
}
//
</script>
<template>
@@ -247,7 +291,7 @@
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">修改工艺</el-button>
          <el-button @click="updateCraft(row)" link type="primary" size="small">修改工艺</el-button>
        </template>
        <template #num1_filter="{ column, $panel }">
@@ -267,6 +311,36 @@
          :autosize="{ minRows: 2, maxRows: 20 }"
      />
    </el-dialog>
    <el-dialog v-model="craftVisible" title="工艺流程" style="width: 60%;height:60% ;position: relative;" >
      <h5>工艺属性</h5>
      <el-checkbox
          v-model="craftObj.newCraft"
          v-for="item in process"
          :label="item.basicName"
          class="glass-process-checkbox"
          size="small" />
      <el-row style="width: 90%;border: 0;position: absolute;bottom: 1rem; left: 50%;transform: translateX(-50%);">
        <span class="ml-3 w-35 text-gray-600 inline-flex items-center"
        >原流程:
        </span>
        <el-input :value="oldCraftComputed" disabled class="w-50 m-2" />
        <span class="ml-3 w-35 text-gray-600 inline-flex items-center"
        >流程:
        </span>
        <el-input :value="newCraftComputed" disabled class="w-50 m-2" />
        <el-col style="margin-top: 0.5rem">
          <el-button type="primary" @click="resetCraft">重置</el-button>
          <el-button type="primary" @click="saveCraft">保存</el-button>
        </el-col>
      </el-row>
    </el-dialog>
  </div>
</template>
@@ -286,5 +360,10 @@
  width: 100%;
  height: 90%;
}
.el-dialog .el-col{
  border: 0;text-align: right
}
.el-dialog .el-text{
  font-weight: bolder
}
</style>
north-glass-erp/northglass-erp/src/views/sd/product/CreateProduct.vue
@@ -2,8 +2,14 @@
import request from "@/utils/request"
import deepClone from "@/utils/deepClone"
import {ElMessage} from "element-plus"
import {computed, ref} from "vue"
import {computed, onMounted, ref} from "vue"
import  useUserInfo from "@/stores/userInfo"
import {useRouter,useRoute} from "vue-router"
import GlassType from "@/components/sd/product/GlassType.vue"
import useProductGlassTypeStore from "@/stores/sd/product/productGlassType"
const router = useRouter()
const route = useRoute()
let  userInfo = useUserInfo()
const disposeList = $ref([
  '彩釉',
@@ -56,8 +62,17 @@
let productDetailList = ref([])
let productTotal = ref({
  productName:'',
  query:'',
  remarks:'',
  thickness:'',
  totalThickness:'',
  typeId:'',
  creator:userInfo.user.userName
})
let productGlassTypeStore = useProductGlassTypeStore()
productGlassTypeStore.GlassType=['','']
//页面加载请求
request.get(`/basicData/BasicDataByType/product`).then((res) => {
  if(res.code==200){
@@ -67,6 +82,27 @@
  }
})
onMounted(()=>{
  const str = route.query.id
  if (typeof str === 'undefined' || str === null || str === '' || str === '\n' || str === '\r'){
    return
  }
  request.post(`/product/selectProductById/${str}`).then((res) => {
    if(res.code==200){
      productDetailList.value =  res.data.detail
      productDetailList.value.forEach((item)=>{
        item.separation = JSON.parse(item.separation)
      })
      productTotal.value = res.data.title
      //BasicData.value = res.data
    }else{
      ElMessage.warning(res.msg)
    }
  })
})
const saveProduct = () => {
  if(productDetailList.value.length===0){
    ElMessage.warning("请添加产品详情")
@@ -74,7 +110,12 @@
  }else if(productDetailList.value[productDetailList.value.length-1].detailType!=='glass'){
    ElMessage.warning("产品详情最后一条不是玻璃,请完善")
    return
  }else if(productGlassTypeStore.GlassType[1]==='' || productGlassTypeStore.GlassType[1]===null){
    ElMessage.warning("请选择产品类别")
    return
  }
  productTotal.value.typeId =  productGlassTypeStore.GlassType[1]
  let productName = ""
  productDetailList.value.forEach(item =>{
    switch(item.detailType){
@@ -83,10 +124,12 @@
        break
      }
      case 'Interlayer' :{
        productName+='+'+item.detail
        productName+='+'+item.detail+"+"
        break
      }
      case 'hollow' :{
        productName+='*'+item.detail
        productName+='*'+item.detail+"*"
        break
      }
    }
  })
@@ -97,11 +140,24 @@
  }
  request.post(`/product/saveProduct`,product).then((res) =>{
    if(res.code==200){
      ElMessage.success(res.msg)
      ElMessage.success("创建成功")
      router.push("/main/product/selectProduct")
    }
  })
}
//审核产品状态
const updateProductState =  (state) => {
  request.post(`/product/updateProductStateById/${productTotal.value.id}/${state}`).then((res) =>{
    if(res.code==200){
      ElMessage.success("操作成功")
      //router.go(0)
      router.push({path:'/main/product/createProduct',query:{id:productTotal.value.id,random:Math.random()}})
    }else{
      ElMessage.error("操作失败")
    }
  })
}
const reset = () => {
  processChecked.value=[]
@@ -252,7 +308,9 @@
  index:null
})
const updateGlass = (index) => {
  stuff.value = productDetailList.value[index].separation
  Object.keys(stuff.value).forEach((item)=>{
    stuff.value[item]=productDetailList.value[index].separation[item]
  })
  processChecked.value = productDetailList.value[index].process.split("->")
  glassFlag.value.flag=false
  glassFlag.value.index=index
@@ -269,7 +327,10 @@
  index:null
})
const updateInterlayer  = (index) => {
  InterlayerBasic.value = productDetailList.value[index].separation
  Object.keys(InterlayerBasic.value).forEach((item)=>{
    InterlayerBasic.value[item]=productDetailList.value[index].separation[item]
  })
  InterlayerFlag.value.flag=false
  InterlayerFlag.value.index=index
}
@@ -285,7 +346,10 @@
  index:null
})
const updateHollow = (index) => {
  hollowBasic.value = productDetailList.value[index].separation
  Object.keys(hollowBasic.value).forEach((item)=>{
    hollowBasic.value[item]=productDetailList.value[index].separation[item]
  })
  hollowFlag.value.flag=false
  hollowFlag.value.index=index
}
@@ -304,15 +368,19 @@
        break
      }
      case 'Interlayer' :{
        productName+='+'+item.detail
        productName+='+'+item.detail+"+"
        break
      }
      case 'hollow' :{
        productName+='*'+item.detail
        productName+='*'+item.detail+"*"
        break
      }
    }
  })
  return productName
})
</script>
@@ -323,6 +391,33 @@
          boxShadow: `var(--el-box-shadow-lighter)`,
        }"
    >
      <div class="glass-dispose">
        <!--        <h5>表面处理</h5>-->
<!--        <h5>玻璃类别</h5>-->
        <div class="glass-dispose-detail">
          <glass-type   style="float: left;margin-left: -0.5rem" />
          <!--          <div v-for="n in 2" class="glass-dispose-detail-1">
                      <p style="writing-mode: vertical-rl;">
                        {{n===1?'第一面':'第二面'}}
                      </p>
                      <div class="glass-dispose-detail-list"
                           v-for="(item,index) in disposeList"
                      >
                        <el-checkbox
                            :label="item" size="large" />
                        <el-input
                            v-if="index==0 && n==1"
                            class="dispose-input"
                            size="small"
                            clearable />
                      </div>
                    </div>-->
        </div>
      </div>
      <div class="line"/>
      <div class="glass-type">
        <h5>材料属性</h5>
        <el-row :gutter="50">
@@ -384,30 +479,7 @@
          </el-col>
        </el-row>
      </div>
      <div class="line"/>
      <div class="glass-dispose">
        <h5>表面处理</h5>
        <div class="glass-dispose-detail">
          <div v-for="n in 2" class="glass-dispose-detail-1">
            <p style="writing-mode: vertical-rl;">
              {{n===1?'第一面':'第二面'}}
            </p>
            <div class="glass-dispose-detail-list"
                 v-for="(item,index) in disposeList"
            >
              <el-checkbox
                  :label="item" size="large" />
              <el-input
                  v-if="index==0 && n==1"
                  class="dispose-input"
                  size="small"
                  clearable />
            </div>
          </div>
        </div>
      </div>
      <div class="line"/>
      <div class="glass-process">
        <h5>工艺属性</h5>
@@ -590,7 +662,7 @@
                       style="margin-left: 0.5rem;text-align: center">
                快速查询:
              </el-text>
              <el-input size="small" disabled  />
              <el-input v-model="productTotal.query" size="small" disabled  />
            </div>
          </el-col>
          <el-col :span="5">
@@ -599,7 +671,7 @@
                       style="margin-left: 0.5rem;text-align: center">
                计重厚度:
              </el-text>
              <el-input size="small" disabled  />
              <el-input v-model="productTotal.thickness" size="small" disabled  />
            </div>
          </el-col>
          <el-col :span="5">
@@ -608,7 +680,7 @@
                       style="margin-left: 0.5rem;text-align: center">
                厚度:
              </el-text>
              <el-input size="small" disabled  />
              <el-input v-model="productTotal.totalThickness"  size="small" disabled  />
            </div>
          </el-col>
          <el-col :span="5">
@@ -617,7 +689,7 @@
                       style="margin-left: 0.5rem;text-align: center">
                备注:
              </el-text>
              <el-input size="small" disabled  />
              <el-input v-model="productTotal.remarks"  size="small"   />
            </div>
          </el-col>
        </el-row>
@@ -684,13 +756,33 @@
      </div>
      <el-button
          :disabled="productTotal.state===1"
          @click="saveProduct"
          style="float: right;
          margin-right: 0.5rem;"
          size="large"
          type="primary"
          round>创建</el-button>
          round>{{productTotal.id?'修改':'创建'}}</el-button>
      <el-button
          v-if="productTotal.state===0"
          @click="updateProductState(1)"
          style="float: right;
          margin-right: 0.5rem;"
          size="large"
          type="primary"
          round>审核</el-button>
      <el-button
          v-else-if="productTotal.state===1"
          @click="updateProductState(0)"
          style="float: right;
          margin-right: 0.5rem;"
          size="large"
          type="primary"
          round>反审</el-button>
    </div>
  </div>
</template>
@@ -716,7 +808,7 @@
  }
  .glass-dispose{
    width: 100%;
    height: 20%;
    height: 5%;
  }
  .glass-dispose-detail{
    margin-top: 0.5rem;
north-glass-erp/northglass-erp/src/views/sd/product/Product.vue
@@ -4,9 +4,9 @@
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import {useRouter} from "vue-router";
import  GlassType from '@/components/sd/product/GlassType.vue'
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
const router = useRouter()
const route = useRoute()
let indexFlag=$ref(1)
function changeRouter(index){
  indexFlag=index
@@ -28,7 +28,7 @@
    </div>
    <div id="main-body">
      <router-view  />
      <router-view  :key="route.fullPath" />
    </div>
  </div>
</template>
north-glass-erp/northglass-erp/src/views/sd/product/SelectProduct.vue
@@ -15,14 +15,14 @@
//监听玻璃类型改变
let productList = ref([])
let date=ref(['',''])
productGlassTypeStore.GlassType=['','']
let props = defineProps({
  rowIndex:{}
})
let glassType = ref([])
watch(productGlassTypeStore,(newVal,oldVal) => {
})
const getProduct = () => {
  request.post(`/product/1/100/${productGlassTypeStore.GlassType}`,filterData.value).then((res) => {
    if(res.code==200){
@@ -144,7 +144,28 @@
    ElMessage.warning(res.msg)
  }
})
//删除与编辑方法
const getTableRow =  (row,type) => {
  switch (type) {
    case 'edit': {
      router.push({path:'/main/product/createProduct',query:{id:row.id}})
      break
    }
    case 'delete': {
      request.post(`/product/deleteProductById/${row.id}`).then((res) => {
        if(res.code==200){
          //router.push("/main/product/selectProduct")
          router.go(0)
          ElMessage.success('删除成功')
        }else{
          ElMessage.warning(res.msg)
        }
      })
      break
    }
  }
}
@@ -184,8 +205,9 @@
  },
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 60},
    {type: 'seq',fixed:"left", title: '自序', width: 80 },
    {title: '操作', width: 110, slots: { default: 'button_slot' },fixed:"left"},
    {field:'state',title: '审核', width: 40, slots: { default: 'state' }},
    {type: 'seq',fixed:"left", title: '自序', width: 80 },
    {field: 'id', title: '编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false},
    {field: 'productName', title: '名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false},
    {field: 'basicGlassType.typeName', title: '所属类别',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false},
@@ -250,8 +272,13 @@
  })
}
let emit = defineEmits([
    'getProductRow'
])
const emitParent = (row) => {
  emit('getProductRow', row)
}
/*后端返回结果多层嵌套展示*/
@@ -341,7 +368,7 @@
        <ul class="expand-wrapper">
          <li  v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
            <span style="font-weight: bold">{{item.title+':  '}}</span>
            <span v-if="hasDecimal(item.field)">{{ row[item.field.split('.')[0]][item.field.split('.')[1]] }}</span>
            <span v-if="hasDecimal(item.field)">{{ row[item.field] }}</span>
            <span v-else>{{ row[item.field] }}</span>
          </li>
@@ -349,9 +376,16 @@
      </template>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
      <template #button_slot="{ row }" v-if="!props.rowIndex">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>
        <el-popconfirm @confirm="getTableRow(row,'delete')" title="确认删除产品?">
          <template #reference>
            <el-button  link type="primary" size="small">删除</el-button>
          </template>
        </el-popconfirm>
      </template>
      <template #button_slot="{ row }" v-else>
        <el-button @click="emitParent(row)" link type="primary" size="small">添加</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
@@ -361,7 +395,9 @@
          </div>
        </div>
      </template>
      <template #state="{ row,column}">
        <el-checkbox @click.native.prevent   :checked="row[column.field]===1"/>
      </template>
    </vxe-grid>
north-glass-erp/src/main/java/com/example/erp/controller/sd/BasicDataController.java
@@ -20,4 +20,8 @@
    public Result getBasicDataByType(@PathVariable String type){
        return Result.seccess(basicDateService.getBasicDataByType(type));
    }
    @GetMapping("/BasicDataByType/{type}/{childType}")
    public Result getBasicDataByTypeAndChildType(@PathVariable String type,@PathVariable String childType){
        return Result.seccess(basicDateService.getBasicDataByTypeAndChildType(type,childType));
    }
}
north-glass-erp/src/main/java/com/example/erp/controller/sd/ProductController.java
@@ -3,6 +3,8 @@
import com.example.erp.common.Result;
import com.example.erp.entity.sd.Product;
import com.example.erp.service.sd.ProductService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -11,18 +13,35 @@
import java.util.Map;
@RestController
@Api(value="产品controller",tags={"产品操作接口"})
@RequestMapping("/product")
public class ProductController {
    @Autowired
    ProductService productService;
    @ApiOperation("产品查询接口")
    @PostMapping  ("/{pageNum}/{pageSize}/{glassType}")
    public Result defaultDateProduct(@PathVariable Integer pageNum, @PathVariable Integer pageSize, @PathVariable List<String> glassType, @RequestBody Product product){
        return Result.seccess(productService.defaultDateProduct(pageNum,pageSize,glassType,product));
    }
    @ApiOperation("产品保存接口")
    @PostMapping("/saveProduct")
    public Result saveProduct(@RequestBody Map<String,Object> product){
        return Result.seccess(productService.saveProduct(product));
    }
    @ApiOperation("产品删除接口")
    @PostMapping("/deleteProductById/{id}")
    public Result deleteProductById(@PathVariable Integer id){
        return Result.seccess(productService.deleteProductById(id));
    }
    @ApiOperation("产品审核状态修改接口")
    @PostMapping("/updateProductStateById/{id}/{state}")
    public Result updateProductStateById(@PathVariable Integer id,@PathVariable Integer state){
        return Result.seccess(productService.updateProductStateById(id,state));
    }
    @ApiOperation("根据产品id查询产品接口")
    @PostMapping("/selectProductById/{id}")
    public Result selectProductById(@PathVariable Integer id){
        return Result.seccess(productService.selectProductById(id));
    }
}
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderGlassDetail.java
@@ -19,6 +19,9 @@
    private String glassChild;
    private Double childWidth;
    private Double childHeight;
    private Double area;
    private Double totalArea;
    private String icon;
    private String process;
    private String productionId;
    private Integer splittingStatus;
north-glass-erp/src/main/java/com/example/erp/entity/sd/Product.java
@@ -1,6 +1,7 @@
package com.example.erp.entity.sd;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@@ -11,6 +12,7 @@
    @TableId(type = IdType.AUTO)
    private Long id;
    private String productName;
    private String typeId;
    private String typeName;
    private Double totalThickness;
    private Double thickness;
@@ -20,6 +22,7 @@
    private String creator;
    private LocalDate createTime;
    private LocalDate updateTime;
    @TableField(select = false)
    private BasicGlassType basicGlassType;
}
north-glass-erp/src/main/java/com/example/erp/entity/sd/ProductDetail.java
@@ -1,6 +1,7 @@
package com.example.erp.entity.sd;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@@ -22,5 +23,6 @@
    private String process;
    private String separation;
    private LocalDate createTime;
    @TableField(select = false)
    private Product product;
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/BasicDateMapper.java
@@ -14,4 +14,5 @@
    List<BasicData> getOrderBasicData(String type);
    List<String> getOrderBasicDataType(String type);
    List<BasicData> getOrderBasicDataByTypeAndChildType(String type, String childType);
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/ProductDetailMapper.java
@@ -1,12 +1,13 @@
package com.example.erp.mapper.sd;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.erp.entity.sd.ProductDetail;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ProductDetailMapper {
public interface ProductDetailMapper extends BaseMapper<ProductDetail> {
    List<ProductDetail> getGlassDetailList();
    boolean insertList(List<ProductDetail> getProductDetails);
north-glass-erp/src/main/java/com/example/erp/mapper/sd/ProductMapper.java
@@ -15,4 +15,6 @@
                                 @Param("product") Product product);
    Integer getPageTotal(Integer offset, Integer pageSize, String glassTypeId, Product product);
    boolean updateProductStateById(Integer id,Integer state);
}
north-glass-erp/src/main/java/com/example/erp/service/sd/BasicDateService.java
@@ -66,7 +66,7 @@
    public Map<String, List<Object>> getBasicDataByType(String type){
        List<String> orderBasicDataType = basicDateMapper.getOrderBasicDataType(type);
        List<BasicData> orderBasicData = basicDateMapper.getOrderBasicData(type);
        Map<String, List<Object>> BasicDataMap = new HashMap<>(); ;
        Map<String, List<Object>> BasicDataMap = new HashMap<>();
        //创建List对象
        //遍历订单基本数据类型
@@ -82,4 +82,10 @@
        }
        return BasicDataMap;
    }
    public List<BasicData> getBasicDataByTypeAndChildType(String type, String childType) {
        Map<String, List<Object>> BasicDataMap = new HashMap<>();
        return basicDateMapper.getOrderBasicDataByTypeAndChildType(type, childType);
    }
}
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
@@ -192,6 +192,11 @@
    //工艺审核界面审核更新数据
    public boolean reviewProcessById(String id, Integer status,List<OrderGlassDetail> orderGlassDetails) {
        if(!orderGlassDetails.isEmpty() && status==2){
            orderGlassDetails.forEach(orderGlassDetail ->{
                double area = Math.round((orderGlassDetail.getChildWidth()*orderGlassDetail.getChildHeight()/1000000) * 100) * 0.01d;
                orderGlassDetail.setArea(area);
            });
            orderGlassDetailMapper.updateSizeAndProcess(orderGlassDetails);
            orderProcessDetailMapper.delete(new QueryWrapper<OrderProcessDetail>().eq("order_id",id));
            //查询订单小片表获取工艺传入小片工艺表
north-glass-erp/src/main/java/com/example/erp/service/sd/ProductService.java
@@ -1,21 +1,22 @@
package com.example.erp.service.sd;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.example.erp.common.Constants;
import com.example.erp.entity.sd.Product;
import com.example.erp.entity.sd.ProductDetail;
import com.example.erp.exception.ServiceException;
import com.example.erp.mapper.sd.ProductDetailMapper;
import com.example.erp.mapper.sd.ProductMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
@Service
@DS("sd")
@@ -30,7 +31,7 @@
        this.productMapper = productMapper;
        this.productDetailMapper = productDetailMapper;
    }
//产品查询方法
    //产品查询方法
    public Map<String,Object> defaultDateProduct(Integer pageNum, Integer pageSize, List<String> glassType, Product product) {
        Integer offset = (pageNum-1)*pageSize;
        String glassTypeId = null;
@@ -43,18 +44,37 @@
        return map;
    }
//产品保存方法
    //产品保存方法
    public boolean saveProduct(Map<String,Object>  productObject) {
        //把传入主附表的object类型转换成实体类类型
        JSONObject productJson = new JSONObject(productObject);
        Product product = JSONObject.parseObject(JSONObject.toJSONString(productJson.get("title")), Product.class);
        List<ProductDetail> productDetails = JSONArray.parseArray(JSONObject.toJSONString(productJson.get("detail")), ProductDetail.class);
        System.out.println(product);
        //完善主附表信息并返回
        Map<String,Object> getProductJson = updateProduct(productDetails,product);
        Product getProduct = JSONObject.parseObject(JSONObject.toJSONString(getProductJson.get("title")), Product.class);
        List<ProductDetail> getProductDetails = JSONArray.parseArray(JSONObject.toJSONString(getProductJson.get("detail")), ProductDetail.class);
        if(getProduct.getId()==null ){
            insertProduct(getProduct,getProductDetails);
        }else{
            updateProductData(getProductDetails,getProduct);
        }
        return true;
    }
    private void updateProductData(List<ProductDetail> getProductDetails, Product getProduct) {
        productMapper.update(getProduct,new UpdateWrapper<Product>().eq("id",getProduct.getId()));
        productDetailMapper.delete(new QueryWrapper<ProductDetail>().eq("prod_id",getProduct.getId()));
        for (ProductDetail getProductDetail : getProductDetails) {
            getProductDetail.setProdId(getProduct.getId());
        }
        productDetailMapper.insertList(getProductDetails);
    }
    private void insertProduct(Product getProduct, List<ProductDetail> getProductDetails) {
        //插入主表数据
        productMapper.insert(getProduct);
        //给副表添加产品id
@@ -63,9 +83,6 @@
        }
        //插入副表
        productDetailMapper.insertList(getProductDetails);
        return false;
    }
    private Map<String,Object> updateProduct(List<ProductDetail> productDetailList,Product product) {
@@ -87,8 +104,7 @@
        for (ProductDetail productDetail : productDetailList) {
            sortNum+=1;
            productDetail.setSortNum(sortNum);
            JSONObject separation = JSONObject.parseObject( productDetail.getSeparation());
            JSONObject separation = JSONObject.parseObject(productDetail.getSeparation(), Feature.OrderedField);
            String  getThickness = (String) separation.get("thickness");
            double thicknessDetail = Double.parseDouble(getThickness.replace("mm",""));
            totalThickness += thicknessDetail;
@@ -115,4 +131,27 @@
        map.put("detail",productDetailList);
        return map;
    }
    public boolean deleteProductById(Integer id) {
        Product product = productMapper.selectById(id);
        if(product.getState()==1){
            throw new ServiceException(Constants.Code_600,"产品已审核,无法删除");
        }
        productMapper.deleteById(id);
        return true;
    }
    public boolean updateProductStateById(Integer id,Integer state) {
       return productMapper.updateProductStateById(id,state);
    }
    public Map<String,Object> selectProductById(Integer id) {
        Product product = productMapper.selectById(id);
        List<ProductDetail> productDetailList = productDetailMapper.selectList(
                new QueryWrapper<ProductDetail>().eq("prod_id", id));
        Map<String,Object> map = new HashMap<>();
        map.put("title",product);
        map.put("detail",productDetailList);
        return map;
    }
}
north-glass-erp/src/main/resources/mapper/sd/BasicData.xml
@@ -10,6 +10,14 @@
            basic_data as a
        where a.basic_type=#{type}
    </select>
    <select id="getOrderBasicDataByTypeAndChildType">
        select
            *
        from
            basic_data as a
        where a.basic_type=#{type} and a.basic_category = #{childType}
    </select>
    <select id="getOrderBasicDataType">
        select
            a.basic_category
north-glass-erp/src/main/resources/mapper/sd/OrderGlassDetailMapper.xml
@@ -13,6 +13,9 @@
            glass_child,
            child_width,
            child_height,
            area,
            total_area,
            process,
            `group`)
        select
@@ -23,6 +26,8 @@
            pd.detail,
            od.width,
            od.height,
            od.area,
            od.gross_area,
            pd.process,
            pd.glass_group
        from sd.product_detail as pd
@@ -48,19 +53,19 @@
        <result column="glass_child" property="glassChild"/>
        <result column="child_width" property="childWidth"/>
        <result column="child_height" property="childHeight"/>
        <result column="icon" property="icon"/>
        <result column="process" property="process"/>
        <result column="area" property="area"/>
        <result column="total_area" property="totalArea"/>
        <!--接收其他外键实体类数据-->
        <association property="orderDetail" javaType="com.example.erp.entity.sd.OrderDetail">
            <result column="building_number" property="buildingNumber"/>
            <result column="product_name" property="productName"/>
            <result column="width" property="width"/>
            <result column="height" property="height"/>
            <result column="shape" property="shape"/>
            <result column="gross_area" property="grossArea"/>
            <result column="edging_type" property="edgingType"/>
            <result column="area" property="area"/>
            <result column="quantity" property="quantity"/>
            <result column="processing_note"  property="processingNote"/>
            <result column="beizhu"  property="remarks"/>
@@ -81,11 +86,12 @@
           b.width,
           b.height,
           b.shape,
           b.gross_area,
           a.total_area,
           b.edging_type,
           a.child_width,
           a.child_height,
           b.area,
           a.icon,
           a.area,
           b.quantity,
           a.process,
           b.remarks as 'beizhu',
@@ -99,15 +105,20 @@
    
    <update id="updateSizeAndProcess" parameterType="java.util.List">
        <foreach collection="orderGlassDetails"  item="item" index="index" open="" close="" separator=";">
            update order_glass_detail
            update order_glass_detail as a,
                order_detail as b
            set
                child_width = #{item.childWidth},
                child_height = #{item.childHeight},
                process = #{item.process}
                a.child_width = #{item.childWidth},
                a.child_height = #{item.childHeight},
                a.area = #{item.area},
                a.total_area = #{item.area}*b.quantity,
                a.icon = #{item.icon},
                a.process = #{item.process}
            where
                order_id = #{item.orderId}
                and order_number = #{item.orderNumber}
                and technology_number = #{item.technologyNumber}
                a.order_id = b.order_id
                and a.order_id = #{item.orderId}
                and a.order_number = #{item.orderNumber}
                and a.technology_number = #{item.technologyNumber}
        </foreach>
    </update>
north-glass-erp/src/main/resources/mapper/sd/Product.xml
@@ -103,4 +103,8 @@
        limit #{offset},#{pageSize}
        ;
    </select>
    <update id="updateProductStateById">
        update product set state = #{state} where id = #{id}
    </update>
</mapper>
north-glass-erp/target/classes/mapper/sd/BasicData.xml
@@ -10,6 +10,14 @@
            basic_data as a
        where a.basic_type=#{type}
    </select>
    <select id="getOrderBasicDataByTypeAndChildType">
        select
            *
        from
            basic_data as a
        where a.basic_type=#{type} and a.basic_category = #{childType}
    </select>
    <select id="getOrderBasicDataType">
        select
            a.basic_category
north-glass-erp/target/classes/mapper/sd/OrderGlassDetailMapper.xml
@@ -13,6 +13,9 @@
            glass_child,
            child_width,
            child_height,
            area,
            total_area,
            process,
            `group`)
        select
@@ -23,6 +26,8 @@
            pd.detail,
            od.width,
            od.height,
            od.area,
            od.gross_area,
            pd.process,
            pd.glass_group
        from sd.product_detail as pd
@@ -48,19 +53,19 @@
        <result column="glass_child" property="glassChild"/>
        <result column="child_width" property="childWidth"/>
        <result column="child_height" property="childHeight"/>
        <result column="icon" property="icon"/>
        <result column="process" property="process"/>
        <result column="area" property="area"/>
        <result column="total_area" property="totalArea"/>
        <!--接收其他外键实体类数据-->
        <association property="orderDetail" javaType="com.example.erp.entity.sd.OrderDetail">
            <result column="building_number" property="buildingNumber"/>
            <result column="product_name" property="productName"/>
            <result column="width" property="width"/>
            <result column="height" property="height"/>
            <result column="shape" property="shape"/>
            <result column="gross_area" property="grossArea"/>
            <result column="edging_type" property="edgingType"/>
            <result column="area" property="area"/>
            <result column="quantity" property="quantity"/>
            <result column="processing_note"  property="processingNote"/>
            <result column="beizhu"  property="remarks"/>
@@ -81,11 +86,12 @@
           b.width,
           b.height,
           b.shape,
           b.gross_area,
           a.total_area,
           b.edging_type,
           a.child_width,
           a.child_height,
           b.area,
           a.icon,
           a.area,
           b.quantity,
           a.process,
           b.remarks as 'beizhu',
@@ -99,15 +105,20 @@
    
    <update id="updateSizeAndProcess" parameterType="java.util.List">
        <foreach collection="orderGlassDetails"  item="item" index="index" open="" close="" separator=";">
            update order_glass_detail
            update order_glass_detail as a,
                order_detail as b
            set
                child_width = #{item.childWidth},
                child_height = #{item.childHeight},
                process = #{item.process}
                a.child_width = #{item.childWidth},
                a.child_height = #{item.childHeight},
                a.area = #{item.area},
                a.total_area = #{item.area}*b.quantity,
                a.icon = #{item.icon},
                a.process = #{item.process}
            where
                order_id = #{item.orderId}
                and order_number = #{item.orderNumber}
                and technology_number = #{item.technologyNumber}
                a.order_id = b.order_id
                and a.order_id = #{item.orderId}
                and a.order_number = #{item.orderNumber}
                and a.technology_number = #{item.technologyNumber}
        </foreach>
    </update>
north-glass-erp/target/classes/mapper/sd/Product.xml
@@ -103,4 +103,8 @@
        limit #{offset},#{pageSize}
        ;
    </select>
    <update id="updateProductStateById">
        update product set state = #{state} where id = #{id}
    </update>
</mapper>