Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject
# Conflicts:
# hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
| | |
| | | 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" |
| | | } |
| | |
| | | }, |
| | | ] |
| | | }, |
| | | /*----------- 下片台 ----------------*/ |
| | | { |
| | | 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', |
| | |
| | | // 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"; |
| | |
| | | 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 |
| | |
| | | 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' |
| | |
| | | // 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) => { |
| | |
| | | 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 || '' |
| | |
| | | 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' |
| | |
| | | // 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) => { |
| | |
| | | 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 || '' |
| | |
| | | } |
| | | ); |
| | | 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) { |
| | |
| | | } |
| | | ); |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | 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 |
| | | }) |
| | |
| | | <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' |
| | |
| | | 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: [], |
| | | }) |
| | |
| | | window.localStorage.setItem('engineeringIda', tableData[0].engineeringId) |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error(response.message); |
| | | } |
| | | }; |
| | | let socket = null; |
| | |
| | | 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; |
| | |
| | | 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 = ''; |
| | |
| | | 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, |
| | |
| | | // 开始上片 |
| | | 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) { |
| | |
| | | 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); |
| | |
| | | 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, |
| | |
| | | </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 |
| | |
| | | <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> |
| | |
| | | <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' |
| | |
| | | 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: [], |
| | | }) |
| | |
| | | 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; |
| | |
| | | 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 = ''; |
| | |
| | | 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); |
| | |
| | | <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 |
| | |
| | | </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> |
| | |
| | | </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" |
| | |
| | | > |
| | | </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" |
| | |
| | | .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; |
| | |
| | | } |
| | | .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; |
| | |
| | | } |
| | | .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; |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | </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" |
| | |
| | | > |
| | | </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" |
| | |
| | | .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; |
| | |
| | | } |
| | | .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; |
| | |
| | | |
| | | /** |
| | | * <p> |
| | | * 服务类 |
| | | * 服务类 |
| | | * </p> |
| | | * |
| | | * @author wu |
| | |
| | | |
| | | /** |
| | | * 按照玻璃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); |
| | | |
| | | /** |
| | | * 单个破损 |
| | | * |
| | |
| | | |
| | | void deleteByGlassId(String glassId); |
| | | |
| | | Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails); |
| | | Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails, Boolean type); |
| | | } |
| | |
| | | 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"; |
| | | |
| | | |
| | | /** |
| | |
| | | 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()); |
| | |
| | | } |
| | | reportingWorkDetails.add(reportingWorkDetail); |
| | | reportingWorkDetail.setDamageDetailsList(damageDetailses); |
| | | sendToERP(reportingWork, reportingWorkDetails); |
| | | sendToERP(reportingWork, reportingWorkDetails, Boolean.FALSE); |
| | | } |
| | | } |
| | | |
| | |
| | | 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()); |
| | |
| | | reportingWorkDetail.setCompletedQuantity(1); |
| | | reportingWorkDetail.setBreakageQuantity(0); |
| | | reportingWorkDetails.add(reportingWorkDetail); |
| | | return sendToERP(reportingWork, reportingWorkDetails); |
| | | return sendToERP(reportingWork, reportingWorkDetails, Boolean.TRUE); |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @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(); |
| | | |
| | |
| | | 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); |
| | |
| | | // 提取 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 { |
| | |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | server-addr: 127.0.0.1:8849 |
| | | server-addr: 127.0.0.1:8848 |
| | | gateway: |
| | | discovery: |
| | | locator: |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: prod |
| | | active: dev |
| | | application: |
| | | name: cacheGlass |
| | | liquibase: |
| | |
| | | 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 |
| | |
| | | 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 |
| | | |
| | |
| | | password: 123456 |
| | | kangaroohy: |
| | | milo: |
| | | enabled: true |
| | | enabled: false |
| | | primary: default |
| | | config: |
| | | default: |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: prod |
| | | active: dev |
| | | application: |
| | | name: cacheVerticalGlass |
| | | liquibase: |
| | |
| | | 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 |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | @Test |
| | | public void computeTargetByLine() { |
| | | plcStorageCageTask.computeTargetByLine(2001); |
| | |
| | | |
| | | @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 |
| | |
| | | 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 |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: prod |
| | | active: dev |
| | | application: |
| | | name: glassStorage |
| | | liquibase: |
| | |
| | | password: 123456 |
| | | kangaroohy: |
| | | milo: |
| | | enabled: false |
| | | enabled: true |
| | | primary: default |
| | | config: |
| | | default: |
| | |
| | | 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 |
| | |
| | | port: 10016 |
| | | spring: |
| | | profiles: |
| | | active: prod |
| | | active: dev |
| | | application: |
| | | name: temperingGlass |
| | | liquibase: |
| | |
| | | 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 |
| | |
| | | |
| | | spring: |
| | | profiles: |
| | | active: prod |
| | | active: dev |
| | | application: |
| | | name: hollowGlass |
| | | liquibase: |