ZengTao
2025-05-13 3c32000216972a73cef885933ddb3e5ccc888749
大屏样式修改,色块个数查询限制为当天
12个文件已修改
867 ■■■■■ 已修改文件
UI-Project/src/lang/en.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/largescreendisplay/screendisplay.vue 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/largescreendisplay/statistics.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DailyProductionData.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcEdgTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskHistoryMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/AppRunnerConfig.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java 642 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/en.js
@@ -511,6 +511,33 @@
        createTime: 'Return date',
    },
    large: {
        loadstart:'Load start',
        loadend:'Load end',
        loadtotal: 'Load total',
        loadfree: 'Load free',
        loaddiff: 'Load diff',
        loadnumber: 'Load number',
        loadarea: 'Load area',
        tempstart: 'Temp start',
        tempend: 'Temp end',
        temptotal: 'Temp total',
        tempfree: 'Temp free',
        tempdiff: 'Temp diff',
        tempstove:  'temp stove',
        tempnumber: 'Temp number',
        temparea: 'Temp area',
        hollowstart: 'Hollow start',
        hollowend: 'Hollow end',
        hollowtotal: 'Hollow total',
        hollowfree: 'Hollow free',
        hollowdiff: 'Hollow diff',
        hollownumber: 'Hollow number',
        hollowEngineer: 'Hollow engineer',
        hollowtotal: 'Hollow total',
        hollowarea: 'Hollow area',
        engineerId: 'Engineer ID',
        totalnumber: 'Total number',
        tatalarea: 'Total area',
        statistics: 'Statistics',
        ExporttoExcel:'Export to Excel',
        slice:'slice',
UI-Project/src/lang/zh.js
@@ -513,6 +513,34 @@
          createTime :'返库日期',
      },
      large:{
        loadstart:'切割开始时间',
        loadend:'切割结束时间',
        loadtotal: '切割总时间',
        loadfree: '切割空闲时间',
        loaddiff: '切割工作时间',
        loadnumber: '切割总数量',
        loadarea: '切割总面积',
        tempstart: '钢化开始时间',
        tempend: '钢化结束时间',
        temptotal: '钢化总时间',
        tempfree: '钢化空闲时间',
        tempdiff: '钢化工作时间',
        tempstove:  '钢化炉号',
        tempnumber: '钢化总数量',
        temparea: '钢化总面积',
        hollowstart: '中空开始时间',
        hollowend: '中空结束时间',
        hollowtotal: '中空总时间',
        hollowfree: '中空空闲时间',
        hollowdiff: '中空工作时间',
        hollownumber: '中空总数量',
        hollowEngineer: '中空工程',
        hollowarea: '中空总面积',
        hollowtotal: '中空总时间',
        engineerId: '工程号',
        totalnumber: '总数量',
        tatalarea: '总面积',
        statistics: '生产统计',
        ExporttoExcel:'导出excel',
          slice:'片',
UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -64,17 +64,17 @@
  temperingGlassInfoList.value = data.temperingGlassInfoList[0];
  if (numBoxes3.value != temperingTaskType.value) {
    numBoxes3.value = temperingTaskType.value;
    // initBoxes(boxes3, numBoxes3, 'secondleft');
    initBoxes(boxes3, numBoxes3, 'secondleft');
  }
  if (temperingGlassInfoList.value > 1) {
  if (temperingGlassInfoList.value >= 1) {
    if (numBoxes4.value != 1) {
      numBoxes4.value = 1;
      // initBoxes(boxes4, numBoxes4, 'right');
      initBoxes(boxes4, numBoxes4, 'right');
    }
  } else {
    if (numBoxes4.value != 0) {
      numBoxes4.value = 0;
      // initBoxes(boxes4, numBoxes4, 'right');
      initBoxes(boxes4, numBoxes4, 'right');
    }
  }
@@ -451,6 +451,22 @@
  }
}
const exportToExcel = async () => {
  try {
    window.open('http://192.168.0.39:10011/largenScreen/exportDailyProduction', '_blank');
    // const response = await request.get('/cacheGlass/largenScreen/exportDailyProduction');
    // if (response.code == 200) {
    //   ElMessage.success(response.message);
    //   tableDatad.value = response.data;
    // } else {
    //   ElMessage.error(response.message);
    // }
  }
  catch (error) {
    console.error(error);
  }
}
const tableData = ref([]);
const dynamicColumns = ref([]);
const flowCardDetail = async (orderId) => {
@@ -539,10 +555,10 @@
    closeWebSocket(socket5);
  }
});
const numBoxes = ref(1);
const numBoxes2 = ref(1);
const numBoxes3 = ref(1);
const numBoxes4 = ref(1);
const numBoxes = ref(0);
const numBoxes2 = ref(0);
const numBoxes3 = ref(0);
const numBoxes4 = ref(0);
const speed = 0.1;
const delayFrames = 600;
@@ -581,11 +597,11 @@
      });
    } else {
      // 重置已有的 box 数据
      existing[i].x = 0;
      existing[i].y = 0;
      existing[i].direction = direction;
      existing[i].delay = i * delayFrames;
      existing[i].frameCount = 0;
      // existing[i].x = 0;
      // existing[i].y = 0;
      // existing[i].direction = direction;
      // existing[i].delay = i * delayFrames;
      // existing[i].frameCount = 0;
    }
  }
  if (existing.length > count) {
@@ -640,7 +656,13 @@
  if (box.frameCount % 2 === 0 && box.el) {
    box.el.style.top = `${box.y}px`;
    if (box.x > 0) {
      box.el.style.right = `${box.x}px`;
      if(box.direction=="right"){
        box.el.style.right = `-${box.x}px`;
      }else{
        box.el.style.right = `${box.x}px`;
      }
      box.el.style.left = '';
    } else {
      box.el.style.left = `${box.x}px`;
@@ -889,7 +911,7 @@
      <div style="width: 50%;">
        <div class="img-screen" alt="Screen">
          <div>
            <el-button type="primary" style="top:40px;left:670px;position: absolute;" @click="handlehistorical11()">{{
            <el-button type="primary" style="top:40px;left:670px;position: absolute;" @click="exportToExcel()">{{
              $t('large.statistics') }}</el-button>
          </div>
          <!-- 钢化半透明色块 -->
UI-Project/src/views/largescreendisplay/statistics.vue
@@ -7,6 +7,7 @@
      </el-date-picker>
      <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{
        $t('reportmanage.inquire') }}</el-button>
        <el-button type="primary" @click="exportToExcel">{{$t('large.ExporttoExcel')}}</el-button>
    </div>
    <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax"
      :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
@@ -223,5 +224,50 @@
  parseAndSetTime();
  historical();
});
import * as XLSX from 'xlsx';
import { saveAs } from 'file-saver';
const exportToExcel = () => {
  // 表格数据(深拷贝防止污染)
  const data = JSON.parse(JSON.stringify(tableDatax.value));
  // 表头转换为中文或国际化文本
  const headerMap = {
    date: t('large.date'),
    countOutOne: t('large.countOutOne'),
    totalAreaOutOne: t('large.totalAreaOutOne'),
    countOutTwo: t('large.countOutTwo'),
    totalAreaOutTwo: t('large.totalAreaOutTwo'),
    countIn: t('large.countIn'),
    totalAreaIn: t('large.totalAreaIn'),
    countOut: t('large.countOut'),
    totalAreaOut: t('large.totalAreaOut'),
    hollowCountOutOne: t('large.hollowCountOutOne'),
    hollowTotalAreaOutOne: t('large.hollowTotalAreaOutOne'),
    hollowCountOutTwo: t('large.hollowCountOutTwo'),
    hollowTotalAreaOutTwo: t('large.hollowTotalAreaOutTwo')
  };
  // 将数据中的 key 替换为中文表头
  const exportData = data.map(row => {
    const newRow = {};
    for (const key in headerMap) {
      newRow[headerMap[key]] = row[key];
    }
    return newRow;
  });
  // 转换为工作表
  const worksheet = XLSX.utils.json_to_sheet(exportData);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
  // 导出为文件
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
  const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
  saveAs(blob, '生产情况导出.xlsx');
};
</script>
<style scoped></style>
hangzhoumesParent/common/servicebase/pom.xml
@@ -43,7 +43,11 @@
            <artifactId>milo-spring-boot-starter</artifactId>
            <version>3.0.6.12</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.3</version>
        </dependency>
    </dependencies>
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/DailyProductionData.java
@@ -16,6 +16,13 @@
    @ExcelMerge(merge = true, isPrimaryKey = true)
    private String productDate;
    @ExcelProperty(value = {"工程信息", "工程号"})
    private String engineerId;
    @ExcelProperty(value = {"工程信息", "总片量"})
    private String glassTotal;
    @ExcelProperty(value = {"工程信息", "总面积(m^2)"})
    private String glassTotalArea;
    @ExcelProperty(value = {"切割", "开始时间"})
    @ExcelMerge(merge = true)
    private String edgBeginTime;
@@ -87,12 +94,7 @@
    @ExcelMerge(merge = true)
    private String hollowArea;
    @ExcelProperty(value = {"工程信息", "工程号"})
    private String engineerId;
    @ExcelProperty(value = {"工程信息", "总片量"})
    private String glassTotal;
    @ExcelProperty(value = {"工程信息", "总面积(m^2)"})
    private String glassTotalArea;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcEdgTask.java
@@ -59,11 +59,11 @@
        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId).last("limit 1"));
        List<ReadWriteEntity> ualist = new ArrayList<>();
        miloService.writeToOpcUa(generateReadWriteEntity("MB04.MB04.mes_glass_Id_" + cell, glassId));
        ualist.add(generateReadWriteEntity("MB04.MB04.width" + cell, (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)));
        ualist.add(generateReadWriteEntity("MB04.MB04.height" + cell, (int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)));
        ualist.add(generateReadWriteEntity("MB04.MB04.thickness" + cell, (int) glassInfo.getThickness() * 10));
        miloService.writeToOpcWord(ualist);
        miloService.writeToOpcUa(generateReadWriteEntity("MB04.MB04.mes_glass_Id_" + cell, glassId));
    }
    private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) {
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -24,7 +24,10 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -178,15 +181,19 @@
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen");
        if (sendwServer != null) {
            Date startOfToday = new Date(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli());
            List<EdgGlassTaskInfo> edgOneTasks = edgGlassTaskInfoService.list(
                    new LambdaQueryWrapper<EdgGlassTaskInfo>()
                            .lt(EdgGlassTaskInfo::getState, 2)
                            .eq(EdgGlassTaskInfo::getLine, 1)
                            .ge(EdgGlassTaskInfo::getCreateTime, startOfToday)
            );
            List<EdgGlassTaskInfo> edgTwoTasks = edgGlassTaskInfoService.list(
                    new LambdaQueryWrapper<EdgGlassTaskInfo>()
                            .lt(EdgGlassTaskInfo::getState, 2)
                            .eq(EdgGlassTaskInfo::getLine, 2)
                            .ge(EdgGlassTaskInfo::getCreateTime, startOfToday)
            );
            jsonObject.append("edgOneTasks", edgOneTasks);
            jsonObject.append("edgTwoTasks", edgTwoTasks);
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskHistoryMapper.xml
@@ -64,6 +64,22 @@
        GROUP BY t1.create_time,t2.create_time
        ;
    </select>
    <select id="queryEdgDailyProduction" resultMap="baseMap">
        SELECT
        count( t.glass_id_out ) AS count_out_one,
        round( sum( t1.width * t1.height )/ 1000000, 2 ) AS total_area_out_one
        FROM
        edg_storage_device_task_history t
        INNER JOIN glass_info t1 ON t.glass_id_out = t1.glass_id
        WHERE
        t.task_type IN ( 2, 3 )
        <if test="beginDate != null and beginDate != ''">
            AND STR_TO_DATE( t.create_time, '%Y-%m-%d' ) BETWEEN #{beginDate}
            AND #{endDate}
        </if>
        <if test="deviceId != null and deviceId != 0">
            AND device_id = #{deviceId}
        </if>
    </select>
</mapper>
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/AppRunnerConfig.java
@@ -1,6 +1,5 @@
package com.mes;
import com.mes.job.PlcStorageCageTask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
@@ -13,11 +12,7 @@
public class AppRunnerConfig implements ApplicationRunner {
    private final PlcStorageCageTask plcStorageCageTask;
    public AppRunnerConfig(PlcStorageCageTask plcStorageCageTask) {
        this.plcStorageCageTask = plcStorageCageTask;
    }
    @Override
    public void run(ApplicationArguments args) throws Exception {
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -1,322 +1,322 @@
package com.mes;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.bigstorage.service.BigStorageCageService;
import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
import com.mes.common.config.Const;
import com.mes.damage.entity.Damage;
import com.mes.damage.service.DamageService;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.job.PlcStorageCageTask;
import com.mes.pp.entity.ReportingWork;
import com.mes.pp.entity.ReportingWorkDetail;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
 * @Author : zhoush
 * @Date: 2024/3/27 16:37
 * @Description:
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = CacheVerticalClassModuleApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CacheVerticalGlassModuleApplicationTest {
    @Autowired
    BigStorageCageService bigStorageCageService;
    @Autowired
    PlcStorageCageTask plcStorageCageTask;
    @Autowired
    BigStorageCageDetailsService bigStorageCageDetailsService;
    @Autowired
    DamageService damageService;
    @Autowired
    EdgGlassTaskInfoService edgGlassTaskInfoService;
//package com.mes;
//
//import cn.hutool.json.JSONArray;
//import cn.hutool.json.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.mes.bigstorage.entity.BigStorageCage;
//import com.mes.bigstorage.entity.BigStorageCageDetails;
//import com.mes.bigstorage.service.BigStorageCageDetailsService;
//import com.mes.bigstorage.service.BigStorageCageService;
//import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
//import com.mes.common.config.Const;
//import com.mes.damage.entity.Damage;
//import com.mes.damage.service.DamageService;
//import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
//import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
////import com.mes.job.PlcStorageCageTask;
//import com.mes.pp.entity.ReportingWork;
//import com.mes.pp.entity.ReportingWorkDetail;
//import com.mes.temperingglass.entity.TemperingGlassInfo;
//import lombok.extern.slf4j.Slf4j;
//import org.junit.Test;
//import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.test.context.junit4.SpringRunner;
//
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
//import java.io.OutputStream;
//import java.net.HttpURLConnection;
//import java.net.URL;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//
///**
// * @Author : zhoush
// * @Date: 2024/3/27 16:37
// * @Description:
// */
//@Slf4j
//@RunWith(SpringRunner.class)
//@SpringBootTest(classes = CacheVerticalClassModuleApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//public class CacheVerticalGlassModuleApplicationTest {
//
//    @Autowired
//    BigStorageCageFeedTaskMapper bigStorageCageFeedTaskMapper;
    @Test
    public void testInsertSlot() {
        List<BigStorageCage> list = new ArrayList();
        for (int j = 1; j <= 5; j++) {
            for (int i = 1 + (55 * (j - 1)); i <= 55 * j; i++) {
                BigStorageCage cage = new BigStorageCage();
                cage.setDeviceId(j);
                cage.setSlot(i);
                cage.setMinThickness(4);
                cage.setMaxThickness(6);
                cage.setEnableState(1);
                cage.setRemainWidth(5000);
                list.add(cage);
            }
        }
        for (int i = 276; i <= 300; i++) {
            BigStorageCage cage = new BigStorageCage();
            cage.setDeviceId(6);
            cage.setSlot(i);
            cage.setMinThickness(8);
            cage.setMaxThickness(12);
            cage.setEnableState(1);
            cage.setRemainWidth(5000);
            list.add(cage);
        }
        for (int i = 301; i <= 330; i++) {
            BigStorageCage cage = new BigStorageCage();
            cage.setDeviceId(7);
            cage.setSlot(i);
            cage.setMinThickness(8);
            cage.setMaxThickness(12);
            cage.setEnableState(1);
            cage.setRemainWidth(5000);
            list.add(cage);
        }
        for (int i = 331; i <= 355; i++) {
            BigStorageCage cage = new BigStorageCage();
            cage.setDeviceId(8);
            cage.setSlot(i);
            cage.setMinThickness(8);
            cage.setMaxThickness(12);
            cage.setEnableState(1);
            cage.setRemainWidth(5000);
            list.add(cage);
        }
        for (int i = 356; i <= 380; i++) {
            BigStorageCage cage = new BigStorageCage();
            cage.setDeviceId(9);
            cage.setSlot(i);
            cage.setMinThickness(15);
            cage.setMaxThickness(19);
            cage.setEnableState(1);
            cage.setRemainWidth(5000);
            list.add(cage);
        }
        bigStorageCageService.saveBatch(list);
    }
    @Test
    public void testFindPath() {
        log.info("完整路径:{}", Arrays.asList("123"));
    }
    @Test
    public void outGlass() {
        log.info("完整路径:{}", bigStorageCageService.outGlass());
    }
    @Test
    public void plcToHomeEdgOutTask() {
        plcStorageCageTask.plcToHomeEdgOutTask();
    }
    @Test
    public void plcToHomeEdgFreeCarTask() {
        plcStorageCageTask.plcToHomeEdgFreeCarTask();
    }
    @Test
    public void plcStorageCageTask() {
        plcStorageCageTask.plcToHomeEdgScan();
    }
    @Test
    public void computeTargetByLine() {
        plcStorageCageTask.computeTargetByLine(2001);
    }
    @Test
    public void judgeGlassTypeStatus() {
        plcStorageCageTask.judgeGlassTypeStatus("P24060403|6|7", Const.A09_OUT_TARGET_POSITION, "mesD03Address");
    }
    @Test
    public void getStartLine() {
        Integer startLine = plcStorageCageTask.getStartLine();
        log.info("---------{}", startLine);
    }
    @Test
    public void selectBigStorageCageUsage() {
        log.info("获取大理片笼信息:{}", bigStorageCageService.selectBigStorageCageUsage());
    }
    @Test
    public void selectBigStorageCageDetails() {
        log.info("获取大理片笼信息:{}", bigStorageCageDetailsService.selectBigStorageCageDetails("P24060403|3|6"));
    }
    @Test
    public void insertDamage() {
//        Damage damage=new Damage();
//        damage.setGlassId("P24060403|3|6");
//        damage.setLine(2001);
//        damage.setWorkingProcedure("冷加工");
//        damage.setRemark("");
//        damage.setStatus(2);
//        damageService.insertDamage(damage);
        Damage damage=damageService.getOne(
                new LambdaQueryWrapper<Damage>()
                .eq(Damage::getGlassId,"P24071503|12|4")
        );
        damageService.submitReport(damage);
    }
    @Test
    public void updateOutGlassStateTask() {
        plcStorageCageTask.updateOutGlassStateTask();
    }
    @Test
    public void chaxun(){
        List<EdgGlassTaskInfo> edgGlassTaskInfoList = edgGlassTaskInfoService.list(new QueryWrapper<EdgGlassTaskInfo>()
                .select("Top 1 *")
                .eq("glass_id", "P24072402|1|13")
        );
        log.info("在尺寸表中获取玻璃信息{}", edgGlassTaskInfoList);
    }
    @Test
    public void deleteByGlassId(){
        damageService.deleteByGlassId("P24081203|2|5");
    }
    @Test
    public void testttt(){
        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(6);
        List<Integer> deviceUseds = deviceUsedList;
        List<BigStorageCageDetails> engineerCount1 = bigStorageCageDetailsService.list(
                new LambdaQueryWrapper<BigStorageCageDetails>()
                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT,Const.GLASS_STATE_DAMAGE,Const.GLASS_STATE_TAKE)
                        .select(BigStorageCageDetails::getEngineerId)
                        .groupBy(BigStorageCageDetails::getEngineerId)
                        .between(BigStorageCageDetails::getDeviceId, 1, 5)
        );
        List<BigStorageCageDetails> engineerCount2 = bigStorageCageDetailsService.list(
                new LambdaQueryWrapper<BigStorageCageDetails>()
                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT,Const.GLASS_STATE_DAMAGE,Const.GLASS_STATE_TAKE)
                        .select(BigStorageCageDetails::getEngineerId)
                        .groupBy(BigStorageCageDetails::getEngineerId)
                        .between(BigStorageCageDetails::getDeviceId, 6, 8)
        );
        if (engineerCount1.size() > engineerCount2.size()) {
            deviceUsedList.removeIf(device -> device < 6);
        } else {
            deviceUsedList.removeIf(device -> device > 5);
        }
        if (CollectionUtils.isEmpty(deviceUsedList)) {
            deviceUsedList = deviceUseds;
        }
        log.info("zhi:{}",deviceUsedList);
    }
    @Test
    public void ca(){
        try {
            // 目标系统的API URL
            String url = "http://192.168.3.119:8086/reportingWork/mesSaveReportingWorkWorn";
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            // 设置请求方法和请求头
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/json; utf-8");
            con.setRequestProperty("Accept", "application/json");
            con.setDoOutput(true);
            // 创建 JSON 对象
            JSONObject result = new JSONObject();
            ReportingWork reportingWork = new ReportingWork();
            reportingWork.setOrderId("NG24042301");
            reportingWork.setProductionId("NG24042301A");
            reportingWork.setProcessId("NG24042301A001");
            reportingWork.setDeviceName("磨边机");
            reportingWork.setThisProcess("切割");
            reportingWork.setNextProcess("磨边");
            reportingWork.setThisCompletedQuantity(1);
            reportingWork.setThisWornQuantity(0);
            reportingWork.setClasses("早班");
            reportingWork.setReportingWorkTime(LocalDateTime.now());
            reportingWork.setTeamsGroupsName("小廖一号");
            reportingWork.setCreator("小廖");
            List<ReportingWorkDetail> reportingWorkDetails = new ArrayList<>();
            ReportingWorkDetail reportingWorkDetail = new ReportingWorkDetail();
            reportingWorkDetail.setTechnologyNumber(1);
            reportingWorkDetail.setOrderNumber(1);
            reportingWorkDetail.setCompletedQuantity(1);
            reportingWorkDetail.setBreakageQuantity(0);
            reportingWorkDetails.add(reportingWorkDetail);
            ObjectMapper objectMapper = new ObjectMapper();
            // 将 ReportingWork 转换为 JSONObject
            JSONObject reportingWorkJson = new JSONObject(objectMapper.writeValueAsString(reportingWork));
            reportingWorkJson.put("reportingWorkTime", reportingWork.getReportingWorkTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
            // 将 ReportingWorkDetail 列表转换为 JSONArray
            JSONArray detailsJsonArray = new JSONArray(objectMapper.writeValueAsString(reportingWorkDetails));
            // 将 JSON 对象和数组添加到结果对象中
            result.put("title", reportingWorkJson);
            result.put("detail", detailsJsonArray);
            result.put("type", 0);
            result.put("userId", "admin");
            result.put("userName", "admin");
            result.put("qualityInsStatus", 0);
            // 将 result 对象转换为字符串
            String jsonInputString = result.toString();
            System.out.println("jsonInputString : " + result);
            // 发送请求
            try (OutputStream os = con.getOutputStream()) {
                byte[] input = jsonInputString.getBytes("utf-8");
                os.write(input, 0, input.length);
            }
            // 获取响应码
            int responseCode = con.getResponseCode();
            System.out.println("Response Code : " + responseCode);
            // 获取响应内容
            try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                System.out.println("Response Body: " + response.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
//    BigStorageCageService bigStorageCageService;
////    @Autowired
////    PlcStorageCageTask plcStorageCageTask;
//    @Autowired
//    BigStorageCageDetailsService bigStorageCageDetailsService;
//    @Autowired
//    DamageService damageService;
//    @Autowired
//    EdgGlassTaskInfoService edgGlassTaskInfoService;
//
////    @Autowired
////    BigStorageCageFeedTaskMapper bigStorageCageFeedTaskMapper;
//
//    @Test
//    public void testInsertSlot() {
//        List<BigStorageCage> list = new ArrayList();
//        for (int j = 1; j <= 5; j++) {
//            for (int i = 1 + (55 * (j - 1)); i <= 55 * j; i++) {
//                BigStorageCage cage = new BigStorageCage();
//                cage.setDeviceId(j);
//                cage.setSlot(i);
//                cage.setMinThickness(4);
//                cage.setMaxThickness(6);
//                cage.setEnableState(1);
//                cage.setRemainWidth(5000);
//                list.add(cage);
//            }
//        }
//        for (int i = 276; i <= 300; i++) {
//            BigStorageCage cage = new BigStorageCage();
//            cage.setDeviceId(6);
//            cage.setSlot(i);
//            cage.setMinThickness(8);
//            cage.setMaxThickness(12);
//            cage.setEnableState(1);
//            cage.setRemainWidth(5000);
//            list.add(cage);
//        }
//        for (int i = 301; i <= 330; i++) {
//            BigStorageCage cage = new BigStorageCage();
//            cage.setDeviceId(7);
//            cage.setSlot(i);
//            cage.setMinThickness(8);
//            cage.setMaxThickness(12);
//            cage.setEnableState(1);
//            cage.setRemainWidth(5000);
//            list.add(cage);
//        }
//        for (int i = 331; i <= 355; i++) {
//            BigStorageCage cage = new BigStorageCage();
//            cage.setDeviceId(8);
//            cage.setSlot(i);
//            cage.setMinThickness(8);
//            cage.setMaxThickness(12);
//            cage.setEnableState(1);
//            cage.setRemainWidth(5000);
//            list.add(cage);
//        }
//        for (int i = 356; i <= 380; i++) {
//            BigStorageCage cage = new BigStorageCage();
//            cage.setDeviceId(9);
//            cage.setSlot(i);
//            cage.setMinThickness(15);
//            cage.setMaxThickness(19);
//            cage.setEnableState(1);
//            cage.setRemainWidth(5000);
//            list.add(cage);
//        }
//        bigStorageCageService.saveBatch(list);
//    }
//
//    @Test
//    public void testFindPath() {
//        log.info("完整路径:{}", Arrays.asList("123"));
//    }
//
//    @Test
//    public void outGlass() {
//        log.info("完整路径:{}", bigStorageCageService.outGlass());
//    }
//
//    @Test
//    public void plcToHomeEdgOutTask() {
//        plcStorageCageTask.plcToHomeEdgOutTask();
//    }
//
//    @Test
//    public void plcToHomeEdgFreeCarTask() {
//        plcStorageCageTask.plcToHomeEdgFreeCarTask();
//    }
//
//    @Test
//    public void plcStorageCageTask() {
//        plcStorageCageTask.plcToHomeEdgScan();
//
//    }
//
//
//
//    @Test
//    public void computeTargetByLine() {
//        plcStorageCageTask.computeTargetByLine(2001);
//    }
//
//    @Test
//    public void judgeGlassTypeStatus() {
//        plcStorageCageTask.judgeGlassTypeStatus("P24060403|6|7", Const.A09_OUT_TARGET_POSITION, "mesD03Address");
//    }
//
//    @Test
//    public void getStartLine() {
//        Integer startLine = plcStorageCageTask.getStartLine();
//        log.info("---------{}", startLine);
//    }
//
//    @Test
//    public void selectBigStorageCageUsage() {
//        log.info("获取大理片笼信息:{}", bigStorageCageService.selectBigStorageCageUsage());
//    }
//
//    @Test
//    public void selectBigStorageCageDetails() {
//        log.info("获取大理片笼信息:{}", bigStorageCageDetailsService.selectBigStorageCageDetails("P24060403|3|6"));
//    }
//
//    @Test
//    public void insertDamage() {
////        Damage damage=new Damage();
////        damage.setGlassId("P24060403|3|6");
////        damage.setLine(2001);
////        damage.setWorkingProcedure("冷加工");
////        damage.setRemark("");
////        damage.setStatus(2);
////        damageService.insertDamage(damage);
//        Damage damage=damageService.getOne(
//                new LambdaQueryWrapper<Damage>()
//                .eq(Damage::getGlassId,"P24071503|12|4")
//        );
//        damageService.submitReport(damage);
//    }
//
//    @Test
//    public void updateOutGlassStateTask() {
//        plcStorageCageTask.updateOutGlassStateTask();
//    }
//
//    @Test
//    public void chaxun(){
//        List<EdgGlassTaskInfo> edgGlassTaskInfoList = edgGlassTaskInfoService.list(new QueryWrapper<EdgGlassTaskInfo>()
//                .select("Top 1 *")
//                .eq("glass_id", "P24072402|1|13")
//        );
//        log.info("在尺寸表中获取玻璃信息{}", edgGlassTaskInfoList);
//    }
//
//    @Test
//    public void deleteByGlassId(){
//        damageService.deleteByGlassId("P24081203|2|5");
//    }
//
//    @Test
//    public void testttt(){
//        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(6);
//        List<Integer> deviceUseds = deviceUsedList;
//        List<BigStorageCageDetails> engineerCount1 = bigStorageCageDetailsService.list(
//                new LambdaQueryWrapper<BigStorageCageDetails>()
//                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT,Const.GLASS_STATE_DAMAGE,Const.GLASS_STATE_TAKE)
//                        .select(BigStorageCageDetails::getEngineerId)
//                        .groupBy(BigStorageCageDetails::getEngineerId)
//                        .between(BigStorageCageDetails::getDeviceId, 1, 5)
//        );
//        List<BigStorageCageDetails> engineerCount2 = bigStorageCageDetailsService.list(
//                new LambdaQueryWrapper<BigStorageCageDetails>()
//                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT,Const.GLASS_STATE_DAMAGE,Const.GLASS_STATE_TAKE)
//                        .select(BigStorageCageDetails::getEngineerId)
//                        .groupBy(BigStorageCageDetails::getEngineerId)
//                        .between(BigStorageCageDetails::getDeviceId, 6, 8)
//        );
//        if (engineerCount1.size() > engineerCount2.size()) {
//            deviceUsedList.removeIf(device -> device < 6);
//        } else {
//            deviceUsedList.removeIf(device -> device > 5);
//        }
//        if (CollectionUtils.isEmpty(deviceUsedList)) {
//            deviceUsedList = deviceUseds;
//        }
//        log.info("zhi:{}",deviceUsedList);
//    }
//
//
//    @Test
//    public void ca(){
//        try {
//            // 目标系统的API URL
//            String url = "http://192.168.3.119:8086/reportingWork/mesSaveReportingWorkWorn";
//            URL obj = new URL(url);
//            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
//
//            // 设置请求方法和请求头
//            con.setRequestMethod("POST");
//            con.setRequestProperty("Content-Type", "application/json; utf-8");
//            con.setRequestProperty("Accept", "application/json");
//            con.setDoOutput(true);
//
//            // 创建 JSON 对象
//            JSONObject result = new JSONObject();
//
//            ReportingWork reportingWork = new ReportingWork();
//            reportingWork.setOrderId("NG24042301");
//            reportingWork.setProductionId("NG24042301A");
//            reportingWork.setProcessId("NG24042301A001");
//            reportingWork.setDeviceName("磨边机");
//            reportingWork.setThisProcess("切割");
//            reportingWork.setNextProcess("磨边");
//            reportingWork.setThisCompletedQuantity(1);
//            reportingWork.setThisWornQuantity(0);
//            reportingWork.setClasses("早班");
//            reportingWork.setReportingWorkTime(LocalDateTime.now());
//            reportingWork.setTeamsGroupsName("小廖一号");
//            reportingWork.setCreator("小廖");
//
//            List<ReportingWorkDetail> reportingWorkDetails = new ArrayList<>();
//            ReportingWorkDetail reportingWorkDetail = new ReportingWorkDetail();
//            reportingWorkDetail.setTechnologyNumber(1);
//            reportingWorkDetail.setOrderNumber(1);
//            reportingWorkDetail.setCompletedQuantity(1);
//            reportingWorkDetail.setBreakageQuantity(0);
//            reportingWorkDetails.add(reportingWorkDetail);
//
//            ObjectMapper objectMapper = new ObjectMapper();
//
//            // 将 ReportingWork 转换为 JSONObject
//            JSONObject reportingWorkJson = new JSONObject(objectMapper.writeValueAsString(reportingWork));
//            reportingWorkJson.put("reportingWorkTime", reportingWork.getReportingWorkTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
//            // 将 ReportingWorkDetail 列表转换为 JSONArray
//            JSONArray detailsJsonArray = new JSONArray(objectMapper.writeValueAsString(reportingWorkDetails));
//
//            // 将 JSON 对象和数组添加到结果对象中
//            result.put("title", reportingWorkJson);
//            result.put("detail", detailsJsonArray);
//            result.put("type", 0);
//            result.put("userId", "admin");
//            result.put("userName", "admin");
//            result.put("qualityInsStatus", 0);
//
//            // 将 result 对象转换为字符串
//            String jsonInputString = result.toString();
//            System.out.println("jsonInputString : " + result);
//            // 发送请求
//            try (OutputStream os = con.getOutputStream()) {
//                byte[] input = jsonInputString.getBytes("utf-8");
//                os.write(input, 0, input.length);
//            }
//
//            // 获取响应码
//            int responseCode = con.getResponseCode();
//            System.out.println("Response Code : " + responseCode);
//
//            // 获取响应内容
//            try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
//                StringBuilder response = new StringBuilder();
//                String inputLine;
//                while ((inputLine = in.readLine()) != null) {
//                    response.append(inputLine);
//                }
//                System.out.println("Response Body: " + response.toString());
//            }
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -2,6 +2,7 @@
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.mes.common.config.Const;
import com.mes.damage.service.DamageService;
@@ -14,7 +15,10 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -105,17 +109,21 @@
    public void largenScreen() {
        JSONObject jsonObject = new JSONObject();
        //大屏钢化信息
        Date startOfToday = new Date(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli());
        Integer putGlass = temperingAgoService.count(
                new LambdaUpdateWrapper<TemperingGlassInfo>()
                        .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
                new QueryWrapper<TemperingGlassInfo>()
                        .eq("state", Const.TEMPERING_NEW)
                        .gt("create_time", startOfToday)
        );
        jsonObject.append("temperingTaskType", putGlass);
        //大屏钢化信息
        List<TemperingGlassInfo> temperingGlassInfoList = temperingAgoService.list(
                new LambdaQueryWrapper<TemperingGlassInfo>()
                        .select(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 选择要去重的字段
                        .eq(TemperingGlassInfo::getState, Const.TEMPERING_START)
                        .groupBy(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 按 engineerId 和 temperingLayoutId 分组
                new QueryWrapper<TemperingGlassInfo>()
                        .select("engineer_id" ,"tempering_layout_id")
                        .eq("state", Const.TEMPERING_START)
                        .gt("create_time", startOfToday)
                        .groupBy("engineer_id" ,"tempering_layout_id")
        );
        jsonObject.append("temperingGlassInfoList", temperingGlassInfoList.size());
        //大屏钢化信息