wu
2025-02-17 84e2a3ccb2e89128db849d30332a8daf142b4086
Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject

# Conflicts:
# hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
4个文件已添加
26个文件已修改
7个文件已删除
2250 ■■■■ 已修改文件
UI-Project/config.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/ganghuaqian.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/screen2.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/xiaoche.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/zhongkong.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/constants.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/request.js 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/cachingbefore.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/cachingun.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/GlassStorage/rawfilmstorage.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/upreturns.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/upreturns2.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindication.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/PrintCustomLabelSemi1.vue 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/PrintFlow.vue 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/UnLoadGlass.vue 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 584 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/hollow/hollowequipment.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/hollow/hollowslicecage.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/gateway/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/config.js
@@ -1,11 +1,13 @@
export default {
    // serverUrl: "10.153.19.150:88/api",
//  serverUrl: "192.168.2.100:88/api",
    serverUrl: "127.0.0.1:88",
//     serverUrl: "192.168.0.39:88",
    // serverUrl: "10.153.19.162:88",
    // serverUrl: "127.0.0.1:88",
    // serverUrl: "10.153.19.47:88",
    // serverUrl2: "10.153.19.150:88"
    // serverUrl2: "192.168.2.100:88"
    serverUrl2: "127.0.0.1:88"
    // serverUrl2: "10.153.19.162:88"
    // serverUrl2: "127.0.0.1:88"
    // serverUrl2: "192.168.0.39:88"
    //serverUrl:"res.abeim.cn"
}
UI-Project/src/assets/ganghuaqian.png
UI-Project/src/assets/screen2.png
UI-Project/src/assets/xiaoche.png
UI-Project/src/assets/zhongkong.png
UI-Project/src/router/index.js
@@ -152,34 +152,6 @@
  },
]
},
          /*----------- 下片台 ----------------*/
        {
          path: 'UnLoadGlass',
          name: 'UnLoadGlass',
          component: () => import('../views/UnLoadGlass/UnLoadGlass.vue'),
          children:[
            {
              path: '/UnLoadGlass/loadmachinerack',
              name: 'loadmachinerack',
              component: () => import('../views/UnLoadGlass/loadmachinerack.vue')
            },
            {
              path: '/UnLoadGlass/loadmachineracktwo',
              name: 'loadmachineracktwo',
              component: () => import('../views/UnLoadGlass/loadmachineracktwo.vue')
            },
            {
              path: '/UnLoadGlass/Landingindication',
              name: 'Landingindication',
              component: () => import('../views/UnLoadGlass/Landingindication.vue')
            },
            {
              path: '/UnLoadGlass/Landingindicationtwo',
              name: 'Landingindicationtwo',
              component: () => import('../views/UnLoadGlass/Landingindicationtwo.vue')
            }
          ]
        },
         /*----------- 仓储中心 ----------------*/
         {
          path: 'GlassStorage',
UI-Project/src/utils/constants.js
@@ -1,6 +1,7 @@
//  export const WebSocketHost = "192.168.2.100";
// export const WebSocketHost = "192.168.0.39";
// export const WebSocketHost = "10.153.19.150";
// export const WebSocketHost = "192.168.2.100";
export const WebSocketHost = "127.0.0.1";
export const WebSocketHost = "10.153.19.150";
// export const WebSocketHost = "10.153.19.47";
// export const WebSocketHost = "10.153.19.162";
// export const WebSocketHost = "127.0.0.1";
export const host = "88";
UI-Project/src/utils/request.js
@@ -1,48 +1,43 @@
import axios from 'axios'
import config from '../../config';
import useUserInfoStore from '@/stores/userInfo'
import {host, WebSocketHost} from '@/utils/constants'
const userStore=useUserInfoStore()
const request = axios.create({
    baseURL: `http://${config.serverUrl}`,  // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置!
    timeout: 30000
   baseURL: `http://${WebSocketHost}:${host}/api`, // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置!
   timeout: 30000
})
//
// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
request.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';
    if(userStore.user){
        config.headers['token'] = userStore.user.token;
    }
      // 设置请求头
    return config
   config.headers['Content-Type'] = 'application/json;charset=utf-8';
   if(userStore.user){
      config.headers['token'] = userStore.user.token;
   }
   // 设置请求头
   return config
}, error => {
    return Promise.reject(error)
});
// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res;
    },
    error => {
        console.log('err' + error) // for debug
        return Promise.reject(error)
    }
   response => {
      let res = response.data;
      // 如果是返回的文件
      if (response.config.responseType === 'blob') {
          return res
      }
      // 兼容服务端返回的字符串数据
      if (typeof res === 'string') {
          res = res ? JSON.parse(res) : res
      }
      return res;
   },
   error => {
       console.log('err' + error) // for debug
       return Promise.reject(error)
   }
)
export default request
UI-Project/src/views/Caching/cachingbefore.vue
@@ -2,6 +2,7 @@
import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive} from "vue";
import {useRouter} from "vue-router"
import {host, WebSocketHost} from '@/utils/constants'
import dayjs from 'dayjs';
import request from "@/utils/request"
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
import {ElMessage, ElMessageBox} from 'element-plus'
@@ -37,9 +38,12 @@
  //     id: rect.id * 10,
  //   })); 
};
// 初始化 WebSocket,并传递消息处理函数
onMounted(() => {
  socket = initializeWebSocket(socketUrl, handleMessage);
  const endTime = dayjs().startOf('minute'); // 当前时间,精确到分钟
  const startTime = endTime.subtract(1, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟
  // 设置时间范围为 [开始时间, 结束时间]
  timeRange.value = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')];
});
// 历史任务
const handlehistorical = (row) => {
@@ -66,8 +70,8 @@
  try { 
    const params = {
      deviceId: 1,
      startTime: timeRange.value[0] || '',
      endTime: timeRange.value[1] || '',
      startTime: (timeRange.value && timeRange.value[0]) || '',
      endTime: (timeRange.value && timeRange.value[1]) || '',
      glassId: glassId.value || '',
      taskState: taskStat.value,
      taskType: taskType.value || ''
UI-Project/src/views/Caching/cachingun.vue
@@ -2,6 +2,7 @@
import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive} from "vue";
import {useRouter} from "vue-router"
import {host, WebSocketHost} from '@/utils/constants'
import dayjs from 'dayjs';
import request from "@/utils/request"
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
import {ElMessage, ElMessageBox} from 'element-plus'
@@ -36,9 +37,12 @@
  //     id: rect.id * 10,
  //   })); 
};
// 初始化 WebSocket,并传递消息处理函数
onMounted(() => {
  socket = initializeWebSocket(socketUrl, handleMessage);
  const endTime = dayjs().startOf('minute'); // 当前时间,精确到分钟
  const startTime = endTime.subtract(1, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟
  // 设置时间范围为 [开始时间, 结束时间]
  timeRange.value = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')];
});
// 历史任务
const handlehistorical = (row) => {
@@ -65,8 +69,8 @@
  try { 
    const params = {
      deviceId: 2,
      startTime: timeRange.value[0] || '',
      endTime: timeRange.value[1] || '',
      startTime: (timeRange.value && timeRange.value[0]) || '',
      endTime: (timeRange.value && timeRange.value[1]) || '',
      glassId: glassId.value || '',
      taskState: taskState.value,
      taskType: taskType.value || ''
UI-Project/src/views/GlassStorage/rawfilmstorage.vue
@@ -101,7 +101,7 @@
      } 
    );
    if (confirmResult === 'confirm') {
    var url="/glassStorage/rawGlassStorageDetails/deleteWarehousing?slotId="+row.slotId;
    var url="/glassStorage/rawGlassStorageDetails/deleteWarehousing?slot="+row.slot;
    const response = await request.post(url)
      // const response = await request.post("/glassStorage/rawGlassStorageDetails/deleteWarehousing",[row.slotId])
    if (response.code === 200) {
@@ -192,7 +192,7 @@
      } 
    );
    if (confirmResult === 'confirm') {
      var url="/glassStorage/rawGlassStorageDetails/outWarehousing?slotId="+row.slotId;
      var url="/glassStorage/rawGlassStorageDetails/outWarehousing?slotId="+row.slot;
      const response = await request.post(url)
      // const response = await request.post("/glassStorage/rawGlassStorageDetails/outWarehousing",[row.slotId])
    if (response.code === 200) {
@@ -220,8 +220,8 @@
    }
  }
  const response = await request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest", {
    beginDate: timeRange.value[0],
    endDate: timeRange.value[1],
    beginDate: (timeRange.value && timeRange.value[0]) || '',
    endDate: (timeRange.value && timeRange.value[1]) || '',
    taskState: stateList,
    taskType: celllist
  })
UI-Project/src/views/Returns/upreturns.vue
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue";
import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref, computed} from "vue";
import {useRouter} from "vue-router"
import { ElMessage, ElMessageBox } from 'element-plus'
import {useI18n} from 'vue-i18n'
@@ -26,7 +26,24 @@
const cuttingMachineStatusColor = ref('#911005');
const tableDataa = ref<any[]>([]);
const tableDatab = ref<any[]>([]);
const tableData = ref([])
// const tableData = ref([])
const tableData = reactive([]);
const filteredData = computed(() => {
  // applyFilters 函数应该在某处定义,用于根据当前筛选条件过滤数据
  return applyFilters(tableData, currentFilters);
});
// 当前筛选条件,应该是一个响应式变量,用于存储用户选择的筛选值
const currentFilters = ref<{ state?: string }>({});
const filterTag = (value: string, row: any) => {
  // return String(row.state) === value;
  return row.state === value
};
// 应用筛选条件的函数
const applyFilters = (data: any[], filters: { state?: string }) => {
  return data.filter(row => {
    return (!filters.state || String(row.state) === filters.state);
  });
};
const titleSelectJson = ref({
  engineerId: [],
})
@@ -63,6 +80,7 @@
     window.localStorage.setItem('engineeringIda', tableData[0].engineeringId)
}
  } catch (error) {
    ElMessage.error(response.message);
  }
};
let socket = null;
@@ -70,7 +88,9 @@
const handleMessage = (data: any) => {
  tableDataa.value = data.list[0].slice(0, 2);
  if(data.loadTask1.length !=0){
  tableData.value = data.loadTask1[0]
  // tableData.value = data.loadTask1[0]
  tableData.splice(0, tableData.length, ...data.loadTask1[0]);
  window.localStorage.setItem('engineeringIda', tableData.value[0].engineeringId)
  canSelectProjecta.value = false;
  canSelectProjectb.value = false;
  canSelectProjectc.value = true;
@@ -119,7 +139,7 @@
    window.localStorage.setItem('filmRemove', filmRemove.value)
    if (response.code == 200) {
      ElMessage.success(response.message);
      // closeWebSocket(socket);
      closeWebSocket(socket);
      tableData.value = response.data;
      dialogFormVisible.value = false;
      selectedProjectNo.value = '';
@@ -137,7 +157,6 @@
const deleteTask = async () => {
  try {
    let engineeringId = window.localStorage.getItem('engineeringIda')
    console.log(engineeringId);
    if (engineeringId !== '') {
      const response = await request.post('/loadGlass/engineering/engineering/deleteTask', {
        engineerId: engineeringId,
@@ -167,13 +186,13 @@
// 开始上片
const handleon = async () => {
  let filmRemove = window.localStorage.getItem('filmRemove')
  let engineeringIda = window.localStorage.getItem('engineeringIda')
  let engineeringId = window.localStorage.getItem('engineeringIda')
  if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') {
    try {
      const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
        stationCell: 5,
        filmRemove: filmRemove,
        engineerId: engineeringIda,
        engineerId: engineeringId,
        state: 1,
      })
      if (response.code == 200) {
@@ -181,7 +200,7 @@
        canSelectProjecta.value = false;
        canSelectProjectb.value = false;
        canSelectProjectc.value = true;
        // socket = initializeWebSocket(socketUrl, handleMessage);
        socket = initializeWebSocket(socketUrl, handleMessage);
        blind.value = false;
      } else {
        ElMessage.error(response.message);
@@ -198,7 +217,6 @@
  try {
    let filmRemove = window.localStorage.getItem('filmRemove')
    let engineeringId = window.localStorage.getItem('engineeringIda')
    console.log(engineeringId);
    if (engineeringId !== '') {
      const response = await request.post('/loadGlass/engineering/engineering/pause', {
        stationCell: 5,
@@ -384,28 +402,12 @@
        </el-button>
        <div style="margin-left: 70px;">{{ upstatus }}</div>
        <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatusColor, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
        <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;">{{
            $t('basicData.change')
          }}
        </el-button>
  </div>
    <el-button :disabled="!canSelectProjecta" style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="selectproject">{{ $t('Mounting.previewproject') }}</el-button>
    <el-button :disabled="!canSelectProjectb" style="margin-top: 5px;margin-left: 20px;" type="success" @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
    <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
    <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handledelete">{{ $t('searchOrder.deleteTask') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
    <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.oneloadingline')"
               style="margin-top: 5px;margin-left: 20px;">
      <el-option :label="$t('Mounting.all')" value="0"></el-option>
      <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option>
      <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option>
    </el-select>
    <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-top: 5px;margin-left: 20px;" >
      <el-option :label="$t('Mounting.waiting')" value="1"></el-option>
      <el-option :label="$t('film.execution')" value="2"></el-option>
      <el-option :label="$t('film.finish')" value="3"></el-option>
    </el-select>
    <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('Mounting.setparameters') }}</el-button>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table
@@ -424,21 +426,28 @@
              <span>{{ 1 }}</span>
            </template>
          </el-table-column>
          <el-table-column
              align="center"
              :label="$t('Mounting.state')"
            min-width="80"
            prop="state"
          >
          <template #default="scope">
            <el-tag
      <el-table-column
      align="center"
      prop="state"
      :label="$t('Mounting.state')"
      min-width="80"
      :filters="[
        { text: t('Mounting.pass'), value: 100 },
        { text: t('Mounting.waiting'), value: 0 },
      ]"
      :filter-method="filterTag"
      filter-placement="bottom-end"
    >
      <template #default="scope">
        <el-tag
                :type="scope.row.state === 100 ? 'success' : 'warning'"
                @click="toggleEnableState(scope.row)"
                disable-transitions
            >
              {{ scope.row.state === 100 ? $t('Mounting.pass') : $t('Mounting.waiting') }}
            </el-tag>
          </template>
      </el-table-column>
      </template>
    </el-table-column>
        </el-table>
      </div>
    </el-card>
UI-Project/src/views/Returns/upreturns2.vue
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue";
import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref, computed} from "vue";
import {useRouter} from "vue-router"
import { ElMessage, ElMessageBox } from 'element-plus'
import {useI18n} from 'vue-i18n'
@@ -26,7 +26,24 @@
const cuttingMachineStatusColor = ref('#911005');
const tableDataa = ref<any[]>([]);
const tableDatab = ref<any[]>([]);
const tableData = ref([])
// const tableData = ref([])
const tableData = reactive([]);
const filteredData = computed(() => {
  // applyFilters 函数应该在某处定义,用于根据当前筛选条件过滤数据
  return applyFilters(tableData, currentFilters);
});
// 当前筛选条件,应该是一个响应式变量,用于存储用户选择的筛选值
const currentFilters = ref<{ state?: string }>({});
const filterTag = (value: string, row: any) => {
  // return String(row.state) === value;
  return row.state === value
};
// 应用筛选条件的函数
const applyFilters = (data: any[], filters: { state?: string }) => {
  return data.filter(row => {
    return (!filters.state || String(row.state) === filters.state);
  });
};
const titleSelectJson = ref({
  engineerId: [],
})
@@ -70,7 +87,9 @@
const handleMessage = (data: any) => {
  tableDataa.value = data.list[0].slice(2, 4);
  if(data.loadTask2.length !=0){
  tableData.value = data.loadTask2[0]
  tableData.splice(0, tableData.length, ...data.loadTask1[0]);
  // tableData.value = data.loadTask2[0]
  window.localStorage.setItem('engineeringIda', tableData.value[0].engineeringId)
  canSelectProjecta.value = false;
  canSelectProjectb.value = false;
  canSelectProjectc.value = true;
@@ -119,7 +138,7 @@
    window.localStorage.setItem('filmRemove', filmRemove.value)
    if (response.code == 200) {
      ElMessage.success(response.message);
      // closeWebSocket(socket);
      closeWebSocket(socket);
      tableData.value = response.data;
      dialogFormVisible.value = false;
      selectedProjectNo.value = '';
@@ -181,7 +200,7 @@
        canSelectProjecta.value = false;
        canSelectProjectb.value = false;
        canSelectProjectc.value = true;
        // socket = initializeWebSocket(socketUrl, handleMessage);
        socket = initializeWebSocket(socketUrl, handleMessage);
        blind.value = false;
      } else {
        ElMessage.error(response.message);
@@ -394,18 +413,6 @@
    <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
    <el-button :disabled="!canSelectProjectc" style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handledelete">{{ $t('searchOrder.deleteTask') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
    <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.twoloadingline')"
               style="margin-top: 5px;margin-left: 20px;">
      <el-option :label="$t('Mounting.all')" value="0"></el-option>
      <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option>
      <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option>
    </el-select>
    <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-top: 5px;margin-left: 20px;" >
      <el-option :label="$t('Mounting.waiting')" value="1"></el-option>
      <el-option :label="$t('film.execution')" value="2"></el-option>
      <el-option :label="$t('film.finish')" value="3"></el-option>
    </el-select>
    <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('Mounting.setparameters') }}</el-button>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table
@@ -425,20 +432,27 @@
            </template>
          </el-table-column>
          <el-table-column
              align="center"
              :label="$t('Mounting.state')"
            min-width="80"
            prop="state"
          >
          <template #default="scope">
            <el-tag
      align="center"
      prop="state"
      :label="$t('Mounting.state')"
      min-width="80"
      :filters="[
        { text: t('Mounting.pass'), value: 100 },
        { text: t('Mounting.waiting'), value: 0 },
      ]"
      :filter-method="filterTag"
      filter-placement="bottom-end"
    >
      <template #default="scope">
        <el-tag
                :type="scope.row.state === 100 ? 'success' : 'warning'"
                @click="toggleEnableState(scope.row)"
                disable-transitions
            >
              {{ scope.row.state === 100 ? $t('Mounting.pass') : $t('Mounting.waiting') }}
            </el-tag>
          </template>
      </el-table-column>
      </template>
    </el-table-column>
        </el-table>
      </div>
    </el-card>
UI-Project/src/views/Slicecage/slicecage.vue
@@ -1007,7 +1007,7 @@
    </div>
<!-- // 父级框 -->
<div class="img-dlpl" >
    <div class="img-car1" :style="'z-index:999;left:270px;top:' + 350*carPosition[0] + 'px;position:absolute;'">
    <div class="img-car1" :style="'z-index:999;left:375px;top:' + 350*carPosition[0] + 'px;position:absolute;'">
      <div  
      v-for="(rect, index) in adjusta"  
      :key="rect.id"  
@@ -1021,7 +1021,7 @@
    >
    </div>
    </div>
    <div class="img-car4" :style="'z-index:999;left:740px;top:' + 350*carPosition[1] + 'px;position:absolute;'">
    <div class="img-car4" :style="'z-index:999;left:770px;top:' + 350*carPosition[1] + 'px;position:absolute;'">
      <div  
      v-for="(rect, index) in adjust"  
      :key="rect.id"  
@@ -1853,7 +1853,7 @@
.img-dlpl{
  margin-left: 20px;
  margin-top: 0px;
  background-image:url('../../assets/dlpl9.png');
  background-image:url('../../assets/ganghuaqian.png');
  background-repeat: no-repeat;
  background-attachment: local;
  min-height: 400px;
@@ -1865,7 +1865,7 @@
}
.img-car1{
  display: flex;
  background-image:url('../../assets/lp9.png');
  background-image:url('../../assets/xiaoche.png');
  position: absolute;
  background-repeat: no-repeat;
  background-attachment: local;
@@ -1878,7 +1878,7 @@
}
.img-car4{
  display: flex;
  background-image:url('../../assets/lpa9.png');
  background-image:url('../../assets/xiaoche.png');
  position: absolute;
  background-repeat: no-repeat;
  background-attachment: local;
UI-Project/src/views/UnLoadGlass/Landingindication.vue
File was deleted
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
File was deleted
UI-Project/src/views/UnLoadGlass/PrintCustomLabelSemi1.vue
File was deleted
UI-Project/src/views/UnLoadGlass/PrintFlow.vue
File was deleted
UI-Project/src/views/UnLoadGlass/UnLoadGlass.vue
File was deleted
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
File was deleted
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue
File was deleted
UI-Project/src/views/hollow/hollowequipment.vue
@@ -279,14 +279,14 @@
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbOne')" :required="true" style="width: 16vw;">
                <el-input :placeholder="$t('hellow.intervalFrameHeightbOne')" v-model="intervalFrameHeightOne" autocomplete="off" />
                <el-input :placeholder="$t('hellow.intervalFrameHeightaOne')" v-model="intervalFrameHeightOne" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbTwo')" :required="true" style="width: 16vw;">
            <el-input :placeholder="$t('hellow.intervalFrameHeightbTwo')" v-model="intervalFrameHeightTwo" autocomplete="off" />
            <el-input :placeholder="$t('hellow.intervalFrameHeightaTwo')" v-model="intervalFrameHeightTwo" autocomplete="off" />
              </el-form-item>
            </div></div>
          </el-col>
@@ -296,14 +296,14 @@
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbThree')" :required="true" style="width: 16vw;">
                <el-input :placeholder="$t('hellow.intervalFrameHeightbThree')" v-model="intervalFrameHeightThree" autocomplete="off" />
                <el-input :placeholder="$t('hellow.intervalFrameHeightaThree')" v-model="intervalFrameHeightThree" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbFour')" :required="true" style="width: 16vw;">
            <el-input :placeholder="$t('hellow.intervalFrameHeightbFour')" v-model="intervalFrameHeightFour" autocomplete="off" />
            <el-input :placeholder="$t('hellow.intervalFrameHeightaFour')" v-model="intervalFrameHeightFour" autocomplete="off" />
              </el-form-item>
            </div></div>
          </el-col>
@@ -556,14 +556,14 @@
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbOne')" :required="true" style="width: 16vw;">
                <el-input :placeholder="$t('hellow.intervalFrameHeightbOne')" v-model="intervalFrameHeightOne" autocomplete="off" />
                <el-input :placeholder="$t('hellow.intervalFrameHeightaOne')" v-model="intervalFrameHeightOne" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbTwo')" :required="true" style="width: 16vw;">
            <el-input :placeholder="$t('hellow.intervalFrameHeightbTwo')" v-model="intervalFrameHeightTwo" autocomplete="off" />
            <el-input :placeholder="$t('hellow.intervalFrameHeightaTwo')" v-model="intervalFrameHeightTwo" autocomplete="off" />
              </el-form-item>
            </div></div>
          </el-col>
@@ -573,14 +573,14 @@
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbThree')" :required="true" style="width: 16vw;">
                <el-input :placeholder="$t('hellow.intervalFrameHeightbThree')" v-model="intervalFrameHeightThree" autocomplete="off" />
                <el-input :placeholder="$t('hellow.intervalFrameHeightaThree')" v-model="intervalFrameHeightThree" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('hellow.intervalFrameHeightbFour')" :required="true" style="width: 16vw;">
            <el-input :placeholder="$t('hellow.intervalFrameHeightbFour')" v-model="intervalFrameHeightFour" autocomplete="off" />
            <el-input :placeholder="$t('hellow.intervalFrameHeightaFour')" v-model="intervalFrameHeightFour" autocomplete="off" />
              </el-form-item>
            </div></div>
          </el-col>
UI-Project/src/views/hollow/hollowslicecage.vue
@@ -484,7 +484,7 @@
    </div>
<!-- // 父级框 -->
<div class="img-dlpl" >
    <div class="img-car1" :style="'z-index:999;left:270px;top:' + 350*carPosition[0] + 'px;position:absolute;'">
    <div class="img-car1" :style="'z-index:999;left:475px;top:' + 1450*carPosition[0] + 'px;position:absolute;'">
      <div  
      v-for="(rect, index) in adjusta"  
      :key="rect.id"  
@@ -498,7 +498,7 @@
    >
    </div>
    </div>
    <div class="img-car4" :style="'z-index:999;left:740px;top:' + 350*carPosition[1] + 'px;position:absolute;'">
    <div class="img-car4" :style="'z-index:999;left:890px;top:' + 50*carPosition[1] + 'px;position:absolute;'">
      <div  
      v-for="(rect, index) in adjust"  
      :key="rect.id"  
@@ -1019,19 +1019,19 @@
.img-dlpl{
  margin-left: 20px;
  margin-top: 0px;
  background-image:url('../../assets/dlpl9.png');
  background-image:url('../../assets/zhongkong.png');
  background-repeat: no-repeat;
  background-attachment: local;
  min-height: 400px;
  min-height: 700px;
  width: 1200px;
  max-width: 100%;
  background-size: 1200px 400px;
  background-size: 1200px 700px;
  overflow: hidden;
  position:relative
}
.img-car1{
  display: flex;
  background-image:url('../../assets/lp9.png');
  background-image:url('../../assets/xiaoche.png');
  position: absolute;
  background-repeat: no-repeat;
  background-attachment: local;
@@ -1044,7 +1044,7 @@
}
.img-car4{
  display: flex;
  background-image:url('../../assets/lpa9.png');
  background-image:url('../../assets/xiaoche.png');
  position: absolute;
  background-repeat: no-repeat;
  background-attachment: local;
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -10,7 +10,7 @@
/**
 * <p>
 *  服务类
 * 服务类
 * </p>
 *
 * @author wu
@@ -28,12 +28,14 @@
    /**
     * 按照玻璃id信息自动报工
     *
     * @param glassId
     * @param deviceId
     * @param workingProcedure
     * @param remark
     */
    void autoSubmitReport(String glassId, int deviceId,String workingProcedure,String remark,int type);
    void autoSubmitReport(String glassId, int deviceId, String workingProcedure, String remark, int type);
    /**
     * 单个破损
     *
@@ -54,5 +56,5 @@
    void deleteByGlassId(String glassId);
    Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails);
    Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails, Boolean type);
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -55,7 +55,8 @@
    WorkAssignmentMapper workAssignmentMapper;
    private final static String ERP_URL = "http://192.168.2.100:8086";
        private final static String ERP_URL = "http://192.168.2.100:8086";
//    private final static String ERP_URL = "http://10.153.19.174:8086";
    /**
@@ -98,9 +99,9 @@
            reportingWork.setProductionId(damages.get(0).getProcessId().substring(0, 11));
            reportingWork.setProcessId(damages.get(0).getProcessId() + "/" + damages.get(0).getTechnologyNumber());
//            reportingWork.setDeviceName(damages.get(0).getDeviceName());
            if (StringUtils.isBlank(damages.get(0).getDeviceName())){
            if (StringUtils.isBlank(damages.get(0).getDeviceName())) {
                reportingWork.setDeviceName("auto");
            }else{
            } else {
                reportingWork.setDeviceName(damages.get(0).getDeviceName());
            }
            reportingWork.setThisProcess(damages.get(0).getWorkingProcedure());
@@ -144,7 +145,7 @@
            }
            reportingWorkDetails.add(reportingWorkDetail);
            reportingWorkDetail.setDamageDetailsList(damageDetailses);
            sendToERP(reportingWork, reportingWorkDetails);
            sendToERP(reportingWork, reportingWorkDetails, Boolean.FALSE);
        }
    }
@@ -154,9 +155,9 @@
        reportingWork.setOrderId(damage.getProcessId().substring(0, 10));
        reportingWork.setProductionId(damage.getProcessId().substring(0, 11));
        reportingWork.setProcessId(damage.getProcessId() + "/" + damage.getTechnologyNumber());
        if (StringUtils.isBlank(damage.getDeviceName())){
        if (StringUtils.isBlank(damage.getDeviceName())) {
            reportingWork.setDeviceName("auto");
        }else{
        } else {
            reportingWork.setDeviceName(damage.getDeviceName());
        }
        reportingWork.setThisProcess(damage.getWorkingProcedure());
@@ -174,7 +175,7 @@
        reportingWorkDetail.setCompletedQuantity(1);
        reportingWorkDetail.setBreakageQuantity(0);
        reportingWorkDetails.add(reportingWorkDetail);
        return sendToERP(reportingWork, reportingWorkDetails);
        return sendToERP(reportingWork, reportingWorkDetails, Boolean.TRUE);
    }
    @Override
@@ -312,12 +313,20 @@
    }
    @Override
    public Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails) {
    public Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails, Boolean type) {
        log.info("报工数据reportingWork:{},reportingWorkDetails:{}", reportingWork, reportingWorkDetails);
        try {
            // 目标系统的API URL
//            String url = ERP_URL + "/reportingWork/mesReportingWork";
            String url = ERP_URL + "/reportingWork/mesSaveReportingWorkWorn";
            String url1 = ERP_URL + "/reportingWork/mesReportingWork";
            String url2 = ERP_URL + "/reportingWork/mesSaveReportingWorkWorn";
            String url;
            if (type) {
                url = url1;
            } else {
                url = url2;
            }
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
@@ -333,19 +342,26 @@
            ObjectMapper objectMapper = new ObjectMapper();
            // 将 ReportingWork 转换为 JSONObject
            // 将 ReportingWorkDetail 列表转换为 JSONArray
            if (type) {
                JSONObject detailsJsonObject = new JSONObject(objectMapper.writeValueAsString(reportingWorkDetails.get(0)));
                result.put("detail", detailsJsonObject);
                reportingWork.setProcessId(reportingWork.getProcessId().substring(0, 14));
            } else {
                JSONArray detailsJsonArray = new JSONArray(objectMapper.writeValueAsString(reportingWorkDetails));
                result.put("detail", detailsJsonArray);
            }
            JSONObject reportingWorkJson = new JSONObject(objectMapper.writeValueAsString(reportingWork));
            reportingWorkJson.put("reportingWorkTime", reportingWork.getReportingWorkTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
            // 将 ReportingWorkDetail 列表转换为 JSONArray
            JSONArray detailsJsonArray = new JSONArray(objectMapper.writeValueAsString(reportingWorkDetails));
            // 将 JSON 对象和数组添加到结果对象中
            result.put("title", reportingWorkJson);
            result.put("detail", detailsJsonArray);
            result.put("type", 0);
            result.put("userId", "admin");
            result.put("userName", "admin");
            result.put("qualityInsStatus", 0);
            // 将 result 对象转换为字符串
            String jsonInputString = result.toString();
            System.out.println("jsonInputString : " + result);
@@ -372,7 +388,7 @@
                // 提取 code 和 message
                int code = jsonResponse.getInt("code");
                String message = jsonResponse.getStr("data");
                log.info("报工失败:{},{}", code, message);
                log.info("报工情况:{},{}", code, message);
                if (code == 200 && message.equals("true")) {
                    return true;
                } else {
hangzhoumesParent/gateway/src/main/resources/application.yml
@@ -6,7 +6,7 @@
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8849
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: prod
    active: dev
  application:
    name: cacheGlass
  liquibase:
@@ -15,8 +15,8 @@
      thread-name-prefix: task-cache
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mes:
  threshold: 3
  ratio: 10
@@ -37,4 +37,14 @@
  cellLength: 2500
  sequence:
    order: false
kangaroohy:
  milo:
    enabled: true
    primary: default
    config:
      default:
        endpoint: opc.tcp://10.153.19.150:49320
        security-policy: basic256sha256
        username: admin
        password: 1qaz2wsx3edc4rfv
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
@@ -30,7 +30,7 @@
    password: 123456
kangaroohy:
  milo:
    enabled: true
    enabled: false
    primary: default
    config:
      default:
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: prod
    active: dev
  application:
    name: cacheVerticalGlass
  liquibase:
@@ -15,8 +15,8 @@
      thread-name-prefix: task-cacheVertical
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mes:
  sequence:
    order: true
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -144,6 +144,8 @@
    }
    @Test
    public void computeTargetByLine() {
        plcStorageCageTask.computeTargetByLine(2001);
@@ -172,13 +174,18 @@
    @Test
    public void insertDamage() {
        Damage damage=new Damage();
        damage.setGlassId("P24060403|3|6");
        damage.setLine(2001);
        damage.setWorkingProcedure("冷加工");
        damage.setRemark("");
        damage.setStatus(2);
        damageService.insertDamage(damage);
//        Damage damage=new Damage();
//        damage.setGlassId("P24060403|3|6");
//        damage.setLine(2001);
//        damage.setWorkingProcedure("冷加工");
//        damage.setRemark("");
//        damage.setStatus(2);
//        damageService.insertDamage(damage);
        Damage damage=damageService.getOne(
                new LambdaQueryWrapper<Damage>()
                .eq(Damage::getGlassId,"P24082703|1|80")
        );
        damageService.submitReport(damage);
    }
    @Test
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
@@ -26,3 +26,13 @@
    host: 127.0.0.1
    port: 6379
    password: 123456
kangaroohy:
  milo:
    enabled: true
    primary: default
    config:
      default:
        endpoint: opc.tcp://10.153.19.150:49320
        security-policy: basic256sha256
        username: admin
        password: 1qaz2wsx3edc4rfv
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: prod
    active: dev
  application:
    name: glassStorage
  liquibase:
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
@@ -33,7 +33,7 @@
    password: 123456
kangaroohy:
  milo:
    enabled: false
    enabled: true
    primary: default
    config:
      default:
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
@@ -2,12 +2,12 @@
  port: 10015
spring:
  profiles:
    active: prod
    active: dev
  application:
    name: loadGlass
  liquibase:
    enabled: false
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -2,7 +2,7 @@
  port: 10016
spring:
  profiles:
    active: prod
    active: dev
  application:
    name: temperingGlass
  liquibase:
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml
@@ -27,4 +27,14 @@
    database: 0
    host: 127.0.0.1
    port: 6379
    password: 123456
    password: 123456
kangaroohy:
  milo:
    enabled: true
    primary: default
    config:
      default:
        endpoint: opc.tcp://10.153.19.150:49320
        security-policy: basic256sha256
        username: admin
        password: 1qaz2wsx3edc4rfv
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: prod
    active: dev
  application:
    name: hollowGlass
  liquibase: