ZengTao
2025-03-05 3b69c53a60ba0bf36c44ff500b9f0ca622fef181
添加大屏订单数据,添加往ERP传输现补数据功能
14个文件已修改
3个文件已添加
504 ■■■■■ 已修改文件
UI-Project/src/lang/en.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/py.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/ReportWork/reportWork.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/largescreendisplay/screendisplay.vue 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/dto/OrderDTO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/xml/OrderMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OrderDetail.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/en.js
@@ -552,6 +552,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
@@ -549,8 +549,9 @@
        broke :'Повреждение',
        takeout :'Взять',
        dreportwork :'未报工',
        pendingwork :'待报工',
        pendingwork :'已现补',
        reportwork :'已报工',
        reportworked :'已同步',
        incise :'切割',
        edging :'磨边',
        steel :'Закалка',
UI-Project/src/lang/zh.js
@@ -549,8 +549,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/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 -> {