1、切割版图显示
2、中空领任务是玻璃调度同样计算格子的厚度
3、补单的总层数用流程卡表内的layers_number替换
21个文件已修改
2个文件已添加
605 ■■■■■ 已修改文件
hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 268 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/request/TaskHistoryRequest.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java
@@ -45,6 +45,12 @@
    private double height;
    /**
     * 厚度
     */
    @ApiModelProperty(value = "厚度")
    private Double thickness;
    /**
     * 格子号
     */
    @ApiModelProperty(value = "玻璃id")
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -84,6 +84,7 @@
    public static final Integer GLASS_CACHE_TYPE_FINISH = 5;
    public static final Integer GLASS_CACHE_TYPE_OTHER = 6;
    public static final List<Integer> GLASS_CACHE_TYPE_OUT_ALL = Arrays.asList(2, 3);
    public static final List<Integer> GLASS_CACHE_TYPE_IN_ALL = Arrays.asList(1, 3);
    /**
     * 磨边任务玻璃状态
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
@@ -101,6 +101,15 @@
     * 原片顺序
     */
    private Integer patternSequence;
    /**
     * x坐标
     */
    private Integer xAxis;
    /**
     * y坐标
     */
    private Integer yAxis;
    /**
     * 钢化版图id
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
@@ -72,9 +72,17 @@
     */
    private double pHeight;
    /**
     * 版图id
     * 原片版图id
     */
    private Integer stockId;
    /**
     * 原片版图版序
     */
    private Integer xAxis;
    /**
     * 原片版图版序
     */
    private Integer yAxis;
    /**
     * 钢化版图编号(架号)
     */
@@ -86,11 +94,11 @@
    /**
     * x坐标
     */
    private Integer xAxis;
    private Integer xAxisHeat;
    /**
     * y坐标
     */
    private  Integer yAxis;
    private  Integer yAxisHeat;
    /**
     * 工程号
     */
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -40,7 +40,9 @@
        List<OptimizeGlassinfo> optimizeGlassinfos = null;
        if (engineeringId != null) {
            optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>()
                    .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,c.x_axis,c.y_axis,b.project_no,b.glass_id,c.rotate_angle,d.merge as combine ,b.mark_icon")
                    .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer," +
                            "d.layers_number AS total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort, b.x_axis,b.y_axis," +
                            "c.x_axis as x_axis_heat,c.y_axis as y_axis_heat,b.project_no,b.glass_id,c.rotate_angle,d.merge as combine ,b.mark_icon")
                    .leftJoin("optimize_detail b on t.project_no=b.project_no")
                    .leftJoin("optimize_heat_detail c on c.project_no=t.project_no and b.heat_layout_id=c.layout_id and b.heat_layout_sort=c.sort")
                    .leftJoin("flow_card d on d.process_id=b.process_id and d.technology_number=b.layer and  d.order_number=b.order_sort ")
@@ -58,19 +60,26 @@
                glassInfo.setEngineerId(map.getProjectNo());
                glassInfo.setFlowCardId(map.getProcessId());
                glassInfo.setFilmsid(map.getGlassType());
                glassInfo.setGlassType(map.getOrderSort());//订单序号
                glassInfo.setWidth(map.getOWidth());//订单宽
                glassInfo.setHeight(map.getOHeight());//订单高
                //订单序号
                glassInfo.setGlassType(map.getOrderSort());
                //订单宽
                glassInfo.setWidth(map.getOWidth());
                //订单高
                glassInfo.setHeight(map.getOHeight());
                glassInfo.setEdgWidth(map.getPWidth());
                glassInfo.setLayer(map.getLayer());
                glassInfo.setTotalLayer(map.getTotalLayer());
                glassInfo.setEdgHeight(map.getPHeight());
                glassInfo.setThickness(map.getGlassThickness());
                glassInfo.setPatternSequence(map.getStockId());//
                glassInfo.setTemperingLayoutId(map.getHeatLayoutId());//钢化版图id
                glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort());//钢化版图顺序
                glassInfo.setXCoordinate(map.getXAxis());
                glassInfo.setYCoordinate(map.getYAxis());
                glassInfo.setLayer(map.getLayer());
                glassInfo.setTotalLayer(map.getTotalLayer());
                glassInfo.setPatternSequence(map.getStockId());
                glassInfo.setXAxis(map.getXAxis());
                glassInfo.setYAxis(map.getYAxis());
                //钢化版图id
                glassInfo.setTemperingLayoutId(map.getHeatLayoutId());
                //钢化版图顺序
                glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort());
                glassInfo.setXCoordinate(map.getXAxisHeat());
                glassInfo.setYCoordinate(map.getYAxisHeat());
                glassInfo.setAngle(map.getRotateAngle());
                glassInfo.setGlassId(map.getGlassId());
                glassInfo.setCombine(map.getCombine());
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
@@ -34,17 +34,8 @@
    @Autowired
    private EdgStorageCageDetailsService edgStorageCageDetailsService;
//    @ApiOperation("查询磨边缓存理片笼内详情 参数()")
//    @PostMapping("/selectEdgStorageCage")
//    @ResponseBody
//    public Result selectEdgStorageCage() {
//        List<Map<String, Object>> list = edgStorageCageService.selectEdgStorageCages();
//        return Result.build(200, "成功", list);
//    }
    @ApiOperation("修改磨边缓存理片笼信息   功能:对笼内栅格进行【启用/禁用】")
    @PostMapping("/updateEdgStorageCage")
    @ResponseBody
    public Result updateEdgStorageCage(@RequestBody EdgStorageCage edgStorageCage) {
        String isSucess = edgStorageCageService.updateEdgStorageCage(edgStorageCage) ? "成功" : "失败";
        return Result.build(200, "【启用/禁用】" + isSucess, 1);
@@ -52,7 +43,6 @@
    @ApiOperation("磨边缓存理片笼信息   功能:对笼内栅格玻璃进行【清除/更换/绑定】 EdgStorageCage格子信息,EdgStorageCageDetails 玻璃信息 ")
    @PostMapping("/edgStorageCageGlass")
    @ResponseBody
    public Result edgStorageCageGlass(@RequestBody EdgStorageCageDetails edgStorageCageDetails, int edgStorageCageId) {
        String isSucess = edgStorageCageService.updateEdgStorageCageDetails(edgStorageCageId, edgStorageCageDetails) ? "成功" : "失败";
@@ -61,7 +51,6 @@
    @ApiOperation("磨边模块汇报玻璃状态   功能:对笼内栅格玻璃进行【破损/拿走】  ")
    @PostMapping("/edgReportStatus")
    @ResponseBody
    public Result edgReportStatus(@RequestBody @Validated IdentWornRequest request) {
        return Result.build(200, "【破损/拿走】" + edgStorageCageDetailsService.edgReportStatus(request), 1);
    }
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java
New file
@@ -0,0 +1,19 @@
package com.mes.edgstoragecage.entity.vo;
import com.mes.edgstoragecage.entity.EdgStorageCage;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.glassinfo.entity.GlassInfo;
import lombok.Data;
import java.util.List;
/**
 * @Author : zhoush
 * @Date: 2024/12/18 20:00
 * @Description:
 */
@Data
public class CutDrawingVO extends GlassInfo {
    private int state;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
@@ -2,6 +2,11 @@
import com.github.yulichang.base.MPJBaseMapper;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
import java.util.List;
/**
 * <p>
@@ -14,4 +19,6 @@
public interface EdgStorageCageDetailsMapper extends MPJBaseMapper<EdgStorageCageDetails> {
    EdgStorageCageDetails queryEdgStorageDetailsBySize(int deviceId, int currentSlot, double width, double height);
    List<CutDrawingVO> queryCutDrawingByEngineerId(@Param("engineerId") String engineerId, @Param("patternSequence") int patternSequence, @Param("isAll") int isAll);
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -3,6 +3,7 @@
import com.github.yulichang.base.MPJBaseService;
import com.mes.edgglasstask.entity.request.IdentWornRequest;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
import java.util.List;
import java.util.Map;
@@ -20,19 +21,14 @@
//    boolean identWorn(Map<String, Object> arguments);
    /**
     * 获取 切割当前版图
     *
     * 按照设备及线路,获取当前线路正在切割的版图信息
     * @param deviceId
     * @param stationCell
     * @return
     */
    List<Map<String, Object>> selectCutTerritory();
    List<CutDrawingVO> queryCurrentCutDrawing(int deviceId, int stationCell);
    /**
     * 获取 工程下的当前版图
     *
     * @param current
     * @return
     */
    List<List<Map<String, Object>>> selectCurrentCutTerritory(String current);
    Map<String, Object> queryCutDrawingByEngineerId(String engineerId, int patternSequence);
    /**
     * 获取 工程下的钢化版图
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -1,5 +1,6 @@
package com.mes.edgstoragecage.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -16,20 +17,20 @@
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.edgstoragecage.entity.EdgStorageCage;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
import com.mes.edgstoragecage.mapper.EdgStorageCageMapper;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import com.mes.engineering.entity.Engineering;
import com.mes.engineering.mapper.EngineeringMapper;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.mapper.GlassInfoMapper;
import com.mes.pp.entity.*;
import com.mes.pp.mapper.OptimizeDetailMapper;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.pp.entity.OptimizeHeatDetail;
import com.mes.pp.entity.OptimizeHeatLayout;
import com.mes.pp.entity.OptimizeProject;
import com.mes.pp.mapper.OptimizeHeatDetailMapper;
import com.mes.taskcache.entity.TaskCache;
import com.mes.taskcache.service.TaskCacheService;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
@@ -56,13 +57,7 @@
public class EdgStorageCageDetailsServiceImpl extends MPJBaseServiceImpl<EdgStorageCageDetailsMapper, EdgStorageCageDetails> implements EdgStorageCageDetailsService {
    @Resource
    UpPattenUsageMapper upPattenUsageMapper;
    @Resource
    EngineeringMapper engineeringMapper;
    @Resource
    OptimizeDetailMapper optimizeDetailMapper;
    @Resource
    OptimizeHeatDetailMapper optimizeHeatDetailMapper;
@@ -71,7 +66,7 @@
    EdgStorageCageMapper edgStorageCageMapper;
    @Resource
    GlassInfoMapper glassInfoMapper;
    GlassInfoService glassInfoService;
    @Autowired
    TaskCacheService taskCacheService;
@@ -84,226 +79,51 @@
    @Autowired
    EdgGlassTaskInfoService edgGlassTaskInfoService;
//
//    @Override
//    public boolean identWorn(Map<String, Object> arguments) {
//        String glassId=arguments.get("glassId").toString();
//        int state=arguments.get("state").toString().isEmpty()?0:Integer.parseInt(arguments.get("state").toString());
//        int line=arguments.get("line").toString().isEmpty()?0:Integer.parseInt(arguments.get("line").toString());
//        String workingProcedure=arguments.get("workingProcedure").toString();
//        if(state==0||line==0||workingProcedure==null||glassId==null||glassId.isEmpty()){
//            log.info("前端传递数据不全:{}",arguments);
//            return false;
//        }
//        List<GlassInfo> GlassInfos = glassInfoMapper.selectList(new MPJLambdaQueryWrapper<GlassInfo>()
//                .selectAll(GlassInfo.class)
//                .eq(GlassInfo::getGlassId, glassId));
//        if (GlassInfos.size() == 1) {
//            Damage damage =new Damage();
//            damage.setGlassId(glassId);
//            damage.setLine(line);
//            damage.setWorkingProcedure(workingProcedure);
//            damage.setRemark("");
//            damage.setStatus(state);//8破损,9拿走
//            damageService.insertDamage(damage);
//        }else{
//            return false;
//        }
//        List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
//                .selectAll(EdgStorageCageDetails.class)
//                .eq(EdgStorageCageDetails::getGlassId, glassId));
//        if (edgStorageCageDetails.size() == 1) {
//            EdgStorageCageDetails item = edgStorageCageDetails.get(0);
//            item.setState(state);
//            baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
//        }
//        return true;
//    }
    /**
     * 获取 切割当前版图
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> selectCutTerritory() {
        //查询EdgStorageCageDetails最后一张玻璃所属版图
        List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                .selectAll(UpPattenUsage.class)
                .distinct()
                .innerJoin(Engineering.class, on -> on
                        .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId))
                .innerJoin(GlassInfo.class, on -> on
                        .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId)
                        .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence))
                .leftJoin(EdgStorageCageDetails.class, on -> on
                        .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
                        .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId))
                .leftJoin(Damage.class, on -> on
                        .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId)
                        .eq(Damage::getGlassId, GlassInfo::getGlassId))
                .eq(Engineering::getState, 1)
                .and(wrapper -> wrapper.isNotNull(EdgStorageCageDetails::getId).or().isNotNull(Damage::getId))
                .orderByDesc(UpPattenUsage::getLayoutSequence)
                .orderByDesc(GlassInfo::getId)
        );
        if (!upPattenUsage.isEmpty()) {
            //当前版
            UpPattenUsage upPattenUsage1 = upPattenUsage.get(0);
            //查看当前版是否存在未进笼子或破损的玻璃
            List<UpPattenUsage> upPattenUsage2 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                    .selectAll(UpPattenUsage.class)
                    .distinct()
                    .innerJoin(GlassInfo.class, on -> on
                            .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId)
                            .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence))
                    .leftJoin(EdgStorageCageDetails.class, on -> on
                            .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
                            .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId))
                    .leftJoin(Damage.class, on -> on
                            .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId)
                            .eq(Damage::getGlassId, GlassInfo::getGlassId))
                    .eq(UpPattenUsage::getEngineeringId, upPattenUsage.get(0).getEngineeringId())
                    .eq(UpPattenUsage::getLayoutSequence, upPattenUsage.get(0).getLayoutSequence())
                    .and(wrapper -> wrapper.isNull(EdgStorageCageDetails::getId).or().isNull(Damage::getId))
                    .orderByDesc(UpPattenUsage::getLayoutSequence)
                    .orderByDesc(GlassInfo::getId)
            );
            //显示下一版  否则显示当前版图
            if (upPattenUsage2.isEmpty()) {
                //剩余版图
                List<UpPattenUsage> upPattenUsage3 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                        .selectAll(UpPattenUsage.class)
                        .distinct()
                        .innerJoin(Engineering.class, on -> on
                                .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId))
                        .eq(Engineering::getState, 1)
                        .gt(UpPattenUsage::getLayoutSequence, upPattenUsage1.getLayoutSequence())
                        .orderByAsc(UpPattenUsage::getLayoutSequence)
                );
                if (!upPattenUsage3.isEmpty()) {
                    //切换成下一版图
                    upPattenUsage1 = upPattenUsage3.get(0);
                }
            }
            List<Map<String, Object>> cutTerritorys = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                    .selectAll(OptimizeDetail.class)
                    .selectAs(OptimizeLayout::getWidth, "olWidth")
                    .selectAs(OptimizeLayout::getHeight, "olHeight")
                    .leftJoin(OptimizeLayout.class, on -> on
                            .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo)
                            .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId))
                    .eq(OptimizeDetail::getProjectNo, upPattenUsage1.getEngineeringId())
                    .eq(OptimizeDetail::getStockId, upPattenUsage1.getLayoutSequence())
            );
            Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                    .selectAll(EdgStorageCageDetails.class)
                    .eq(EdgStorageCageDetails::getEngineerId, upPattenUsage1.getEngineeringId())
            ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails));
            Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                    .selectAll(Damage.class)
                    .eq(Damage::getEngineerId, upPattenUsage1.getEngineeringId())
                    .and(wrapper -> wrapper.eq(Damage::getType, 8)
                            .or()
                            .eq(Damage::getType, 9))
            ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2));
            List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
            for (Map<String, Object> cutTerritory : cutTerritorys) {
//                log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
                if (cutTerritory.get("glass_id") == null || "".equals(cutTerritory.get("glass_id"))) {
                    log.info("优化数据中glassId存在空值-----内容:{}", cutTerritorys);
                    return new ArrayList<>();
                } else if (damageMaps.get(cutTerritory.get("glass_id")) != null) {
                    //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id")));
                    cutTerritory.put("glass_state", damageMaps.get(cutTerritory.get("glass_id")).getType());
                } else if (edgMaps.get(cutTerritory.get("glass_id")) != null) {
                    cutTerritory.put("glass_state", edgMaps.get(cutTerritory.get("glass_id")).getState());
                } else {
                    cutTerritory.put("glass_state", 0);
                }
                resultCutTerritory.add(cutTerritory);
            }
            return resultCutTerritory;
    public List<CutDrawingVO> queryCurrentCutDrawing(int deviceId, int stationCell) {
//         获取本条线当前正在执行的工程
        Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>()
                .eq(Engineering::getState, 1).eq(Engineering::getStationCell, stationCell));
        if (null == engineering) {
            log.info("当前线路没有需要执行的工程");
            return null;
        }
        return null;
    }
    /**
     * 获取 工程下的当前版图
     *
     * @param current
     * @return
     */
    @Override
    public List<List<Map<String, Object>>> selectCurrentCutTerritory(String current) {
        List<Engineering> engineering = engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>()
                .selectAll(Engineering.class)
                .eq(Engineering::getEngineerId, current)
        );
        if (engineering.size() == 0) {
            log.info("当前工程号未领取过:{}", current);
            return new ArrayList<>();
        }
        //结果
        List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
        //此工程的所有优化数据
        List<Map<String, Object>> cutTerritory = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                .selectAll(OptimizeDetail.class)
                .selectAs(OptimizeLayout::getWidth, "olWidth")
                .selectAs(OptimizeLayout::getHeight, "olHeight")
                .leftJoin(OptimizeLayout.class, on -> on
                        .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo)
                        .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId))
                .eq(OptimizeDetail::getProjectNo, current)
        );
        Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                .selectAll(EdgStorageCageDetails.class)
                .eq(EdgStorageCageDetails::getEngineerId, current)
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails, (V1, V2) -> V2));
        Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                .selectAll(Damage.class)
                .eq(Damage::getEngineerId, current)
                .and(wrapper -> wrapper.eq(Damage::getType, 8)
                        .or()
                        .eq(Damage::getType, 9))
        ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2));
        for (Map<String, Object> item : cutTerritory) {
//          log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
            if (item.get("glass_id") == null || "".equals(item.get("glass_id"))) {
                log.info("优化数据中glassId存在空值-----内容:{}", cutTerritory);
                return new ArrayList<>();
            }
            if (damageMaps.get(item.get("glass_id")) != null) {
                //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id")));
                item.put("glass_state", damageMaps.get(item.get("glass_id")).getType());
            } else if (edgMaps.get(item.get("glass_id")) != null) {
                item.put("glass_state", edgMaps.get(item.get("glass_id")).getState());
        List<EdgStorageCageDetails> edgStorageCageDetailsList = this.list(new LambdaQueryWrapper<EdgStorageCageDetails>()
                .eq(EdgStorageCageDetails::getDeviceId, deviceId)
                .eq(EdgStorageCageDetails::getEngineerId, engineering.getEngineerId())
                .orderByDesc(EdgStorageCageDetails::getId));
        //按照当前工程去理片笼搜最后一块玻璃 获取工程号  版图号 没有直接显示第一张版图
        int patternSequence = 0;
        if (CollectionUtil.isEmpty(edgStorageCageDetailsList)) {
            patternSequence = 1;
        } else {
            EdgStorageCageDetails lastGlass = edgStorageCageDetailsList.get(0);
            log.info("获取最后一块进笼的玻璃为:{}", lastGlass);
            List<CutDrawingVO> drawingVOList = baseMapper.queryCutDrawingByEngineerId(lastGlass.getEngineerId(), lastGlass.getPatternSequence(), 1);
            if (CollectionUtil.isEmpty(drawingVOList)) {
                //无剩余 显示当前版图加1的全量版图
                patternSequence = lastGlass.getPatternSequence() + 1;
            } else {
                item.put("glass_state", 0);
                //当前版图是否有剩余,有剩余显示当前版图
                patternSequence = lastGlass.getPatternSequence();
            }
            resultCutTerritory.add(item);
        }
        Map<String, List<Map<String, Object>>> groupBy = resultCutTerritory.stream().collect(Collectors.groupingBy(item -> item.get("stock_id").toString()));
//        List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList());
        int count = 1;
        List<List<Map<String, Object>>> result = new ArrayList<>();
        for (String item : groupBy.keySet()) {
            String key = count + "";
            if (key != null) {
                result.add(groupBy.get(key));
            }
            count++;
        }
        return result;
        return baseMapper.queryCutDrawingByEngineerId(engineering.getEngineerId(), patternSequence, 0);
    }
    @Override
    public Map<String, Object> queryCutDrawingByEngineerId(String engineerId, int patternSequence) {
        HashMap<String, Object> map = new HashMap<>();
        map.put("currentCutDrawing", baseMapper.queryCutDrawingByEngineerId(engineerId, patternSequence, 0));
        List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getEngineerId, engineerId));
        long totalPatternSequence = glassInfoList.stream().map(GlassInfo::getPatternSequence).distinct().count();
        map.put("totalPatternSequence", totalPatternSequence);
        return map;
    }
    /**
     * 获取 工程下的钢化版图
     *
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
@@ -535,10 +535,23 @@
                .last("Limit 1");
        GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
        if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
            int patternSequence = glassInfo.getPatternSequence();
            int xAxis = glassInfo.getXAxis();
            int yAxis = glassInfo.getYAxis();
            String swapGlassId = swapGlassInfo.getGlassId();
            log.info("将玻璃{}和玻璃{},信息互换,进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo);
            int swapPatternSequence = swapGlassInfo.getPatternSequence();
            int swapXAxis = swapGlassInfo.getXAxis();
            int swapYAxis = swapGlassInfo.getYAxis();
            swapGlassInfo.setGlassId(glassId);
            swapGlassInfo.setPatternSequence(patternSequence);
            swapGlassInfo.setXAxis(xAxis);
            swapGlassInfo.setYAxis(yAxis);
            glassInfo.setGlassId(swapGlassId);
            glassInfo.setPatternSequence(swapPatternSequence);
            glassInfo.setXAxis(swapXAxis);
            glassInfo.setYAxis(swapYAxis);
            log.info("将玻璃{}和玻璃{},信息互换(原片序号及坐标除外),进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo);
            glassInfoService.updateById(swapGlassInfo);
            glassInfoService.updateById(glassInfo);
            return swapGlassId;
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -1,12 +1,17 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mes.common.config.Const;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
import com.mes.edgstoragecage.entity.vo.EdgStorageCageVO;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import com.mes.edgstoragecage.service.EdgStorageCageService;
import com.mes.opctask.entity.EdgStorageDeviceTask;
import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
import com.mes.opctask.service.EdgStorageDeviceTaskService;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
@@ -35,6 +40,8 @@
    EdgGlassTaskInfoService edgGlassTaskInfoService;
    @Resource
    EdgStorageDeviceTaskService edgStorageDeviceTaskService;
    @Resource
    EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
    private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task";
@@ -53,14 +60,18 @@
    private void CacheGlassTasksChild(String tableName, String webSocketName, int deviceId, int stationCell) {
        JSONObject jsonObject = new JSONObject();
//        List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
//        jsonObject.append("currentCutTerritory", currentCutTerritorys);
        //卧室缓存笼内信息0 = {EdgStorageCageVO@11649} "EdgStorageCageVO(details=null)"
        List<CutDrawingVO> currentCutDrawings = edgStorageCageDetailsService.queryCurrentCutDrawing(deviceId, stationCell);
        jsonObject.append("currentCutTerritory", currentCutDrawings);
        //卧室缓存笼内信息
        List<EdgStorageCageVO> edgStorageCageVOS = edgStorageCageService.selectEdgStorageCagesByDeviceId(deviceId);
        jsonObject.append("EdgStorageCageinfos", edgStorageCageVOS);
        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName);
        jsonObject.append("taskMessage", task);
        //获取正在整形中的任务
        EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
                .eq(EdgStorageDeviceTaskHistory::getDeviceId,deviceId)
                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
                .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1"));
        jsonObject.append("taskMessage", taskHistory);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get(webSocketName);
        if (sendwServer != null) {
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java
@@ -1,16 +1,17 @@
package com.mes.opctask.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
import com.mes.opctask.entity.request.TaskHistoryRequest;
import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
import com.mes.utils.Result;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;
/**
@@ -29,60 +30,11 @@
    @Resource
    private EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
    /**
     * 分页查询所有数据
     *
     * @param page                        分页对象
     * @param edgStorageDeviceTaskHistory 查询实体
     * @return 所有数据
     */
    @ApiOperation(value = "查询本条线执行过的历史任务数据", notes = "查询本条线执行过的历史任务数据")
    @GetMapping
    public Result selectAll(Page<EdgStorageDeviceTaskHistory> page, EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) {
        return Result.success(this.edgStorageDeviceTaskHistoryService.page(page, new QueryWrapper<>(edgStorageDeviceTaskHistory)));
    public Result<List<EdgStorageDeviceTaskHistory>> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request) {
        return Result.success(edgStorageDeviceTaskHistoryService.queryEdgStorageDeviceTaskHistory(request));
    }
    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public Result selectOne(@PathVariable Serializable id) {
        return Result.success(this.edgStorageDeviceTaskHistoryService.getById(id));
    }
    /**
     * 新增数据
     *
     * @param edgStorageDeviceTaskHistory 实体对象
     * @return 新增结果
     */
    @PostMapping
    public Result insert(@RequestBody EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) {
        return Result.success(this.edgStorageDeviceTaskHistoryService.save(edgStorageDeviceTaskHistory));
    }
    /**
     * 修改数据
     *
     * @param edgStorageDeviceTaskHistory 实体对象
     * @return 修改结果
     */
    @PutMapping
    public Result update(@RequestBody EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) {
        return Result.success(this.edgStorageDeviceTaskHistoryService.updateById(edgStorageDeviceTaskHistory));
    }
    /**
     * 删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    @DeleteMapping
    public Result delete(@RequestParam("idList") List<Long> idList) {
        return Result.success(this.edgStorageDeviceTaskHistoryService.removeByIds(idList));
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/request/TaskHistoryRequest.java
New file
@@ -0,0 +1,35 @@
package com.mes.opctask.entity.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @Author : zhoush
 * @Date: 2024/12/22 16:10
 * @Description:
 */
@Data
public class TaskHistoryRequest {
    @ApiModelProperty(value = "设备id")
    private Integer deviceId;
    @ApiModelProperty(value = "玻璃id")
    private String glassId;
    @ApiModelProperty(value = "任务状态 0默认空任务 1结束任务")
    private Integer taskState;
    @ApiModelProperty(value = "任务类型:1进片任务 2出片任务 3直通任务")
    private Integer taskType;
    @ApiModelProperty(value = "开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @ApiModelProperty(value = "结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
import com.mes.opctask.entity.request.TaskHistoryRequest;
import java.util.List;
/**
 * (EdgStorageDeviceTaskHistory)表服务接口
@@ -11,5 +14,6 @@
 */
public interface EdgStorageDeviceTaskHistoryService extends IService<EdgStorageDeviceTaskHistory> {
    List<EdgStorageDeviceTaskHistory> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request);
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java
@@ -1,10 +1,15 @@
package com.mes.opctask.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
import com.mes.opctask.entity.request.TaskHistoryRequest;
import com.mes.opctask.mapper.EdgStorageDeviceTaskHistoryMapper;
import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * (EdgStorageDeviceTaskHistory)表服务实现类
@@ -15,5 +20,19 @@
@Service("edgStorageDeviceTaskHistoryService")
public class EdgStorageDeviceTaskHistoryServiceImpl extends ServiceImpl<EdgStorageDeviceTaskHistoryMapper, EdgStorageDeviceTaskHistory> implements EdgStorageDeviceTaskHistoryService {
    @Override
    public List<EdgStorageDeviceTaskHistory> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request) {
        LambdaQueryWrapper<EdgStorageDeviceTaskHistory> wrapper = new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
                .eq(EdgStorageDeviceTaskHistory::getDeviceId, request.getDeviceId())
                .eq(StringUtils.checkValNotNull(request.getTaskState()), EdgStorageDeviceTaskHistory::getTaskState, request.getTaskState())
                .eq(StringUtils.checkValNotNull(request.getTaskType()), EdgStorageDeviceTaskHistory::getTaskState, request.getTaskType())
                .between(StringUtils.checkValNotNull(request.getStartTime()), EdgStorageDeviceTaskHistory::getCreateTime, request.getStartTime(),
                        request.getEndTime()).orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 20");
        if (StringUtils.isNotBlank(request.getGlassId())) {
            wrapper.and(e -> e.like(EdgStorageDeviceTaskHistory::getGlassIdIn, request.getGlassId())
                    .or().like(EdgStorageDeviceTaskHistory::getGlassIdOut, request.getGlassId()));
        }
        return this.list(wrapper);
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -1,6 +1,7 @@
package com.mes.taskcache.controller;
import com.mes.edgglasstask.entity.request.IdentWornRequest;
import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import com.mes.taskcache.service.TaskCacheService;
import com.mes.utils.Result;
@@ -34,39 +35,34 @@
    @ApiOperation("查询钢化版图信息-根据 工程号   参数(工程号)")
    @PostMapping("/temperingTerritory")
    @ResponseBody
    public Result temperingTerritory(String current) {
        List<Map<String, Object>> h = edgStorageCageDetailsService.selectTemperingTerritory(current);
        return Result.build(200, "成功", h);
    }
    @ApiOperation("查询切割版图信息-根据 工程号   参数(工程号)")
    @PostMapping("/cutTerritory")
    @ResponseBody
    public Result cutTerritory(String current) {
        //engineerId=current;
        List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current);
        return Result.build(200, "成功", h);
    @ApiOperation("查询切割版图信息-根据工程号及版序,版序默认为1")
    @PostMapping("/queryCutDrawingByEngineerId")
    public Result queryCutDrawingByEngineerId(String engineerId, int patternSequence) {
//        List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current);
        Map<String, Object> map = edgStorageCageDetailsService.queryCutDrawingByEngineerId(engineerId, patternSequence);
        return Result.build(200, "成功", map);
    }
    @ApiOperation("识别显示  当前版图   参数()")
    @PostMapping("/currentCutTerritory")
    @ResponseBody
    public Result currentCutTerritory() {
        List<Map<String, Object>> h = edgStorageCageDetailsService.selectCutTerritory();
        return Result.build(200, "成功", h);
    @ApiOperation("识别显示:当前版图,需要当前卧式理片设备id、上片线路")
    @PostMapping("/queryCurrentCutDrawing")
    public Result queryCurrentCutDrawing(int deviceId, int stationCell) {
        List<CutDrawingVO> cutDrawingVOS = edgStorageCageDetailsService.queryCurrentCutDrawing(deviceId, stationCell);
        return Result.build(200, "成功", cutDrawingVOS);
    }
    @ApiOperation("识别操作:   破损/拿走     参数(ID,功能[9:拿走,8:破损])")
    @PostMapping("/identControls")
    @ResponseBody
    public Result<String> identControls(@RequestBody @Validated IdentWornRequest request) {
        return Result.build(200, "成功", edgStorageCageDetailsService.identControls(request));
    }
    @ApiOperation("磨边任务 参数()")
    @PostMapping("/selectEdgTask")
    @ResponseBody
    public Result selectEdgTask(@RequestBody Map<String, String> arguments) {
        String line = arguments.get("line");
        List<Map<String, Object>> EdgTasks = taskCacheService.selectEdgInfo(line);
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -31,8 +31,8 @@
      firstLength: 460
      secondLength: 390
    two: #第二条磨边线的最小尺寸信息
      firstLength: 390
      secondLength: 390
      firstLength: 300
      secondLength: 300
  glassGap: 2500
  cellLength: 2500
  sequence:
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
@@ -56,4 +56,21 @@
        select *
        from slot_temp limit 1
    </select>
    <select id="queryCutDrawingByEngineerId" resultType="com.mes.edgstoragecage.entity.vo.CutDrawingVO">
        with glass_temp as (
        select * from glass_info where engineer_id = #{engineerId} and pattern_sequence = #{patternSequence}
        ), cut_drawing_temp as (
        select t.*,
        case when t2.glass_id is not null then t2.type
        when t1.glass_id is not null then t1.state
        else 0 end as state
        from glass_temp t
        left join edg_storage_cage_details t1 on t.glass_id = t1.glass_id
        left join damage t2 on t.glass_id = t2.glass_id and t2.type in (8,9)
        )select * from cut_drawing_temp where 1=1
        <if test="isAll == 1">
            and state = 0
        </if>
    </select>
</mapper>
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java
@@ -45,10 +45,6 @@
     */
    private String filmsId;
    /**
     * /*厚度
     */
    private Double thickness;
    /**
     * /*状态
     */
    private Integer state;
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -105,7 +105,7 @@
        }
        HollowGlassRelationInfo relationInfoBefore = hollowGlassRelationInfoService.getOne(new LambdaQueryWrapper<HollowGlassRelationInfo>()
                .eq(HollowGlassRelationInfo::getFlowCardId, relationInfoOne.getFlowCardId())
                .eq(HollowGlassRelationInfo::getLayer, relationInfoOne.getTotalLayer())
                .eq(HollowGlassRelationInfo::getTotalLayer, relationInfoOne.getTotalLayer())
                .eq(HollowGlassRelationInfo::getLayer, relationInfoOne.getLayer())
                .eq(HollowGlassRelationInfo::getVirtualSlot, relationInfoOne.getVirtualSlot())
                .eq(HollowGlassRelationInfo::getSlotSequence, relationInfoOne.getSlotSequence() - 1));
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java
@@ -49,10 +49,6 @@
     */
    private String filmsId;
    /**
     * /*厚度
     */
    private Double thickness;
    /**
     * /*状态
     */
    private Integer state;
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
@@ -801,7 +801,11 @@
            if (totalLayer != 0) {
                resultList.add(list.get(0));
                HollowBigStorageCage storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>()
                        .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth).last("limit 1"));
                        .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON)
                        .le(HollowBigStorageCage::getMinThickness, list.get(0).getThickness())
                        .ge(HollowBigStorageCage::getMaxThickness, list.get(0).getThickness())
                        .eq(HollowBigStorageCage::getRemainWidth, slotWidth)
                        .orderByAsc(HollowBigStorageCage::getMaxThickness).last("limit 1"));
                targetSlot = storageCage.getSlot();
                hollowBigStorageCageService.update(new LambdaUpdateWrapper<HollowBigStorageCage>()
                        .set(HollowBigStorageCage::getRemainWidth, 0).eq(HollowBigStorageCage::getSlot, targetSlot));