廖井涛
2024-09-05 8b2c74fb6842e8af60f70e7df6eef8837d74be07
Merge branch 'master' of http://bore.pub:10439/r/ERP_override
1个文件已添加
26个文件已修改
719 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabel.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelDetails.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelSemi.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelTwo.vue 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/TagStyleDesigner.vue 175 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/en.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/ru.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/zh.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/layout/MainErpView.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCardDetails.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/CrossProcessBreaking.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/ProcessCardProgress.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/ProductionSchedule.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/dto/pp/CrossProcessBreakingDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReworkService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/Report.xml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/userInfo/SysMenu.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/userInfo/SysMenuItem.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabel.vue
@@ -102,7 +102,7 @@
  // 遍历 lastList 并更新对应的属性
  lastList.value.forEach(obj => {
    // 获取前缀和 orderId
    const prefix = obj.processId.substring(0, 11);
    const prefix = lastList.value[id].processId.substring(0, 11);
    const orderId = obj.orderId;
    const glassNumber=lastList.value[id].glassNumber
    const customerName = obj.customerName
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelDetails.vue
@@ -30,7 +30,9 @@
  list:null,//勾选的数据
  faceOrientation:null,//内外面
  type:null,//标签模板
  lableType:null//标签类型
  lableType:null,//标签类型
  titleList:null,//标题
  switch:null//判断是否为新打印
})
const {currentRoute} = useRouter()
@@ -44,6 +46,7 @@
  faceOrientation='OUTSIDE'
}
let lableType = props.lableType
let switchType = props.switch
data.value.printList = JSON.parse(props.list)
onMounted(() => {
      request.post(`/processCard/getSelectPrintCustomLabelDetails/${type}/${lableType}`, data.value).then((res) => {
@@ -53,7 +56,11 @@
          list.value = deepClone(res.data.data)
          const data = produceList.value[0].value
          dataList = JSON.parse(`[${data}]`);
          labelList = dataList[0]
          if (switchType===true){
            labelList = props.titleList
          }else {
            labelList = dataList[0]
          }
          for (let i = 0; i < list.value.length; i++) {
            let count = list.value[i].data.length
            for (let j = 0; j < count; j++) {
@@ -62,10 +69,8 @@
              }
            }
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
@@ -103,7 +108,7 @@
  // 遍历 lastList 并更新对应的属性
  lastList.value.forEach(obj => {
    // 获取前缀和 orderId
    const prefix = obj.processId.substring(0, 11);
    const prefix = lastList.value[id].processId.substring(0, 11);
    const orderId = obj.orderId;
    const glassNumber=lastList.value[id].glassNumber
    // 根据 propertyName 更新属性
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelSemi.vue
@@ -30,7 +30,9 @@
  list:null,//勾选的数据
  faceOrientation:null,//内外面
  type:null,//标签模板
  lableType:null//标签类型
  lableType:null,//标签类型
  titleList:null,//标题
  switch:null//判断是否为新打印
})
const {currentRoute} = useRouter()
@@ -38,8 +40,8 @@
let type = props.type
let faceOrientation = props.faceOrientation
let lableType = props.lableType
let switchType = props.switch
data.value.printList = JSON.parse(props.list)
onMounted(() => {
      request.post(`/processCard/getSelectPrintCustomLabel/${type}/${lableType}`, data.value).then((res) => {
        if (res.code == 200) {
@@ -48,7 +50,11 @@
          list.value = deepClone(res.data.data)
          const data = produceList.value[0].value
          dataList = JSON.parse(`[${data}]`);
          labelList = dataList[0]
          if (switchType===true){
            labelList = props.titleList
          }else {
            labelList = dataList[0]
          }
          for (let i = 0; i < list.value.length; i++) {
            let count= list.value[i].data.length
            for (let j = 0; j < count; j++) {
@@ -59,7 +65,6 @@
          }
        } else {
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
north-glass-erp/northglass-erp/src/components/pp/PrintCustomLabelTwo.vue
New file
@@ -0,0 +1,270 @@
<script setup>
import request from "@/utils/request"
import {ElDatePicker, ElMessage} from "element-plus"
import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue"
import {Search} from "@element-plus/icons-vue"
import {useRouter} from 'vue-router'
import {changeFilterEvent, filterChanged} from "@/hook"
import {useI18n} from 'vue-i18n'
import deepClone from "@/utils/deepClone";
import companyInfo from "@/stores/sd/companyInfo"
const company = companyInfo()
//语言获取
const {t} = useI18n()
let router = useRouter()
let produceList = ref([])
let labelList = ref([])
let titleList = ref([])
let dataList = ref([])
let list = ref([])
let lastList = ref([])
let filterData = ref({})
const data = ref({
  printList: []
})
let props = defineProps({
  list:null,//勾选的数据
  faceOrientation:null,//内外面
  type:null,//标签模板
  lableType:null,//标签类型
  switch:null//判断是否为新打印
})
const {currentRoute} = useRouter()
const route = currentRoute.value
let type = props.type
let faceOrientation = props.faceOrientation
if (type.indexOf("英文")>-1 && faceOrientation==="此面为室内面"){
  faceOrientation='INSIDE'
}
else if (type.indexOf("英文")>-1 && faceOrientation==="此面为室外面"){
  faceOrientation='OUTSIDE'
}
let lableType = props.lableType
data.value.printList = JSON.parse(props.list)
let switchType = props.switch
onMounted(() => {
      request.post(`/processCard/getSelectPrintCustomLabel/${type}/${lableType}`, data.value).then((res) => {
        if (res.code == 200) {
          produceList.value = deepClone(res.data.title)
          list.value = deepClone(res.data.data)
          const data = produceList.value[0].value
          dataList = JSON.parse(`[${data}]`);
          if (switchType===true){
            labelList = props.titleList
          }else {
            labelList = dataList[0]
          }
          for (let i = 0; i < list.value.length; i++) {
            let count = list.value[i].data.length
            for (let j = 0; j < count; j++) {
              for (let k = 0; k < list.value[i].data[j].quantity; k++) {
                lastList.value.push(list.value[i].data[j])
              }
            }
          }
        } else {
          ElMessage.warning(res.msg)
        }
      })
    }
)
//修改相同产品名称标签
const updateProductName = (event, index,id) => {
  // 创建映射对象
  const propertyMapping = {};
  labelList.forEach(item => {
    propertyMapping[item.name] = item.title;
  });
  // 输入的值
  const newValue = event.target.innerText;
  const parts = newValue.split(':');
  const result = parts[1]; // 获取冒号后的部分
  // 获取映射中所有的键
  const keys = Object.keys(propertyMapping);
  // 根据 index 获取对应的属性名
  const propertyName = keys[index];
  // 如果映射中没有该 index,直接返回
  if (!propertyName) {
    console.warn('Unsupported index:', index);
    return;
  }
  // 遍历 lastList 并更新对应的属性
  lastList.value.forEach(obj => {
    // 获取前缀和 orderId
    const prefix = lastList.value[index].processId.substring(0, 11);
    const orderId = obj.orderId;
    const glassNumber=lastList.value[index].glassNumber
    // 根据 propertyName 更新属性
    if (propertyName === 'productAbbreviation' && prefix === obj.processId.substring(0, 11)) {
      obj.productAbbreviation = result;
    }
    if (propertyName === 'project' && orderId === obj.orderId) {
      obj.project = result;
    }
    if (propertyName === 'productName' && prefix === obj.processId.substring(0, 11)){
      obj.productName = result;
    }
    if (propertyName === 'customerName' && orderId === obj.orderId){
      obj.customerName = result;
    }
  });
}
</script>
<template>
  <div id="print" :class="company.printLabel.className.semi.printFlowCardName()">
    <div v-for="(item1,id) in lastList" :class="company.printLabel.className.semi.entiretyName()">
      <div class="row4">{{ faceOrientation }}</div>
      <div  v-for="(item,id) in labelList" :class="company.printLabel.className.semi.contentRowName()">
        <div contenteditable="true" v-if="item1[item.name] != null && item1[item.name] !== ''" class="row1" @input="updateProductName($event, id,index)">{{ item.title }}:{{ item1[item.name] }}</div>
        <!--        <div v-if="item1[item.name] != null && item1[item.name] !== ''" class="row2">{{ item1[item.name] }}</div>-->
      </div>
      <div v-html="company.printLabel.customSemi(item1)"></div>
    </div>
  </div>
</template>
<style scoped>
* {
  margin: 0;
  padding: 0;
}
body{
  overflow: hidden;
  font-family: Arial;
}
#printButton {
  margin-top: -20px;
  width: 100px;
}
/*半*/
.printFlowCard_semi {
  flex-wrap: wrap;
  font-size: 10px;
  display: flex;
  justify-content:space-between;
}
/*半*/
.entirety_semi {
  width: 45%;
  display: flex;
  text-align: center;
  flex-direction:column;
  margin: 8px;
}
.row3{
  text-align: center;
}
.contentRow{
  display: flex;
  text-align: center;
}
label{
  font-weight: bolder;
}
.contentRow .row1{
  width: 100%;
}
.entirety_semi .row4{
  text-align: right;
}
.contentRow .row1,.contentRow .row2{
  text-align: left;
}
@media print {
  @page {
    size: auto;  /* auto is the initial value */
    margin: 13mm 5mm 0mm 7mm;  /* this affects the margin in the printer settings */
  }
  div {
    page-break-inside: avoid;
  }
  .pagebreak {
    page-break-after: always;
  }
}
.printFlowCard_semi1 {
  flex-wrap: wrap;
  font-size: 8pt;
  display: flex;
}
/*成*/
.entirety_semi1 {
  width: 50%;
  display: flex;
  text-align: center;
  flex-direction: column;
  margin-left: -10px;
  height: 80px;
}
.contentRow1 {
  font-weight: bolder;
  display: flex;
  text-align: center;
  width: 100%;
}
.contentRow1 .row1 {
  width: 30%;
  font-weight: bolder;
}
.entirety_finished1 .row4 {
  font-weight: bolder;
  text-align: right;
  margin-right: 10px;
}
.contentRow1 .row1, .contentRow1 .row2 {
  text-align: left;
  font-weight: bolder;
}
</style>
north-glass-erp/northglass-erp/src/components/pp/TagStyleDesigner.vue
@@ -8,8 +8,14 @@
import {useRouter} from "vue-router";
import deepClone from "@/utils/deepClone";
import companyInfo from "@/stores/sd/companyInfo"
import PrintCustomLabel from '@/components/pp/PrintCustomLabelDetails.vue'
import PrintCustomLabelSemi from '@/components/pp/PrintCustomLabelSemi.vue'
import {Printer} from "@element-plus/icons-vue/global";
const { t } = useI18n()
const company = companyInfo()
const dialogTableVisibleLabel = ref(false)
const dialogTableVisibleCustomLabel = ref(false)
let produceList = ref([])
let labelList = ref([])
let dataList = ref([])
@@ -26,6 +32,30 @@
        height: 45
  },
}
//标签
let labelRow = ref({
  list: null,//勾选的数据
  faceOrientation: null,//内外面
  type: null,//标签模板
  lableType: null,//标签类型
  titleList:null,//标题列表
  switch:null//判断是否为新打印
})
//室内室外面
const stateValue = ref('')
const stateOptions = [
  {
    value: t('processCard.thisIsTheIndoorSurface'),
    label: t('processCard.thisIsTheIndoorSurface'),
  },
  {
    value: t('processCard.thisSideIsOutsideTheRoom'),
    label: t('processCard.thisSideIsOutsideTheRoom'),
  },
]
const autoPaper = ref({
  width:null,
  height:null
@@ -82,7 +112,13 @@
  lableType:null//标签类型
})
const printContentLabel = ref({
  id: 'childLabel',
})
const printContentLabelSemi = ref({
  id: 'childLabelSemi',
})
const {currentRoute} = useRouter()
const route = currentRoute.value
@@ -515,33 +551,60 @@
}
const htmlPrint = () => {
  let lableTypes= lableType.value
  let faceOrientation = stateValue.value
  type=tag.value.name
  if (type === null || type === '' || type === undefined) {
    ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle'))
    return
  }
  request.post(`/processCard/getSelectPrintCustomLabel/${type}/${lableType.value}`, data.value).then((res) => {
    if (res.code == 200) {
      produceList.value = deepClone(res.data.title)
      list.value = deepClone(res.data.data)
      const data = produceList.value[0].value
      dataList = JSON.parse(`[${data}]`);
      labelList = dataList[0]
      console.log(labelList.printElements)
      for (let i = 0; i < list.value.length; i++) {
        let count = list.value[i].data.length
        for (let j = 0; j < count; j++) {
          for (let k = 0; k < list.value[i].data[j].quantity; k++) {
            lastList.value.push(list.value[i].data[j])
          }
        }
      }
    } else {
      ElMessage.warning(res.msg)
      router.push("/login")
  const titleList = ref({})
  titleList.value=JSON.parse(JSON.stringify(hiprintTemplate.value.getJson()))
  const printElements = titleList.value.panels[0].printElements;
  const result = printElements.map(element => ({
    title: element.options.title,
    name: element.options.field
  }));
  labelRow.value.titleList=result
  labelRow.value.list =props.list
  labelRow.value.faceOrientation = faceOrientation
  labelRow.value.type = type
  labelRow.value.lableType = lableType.value
  labelRow.value.switch=true
  if (lableTypes == 1) {
    if (company.label === 1) {
      dialogTableVisibleLabel.value = true
    }
    hiprintTemplate.value.print(lastList.value)
  })
  } else if (lableTypes == 2) {
    if (company.label === 1) {
      dialogTableVisibleCustomLabel.value = true
    }
  }
  // request.post(`/processCard/getSelectPrintCustomLabelDetails/${type}/${lableType.value}`, data.value).then((res) => {
  //   if (res.code == 200) {
  //     produceList.value = deepClone(res.data.title)
  //     list.value = deepClone(res.data.data)
  //     const data = produceList.value[0].value
  //     dataList = JSON.parse(`[${data}]`);
  //     labelList = dataList[0]
  //     console.log(labelList.printElements)
  //     for (let i = 0; i < list.value.length; i++) {
  //       let count = list.value[i].data.length
  //       for (let j = 0; j < count; j++) {
  //         for (let k = 0; k < list.value[i].data[j].quantity; k++) {
  //           lastList.value.push(list.value[i].data[j])
  //         }
  //       }
  //     }
  //   } else {
  //     ElMessage.warning(res.msg)
  //     router.push("/login")
  //   }
  //   hiprintTemplate.value.print(lastList.value)
  // })
@@ -575,8 +638,8 @@
            </el-popover>
          </el-button-group>
        </el-col>
        <el-col :span="6">
            <el-select v-model="tag" @change="changeTag" placeholder="标签模板列表"  >
        <el-col :span="5">
            <el-select v-model="tag" @change="changeTag" placeholder="标签模板列表" style="width: 140px" >
              <el-option
                  v-for="(tag,index) in tags"
                  :key="index"
@@ -584,9 +647,21 @@
                  :value="tag"
              />
            </el-select>
          <el-select v-model="lableType" :placeholder="lableTypeOptions[0].label" class="m-2" style="width: 140px">
          <el-select v-model="lableType" :placeholder="lableTypeOptions[0].label" class="m-2" style="width: 120px">
            <el-option
                v-for="item in filteredOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value"
            />
          </el-select>
        </el-col>
        <el-col :span="2">
          <el-select v-model="stateValue" :placeholder="$t('processCard.pleaseSelect')" allow-create class="m-2" clearable
                     filterable style="width: 140px">
            <el-option
                v-for="item in stateOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value"
@@ -603,7 +678,7 @@
          <el-button :disabled="!tag.id" type="danger" @click="deleteTag">删除</el-button>
        </el-col>
        <el-col :span="1">
          <el-button type="danger" @click="htmlPrint">打印</el-button>
          <el-button type="danger" @click="htmlPrint">预览</el-button>
        </el-col>
      </el-row>
@@ -622,8 +697,58 @@
  </div>
  <!--    成品标签-->
  <el-dialog
      id="sizeCustom"
      v-model="dialogTableVisibleLabel"
      :title="$t('processCard.printLabel')"
      destroy-on-close
      style="width: 80%;height:75% ">
    <template #header="{ close, titleId, titleClass }">
      <el-button v-print="printContentLabel" :icon="Printer" circle/>
    </template>
    <print-custom-label id="childLabel"
                        :faceOrientation="labelRow.faceOrientation"
                        :lableType="labelRow.lableType"
                        :list="labelRow.list"
                        :type="labelRow.type"
                        :titleList="labelRow.titleList"
                        :switch="labelRow.switch"
                        style="width: 100%;height: 100%"/>
  </el-dialog>
  <!--   小片标签 -->
  <el-dialog
      id="sizeCustomSemi"
      v-model="dialogTableVisibleCustomLabel"
      :title="$t('processCard.labelStyle')"
      destroy-on-close
      style="width: 80%;height:75% ">
    <template #header="{ close, titleId, titleClass }">
      <el-button v-print="printContentLabelSemi" :icon="Printer" circle/>
    </template>
    <print-custom-label-semi id="childLabelSemi"
                             :faceOrientation="labelRow.faceOrientation"
                             :lableType="labelRow.lableType"
                             :list="labelRow.list"
                             :type="labelRow.type"
                             :titleList="labelRow.titleList"
                             :switch="labelRow.switch"
                             style="width: 100%;height: 100%"/>
  </el-dialog>
</template>
<style scoped>
:deep(#sizeCustom .el-dialog__body) {
  height: 85%;
  width: 100%;
  overflow-y: auto;
}
:deep(#sizeCustomSemi .el-dialog__body) {
  height: 85%;
  width: 100%;
  overflow-y: auto;
}
</style>
north-glass-erp/northglass-erp/src/lang/en.js
@@ -955,16 +955,16 @@
    },
    menu:{
        salesAndDistribution :'Sales and Distribution',
        productionPlanning :'Production Planning',
        materialManage :'Material Manage',
        userManage :'User Manage',
        "1" :'Sales and Distribution',
        "2" :'Production Planning',
        "3" :'Material Manage',
        "4" :'User Manage',
        product :'Product',
        order :'Order',
        delivery :'Delivery',
        returns :'Returns',
        customer :'Customer',
        Customer :'Customer',
        workOrder :'Work Order',
        processCard :'Process Card',
        reportingWorks :'Report for work',
@@ -973,7 +973,7 @@
        machine :'Machine',
        bOM :'BOM',
        report :'Report',
        productStock :'Product Stock',
        ProductStock :'Product Stock',
        ingredientsStock :'Ingredients Stock',
        ingredients :'Ingredients',
        trader :'Trader',
north-glass-erp/northglass-erp/src/lang/ru.js
@@ -949,16 +949,16 @@
    },
    menu:{
        salesAndDistribution :'Продажа и распределение',
        productionPlanning :'Производство и планирование',
        materialManage :'Закупки и материалы',
        userManage :'Пользователи и права доступа',
        "1" :'Продажа и распределение',
        "2" :'Производство и планирование',
        "3" :'Закупки и материалы',
        "4" :'Пользователи и права доступа',
        product :'Управление товарными запасами',
        order :'Управление заказами',
        delivery :'Управление доставкой',
        returns :'Управление возвратом',
        customer :'Информация о клиентах',
        Customer :'Информация о клиентах',
        workOrder :'Управление рабочей документацией',
        processCard :'Управление картами процессов',
        reportingWorks :'Управление обратной связью',
@@ -967,7 +967,7 @@
        machine :'Управление оборудованием',
        bOM :'Управление BOM',
        report :'Управление отчетами',
        productStock :'Запасы готовой продукции',
        ProductStock :'Запасы готовой продукции',
        ingredientsStock :'Запасы материалов',
        ingredients :'Материальные данные',
        trader :'Управление поставщиками',
north-glass-erp/northglass-erp/src/lang/zh.js
@@ -960,16 +960,16 @@
    },
    menu:{
        salesAndDistribution :'销售与分销',
        productionPlanning :'生产与计划',
        materialManage :'采购与物资',
        userManage :'用户与权限',
        "1" :'销售与分销',
        "2" :'生产与计划',
        "3" :'采购与物资',
        "4" :'用户与权限',
        product :'商品管理',
        order :'订单管理',
        delivery :'送货管理',
        returns :'退货管理',
        customer :'客户信息',
        Customer :'客户信息',
        workOrder :'工单管理',
        processCard :'流程卡管理',
        reportingWorks :'报工管理',
@@ -978,7 +978,7 @@
        machine :'设备管理',
        bOM :'BOM管理',
        report :'报表管理',
        productStock :'成品库存',
        ProductStock :'成品库存',
        ingredientsStock :'物料库存',
        ingredients :'物料资料',
        trader :'供应商管理',
north-glass-erp/northglass-erp/src/layout/MainErpView.vue
@@ -170,7 +170,7 @@
          </el-menu>-->
          <div class="menu"  >
              <div v-for="items in menuList">
                <div class='menu_title' @click="openMenu(items.id)"  >{{items.menuName}}<span class='indicator' >▼</span></div>
                <div class='menu_title' @click="openMenu(items.id)"  >{{$t('menu.'+items.id)}}<span class='indicator' >▼</span></div>
                <ul class='enter-x-left' v-show="openFlag==items.id">
                  <li v-for="menuItem in menuItemList"
@@ -179,7 +179,7 @@
                  >
                    <router-link
                        :to="{path:menuItem.url}">
                      {{ menuItem.itemName}}
                      {{ $t('menu.'+menuItem.menu)}}
                    </router-link>
                  </li>
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue
@@ -202,9 +202,7 @@
    titleSelectJson.value.dataType = res.data.type
    xGrid.value.reloadData(newDataCollection)
    gridOptions.loading = false
    if (userId!='admin'){
      gridOptions.toolbarConfig.buttons[5].visible=false
    }
    hideButton()
  } else {
@@ -763,7 +761,7 @@
                          style="width: 100%;height: 100%"/>
    </el-dialog>
    <!--    成品标签新疆-->
    <!--    成品标签两列-->
    <el-dialog
        id="sizeCustom"
        v-model="dialogTableVisibleLabelXJ"
@@ -819,6 +817,7 @@
      <select-sort-table id="child" :orderId="tableRow.orderId"/>
    </el-dialog>
<!--   标签样式    -->
    <el-dialog
        id="titleStyle"
        :title="$t('processCard.labelStyle')"
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCardDetails.vue
@@ -13,10 +13,12 @@
import PrintLabel from '@/views/pp/processCard/PrintLabel.vue'
import PrintCustomLabel from '@/components/pp/PrintCustomLabelDetails.vue'
import PrintCustomLabelSemi from '@/components/pp/PrintCustomLabelSemi.vue'
import PrintCustomLabelXJ from '@/components/pp/PrintCustomLabelTwo.vue'
import SortDetail from '@/components/pp/SelectSortDetailProcessCard.vue'
import footSum from "@/hook/footSum"
import companyInfo from "@/stores/sd/companyInfo"
import {CircleCheck, Download, Printer} from "@element-plus/icons-vue/global";
import TagStyleDesigner from "@/components/pp/TagStyleDesigner.vue";
const company = companyInfo()
@@ -27,8 +29,10 @@
const dialogTableVisible = ref(false)
const dialogTableVisibleLabel = ref(false)
const dialogTableVisibleCustomLabel = ref(false)
const dialogTableVisibleLabelXJ = ref(false)
const printVisible = ref(false)
let selectRecords = ref(null)
let titleStyleVisible = ref(false)
const selectRecordsData = ref({
  printList: []
@@ -315,6 +319,8 @@
      {code: 'customLabel', name: t('processCard.customLabelPrinting'), status: 'primary'},
      {code: 'printLabel', name: t('processCard.labelPrinting'), status: 'primary'},
      {code: 'printLabel2', name: t('processCard.labelPrinting2'), status: 'primary'},
      {code: 'printLabel3', name: '标签打印2', status: 'primary'},
      {code: 'printTest', name: "测试打印", status: 'primary'},
      // {code: 'printLike', name: "同配置打印", status: 'primary'},
    ],
    // import: false,
@@ -542,6 +548,58 @@
          dialogTableVisible.value = true
          break
        }
        case 'printTest': {
          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
            return
          }
          // if (type === null || type === '' || type === undefined) {
          //   ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle'))
          //   return
          // }
          let id = ""
          for (let i = 0; i < selectRecords.length; i++) {
            if (i + 1 === selectRecords.length) {
              id += selectRecords[i].id
            } else {
              id += selectRecords[i].id + "|"
            }
          }
          labelRow.value.list = JSON.stringify(selectRecords)
          labelRow.value.faceOrientation = faceOrientation
          labelRow.value.type = type
          labelRow.value.lableType = lableTypes
          titleStyleVisible.value = true
          break
        }
        case 'printLabel3': {
          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
            return
          }
          if (type === null || type === '' || type === undefined) {
            ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle'))
            return
          }
          let id = ""
          for (let i = 0; i < selectRecords.length; i++) {
            if (i + 1 === selectRecords.length) {
              id += selectRecords[i].id
            } else {
              id += selectRecords[i].id + "|"
            }
          }
          labelRow.value.list = JSON.stringify(selectRecords)
          labelRow.value.faceOrientation = faceOrientation
          labelRow.value.type = type
          labelRow.value.lableType = lableTypes
          dialogTableVisibleLabelXJ.value = true
          break
        }
      }
    }
  },
@@ -728,7 +786,39 @@
      <sort-detail id="child" :processId="editRow.processId" :technologyNumber="editRow.technologyNumber" :process="editRow.process"/>
    </el-dialog>
    <!--   标签样式    -->
    <el-dialog
        id="titleStyle"
        :title="$t('processCard.labelStyle')"
        style="width: 90%;height:93%;margin-top: 3vh "
        :close-on-click-modal="false"
        :close-on-press-escape="false"
        v-model="titleStyleVisible">
      <!--      <tag-style style="width: 100%;height: 100%"/>-->
      <tag-style-designer style="width: 100%;height: 100%"
                          :faceOrientation="labelRow.faceOrientation"
                          :lableType="labelRow.lableType"
                          :list="labelRow.list"
                          :type="labelRow.type"/>
    </el-dialog>
    <!--    成品标签两列-->
    <el-dialog
        id="sizeCustom"
        v-model="dialogTableVisibleLabelXJ"
        :title="$t('processCard.printLabel')"
        destroy-on-close
        style="width: 80%;height:75% ">
      <template #header="{ close, titleId, titleClass }">
        <el-button v-print="printContentLabel" :icon="Printer" circle/>
      </template>
      <print-custom-label-x-j id="childLabel"
                              :faceOrientation="labelRow.faceOrientation"
                              :lableType="labelRow.lableType"
                              :list="labelRow.list"
                              :type="labelRow.type"
                              style="width: 100%;height: 100%"/>
    </el-dialog>
  </div>
</template>
@@ -762,4 +852,10 @@
  overflow-y: auto;
}
:deep(#titleStyle .el-dialog__body) {
  height: 95%;
  width: 100%;
  overflow-y: auto;
}
</style>
north-glass-erp/northglass-erp/src/views/pp/report/CrossProcessBreaking.vue
@@ -8,19 +8,19 @@
  columns:[
    {type:'expand',fixed:"left",width: 80},
    {type: 'seq',fixed:"left", title: '自序', width: 80 },
    {field: 'reportingWork.reportingWorkTime', width: 120, title: t('reportingWorks.reportingWorkTime'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true, },
    {field: 'reportingWork.processId', width: 160,title: t('processCard.processId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reportingWorkTime', width: 120, title: t('reportingWorks.reportingWorkTime'), sortable: true, },
    {field: 'processId', width: 160,title: t('processCard.processId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'code', width: 160,title: t('reportingWorks.glassNumber') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reportingWork.thisProcess',width: 120, title: t('reportingWorks.reportingProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'thisProcess',width: 120, title: t('reportingWorks.reportingProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'responsibleProcess',width: 120, title: t('reportingWorks.responsibleProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'responsibleTeam', width: 130,title: t('reportingWorks.responsibleTeam'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'breakageType', width: 100,title: t('reportingWorks.breakageType'), sortable: true,showOverflow:"ellipsis"},
    {field: 'breakageReason', width: 100,title: t('reportingWorks.breakageReason'), sortable: true,showOverflow:"ellipsis"},
    {field: 'breakageQuantity', width: 100,title: t('reportingWorks.quantityBroken'), sortable: true},
    {field: 'area',width: 100, title: t('reportingWorks.wornArea'), sortable: true},
    {field: 'order.project', width: 120,title: t('order.project'), sortable: true},
    {field: 'order.orderId',width: 120, title: t('order.orderId'), sortable: true},
    {field: 'orderGlassDetail.glassChild',width: 120, title: t('reportingWorks.glassChild'), sortable: true},
    {field: 'project', width: 120,title: t('order.project'), sortable: true},
    {field: 'orderId',width: 120, title: t('order.orderId'), sortable: true},
    {field: 'glassChild',width: 120, title: t('reportingWorks.glassChild'), sortable: true},
  ],//表格表头字段
  data:[],//表格数据
  url :'/report/crossProcessBreaking',
north-glass-erp/northglass-erp/src/views/pp/report/ProcessCardProgress.vue
@@ -73,7 +73,7 @@
    filterMethod: filterChanged},
  {field: 'quantity', width: 90,title: t('order.quantity')},
  {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')},
  {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')},
  // {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')},
  {field: 'inventory',width: 120, title: t('report.inventoryNum')},
  {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')},
]
north-glass-erp/northglass-erp/src/views/pp/report/ProductionSchedule.vue
@@ -63,15 +63,15 @@
    slots: {filter: 'num1_filter'},
    filterMethod: filterChanged},
  {field: 'product_name', width: 120,title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged},
  {field: 'child_width',width: 110, title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged},
  {field: 'child_width',width: 110, title: t('order.width')},
  {field: 'child_height', width: 90,title: t('order.height'),showOverflow:"ellipsis"},
  {field: 'quantity', width: 90,title: t('order.quantity')},
  {field: 'technology_number',width: 90, title: t('processCard.technologyNumber')},
  {field: 'glass_child',width: 120, title: t('reportingWorks.glassChild')},
  {field: 'inventoryNum',width: 120, title: t('report.inventoryNum')},
  {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')},
  {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')},
  {field: 'area',width: 120, title: t('report.area')},
  // {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')},
  // {field: 'area',width: 120, title: t('report.area')},
]
//需要合并的列
let column = [1,2,3]
@@ -216,7 +216,7 @@
    </div>
    <vxe-grid
        height="400px"
        height="100%"
        @filter-change="filterChanged"
        class="mytable-scrollbar"
        ref="xGrid"
@@ -256,7 +256,7 @@
<style scoped>
.main-div-customer{
  width: 99%;
  height: 100%;
  height: 95%;
}
#selectForm {
  width: 60%;
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
@@ -1010,7 +1010,8 @@
    process: titleUploadData.value.previousProcess,
    processId:processId,
    thisProcess:titleUploadData.value.thisProcess,
    technologyStr:technologyStr
    technologyStr:technologyStr,
    userName:user.user.userName
  }
  loadingFlag.value= true
  request.post("/reportingWork/reviewReportingWork",reportWork).then((res) =>{
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/SelectReportingWorks.vue
@@ -89,7 +89,7 @@
//获取七天前到当前时间
function getNowTime() {
  const start = new Date(new Date().getTime()- 3600 * 1000 * 24 * 7)
  const start = new Date(new Date().getTime()- 3600 * 1000 * 24 * 3)
      .toISOString()
      .replace('T', ' ')
      .slice(0,10) //默认开始时间7天前
@@ -337,6 +337,7 @@
    {field: 'deviceName', width: 100,title: t('reportingWorks.deviceType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'teamsGroupsName',width: 120, title: t('reportingWorks.teamsType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'reviewedState',width: 120, title: t('processCard.reviewedState'), },
    {field: 'reviewed',width: 120, title: '审核人', },
    {field: 'notes',width: 120, title: t('basicData.remarks'), },
  ],//表头按钮
north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportController.java
@@ -50,8 +50,8 @@
    public Result getOrderReport(@PathVariable Integer pageNum,
                                 @PathVariable Integer pageSize,
                                 @PathVariable List<String> selectDate,
                                 @RequestBody DamageDetails damageDetails) {
        return Result.seccess(reportService.crossProcessBreakingSv(pageNum, pageSize, selectDate, damageDetails));
                                 @RequestBody CrossProcessBreakingDTO crossProcessBreakingDTO) {
        return Result.seccess(reportService.crossProcessBreakingSv(pageNum, pageSize, selectDate, crossProcessBreakingDTO));
    }
north-glass-erp/src/main/java/com/example/erp/dto/pp/CrossProcessBreakingDTO.java
@@ -19,6 +19,8 @@
    private String responsibleProcess;
    @ExcelProperty("责任班组")
    private String responsibleTeam;
    @ExcelProperty("报工工序")
    private String thisProcess;
    @ExcelProperty("次破类型")
    private String breakageType;
    @ExcelProperty("次破原因")
@@ -31,6 +33,10 @@
    private String project;
    @ExcelProperty("销售单号")
    private String orderId;
    @ExcelProperty("流程卡号")
    private String processId;
    @ExcelProperty("单片名称")
    private String glassChild;
    @ExcelProperty("编号")
    private String code;
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportMapper.java
@@ -17,9 +17,9 @@
    List<Map<String, String>> processCardProgressMp(String orderId);
    List<DamageDetails> getProcessBreaking(Integer offset, Integer pageSize, String startDate, String endDate, DamageDetails damageDetails);
    List<CrossProcessBreakingDTO> getProcessBreaking(Integer offset, Integer pageSize, String startDate, String endDate, CrossProcessBreakingDTO crossProcessBreakingDTO);
    Map<String, Integer> getProcessBreakingTotal(Integer offset, Integer pageSize, String startDate, String endDate, DamageDetails damageDetails);
    Map<String, Integer> getProcessBreakingTotal(Integer offset, Integer pageSize, String startDate, String endDate, CrossProcessBreakingDTO crossProcessBreakingDTO);
    List<Map<String, String>> workInProgressMp(
            Integer offset, Integer pageSize,
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
@@ -77,7 +77,7 @@
    Integer selectLayerByReportingWorkId(String reportingWorkId);
    Boolean ReviewReportingWorkMp(String substring, String process, String result);
    Boolean ReviewReportingWorkMp(String substring, String process, String result, String userName);
    String getPatchConditionMp(String reportingWorkId);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -3,10 +3,7 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.erp.dto.pp.DamageReportDTO;
import com.example.erp.dto.pp.ScheduleProductionScheduleDTO;
import com.example.erp.dto.pp.TeamOutputDTO;
import com.example.erp.dto.pp.WorkInProgressDTO;
import com.example.erp.dto.pp.*;
import com.example.erp.entity.pp.DamageDetails;
import com.example.erp.entity.pp.Report;
import com.example.erp.mapper.pp.ProductionSchedulingMapper;
@@ -103,7 +100,7 @@
        return map;
    }
    public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize, List<String> selectDate, DamageDetails damageDetails) {
    public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize, List<String> selectDate, CrossProcessBreakingDTO crossProcessBreakingDTO) {
        Integer offset = (pageNum - 1) * pageSize;
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(15).toString();
@@ -116,8 +113,8 @@
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("data", reportMapper.getProcessBreaking(offset, pageSize, startDate, endDate, damageDetails));
        map.put("total", reportMapper.getProcessBreakingTotal(offset, pageSize, startDate, endDate, damageDetails));
        map.put("data", reportMapper.getProcessBreaking(offset, pageSize, startDate, endDate, crossProcessBreakingDTO));
        map.put("total", reportMapper.getProcessBreakingTotal(offset, pageSize, startDate, endDate, crossProcessBreakingDTO));
        List<String> list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -335,6 +335,7 @@
        String processId = reportingWork.get("processId");
        String thisProcess = reportingWork.get("thisProcess");
        String userName=reportingWork.get("userName");
        int index = processId.lastIndexOf("/") + 1;
        String result = processId.substring(index);
        String technologyStr = reportingWork.get("technologyStr");
@@ -346,10 +347,11 @@
                .eq(ReportingWork::getProcessId, processId.substring(0, 14))
                .eq(ReportingWork::getThisProcess, reportingWork.get("process"))
                .eq(ReportingWork::getReviewedState, 0)
                .eq(ReportingWork::getReviewed, userName)
                .setSql("reviewed_state =1");
        reportingWorkMapper.update(null, updateWrapper);
}else {
    reportingWorkMapper.ReviewReportingWorkMp(processId.substring(0, 14),reportingWork.get("process"),technologyStr);
    reportingWorkMapper.ReviewReportingWorkMp(processId.substring(0, 14),reportingWork.get("process"),technologyStr,userName);
}
        return true;
north-glass-erp/src/main/java/com/example/erp/service/pp/ReworkService.java
@@ -59,7 +59,6 @@
        for (Map<String, Object> item : ReworkMap) {
            item.put("reworkTeam", "");
            List<BasicDataProduce> basicCategory = new ArrayList<>();
            List<BasicDataProduce> basicDataProduceList = basicDateProduceMapper.SelectWorkBasicTeams(item.get("reworkProcesses").toString());
            for (BasicDataProduce basicDataProduce : basicDataProduceList) {
                if (Objects.equals(basicDataProduce.getBasicData().getBasicName(), item.get("reworkProcesses"))) {
north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -50,20 +50,19 @@
    </resultMap>
    <resultMap id="damageDetailsTableMap" type="com.example.erp.entity.pp.DamageDetails">
    <resultMap id="damageDetailsTableMap" type="com.example.erp.dto.pp.CrossProcessBreakingDTO">
        <result column="responsible_process" property="responsibleProcess"/>
        <result column="responsible_team" property="responsibleTeam"/>
        <result column="breakage_type" property="breakageType"/>
        <result column="breakage_reason" property="breakageReason"/>
        <result column="breakage_quantity" property="breakageQuantity"/>
        <result column="area" property="area"/>
        <result column="reporting_work_id" property="reportingWork.reportingWorkId"/>
        <result column="reporting_work_time" property="reportingWork.reportingWorkTime"/>
        <result column="this_process" property="reportingWork.thisProcess"/>
        <result column="project" property="order.project"/>
        <result column="order_id" property="order.orderId"/>
        <result column="glass_child" property="orderGlassDetail.glassChild"/>
        <result column="process_id" property="reportingWork.processId"/>
        <result column="reporting_work_time" property="reportingWorkTime"/>
        <result column="this_process" property="thisProcess"/>
        <result column="project" property="project"/>
        <result column="order_id" property="orderId"/>
        <result column="glass_child" property="glassChild"/>
        <result column="process_id" property="processId"/>
        <result column="code" property="code"/>
    </resultMap>
@@ -237,6 +236,21 @@
          and dd.available = 0
          and reviewed_state != 2
          and rw.this_process != dd.responsible_process
        <if test="crossProcessBreakingDTO.code != null and crossProcessBreakingDTO.code != ''">
            and JSON_UNQUOTE( JSON_EXTRACT( od.other_columns, '$.S01' )) regexp #{crossProcessBreakingDTO.code}
        </if>
        <if test="crossProcessBreakingDTO.processId != null and crossProcessBreakingDTO.processId != ''">
            and rw.process_id regexp #{crossProcessBreakingDTO.processId}
        </if>
        <if test="crossProcessBreakingDTO.thisProcess != null and crossProcessBreakingDTO.thisProcess != ''">
            and rw.this_process regexp #{crossProcessBreakingDTO.thisProcess}
        </if>
        <if test="crossProcessBreakingDTO.responsibleProcess != null and crossProcessBreakingDTO.responsibleProcess != ''">
            and dd.responsible_process regexp #{crossProcessBreakingDTO.responsibleProcess}
        </if>
        <if test="crossProcessBreakingDTO.responsibleTeam != null and crossProcessBreakingDTO.responsibleTeam != ''">
            and dd.responsible_team regexp #{crossProcessBreakingDTO.responsibleTeam}
        </if>
        GROUP BY dd.id
        order by dd.id desc
        limit #{offset},#{pageSize}
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -16,7 +16,6 @@
        <result property="thisWornQuantity" column="this_worn_quantity"/>
        <result property="deviceName" column="device_name"/>
        <result property="teamsGroupsName" column="teams_groups_name"/>
        <result property="reviewedState" column="reviewed_state"/>
        <result property="reportingWorkId" column="reporting_work_id"/>
        <result property="processId" column="process_id"/>
        <result property="completedArea" column="completedArea"/>
@@ -24,6 +23,7 @@
        <result property="qualityInspector" column="quality_inspector"/>
        <result property="qualityInsTime" column="quality_ins_time"/>
        <result property="notes" column="notes"/>
        <result property="reviewed" column="reviewed"/>
        <association property="order" javaType="com.example.erp.entity.sd.Order">
            <result property="customerId" column="customer_id"/>
@@ -518,7 +518,8 @@
               rw.device_name,
               rw.teams_groups_name,
               rw.reviewed_state,
               rw.notes
               rw.notes,
               rw.reviewed
        # (IF(rw.reviewed_state = 0, '未审核', IF(rw.reviewed_state = 1, '审核通过', '审核不通过'))) as reviewed_state
        from sd.order as o
                 left join sd.order_glass_detail as ogd on ogd.order_id = o.order_id
@@ -802,7 +803,7 @@
    <update id="ReviewReportingWorkMp">
        update reporting_work as rw
            left join reporting_work_detail as rwd on rw.reporting_work_id = rwd.reporting_work_id
        set rw.reviewed_state = 1
        set rw.reviewed_state = 1 ,rw.reviewed=#{userName}
        where rw.process_id = #{substring} and rw.this_process=#{process}
          and POSITION(rwd.technology_number in #{result}) and reviewed_state=0
    </update>
north-glass-erp/src/main/resources/mapper/userInfo/SysMenu.xml
@@ -9,7 +9,6 @@
        from sys_menu as a
        where
            a.state=1
            and a.languageType = #{lang}
        order by a.listSort
        ;
    </select>
north-glass-erp/src/main/resources/mapper/userInfo/SysMenuItem.xml
@@ -9,7 +9,6 @@
        from `sys_menu_item` as a
        where
            a.state=1
           and a.languageType = #{lang}
        order by
            a.menuId,a.listSort
        ;