UI-Project/src/lang/en.js
@@ -563,6 +563,7 @@ dreportwork :'Unreported work', pendingwork :'Pending job application', reportwork :'Reported work', reportworked :'Reported worked', incise :'slicing', edging :'edging', steel :'toughened', UI-Project/src/lang/py.js
@@ -559,8 +559,9 @@ broke :'Повреждение', takeout :'Взять', dreportwork :'未报工', pendingwork :'待报工', pendingwork :'已现补', reportwork :'已报工', reportworked :'已同步', incise :'切割', edging :'磨边', steel :'Закалка', UI-Project/src/lang/zh.js
@@ -560,8 +560,9 @@ broke :'破损', takeout :'拿走', dreportwork :'未报工', pendingwork :'待报工', pendingwork :'已现补', reportwork :'已报工', reportworked :'已同步', incise :'切割', edging :'磨边', steel :'钢化', UI-Project/src/views/ReportWork/reportWork.vue
@@ -14,8 +14,9 @@ <el-select v-model="report.status" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;"> <!-- <el-option :label="$t('reportmanage.all')" value="0"></el-option> --> <el-option :label="$t('reportmanage.dreportwork')" value="1"></el-option> <!-- <el-option :label="$t('reportmanage.pendingwork')" value="2"></el-option> --> <el-option :label="$t('reportmanage.pendingwork')" value="7"></el-option> <el-option :label="$t('reportmanage.reportwork')" value="3"></el-option> <el-option :label="$t('reportmanage.reportworked')" value="8"></el-option> </el-select> <el-select v-model="report.workingProcedure" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;"> @@ -175,7 +176,7 @@ }else{ selectedType.value = true; } if (report.value.status == 1&&(report.value.type == 8||report.value.type == 1)) { if ((report.value.status == 1||report.value.status == 7)&&(report.value.type == 8||report.value.type == 1)) { selectedStatus.value = true; }else{ selectedStatus.value = false; @@ -216,7 +217,7 @@ ElMessage.error(response.message); } } selectReportData(); }; const fetchTableData = async () => { try { UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -15,9 +15,11 @@ let socket = null; const rawGlassStorageDetailList = ref([]) const orderDTOS = ref([]) const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/largenScreen`; const handleMessage = (data) => { rawGlassStorageDetailList.value = data.rawGlassStorageDetailList[0] orderDTOS.value = data.orderDTOS[0] }; let socket1 = null; @@ -31,6 +33,15 @@ edgTwoTasks.value = data.edgTwoTasks[0]; engineeringOne.value = data.engineeringOne[0]; engineeringTwo.value = data.engineeringTwo[0]; if(numBoxes.value != edgOneTasks.value.length){ numBoxes.value = edgOneTasks.value.length; boxStart(); } if(numBoxes2.value != edgTwoTasks.value.length){ numBoxes2.value = edgTwoTasks.value.length; boxStart2(); } }; let socket2 = null; @@ -40,7 +51,13 @@ const handleMessage2 = (data) => { temperingTaskType.value = data.temperingTaskType[0]; temperingGlassInfoList.value = data.temperingGlassInfoList[0]; if(numBoxes3.value !=temperingTaskType.value){ numBoxes3.value =temperingTaskType.value; boxStart3(); } }; const tableDatad = ref([]); const patternUsage = async () => { @@ -64,6 +81,22 @@ films: '' }) // const tableDatac = ref([]); // const patternUsage = async () => { // try { // const response = await request.post('/glassStorage/rawGlassStorageDetails/patternUsage?width=' + ptnusage.value.width + '&height=' + ptnusage.value.height + '&thickness=' + ptnusage.value.thickness + '&films=' + ptnusage.value.films); // if (response.code == 200) { // ElMessage.success(response.message); // tableDatad.value = response.data; // } else { // ElMessage.error(response.message); // } // } // catch (error) { // console.error(error); // } // } // 点击下方弹窗 const handlehistorical = (row) => { @@ -72,6 +105,10 @@ }; // 在组件挂载时设置默认时间范围 onMounted(() => { boxStart(); boxStart2(); boxStart3(); requestAnimationFrame(animate); socket = initializeWebSocket(socketUrl, handleMessage); socket1 = initializeWebSocket(socketUrl1, handleMessage1); socket2 = initializeWebSocket(socketUrl2, handleMessage2); @@ -94,9 +131,169 @@ console.log("关闭了") closeWebSocket(); }); const numBoxes = ref(5); const numBoxes2 = ref(5); const numBoxes3 = ref(5); // 可动态修改的 div 数量 const speed = 0.1; const maxX = 200; // 终点X坐标 const maxY = -80; // 终点Y坐标 const maxX2 = 250; // 终点X坐标 const maxY2 = -165; // 终点Y坐标 const maxX3 = 100; // 终点X坐标 const maxY3 = -55; // 终点Y坐标 const delayFrames = 600; // 每个 div 的延迟帧数 const boxes = ref([]); const boxes2 = ref([]); const boxes3 = ref([]); // 初始化 div 数据 const boxStart = () => { boxes.value = []; for (let i = 0; i < numBoxes.value; i++) { boxes.value.push({ x: 0, y: 0, // 初始位置在底部 direction: 'up', delay: i * delayFrames, style: { width: '15px', height: '15px', backgroundColor: i % 2 === 0 ? 'red' : 'blue', position: 'absolute', transform: `translate(0px, 0px)` } }); } } const boxStart2 = () => { boxes2.value = []; for (let i = 0; i < numBoxes2.value; i++) { boxes2.value.push({ x: 0, y: 0, // 初始位置在底部 direction: 'up', delay: i * delayFrames, style: { width: '15px', height: '15px', backgroundColor: i % 2 === 0 ? 'red' : 'blue', position: 'absolute', transform: `translate(0px, 0px)` } }); } } const boxStart3 = () => { boxes3.value = []; for (let i = 0; i < numBoxes3.value; i++) { boxes3.value.push({ x: 0, y: 0, // 初始位置在底部 direction: 'left', delay: i * delayFrames, style: { width: '15px', height: '15px', backgroundColor: i % 2 === 0 ? 'red' : 'blue', position: 'absolute', transform: `translate(0px, 0px)` } }); } } const animate = () => { boxes.value.forEach((box) => { if (box.delay > 0) { box.delay--; return; } if (box.direction === 'up') { box.y -= speed; if (box.y <= maxY) { // box.y = 0; // 确保不会超出界限 box.direction = 'left'; } } else if (box.direction === 'left') { box.x -= speed; if (box.x <= -maxX) { box.x = 0; box.y = 0; // 重新回到底部 box.direction = 'up'; } } box.style = { ...box.style, transform: `translate(${box.x}px, ${box.y}px)` }; }); boxes2.value.forEach((box) => { if (box.delay > 0) { box.delay--; return; } if (box.direction === 'up') { box.y -= speed; if (box.y <= maxY2) { // box.y = 0; // 确保不会超出界限 box.direction = 'left'; } } else if (box.direction === 'left') { box.x -= speed; if (box.x <= -maxX2) { box.x = 0; box.y = 0; // 重新回到底部 box.direction = 'up'; } } box.style = { ...box.style, transform: `translate(${box.x}px, ${box.y}px)` }; }); boxes3.value.forEach((box) => { if (box.delay > 0) { box.delay--; return; } if (box.direction === 'up') { box.y -= speed; if (box.y <= maxY3) { // box.y = 0; // 确保不会超出界限 box.direction = 'left'; box.x = 0; box.y = 0; // 重新回到底部 } } else if (box.direction === 'left') { box.x -= speed; if (box.x <= -maxX3) { box.direction = 'up'; } } box.style = { ...box.style, transform: `translate(${box.x}px, ${box.y}px)` }; }); requestAnimationFrame(animate); }; </script> <template> <div style="height: 500px;"> <div class="awatch"> <div class="img-screen" alt="Screen"> <!-- 钢化色块 --> @@ -107,7 +304,33 @@ <div v-if="engineeringTwo.length>1" class="slicing" style="width: 50px;height: 22px;top: 625px;left: 453px;position: absolute;background-color: red;"></div> <!-- 原片仓储色块 --> <div class="raw" style="width: 31px;height: 32px;top: 571px;left: 300px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+item.remainQuantity+"px;height: 5px;background-color: red;"'></div> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> </div> <div class="raw" style="width: 31px;height: 47px;top: 610px;left: 300px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(8,17)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> </div> <div class="raw" style="width: 31px;height: 13px;top: 675px;left: 300px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(18,20)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> </div> <div class="raw" style="width: 31px;height: 22px;top: 657px;left: 370px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(21,25)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> </div> <div class="raw" style="width: 31px;height: 9px;top: 561px;left: 370px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(26,27)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> </div> <div class="raw" style="width: 31px;height: 9px;top: 612px;left: 370px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(28,29)" :key="index" :style='"width: "+(item.remainQuantity / 5)+"px;height: 5px;background-color: red;"'></div> </div> <!-- 磨边色块 --> <div class="container" style="position: relative;width: 20px;height: 20px;top: 572px;left: 645px;border: 1px solid #000;position: absolute;"> <div v-for="(box, index) in boxes" :key="index" class="box" :style="box.style"></div> </div> <div class="container" style="position: relative;width: 20px;height: 20px;top: 625px;left: 700px;border: 1px solid #000;position: absolute;"> <div v-for="(box, index) in boxes2" :key="index" class="box1" :style="box.style"></div> </div> <!-- 钢化运动色块 --> <div class="container" style="position: relative;width: 20px;height: 20px;top: 438px;left: 196px;border: 1px solid #000;position: absolute;"> <div v-for="(box, index) in boxes3" :key="index" class="box1" :style="box.style"></div> </div> <!-- <div class="raw" style="width: 31px;height: 32px;top: 571px;left: 300px;position: absolute;background-color: red;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+item.remainQuantity+"px;height: 5px;background-color: red;"'></div> @@ -117,7 +340,7 @@ style="position: relative;width: 110px;height: 140px;top: 603px;left: 297px;"></div> </div> <div style="height: 190px;width: 48%;float: right;"> <el-table height="500" ref="table" @selection-change="handleSelectionChange" :data="tableDatac" <el-table height="700" ref="table" :data="orderDTOS" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> <el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" /> <el-table-column prop="customerName" align="center" :show-overflow-tooltip="true" @@ -125,19 +348,20 @@ <el-table-column prop="project" align="center" :label="$t('large.project')" min-width="50" /> <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="50" /> <el-table-column prop="quantity" align="center" :label="$t('large.quantity')" min-width="50" /> <el-table-column align="center" :label="$t('large.warehousing')" min-width="50" prop="warehousing"> <el-table-column prop="percent" align="center" :label="$t('large.percent')" min-width="50" /> <!-- <el-table-column align="center" :label="$t('large.warehousing')" min-width="50" prop="warehousing"> <template #default="scope"> <el-tag :type="getStatusType(scope.row.warehousing)"> {{ getStatusText(scope.row.warehousing) }} </el-tag> </template> </el-table-column> <el-table-column prop="deliveryDate" align="center" :label="$t('large.deliveryDate')" min-width="100" /> </el-table-column> --> <!-- <el-table-column prop="deliveryDate" align="center" :label="$t('large.deliveryDate')" min-width="100" /> <el-table-column fixed="right" :label="$t('large.operate')" align="center" width="100"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleBinda(scope.row)">{{ $t('large.mes') }}</el-button> </template> </el-table-column> </el-table-column> --> </el-table> </div> </div> @@ -183,7 +407,7 @@ </el-table> </el-dialog> <el-dialog v-model="blinda" top="5vh" width="85%"> <el-table height="650" ref="table" @selection-change="handleSelectionChange" :data="tableData" <el-table height="650" ref="table" :data="tableData" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> <el-table-column prop="orderId" fixed align="center" :label="$t('large.orderId1')" min-width="110" /> <el-table-column prop="project" align="center" :label="$t('large.project')" min-width="110" /> @@ -277,4 +501,8 @@ /* .awatch{ height: 460px; /* max-width: 100%; */ .box { transition: transform 0.016s linear; } </style> hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
@@ -45,7 +45,11 @@ @PostMapping("/submitDamage") public Result submitDamage(@RequestBody List<Damage> damageList) { damageService.submitDamage(damageList); damageList.forEach(damage -> damage.setStatus(3)); if(damageList.get(0).getStatus()==1){ damageList.forEach(damage -> damage.setStatus(3)); }else{ damageList.forEach(damage -> damage.setStatus(8)); } damageService.updateBatchById(damageList); return Result.build(200,"报工成功",1); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -55,8 +55,8 @@ WorkAssignmentMapper workAssignmentMapper; private final static String ERP_URL = "http://192.168.2.100:8086"; // private final static String ERP_URL = "http://10.153.19.174: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"; /** @@ -77,10 +77,10 @@ } List<Damage> damageList = baseMapper.selectList(damageSelectWrapper); for (Damage damage : damageList) { damage.setStatus(2); } return baseMapper.selectList(damageSelectWrapper); // for (Damage damage : damageList) { // damage.setStatus(2); // } return damageList; } /** @@ -140,11 +140,20 @@ damageDetails.setResponsibleEquipment(damagesdetails.get(0).getResponsibleEquipment()); damageDetails.setResponsibleTeam(damagesdetails.get(0).getResponsibleTeam()); damageDetails.setResponsiblePersonnel(null); if (damagesdetails.get(0).getStatus() == 7) { damageDetails.setQualityInspector("auto"); damageDetails.setPatchStatus(1); damageDetails.setQualityInsStatus(2); } else { damageDetails.setQualityInspector(""); damageDetails.setPatchStatus(0); damageDetails.setQualityInsStatus(0); } damageDetailses.add(damageDetails); } } reportingWorkDetails.add(reportingWorkDetail); reportingWorkDetail.setDamageDetailsList(damageDetailses); reportingWorkDetail.setDamageDetails(damageDetailses); sendToERP(reportingWork, reportingWorkDetails, Boolean.FALSE); } } @@ -199,6 +208,7 @@ damage1 = baseMapper.selectList( new LambdaQueryWrapper<Damage>() .in(Damage::getType, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) .notIn(Damage::getStatus, 7, 8) .eq(Damage::getGlassId, damage.getGlassId()) ); } else { @@ -356,6 +366,11 @@ result.put("title", reportingWorkJson); result.put("type", 0); if (reportingWorkDetails.get(0).getDamageDetails().get(0).getPatchStatus() == 1) { result.put("isPatch", 1); } else { result.put("isPatch", 0); } result.put("userId", "admin"); result.put("userName", "admin"); result.put("qualityInsStatus", 0); hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/dto/OrderDTO.java
New file @@ -0,0 +1,62 @@ package com.mes.order.entity.dto; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** * <p> * * </p> * * @author wu * @since 2024-06-17 */ @Data @EqualsAndHashCode(callSuper = false) public class OrderDTO implements Serializable { private static final long serialVersionUID = 1L; /** * 订单Id */ private String orderId; /** * 客户名称 */ private String customerName; /** * 项目名称 */ private String project; /** * 订单数量 */ private String quantity; /** * 订单面积 */ private String area; /** * 创建时间 */ private String createTime; /** * 订单进度百分比 */ private String percent; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java
@@ -1,6 +1,9 @@ package com.mes.order.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.order.entity.Orders; import com.mes.order.entity.dto.OrderDTO; import java.util.List; /** * <p> @@ -12,4 +15,5 @@ */ public interface OrdersMapper extends BaseMapper<Orders> { List<OrderDTO> selectOrderPercent(); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/xml/OrderMapper.xml
@@ -1,5 +1,33 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mes.order.mapper.OrderMapper"> </mapper> <!--<mapper namespace="com.mes.order.mapper.OrdersMapper">--> <!-- <resultMap id="baseMap" type="com.mes.order.entity.dto.OrderDTO">--> <!-- <result column="order_id" property="orderId"/>--> <!-- <result column="customer_name" property="customerName"/>--> <!-- <result column="project" property="project"/>--> <!-- <result column="area" property="area"/>--> <!-- <result column="quantity" property="quantity"/>--> <!-- <result column="create_time" property="createTime"/>--> <!-- <result column="percent" property="percent"/>--> <!-- </resultMap>--> <!-- <select id="selectOrderPercent" resultMap="baseMap">--> <!-- SELECT a.order_id,--> <!-- a.customer_name,--> <!-- a.project,--> <!-- a.area,--> <!-- a.quantity,--> <!-- a.create_time,--> <!-- round(ifnull(d.finishNum, 0) / a.quantity * 100) as 'percent'--> <!-- from sd.`order` as a--> <!-- LEFT JOIN (--> <!-- SELECT sum(c.reporting_work_num) as 'finishNum',order_id--> <!-- from sd.order_process_detail as c--> <!-- where c.id in (--> <!-- SELECT max(id) from sd.order_process_detail as b GROUP BY b.process_id, order_number--> <!-- )--> <!-- GROUP BY c.order_id--> <!-- ) as d--> <!-- on a.order_id = d.order_id--> <!-- where a.warehousing != 2--> <!-- </select>--> <!--</mapper>--> hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
@@ -4,6 +4,7 @@ import com.mes.order.entity.Order; import com.mes.order.entity.Orderdetail; import com.mes.order.entity.Orders; import com.mes.order.entity.dto.OrderDTO; import java.util.List; @@ -20,4 +21,6 @@ List<Orders> selectOrders(); List<Orderdetail> selectOrderdetail(Orders orders); List<OrderDTO> selectOrderPercent(); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.order.entity.Orderdetail; import com.mes.order.entity.Orders; import com.mes.order.entity.dto.OrderDTO; import com.mes.order.mapper.OrderdetailMapper; import com.mes.order.mapper.OrdersMapper; import com.mes.order.service.OrdersService; @@ -41,4 +42,9 @@ queryWrapper.eq("order_id", orders.getOrderId()); return orderdetailMapper.selectList(queryWrapper); } @Override public List<OrderDTO> selectOrderPercent(){ return baseMapper.selectOrderPercent(); } } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java
@@ -149,6 +149,6 @@ */ private LocalDateTime reworkUpdateTime; private List<DamageDetails> damageDetailsList; private List<DamageDetails> damageDetails; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OrderDetail.java
New file @@ -0,0 +1,58 @@ package com.mes.pp.entity.request; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * * </p> * * @author tao * @since 2024-06-26 */ @Data @EqualsAndHashCode(callSuper = false) public class OrderDetail implements Serializable { private static final long serialVersionUID = 1L; /** * 订单号 */ private String orderId; /** * 客户名称 */ private String customName; /** * 项目名称 */ private String project; /** * 订单面积 */ private String area; /** * 订单数量 */ private String quantity; /** * 订单创建时间 */ private String createtime; /** * 进度百分比 */ private String percent; } hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml
New file @@ -0,0 +1,33 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mes.order.mapper.OrdersMapper"> <resultMap id="baseMap" type="com.mes.order.entity.dto.OrderDTO"> <result column="order_id" property="orderId"/> <result column="customer_name" property="customerName"/> <result column="project" property="project"/> <result column="area" property="area"/> <result column="quantity" property="quantity"/> <result column="create_time" property="createTime"/> <result column="percent" property="percent"/> </resultMap> <select id="selectOrderPercent" resultMap="baseMap"> SELECT a.order_id, a.customer_name, a.project, a.area, a.quantity, a.create_time, round(ifnull(d.finishNum, 0) / a.quantity * 100) as 'percent' from sd.`order` as a LEFT JOIN ( SELECT sum(c.reporting_work_num) as 'finishNum',order_id from sd.order_process_detail as c where c.id in ( SELECT max(id) from sd.order_process_detail as b GROUP BY b.process_id, order_number ) GROUP BY c.order_id ) as d on a.order_id = d.order_id where a.warehousing != 2 </select> </mapper> hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -160,7 +160,7 @@ ); List<EdgStorageDeviceTaskHistory> edgTwoTasks = edgStorageDeviceTaskHistoryService.list( new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() .eq(EdgStorageDeviceTaskHistory::getDeviceId, 1) .eq(EdgStorageDeviceTaskHistory::getDeviceId, 2) .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.EDG_GLASS_BEFORE) ); jsonObject.append("edgOneTasks", edgOneTasks); hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
@@ -72,7 +72,7 @@ task.setGlassId(requestWord.getValue() + ""); int isExistCount = bigStorageCageDetailsService.count(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, task.getGlassId()) .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)); if (isExistCount > 0) { if (isExistCount > 0 && "0".equals(targetSlotWord.getValue())) { task.setIsSame(1); } else { task.setIsSame(0); hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java
@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.common.config.Const; import com.mes.order.entity.dto.OrderDTO; import com.mes.order.service.OrdersService; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.rawglassstation.entity.RawGlassStorageStation; @@ -37,6 +39,9 @@ @Resource private RawGlassStorageDetailsService rawGlassStorageDetailsService; @Resource private OrdersService ordersService; @Scheduled(fixedDelay = 2000) public void sendRawGlassMessage() { log.info("发送任务信息和架子信息"); @@ -66,6 +71,10 @@ .orderByAsc(RawGlassStorageStation::getSlot); List<RawGlassStorageDetails> rawGlassStorageDetailList = rawGlassStorageDetailsService.list(wrapper); jsonObject.append("rawGlassStorageDetailList", rawGlassStorageDetailList); List<OrderDTO> orderDTOS = ordersService.selectOrderPercent(); jsonObject.append("orderDTOS", orderDTOS); List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (CollectionUtil.isNotEmpty(sendwServer)) { sendwServer.stream().forEach(e -> { hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
@@ -25,5 +25,7 @@ List<LackDetailsDTO> queryLackByFlowCard(String flowCardId); int queryLayerByFlowCardId(@Param("flowCardId") String flowCardId); void clearDirtyFlowCardData(@Param("flowCardId")String flowCardId, @Param("layer")int layer); } hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
@@ -126,6 +126,7 @@ return this.update(new LambdaUpdateWrapper<HollowGlassOutRelationInfo>() .set(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START) .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId) .ne(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_SUCCESS) .eq(HollowGlassOutRelationInfo::getCell, cell)); } @@ -135,6 +136,7 @@ return this.update(new LambdaUpdateWrapper<HollowGlassOutRelationInfo>() .set(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_PAUSE) .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId) .ne(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_SUCCESS) .eq(HollowGlassOutRelationInfo::getCell, cell)); } @@ -348,14 +350,15 @@ for (HollowBigStorageCageDetails item : reverse) { remainWidth = remainWidth - (int) Math.max(item.getWidth(), item.getHeight()); if (remainWidth < 0) { tempList = CollectionUtil.reverse(tempList); hollowQueues.addAll(CollectionUtil.reverse(tempList)); tempList = new ArrayList<>(); remainWidth = carWidth - (int) Math.max(item.getWidth(), item.getHeight()); } HollowGlassQueueInfo queueInfo = HollowBDetailToQueue(item, info.getId(), request.getCell()); tempList.add(queueInfo); remainWidth = remainWidth - glassGap; } hollowQueues.addAll(tempList); hollowQueues.addAll(CollectionUtil.reverse(tempList)); HollowBigStorageCageDetails cageDetails = entry.getValue().get(0); if (cageDetails.getIsPair() == 1) { isPairCount = isPairCount - cageDetails.getTotalLayer(); hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -10,6 +10,7 @@ import com.mes.glassinfo.service.GlassInfoService; import com.mes.hollow.entity.HollowBigStorageCage; import com.mes.hollow.entity.HollowBigStorageCageDetails; import com.mes.hollow.entity.HollowGlassOutRelationInfo; import com.mes.hollow.entity.HollowGlassRelationInfo; import com.mes.hollow.entity.dto.FlowCardGlassInfoDTO; import com.mes.hollow.entity.dto.HollowBigStorageDTO; @@ -19,6 +20,7 @@ import com.mes.hollow.mapper.HollowGlassRelationInfoMapper; import com.mes.hollow.service.HollowBigStorageCageDetailsService; import com.mes.hollow.service.HollowBigStorageCageService; import com.mes.hollow.service.HollowGlassOutRelationInfoService; import com.mes.hollow.service.HollowGlassRelationInfoService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -49,6 +51,8 @@ @Resource HollowGlassRelationInfoService hollowGlassRelationInfoService; @Resource HollowGlassOutRelationInfoService hollowGlassOutRelationInfoService; @Resource HollowBigStorageCageDetailsService hollowBigStorageCageDetailsService; @Value("${mes.slotWidth}") private Integer slotWidth; @@ -72,9 +76,18 @@ .last("limit 1") ); if (relationInfoOne == null) { //查看mes是否有对应的流程卡信息 int count = hollowGlassRelationInfoService.count(new LambdaQueryWrapper<HollowGlassRelationInfo>() .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId) .eq(HollowGlassRelationInfo::getLayer, layer)); if (count == 0) { generateHollowGlassInfo(flowCardId, totalLayer, layer); } else { //比较关系表及中空理片笼详情表的流程卡数据,处理脏数据:将不在笼内的流程卡匹配数据职位空 this.baseMapper.clearDirtyFlowCardData(flowCardId, layer); } //理片笼关系表中没有对应的数据,查看理片笼虚拟位置表是否有本工程下的所有玻璃虚拟信息 //虚拟位置表没有本工程下的所有玻璃虚拟信息,按照玻璃id生成本工程下所有玻璃的虚拟信息 generateHollowGlassInfo(flowCardId, totalLayer, layer); relationInfoOne = this.getOne(new LambdaQueryWrapper<HollowGlassRelationInfo>() .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId) .eq(HollowGlassRelationInfo::getWidth, width) @@ -87,13 +100,27 @@ ); } //详情表内获取本组是否已经有玻璃在笼子内(0表示提前占用) int taskCount = hollowGlassOutRelationInfoService.count(new LambdaQueryWrapper<HollowGlassOutRelationInfo>() .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId)); HollowBigStorageCage storageCage = null; //如果不存在则选择笼内未用的新格子 if (taskCount > 0) { storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>() .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth) .le(HollowBigStorageCage::getMinThickness, relationInfoOne.getThickness()) .ge(HollowBigStorageCage::getMaxThickness, relationInfoOne.getThickness()) .orderByAsc(HollowBigStorageCage::getMaxThickness).last("limit 1")); HollowBigStorageDTO storageDTO = new HollowBigStorageDTO(); BeanUtils.copyProperties(storageCage, storageDTO); BeanUtils.copyProperties(relationInfoOne, storageDTO); return storageDTO; } //详情表内获取本组是否已经有玻璃在笼子内(0表示提前占用) List<HollowBigStorageCageDetails> hollowDetailsList = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>() .eq(HollowBigStorageCageDetails::getFlowCardId, relationInfoOne.getFlowCardId()) .eq(HollowBigStorageCageDetails::getTotalLayer, totalLayer) .eq(HollowBigStorageCageDetails::getLayer, layer) .eq(HollowBigStorageCageDetails::getVirtualSlot, relationInfoOne.getVirtualSlot()) .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)); HollowBigStorageCage storageCage = null; //如果不存在则选择笼内未用的新格子 if (CollectionUtil.isEmpty(hollowDetailsList)) { storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>() hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -139,7 +139,7 @@ task.setGlassId(requestWord.getValue() + ""); int isExistCount = hollowBigStorageCageDetailsService.count(new LambdaQueryWrapper<HollowBigStorageCageDetails>().in(HollowBigStorageCageDetails::getGlassId, task.getGlassId()) .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)); if (isExistCount > 0) { if (isExistCount > 0 && "0".equals(targetSlotWord.getValue() + "")) { task.setIsSame(1); } else { task.setIsSame(0); hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
@@ -19,6 +19,7 @@ <result column="thickness" property="thickness"/> <result column="lack_cout" property="lackCount"/> </resultMap> <select id="queryFlowCardIdMaxLayerGlassInfo" resultMap="baseMap"> with temp_flow as (SELECT t.process_id, t.order_id, @@ -128,4 +129,20 @@ from hollow_glass_relation_info where flow_card_id = #{flowCardId} </select> <update id="clearDirtyFlowCardData"> update hollow_glass_relation_info set glass_id = null, tempering_layout_id = null, tempering_feed_sequence = null, engineer_id = null, state = 0 where flow_card_id = #{flowCardId} and layer = #{layer} and glass_id not in ( select glass_id from hollow_big_storage_cage_details where flow_card_id = #{flowCardId} and layer = #{layer} and state = 100 ) </update> </mapper>