UI-Project/src/lang/zh.js
@@ -525,6 +525,7 @@ startslot:'开始工位', endslot:'目标工位', slotid:'格子ID', slot:'格子号', width:'原片宽', widtha:'原片宽:', inwidth:'请输入原片宽', UI-Project/src/views/Caching/cachingun.vue
@@ -102,7 +102,7 @@ glassId: row.glass_id, state: 9, line: 1001, workingProcedure: '磨边前理片笼', workingProcedure: '磨边', }) if (response.code === 200) { ElMessage.success(response.message); UI-Project/src/views/GlassStorage/rawfilmstorage.vue
@@ -17,46 +17,81 @@ const dialogFormVisiblea = ref(false) const dialogFormVisibleb = ref(false) const dialogFormVisiblec = ref(false) const timeRange = ref(["2022-01-01", "2025-01-01"]) const timeRange = ref(["2022-01-01 00:00:00", "2025-01-01 00:00:00"]) const selectValuesa = reactive([]); const patternWidth = ref(''); const patternHeight = ref(''); const patternThickness = ref(''); const filmsId = ref(''); const remainQuantity = ref(''); const slot = ref(''); let webSocket: WebSocket | null = null; const value = ref('') const options = [ { value: t('film.warehousing1'), value: 1, label: t('film.warehousing1'), }, { value: t('film.warehousing2'), value: 2, label: t('film.warehousing2'), } ] const report = ref({ enableType: '', enableState: '', taskType: '', taskState: '', }); onMounted(() => { socket = initializeWebSocket(socketUrl, handleMessage); }); onUnmounted(() => { if (socket) { closeWebSocket(socket); request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest",{ beginDate: "2022-01-01 00:00:00", endDate: "2025-01-01 00:00:00", }).then((response) => { if (response.code == 200) { tableDataa.value = response.data console.log(tableDataa.value); } else { ElMessage.warning(response.msg) } }); onMounted(() => { // closeWebSocket(); debugger // console.log("--------------webSocket") socket = initializeWebSocket(socketUrl, handleMessage); }); let socket = null; const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/rawGlass`; const handleMessage = (data) => { if(data.tasks !=null){ tableDataa.value = data.tasks[0] console.log(data.tasks[0]); } if(data.rack !=null){ tableDatab.value = data.rack[0] if(data.rawStationDetailsList !=null){ tableDatab.value = data.rawStationDetailsList[0] } }; // 修改数量 const handleConfirmb = async () => { let slotId = window.localStorage.getItem('slotId') try { const response = await request.post('/glassStorage/rawGlassStorageDetails/updateQuantity', { slotId: slotId, remainQuantity: remainQuantity.value, } ); if (response.code === 200) { ElMessage.success(response.message); dialogFormVisiblec.value = false; tableDatab.value = response.data; } else { ElMessage.error(response.message); } } catch (error) { console.error(error); } }; // 删除 const opena = async(row) => { const deleteWarehousing = async(row) => { try { const confirmResult = await ElMessageBox.confirm( t('film.dedelete'), @@ -68,7 +103,10 @@ } ); if (confirmResult === 'confirm') { const response = await request.post("/loadGlass/sys/user/deleteUser", [row.id]) var url="/glassStorage/rawGlassStorageDetails/deleteWarehousing?slotId="+row.slotId; const response = await request.post(url) // const response = await request.post("/glassStorage/rawGlassStorageDetails/deleteWarehousing",[row.slotId]) if (response.code === 200) { ElMessage.success(response.message); } else { @@ -79,30 +117,7 @@ console.error('发生错误:', error); } }; // 禁用 const openb = async(row) => { try { const confirmResult = await ElMessageBox.confirm( t('film.dedisable'), t('productStock.prompt'), { confirmButtonText: t('productStock.yes'), cancelButtonText: t('productStock.cancel'), type: 'warning', } ); if (confirmResult === 'confirm') { const response = await request.post("/loadGlass/sys/user/deleteUser", [row.id]) if (response.code === 200) { ElMessage.success(response.message); } else { ElMessage.error(response.msg); } } } catch (error) { console.error('发生错误:', error); } }; // 出库 const openc = async(row) => { try { @@ -116,7 +131,9 @@ } ); if (confirmResult === 'confirm') { const response = await request.post("/loadGlass/sys/user/deleteUser", [row.id]) var url="/glassStorage/rawGlassStorageDetails/outWarehousing?slotId="+row.slotId; const response = await request.post(url) // const response = await request.post("/glassStorage/rawGlassStorageDetails/outWarehousing",[row.slotId]) if (response.code === 200) { ElMessage.success(response.message); } else { @@ -141,18 +158,45 @@ stateList=[selectValuesa[1]]; } } const response = await request.post("/glassStorage/raw_glass_storage_task/selectRawglasstask", { createTime: timeRange.value[0], patternQuantity: timeRange.value[1], enableType: stateList, enableState: celllist const response = await request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest", { beginDate: timeRange.value[0], endDate: timeRange.value[1], taskState: stateList, taskType: celllist }) if (response.code === 200) { tableDataa.value = response.data; // tableDataa.value = response.data; ElMessage.success(response.message); } else { ElMessage.error(response.message); } }; // 入库 const handleConfirma = async () => { try { const response = await request.post('/glassStorage/rawGlassStorageDetails/patternWarehousing', { patternWidth: patternWidth.value, patternHeight: patternHeight.value, patternThickness: patternThickness.value, filmsId: filmsId.value, remainQuantity: remainQuantity.value, slotId: slot.value, }); if (response.code === 200) { ElMessage.success(response.message); dialogFormVisibleb.value = false; patternWidth.value = ''; patternHeight.value = ''; patternThickness.value = ''; filmsId.value = ''; remainQuantity.value = ''; slot.value = ''; } else { ElMessage.error(response.message); } } catch (error) { console.error(error); } }; // 是否禁用 @@ -161,25 +205,27 @@ ElMessage.error(t('basicData.updatanull')); return; } const newState = row.enableState === 1 ? 0 : 1; const newState = row.state === 1 ? 0 : 1; try { // 发送请求到后端更新状态 const response = await request.post('/glassStorage/rawGlassStorageDetails/updateEnableState', { deviceId: row.deviceId, enableState: newState }); var url="/glassStorage/rawGlassStorageStation/updateSlotState?slot="+row.deviceId + "&state=" + newState; const response = await request.post(url) if (response.code === 200) { ElMessage.success(response.message); row.enableState = newState; row.state = newState; } else { ElMessage.error(response.message); } row.state = newState; } catch (error) { ElMessage.error(t('basicData.glassnull')); } }; const handleEdit = (row) => { window.localStorage.setItem('slotId', row.slotId) dialogFormVisiblec.value = true; }; function getStatusType1(enableType) { switch (enableType) { function getStatusType1(taskType) { switch (taskType) { case 1: return 'info'; case 2: @@ -188,8 +234,8 @@ return 'success'; } } function getStatusText1(enableType) { switch (enableType) { function getStatusText1(taskType) { switch (taskType) { case 1: return t('film.stocke');//入库 case 2: @@ -198,8 +244,8 @@ return t('film.dispatch');//调度 } } function getStatusType2(enableState) { switch (enableState) { function getStatusType2(taskState) { switch (taskState) { case 1: return 'info'; case 2: @@ -208,8 +254,8 @@ return 'success'; } } function getStatusText2(enableState) { switch (enableState) { function getStatusText2(taskState) { switch (taskState) { case 1: return t('film.built');//新建 case 2: @@ -218,6 +264,11 @@ return t('film.finish');//完成 } } // onUnmounted(() => { // if (socket) { // closeWebSocket(socket); // } // }); onBeforeUnmount(() => { closeWebSocket(); }); @@ -227,8 +278,12 @@ <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;"> <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="dialogFormVisiblea = true">{{ $t('film.mes') }}</el-button> <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('film.warehousing') }}</el-button> <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="daterange" format="YYYY/MM/DD" value-format="YYYY-MM-DD" :start-placeholder="$t('film.starttime')" :end-placeholder="$t('film.endtime')" :default-time="defaultTime" /> <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="datetimerange" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="$t('film.starttime')" :end-placeholder="$t('film.endtime')" :default-time="defaultTime" /> <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-left: 10px;" > <el-option :label="$t('film.built')" value="1"></el-option> <el-option :label="$t('film.execution')" value="2"></el-option> @@ -245,29 +300,29 @@ <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="300" ref="table" :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="enableId" align="center" :label="$t('film.enableid')"/> <el-table-column prop="id" align="center" :label="$t('film.enableid')"/> <el-table-column prop="originateSlot" align="center" :label="$t('film.originateslot')"/> <el-table-column prop="endSlot" align="center" :label="$t('film.endslot')"/> <el-table-column prop="patternQuantity" align="center" :label="$t('film.patternquantity')"/> <el-table-column align="center" :label="$t('film.enabletype')" prop="enableType" prop="taskType" > <template #default="scope"> <el-tag :type="getStatusType1(scope.row.enableType)"> {{ getStatusText1(scope.row.enableType) }} <el-tag :type="getStatusType1(scope.row.taskType)"> {{ getStatusText1(scope.row.taskType) }} </el-tag> </template> </el-table-column> <el-table-column align="center" :label="$t('film.enablestate')" prop="enableState" :label="$t('film.taskstatus')" prop="taskState" > <template #default="scope"> <el-tag :type="getStatusType2(scope.row.enableState)"> {{ getStatusText2(scope.row.enableState) }} <el-tag :type="getStatusType2(scope.row.taskState)"> {{ getStatusText2(scope.row.taskState) }} </el-tag> </template> </el-table-column> @@ -284,6 +339,7 @@ <el-table ref="table" style="margin-top: 20px;height: 700px;" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="deviceId" fixed align="center" :label="$t('film.station')" min-width="80"/> <el-table-column prop="slotId" fixed align="center" :label="$t('film.slot')" min-width="80"/> <el-table-column prop="patternWidth" align="center" :label="$t('film.width')" min-width="80" /> <el-table-column prop="patternHeight" align="center" :label="$t('film.height')" min-width="80" /> <el-table-column prop="patternThickness" align="center" :label="$t('film.thickness')" min-width="80" /> @@ -293,36 +349,36 @@ align="center" :label="$t('film.enablestate')" min-width="80" prop="enablestate" prop="state" > <template #default="scope"> <el-tag :type="scope.row.enableState == 1 ? 'success' : 'danger'" :type="scope.row.state == 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)" > {{ scope.row.enableState == 1 ? $t('film.start') : $t('film.disable')}} {{ scope.row.state == 1 ? $t('film.start') : $t('film.disable')}} </el-tag> </template> </el-table-column> <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="270"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('film.exit') }}</el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('film.delete') }}</el-button> <el-button size="mini" type="text" plain @click="deleteWarehousing(scope.row)">{{ $t('film.delete') }}</el-button> <el-button size="mini" type="text" plain @click="openc(scope.row)">{{ $t('film.outbound') }}</el-button> </template> </el-table-column> </el-table> </el-dialog> <el-dialog v-model="dialogFormVisibleb" top="15vh" width="60%"> <div style="margin-top: 10px;margin-bottom: 10px;"> <el-dialog v-model="dialogFormVisibleb" top="23vh" width="55%" :title="$t('basicData.addglass')" > <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form label-width="70vm" label-position="right"> <el-row > <el-form label-width="100px" label-position="right"> <el-row style="margin-top: -15px;margin-bottom: -2px;"> <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> <el-form-item :label="$t('film.widtha')" :required="true" style="width: 17vw;"> <el-input :placeholder="$t('film.inwidth')" v-model="number" autocomplete="off" /> <el-input :placeholder="$t('film.inwidth')" v-model="patternWidth" autocomplete="off" /> </el-form-item> </div></div> </el-col> @@ -330,7 +386,7 @@ <div id="dta" style="font-size: 15px;"> <div> <el-form-item :label="$t('film.heighta')" :required="true" style="width: 17vw;"> <el-input :placeholder="$t('film.inheight')" v-model="number" autocomplete="off" /> <el-input :placeholder="$t('film.inheight')" v-model="patternHeight" autocomplete="off" /> </el-form-item></div> </div> </el-col> @@ -340,14 +396,14 @@ <div id="dt" style="font-size: 15px;"> <div> <el-form-item :label="$t('film.thicknessa')" :required="true" style="width: 17vw;"> <el-input :placeholder="$t('film.inthickness')" v-model="number" autocomplete="off" /> <el-input :placeholder="$t('film.inthickness')" v-model="patternThickness" 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('film.filmsa')" :required="true" style="width: 17vw;"> <el-input :placeholder="$t('film.infilms')" v-model="number" autocomplete="off" /> <el-input :placeholder="$t('film.infilms')" v-model="filmsId" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -356,14 +412,17 @@ <div id="dt" style="font-size: 15px;"> <div> <el-form-item :label="$t('film.quantitya')" :required="true" style="width: 17vw;"> <el-input :placeholder="$t('film.inquantity')" v-model="number" autocomplete="off" /> <el-input :placeholder="$t('film.inquantity')" v-model="remainQuantity" 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('film.inwarehousing')" :required="true" style="width: 17vw"> <el-select :placeholder="$t('film.selectwarehousing')"> <el-select :placeholder="$t('film.selectwarehousing')" style="width: 270px" v-model="slot"> <el-option v-for="item in options" :key="item.value" @@ -371,8 +430,7 @@ :value="item.value" /> </el-select> </el-form-item></div> </div> </el-form-item></div></div> </el-col> </el-row> </el-form> @@ -380,7 +438,7 @@ </div> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleConfirm"> <el-button type="primary" @click="handleConfirma"> {{ $t('basicData.confirm') }} </el-button> <el-button @click="dialogFormVisibleb = false">{{ $t('basicData.cancel') }}</el-button> @@ -392,14 +450,14 @@ <el-form size="mini" label-width="100px"> <el-form label-width="210px" label-position="right"> <el-form-item :label="$t('film.thickremainquantity')" :required="true" style="width: 25vw"> <el-input v-model="workstationId" autocomplete="off" /> <el-input v-model="remainQuantity" autocomplete="off" /> </el-form-item> </el-form> </el-form> </div> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handleConfirm"> <el-button type="primary" @click="handleConfirmb"> {{ $t('reportWork.sure') }} </el-button> <el-button @click="dialogFormVisiblec = false">{{ $t('reportWork.cancel') }}</el-button> UI-Project/src/views/Identify/identify.vue
@@ -97,7 +97,7 @@ glassId: currentGlassId.value, state: 8, line: 1001, workingProcedure: '识别', workingProcedure: '切割', }) if (response.code == 200) { ElMessage.success(response.message); @@ -125,7 +125,7 @@ glassId: currentGlassId.value, state: 9, line: 1001, workingProcedure: '识别', workingProcedure: '切割', }) if (response.code == 200) { // 绑定成功,处理逻辑 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -153,12 +153,14 @@ } // 进炉中左 if (data.intoGlass && data.intoGlass.length > 0) { console.log(data.intoGlass); const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId)); const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId)); const newRects = data.intoGlass[0].map(rect => { const scaleFactor = 810.89/5087; const scaleFactorY = 430/2800; let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta; let newX = rect.yCoordinate; if (rect.width < rect.height) { widtha = rect.height; @@ -199,7 +201,7 @@ return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样 }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId))); } else if (data.overGlass == null) { else { adjustedRects1.value = [] } if (data.waitingGlass && data.waitingGlass.length > 0) { @@ -326,6 +328,20 @@ } }); } function updateoutColorsc() { adjustedRects1.value.forEach(rect => { if (rect.glassId === glassId) { rect.state = 9; } }); } function updateoutColorsd() { adjustedRects2.value.forEach(rect => { if (rect.glassId === glassId) { rect.state = 9; } }); } function updateonColorsa() { adjustedRectsa.value.forEach(rect => { if (rect.glassId === glassId) { @@ -368,6 +384,26 @@ } }); } function getRectColor1(state) { switch (state) { case 2: return 'lightblue'; case 8: return '#911005'; case 9: return '#4682B4'; } } function getRectColor2(state) { switch (state) { case 2: return 'lightblue'; case 8: return '#911005'; case 9: return '#4682B4'; } } function getRectColora(state) { switch (state) { case 0: @@ -408,6 +444,11 @@ } else if (currentRect.value.state !== 8) { canSelectProject1.value = true; } if (currentRect.value.state == 9) { cantakea.value = false; } else if (currentRect.value.state !== 9) { cantakea.value = true; } } function showDialog2(rect) { const index = adjustedRects2.value.findIndex(r => r.glassId === rect.glassId); @@ -422,6 +463,11 @@ canSelectProject2.value = false; } else if (currentRect.value.state !== 8) { canSelectProject2.value = true; } if (currentRect.value.state == 9) { cantakea.value = false; } else if (currentRect.value.state !== 9) { cantakea.value = true; } } function showDialoga(rect) { @@ -613,6 +659,52 @@ console.error(error); } } // 进炉中人工拿走 const takeoutc = async () => { try { const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { glassId: currentGlassId.value, line: 4001, status: 9, workingProcedure: '钢化', }) if (response.code == 200) { ElMessage.success('成功!'); blind1.value = false; updateoutColorsc(); } else { // 请求失败,显示错误消息 ElMessage.error(response.message); } } catch (error) { // 处理错误 console.error(error); } } // 进炉zhong人工拿走 const takeoutd = async () => { try { const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', { glassId: currentGlassId.value, line: 4001, status: 9, workingProcedure: '钢化', }) if (response.code == 200) { ElMessage.success('成功!'); blind2.value = false; updateoutColorsd(); } else { // 请求失败,显示错误消息 ElMessage.error(response.message); } } catch (error) { // 处理错误 console.error(error); } } // 已出炉破损 const handleDamageb = async () => { try { @@ -711,8 +803,7 @@ left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`, backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }" > backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor1(rect.state) }"> <div class="centered-text"> <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> @@ -739,8 +830,7 @@ left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`, backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }" > backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor2(rect.state) }"> <div class="centered-text"> <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div> <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div> @@ -842,11 +932,19 @@ <el-button :disabled="!canSelectProject1" type="warning" plain :icon="Delete" @click="handleDamage1" style="width: 150px;margin-left: 10px;"> {{ $t('order.dilapidation') }} </el-button> <el-button :disabled="!cantakea" type="danger" plain @click="takeoutc" style="width: 150px;margin-left: 10px;margin-top: 10px;"> <el-icon class="el-icon--right"><Upload /></el-icon> {{ $t('order.takeaway') }} </el-button> </el-dialog> <el-dialog v-model="blind2" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose2"> <el-button :disabled="!canSelectProject2" type="warning" plain :icon="Delete" @click="handleDamage2" style="width: 150px;margin-left: 10px;"> {{ $t('order.dilapidation') }} </el-button> <el-button :disabled="!cantakea" type="danger" plain @click="takeoutd" style="width: 150px;margin-left: 10px;margin-top: 10px;"> <el-icon class="el-icon--right"><Upload /></el-icon> {{ $t('order.takeaway') }} </el-button> </el-dialog> <!-- 进炉前 --> <el-dialog v-model="blinda" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClosea"> UI-Project/src/views/Slicecage/slicecage.vue
@@ -642,8 +642,8 @@ const fetchFlowCardId = async () => { try { const response = await request.post('/cacheVerticalGlass/work_assignment/selectWorkAssignment',{ line: 2001, workingProcedure : '冷加工' line: 4001, workingProcedure : '钢化' }) if (response.code == 200) { ElMessage.success(response.message); UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -84,7 +84,7 @@ glassId: row.glassId, state: 8, line: row.line, workingProcedure: '冷加工', workingProcedure: '磨边', }) if (response.code === 200) { ElMessage.success(response.message); @@ -117,7 +117,7 @@ glassId: row.glassId, state: 9, line: row.line, workingProcedure: '冷加工', workingProcedure: '磨边', }) if (response.code === 200) { ElMessage.success(response.message); hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
@@ -27,7 +27,7 @@ @ResponseBody public class DamageController { @Autowired @Autowired(required=true) private DamageService damageService; @ApiOperation("报工数据查询") @PostMapping("/selectDamage") @@ -44,6 +44,7 @@ @PostMapping("/submitDamage") public Result submitDamage(@RequestBody List<Damage> damageList) { damageService.submitDamage(damageList); damageList.forEach(damage -> damage.setStatus(2)); damageService.updateBatchById(damageList); return Result.build(200,"报工成功",1); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -18,8 +18,12 @@ */ public interface DamageService extends MPJBaseService<Damage> { List<Damage> selectDamage(String startTime, String endTime, int type, String workingProcedure); List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure); // List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure); void submitDamage(List<Damage> damageList); Boolean submitReport(Damage damage); hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -18,6 +18,7 @@ import com.mes.pp.entity.ReportingWorkDetail; import com.mes.work_assignment.entity.WorkAssignment; import com.mes.work_assignment.mapper.WorkAssignmentMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -43,6 +44,7 @@ * @author wu * @since 2024-06-13 */ @Slf4j @Service public class DamageServiceImpl extends MPJBaseServiceImpl<DamageMapper, Damage> implements DamageService { @@ -50,6 +52,11 @@ GlassInfoMapper glassInfoMapper; @Resource WorkAssignmentMapper workAssignmentMapper; @Override public List<Damage> selectDamage(String startTime, String endTime, int type, String workingProcedure) { return null; } /** * 查询报工信息 @@ -81,7 +88,7 @@ @Override public void submitDamage(List<Damage> damageList) { Map<String, List<Damage>> firstMap = damageList.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":" + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName())); + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName() + ":" + e.getOrderNumber() + ":" + e.getTechnologyNumber())); for (Map.Entry<String, List<Damage>> entry : firstMap.entrySet()) { ReportingWork reportingWork = new ReportingWork(); List<ReportingWorkDetail> reportingWorkDetails = new ArrayList<>(); @@ -104,7 +111,7 @@ reportingWorkDetail.setOrderNumber(damages.get(0).getOrderNumber()); reportingWorkDetail.setCompletedQuantity(0); reportingWorkDetail.setBreakageQuantity(0); reportingWorkDetails.add(reportingWorkDetail); Map<String, List<Damage>> secondMap = damages.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":" + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName())); @@ -118,6 +125,7 @@ reportingWork.setThisCompletedQuantity(damagesdetails.size() + reportingWork.getThisCompletedQuantity()); } else { reportingWork.setThisWornQuantity(damagesdetails.size() + reportingWork.getThisWornQuantity()); reportingWorkDetail.setBreakageQuantity(damagesdetails.size()); DamageDetails damageDetails = new DamageDetails(); damageDetails.setBreakageQuantity(damagesdetails.size()); damageDetails.setBreakageType(damagesdetails.get(0).getBreakageType()); @@ -129,6 +137,7 @@ damageDetailses.add(damageDetails); } } reportingWorkDetails.add(reportingWorkDetail); reportingWorkDetail.setDamageDetailsList(damageDetailses); sendToERP(reportingWork, reportingWorkDetails); } @@ -171,6 +180,7 @@ .ne(Damage::getType, Const.GLASS_STATE_TAKE) .eq(Damage::getLine, damage.getLine()) .eq(Damage::getWorkingProcedure, damage.getWorkingProcedure()) .eq(Damage::getGlassId, damage.getGlassId()) ); if (damage1 == null || damage1.size() == 0) { LambdaQueryWrapper<GlassInfo> glassInfoSelectWrapper = new LambdaQueryWrapper<>(); @@ -197,6 +207,8 @@ if (damage.getType() == 1) { if (submitReport(damage)) { damage.setStatus(2); } else { damage.setStatus(1); } } baseMapper.insert(damage); @@ -273,6 +285,7 @@ @Override public Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails) { log.info("报工数据reportingWork:{},reportingWorkDetails:{}", reportingWork, reportingWorkDetails); try { // 目标系统的API URL String url = "http://192.168.1.199:8086/reportingWork/mesSaveReportingWorkWorn"; @@ -330,11 +343,10 @@ // 提取 code 和 message int code = jsonResponse.getInt("code"); String message = jsonResponse.getStr("data"); log.info("报工失败:{},{}", code, message); if (code == 200 && message.equals("true")) { return true; } else { return false; } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -237,7 +237,6 @@ List<Engineering> engineering=engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>() .selectAll(Engineering.class) .eq(Engineering::getEngineerId,current) .gt(Engineering::getState,0) ); if(engineering.size()==0){ log.info("当前工程号未领取过:{}",current); hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -211,9 +211,9 @@ bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); damage.setGlassId(bigStorageCageDetails.getGlassId()); damage.setWorkingProcedure("钢化"); damage.setLine(3001); damage.setRemark("大理片笼破损"); damage.setStatus(2); damage.setLine(4001); damage.setRemark("大理片笼"); damage.setStatus(1); damageService.insertDamage(damage); } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java
New file @@ -0,0 +1,54 @@ package com.mes.job; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONObject; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassstation.service.RawGlassStorageStationService; import com.mes.rawglasstask.entity.RawGlassStorageTask; import com.mes.rawglasstask.service.RawGlassStorageTaskService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; /** * @author wangfei */ @Slf4j @Component public class RawGlassPushMessage { @Resource private RawGlassStorageStationService rawGlassStorageStationService; @Resource private RawGlassStorageTaskService rawGlassStorageTaskService; @Scheduled(fixedDelay = 2000) public void sendRawGlassMessage() { log.info("发送任务信息和架子信息"); JSONObject jsonObject = new JSONObject(); List<RawGlassStorageDetails> rawStationDetailsList = rawGlassStorageStationService.listRawGlassDetails(); List<RawGlassStorageTask> tasks = rawGlassStorageTaskService.listRawGlassTask(); jsonObject.append("rawStationDetailsList", rawStationDetailsList); jsonObject.append("tasks", tasks); // log.info("获取到的工位详情及任务信息为:{}", jsonObject); List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("rawGlass"); if (CollectionUtil.isNotEmpty(sendwServer)) { sendwServer.stream().forEach(e->{ e.sendMessage(String.valueOf(jsonObject)); }); } } /** todo:入库任务:吊装位有玻璃,先去工位表查询空格子,生成入库任务从吊装位到目标格子 */ /** todo:出库任务:1、点出库,立马生成出片任务 2、点出库修改工位详情内的状态为待出库,定时任务扫描生成出库任务 */ /** todo:原片调度:1、查询工程原片表,按照顺序将原片放入上片1号位,后续原片放上片2号位,出现尺寸替换,判断原上片位是否有玻璃,有 先出后进,无 直接进片 */ } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/controller/RawGlassStorageDetailsController.java
@@ -1,18 +1,19 @@ package com.mes.rawglassdetails.controller; import com.mes.entity.request.GeneralRequest; import com.mes.rawglassdetails.entity.request.RawGlassRequest; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.userinfo.entity.vo.SysUserVO; import com.mes.utils.Result; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author wf * @since 2024-09-10 @@ -21,27 +22,29 @@ @RequestMapping("/rawGlassStorageDetails") public class RawGlassStorageDetailsController { @Autowired private RawGlassStorageDetailsService rawGlassStorageDetailsService; @ApiOperation("工位状态") @PostMapping("/updateEnableState") @ResponseBody public Result<Boolean> updateStatus(@RequestBody Integer enableState) { boolean result = rawGlassStorageDetailsService.updateRawGlassStorageDetails(String.valueOf(enableState)); if (enableState == 1) { return Result.build(1, "启用", result); } else { return Result.build(0, "禁用", result); } } @Autowired private RawGlassStorageDetailsService rawGlassStorageDetailsService; @ApiOperation("原片入库") @PostMapping("/patternWarehousing") public Result<String> patternWarehousing(@Validated @RequestBody RawGlassRequest request) { return Result.build(200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.patternWarehousing(request)); return Result.build( 200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.patternWarehousing(request)); } @ApiOperation("更新剩余数量") @PostMapping("/updateQuantity") public Result<Object> updateQuantity(@Validated @RequestBody RawGlassRequest request) { return Result.success(rawGlassStorageDetailsService.UpdateQuantity(request)); } @ApiOperation("删除原片") @PostMapping("/deleteWarehousing") public Result<Object> deleteWarehousing(@RequestBody Long slotId) { return Result.success(rawGlassStorageDetailsService.deleteWarehousing(slotId)); } @ApiOperation("原片出库") @PostMapping("/outWarehousing") public Result<Object> outWarehousing(@RequestBody Long slotId) { return Result.success(rawGlassStorageDetailsService.outWarehousing(slotId)); } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java
@@ -1,5 +1,6 @@ package com.mes.rawglassdetails.entity.request; import com.mes.userinfo.entity.vo.SysUserVO; import lombok.Data; /** @@ -8,7 +9,7 @@ * @Description: */ @Data public class RawGlassRequest { public class RawGlassRequest extends SysUserVO { /** * 原片宽 @@ -38,5 +39,5 @@ /** * 栅格号 */ private Integer slot; private String slotId; } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
@@ -1,8 +1,10 @@ package com.mes.rawglassdetails.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.entity.request.GeneralRequest; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassdetails.entity.request.RawGlassRequest; import com.mes.userinfo.entity.vo.SysUserVO; import java.util.List; @@ -14,13 +16,6 @@ List<RawGlassStorageDetails> selectDetails(); /** * 要大写这个 * * @param films_id * @return */ boolean updateRawGlassStorageDetails(String films_id); /** * 删除表 先在这里创 然后点那个相关问题 @@ -29,12 +24,6 @@ */ boolean deleteRawGlassStorageDetails(String device_id); /** * 新增表 * * @return boolean */ boolean insertRawGlassStorageDetails(RawGlassStorageDetails rw); /** @@ -44,4 +33,10 @@ * @return */ String patternWarehousing(RawGlassRequest request); String UpdateQuantity(RawGlassRequest request); String deleteWarehousing(Long slotId); String outWarehousing(Long slotId); } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -1,17 +1,20 @@ package com.mes.rawglassdetails.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.common.config.Const; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassdetails.entity.request.RawGlassRequest; import com.mes.rawglassdetails.mapper.RawGlassStorageDetailsMapper; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.rawglassstation.entity.RawGlassStorageStation; import com.mes.userinfo.entity.vo.SysUserVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; /** @@ -21,16 +24,6 @@ @Service @Slf4j public class RawGlassStorageDetailsServiceImpl extends ServiceImpl<RawGlassStorageDetailsMapper, RawGlassStorageDetails> implements RawGlassStorageDetailsService { @Override public boolean updateRawGlassStorageDetails(String films_id) { UpdateWrapper<RawGlassStorageDetails> wrapper = new UpdateWrapper<>(); //这个类型定义错了,不应该是tasking wrapper.set("films_id", "1005") .eq("films_id", films_id); return update(wrapper);//这个方法默认返回的就是bool类型 所有可以直接return这个方法,ok了,你正常创建方法去上一层创 } @Override public boolean deleteRawGlassStorageDetails(String device_id) { QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>(); @@ -47,10 +40,6 @@ return list(); } @Override public boolean insertRawGlassStorageDetails(RawGlassStorageDetails rw) { return this.save(rw); } @Override public String patternWarehousing(RawGlassRequest request) { @@ -58,8 +47,30 @@ RawGlassStorageDetails details = new RawGlassStorageDetails(); BeanUtils.copyProperties(request, details); details.setState(Const.GLASS_STATE_IN); details.setCreateTime(new Date()); save(details); return null; return "success"; } @Override public String UpdateQuantity(RawGlassRequest request) { update( new LambdaUpdateWrapper<RawGlassStorageDetails>() .set(RawGlassStorageDetails::getRemainQuantity, request.getRemainQuantity()) .eq(RawGlassStorageDetails::getSlotId, request.getSlotId())); return "success"; } @Override public String deleteWarehousing(Long slotId) { update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlotId, slotId) .set(RawGlassStorageDetails::getState,Const.GLASS_STATE_OUT)); return "success"; } @Override public String outWarehousing(Long slotId) { update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlotId, slotId) .set(RawGlassStorageDetails::getState,Const.GLASS_STATE_OUT_ING)); return "success"; } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/controller/RawGlassStorageStationController.java
@@ -1,21 +1,37 @@ package com.mes.rawglassstation.controller; import com.mes.rawglassstation.service.RawGlassStorageStationService; import com.mes.utils.Result; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * <p> * 前端控制器 * </p> * * @author wf * @since 2024-09-10 */ @RestController @RequestMapping("/raw-glass-storage-station") @RequestMapping("/rawGlassStorageStation") public class RawGlassStorageStationController { @Resource RawGlassStorageStationService rawGlassStorageStationService; @ApiOperation("工位状态") @PostMapping("/updateSlotState") @ResponseBody public Result<Boolean> updateSlotState(@RequestParam(value = "state")int enableState, @RequestParam(value = "slot")int slot) { boolean result = rawGlassStorageStationService.updateSlotState(slot, enableState); if (enableState == 1) { return Result.build(200, "启用", result); } else { return Result.build(200, "禁用", result); } } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
@@ -2,15 +2,12 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * * </p> * * @author wf * @since 2024-09-10 */ hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
@@ -1,8 +1,8 @@ package com.mes.rawglassstation.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassstation.entity.RawGlassStorageStation; import com.mes.rawglasstask.entity.RawGlassStorageTask; import java.util.List; @@ -16,5 +16,5 @@ */ public interface RawGlassStorageStationMapper extends BaseMapper<RawGlassStorageStation> { List<RawGlassStorageTask> listRawGlassDetails(); List<RawGlassStorageDetails> listRawGlassDetails(); } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
@@ -1,8 +1,8 @@ package com.mes.rawglassstation.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassstation.entity.RawGlassStorageStation; import com.mes.rawglasstask.entity.RawGlassStorageTask; import java.util.List; @@ -19,5 +19,12 @@ boolean insertRawGlassStorageStation(RawGlassStorageStation rw); List<RawGlassStorageTask> listRawGlassDetails(); /** * 获取工位及对应的原片信息 * * @return */ List<RawGlassStorageDetails> listRawGlassDetails(); boolean updateSlotState(Integer slot, Integer enableState); } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
@@ -1,12 +1,13 @@ package com.mes.rawglassstation.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassstation.entity.RawGlassStorageStation; import com.mes.rawglassstation.mapper.RawGlassStorageStationMapper; import com.mes.rawglassstation.service.RawGlassStorageStationService; import com.mes.rawglasstask.entity.RawGlassStorageTask; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -44,9 +45,15 @@ } @Override public List<RawGlassStorageTask> listRawGlassDetails() { public List<RawGlassStorageDetails> listRawGlassDetails() { return baseMapper.listRawGlassDetails(); } @Override public boolean updateSlotState(Integer slot, Integer enableState) { return update( new LambdaUpdateWrapper<RawGlassStorageStation>() .set(RawGlassStorageStation::getEnableState, enableState) .eq(RawGlassStorageStation::getSlot, slot)); } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageStationMapper.xml
@@ -11,6 +11,7 @@ <result column="films_id" property="filmsId"/> <result column="create_time" property="createTime"/> <result column="remain_quantity" property="remainQuantity"/> <result column="enable_state" property="state"/> </resultMap> @@ -22,7 +23,8 @@ T1.PATTERN_THICKNESS, T1.FILMS_ID, T1.CREATE_TIME, T1.REMAIN_QUANTITY T1.REMAIN_QUANTITY, T.ENABLE_STATE FROM RAW_GLASS_STORAGE_STATION T LEFT JOIN RAW_GLASS_STORAGE_DETAILS T1 ON T.DEVICE_ID = T1.DEVICE_ID AND T.SLOT = T1.SLOT_ID hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
@@ -75,36 +75,36 @@ /** * 测试 */ @Test public void testWebSocket() { List<RawGlassStorageTask> list=rawGlassStorageTaskService.findAll(); log.info("返回内容:{}",list); } // @Test // public void testWebSocket() { // List<RawGlassStorageTask> list=rawGlassStorageTaskService.findAll(); // log.info("返回内容:{}",list); // } /** * 测试修改WebSocket 参数 */ @Test public void testWebSocketArgument() { RawGlassTaskRequest request=new RawGlassTaskRequest(); //设置参数: DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date startDate=null; Date endDate=null; try { startDate= df.parse("2022-01-01"); endDate= df.parse("2025-01-01"); }catch (ParseException e){ e.printStackTrace(); request.setCreateTime(startDate);// request.setPatternQuantity(endDate); request.setEnableState(new ArrayList<Integer>()); request.setEnableType(new ArrayList<Integer>()); String list=rawGlassStorageTaskService.setRawGlassTaskRequest(request); log.info("返回内容:{}",list); } } // @Test // public void testWebSocketArgument() { // RawGlassTaskRequest request=new RawGlassTaskRequest(); // //设置参数: // DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); // Date startDate=null; // Date endDate=null; // try { // startDate= df.parse("2022-01-01"); // endDate= df.parse("2025-01-01"); // }catch (ParseException e){ // e.printStackTrace(); // // request.setCreateTime(startDate);// // request.setPatternQuantity(endDate); // request.setEnableState(new ArrayList<Integer>()); // request.setEnableType(new ArrayList<Integer>()); // String list=rawGlassStorageTaskService.setRawGlassTaskRequest(request); // log.info("返回内容:{}",list); // } // } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -70,39 +70,29 @@ //将确认字置为0 plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0); //可能有几炉玻璃同时在钢,需要获取钢化小片表中的数据信息状态为2(旋转台玻璃已送出未钢化,正在钢化) List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>() .eq(TemperingGlassInfo::getState, Const.TEMPERING_START)); List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list( new LambdaQueryWrapper<TemperingGlassInfo>() .inSql(TemperingGlassInfo::getTemperingLayoutId, "select distinct tempering_layout_id from tempering_glass_info where state=1") .lt(TemperingGlassInfo::getState, Const.TEMPERING_START) ); if (CollectionUtils.isEmpty(temperingGlassInfoList)) { log.info("当前系统没有需要钢化的玻璃信息"); return; } TemperingGlassInfo maxGlassInfo = temperingGlassInfoList.stream().max(Comparator.comparingLong(TemperingGlassInfo::getId)).get(); TemperingGlassInfo minGlassInfo = temperingGlassInfoList.stream().min(Comparator.comparingLong(TemperingGlassInfo::getState)).get(); if (minGlassInfo.getState() < Const.TEMPERING_DROP) { log.info("当前炉玻璃未到齐,稍后在执行"); return; } //拿到工程id及炉号 // List<EngineerTemperingDTO> engineerTemperingList = temperingGlassInfoList.stream().map(e -> { // EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO(); // BeanUtils.copyProperties(e, engineerTemperingDTO); // return engineerTemperingDTO; // }).distinct().collect(Collectors.toList()); //将正在钢化的炉号过滤掉,仅获取待钢化的玻璃 // List<TemperingRecord> temperingRecords = temperingRecordService.list(new LambdaQueryWrapper<TemperingRecord>().and(i -> i.isNull(TemperingRecord::getCoolEnergy).or().eq(TemperingRecord::getCoolEnergy, ""))); // List<EngineerTemperingDTO> temperingList = new ArrayList<>(); // if (CollectionUtils.isNotEmpty(temperingRecords)) { // temperingList = temperingRecords.stream().map(e -> { // EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO(); // BeanUtils.copyProperties(e, engineerTemperingDTO); // return engineerTemperingDTO; // }).collect(Collectors.toList()); // } // engineerTemperingList.removeAll(temperingList); // if (CollectionUtils.isEmpty(engineerTemperingList)) { // log.info("没有待钢化的任务,结束"); // return; // } // if (engineerTemperingList.size() > 1) { // log.info("存在多炉待钢化的任务,请检查现场是否有异常数据未处理"); // return; // } // EngineerTemperingDTO temperingDTO = engineerTemperingList.get(0); TemperingGlassInfo maxGlassInfo = temperingGlassInfoList.stream().max(Comparator.comparingLong(TemperingGlassInfo::getId)).get(); //将正在钢化的炉号过滤掉,仅获取待钢化的玻璃:判断待钢的玻璃是否已发送对接数据 List<TemperingRecord> temperingRecordList = temperingRecordService.list(new LambdaQueryWrapper<TemperingRecord>().eq(TemperingRecord::getEngineerId, maxGlassInfo.getEngineerId()) .eq(TemperingRecord::getTemperingLayoutId, maxGlassInfo.getTemperingLayoutId())); if (CollectionUtils.isNotEmpty(temperingRecordList)) { log.info("没有待钢化的任务,结束"); return; } //获取待钢化的所有玻璃信息 List<TemperingGlassInfo> temperingGlassList = temperingGlassInfoList.stream() .filter(e -> e.getEngineerId().equals(maxGlassInfo.getEngineerId())