From 09402133807b1e774e658a13ad365b2e6efca25b Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期一, 21 四月 2025 16:06:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java | 1748 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 873 insertions(+), 875 deletions(-)

diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
index b120c03..1adb3e3 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -1,875 +1,873 @@
-package com.mes.job;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.lang.Assert;
-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.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.github.yulichang.query.MPJQueryWrapper;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.mes.common.S7object;
-import com.mes.common.config.Const;
-import com.mes.damage.entity.Damage;
-import com.mes.damage.service.DamageService;
-import com.mes.device.PlcParameterObject;
-import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
-import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
-import com.mes.edgstoragecage.entity.EdgStorageCage;
-import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
-import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
-import com.mes.edgstoragecage.service.EdgStorageCageService;
-import com.mes.glassinfo.entity.GlassInfo;
-import com.mes.glassinfo.service.GlassInfoService;
-import com.mes.taskcache.entity.TaskCache;
-import com.mes.taskcache.service.TaskCacheService;
-import com.mes.tools.WebSocketServer;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * @Author : zhoush
- * @Date: 2024/5/8 8:17
- * @Description:
- */
-@Component
-@Slf4j
-public class CacheGlassTask {
-
-    @Autowired
-    TaskCacheService taskCacheService;
-    @Autowired
-    GlassInfoService glassInfoService;
-    @Autowired
-    EdgStorageCageService edgStorageCageService;
-    @Autowired
-    EdgStorageCageDetailsService edgStorageCageDetailsService;
-
-    @Autowired
-    EdgGlassTaskInfoService edgGlassTaskInfoService;
-
-    @Autowired
-    WebSocketServer webServerService;
-    @Autowired
-    DamageService damageService;
-
-    @Value("${mes.threshold}")
-    private int threshold;
-
-    @Value("${mes.ratio}")
-    private int ratio;
-
-    @Value("${mes.sequence.order}")
-    private boolean sequenceOrder;
-
-    @Value("${mes.max.firstLength}")
-    private String firstLength;
-
-    @Value("${mes.max.secondLength}")
-    private String secondLength;
-
-    @Value("${mes.cache.cacheWidth}")
-    private double cacheWidth;
-
-    @Value("${mes.cache.cacheHeight}")
-    private double cacheHeight;
-
-    @Value("${mes.min.one.firstLength}")
-    private String minOneFirstLength;
-
-    @Value("${mes.min.one.secondLength}")
-    private String minOneSecondLength;
-
-    @Value("${mes.min.two.firstLength}")
-    private String minTwoFirstLength;
-
-    @Value("${mes.min.two.secondLength}")
-    private String minTwoSecondLength;
-
-    public static String engineerId = "";
-
-    //    @Scheduled(fixedDelay = 1000)
-    public void plcHomeEdgTask() {
-        Date startDate = new Date();
-        log.info("鏈浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
-        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-        String taskRequestTypeValue = plcParameterObject.getPlcParameter("A06_request_word").getValue();
-        String glassIdeValue = plcParameterObject.getPlcParameter("A05_scanning_ID").getValue();
-        String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue();
-        //A08  A09琛ㄧず绾胯矾鐩稿悓  鍙仛绛変环  鏃犳暟鎹浆int寮傚父
-        String out08Glassstate = plcParameterObject.getPlcParameter("A08_glass_status").getValue();
-        String out10Glassstate = plcParameterObject.getPlcParameter("A10_glass_status").getValue();
-        String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
-        String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue();
-
-//        taskRequestTypeValue = "2";
-//        out08Glassstate = "1";
-//        out10Glassstate = "1";
-//        currentSlot = "5";
-//        confirmationWrodValue = "0";
-//        glassIdeValue = "P24092706|15|5";
-
-        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佸垎鍒负锛欰09:{}銆丄10:{},褰撳墠鏍煎瓙鍙蜂负锛歿}",
-                taskRequestTypeValue, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot);
-
-        if ("0".equals(taskRequestTypeValue)) {
-            if ("0".equals(confirmationWrodValue)) {
-                log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屼笖纭瀛椾负0锛屼笉鎵ц浠诲姟");
-                return;
-            }
-            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
-            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 0);
-            return;
-        }
-        if (!"0".equals(confirmationWrodValue)) {
-            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛椾笉涓�0锛岀洿鎺ョ粨鏉�");
-            return;
-        }
-        boolean result = edgStorageCageDetailsService.inToVerify(glassIdeValue);
-        if ("1".equals(taskRequestTypeValue) && result) {
-            log.info("2銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�,鎵爜閲嶅ID楠岃瘉銆愭湁閲嶅=false,鏃犻噸澶�=true銆戯細{}", result);
-            inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
-        } else if ("2".equals(taskRequestTypeValue)) {
-            //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
-            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛屽嚭鐗囦换鍔�");
-            outTo(Integer.parseInt(out08Glassstate),
-                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", Integer.parseInt(currentSlot));
-        } else if ("3".equals(taskRequestTypeValue)) {
-            log.info("2銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟");
-            //鍔犵瀛愰噷闈㈡槸鍚︽湁鐜荤拑锛屾湁鍏堝嚭锛屾棤鐜荤拑鍏堣繘
-            boolean outFlase = outTo(Integer.parseInt(out08Glassstate),
-                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, glassIdeValue, Integer.parseInt(currentSlot));
-            log.info("鍑虹墖浠诲姟鏄惁瀹屾垚锛歿},涓旂幓鐠僫d:{}涓嶄负绌哄垯鎵ц杩涚墖浠诲姟,鎵爜閲嶅ID楠岃瘉銆愭湁閲嶅=false,鏃犻噸澶�=true銆戯細{}", outFlase, glassIdeValue, result);
-            if (!outFlase && StringUtils.isNotBlank(glassIdeValue) && result) {
-                inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
-            }
-        }
-        Date endDate = new Date();
-        log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
-    }
-
-
-    //    @Scheduled(fixedDelay = 1000)
-    public void dealDamageTask() {
-        Date startDate = new Date();
-        log.info("鍗у紡鐞嗙墖鐮存崯鐜荤拑娓呴櫎浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
-        List<TaskCache> taskCacheList = taskCacheService.list(new LambdaQueryWrapper<TaskCache>().in(TaskCache::getTaskStatus, Const.GLASS_STATE_DAMAGE_TAKE)
-                .in(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT_ALL));
-        if (CollectionUtils.isNotEmpty(taskCacheList)) {
-            //鑾峰彇鐮存崯/鎷胯蛋鐜荤拑id
-            List<String> glassList = taskCacheList.stream().map(TaskCache::getGlassId).collect(Collectors.toList());
-            //灏嗙(杈归槦鍒楃殑鏁版嵁鍒犻櫎
-            edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().in(EdgGlassTaskInfo::getGlassId, glassList));
-            //灏嗕换鍔¤〃涓殑鏁版嵁鍒犻櫎
-            taskCacheService.remove(new LambdaQueryWrapper<TaskCache>().in(TaskCache::getGlassId, glassList).in(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT_ALL));
-            List<Damage> damageList = taskCacheList.stream().map(e -> {
-                Damage damage = new Damage();
-                damage.setGlassId(e.getGlassId());
-                damage.setLine(e.getEndCell());
-                damage.setWorkingProcedure("纾ㄨ竟");
-                damage.setRemark("纾ㄨ竟鍓嶅崸寮忕悊鐗�");
-                damage.setStatus(1);
-                damage.setType(e.getTaskStatus());
-                return damage;
-            }).collect(Collectors.toList());
-            damageService.batchInsertDamage(damageList);
-        }
-        Date endDate = new Date();
-        log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
-    }
-
-
-    /**
-     * 杩涚墖浠诲姟
-     *
-     * @param glassId
-     * @param confirmationWrodAddress
-     * @param currentSlot
-     */
-    public void inTo(String glassId, String confirmationWrodAddress, String currentSlot) {
-        log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅,褰撳墠鏍煎瓙涓�:{}", glassId, currentSlot);
-
-        GlassInfo feedGlassInfo = glassInfoService.getOne(
-                new LambdaQueryWrapper<GlassInfo>()
-                        .eq(GlassInfo::getGlassId, glassId)
-        );
-        if (Math.max(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheWidth || Math.min(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheHeight) {
-            log.info("1.1銆佺幓鐠冭秴杩囧崸寮忕悊鐗囨渶澶у昂瀵�:{}", feedGlassInfo);
-            return;
-        }
-
-        //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
-        EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot), Boolean.FALSE);
-        Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧");
-        log.info("2銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
-
-        //鏌ヨ鐜荤拑淇℃伅
-        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
-        if (glassInfo == null) {
-            return;
-        }
-        if ((glassInfo.getWidth() < Double.parseDouble(minTwoFirstLength) && glassInfo.getHeight() < Double.parseDouble(minTwoSecondLength)) || (glassInfo.getWidth() < Double.parseDouble(minTwoSecondLength) && glassInfo.getHeight() < Double.parseDouble(minTwoFirstLength))) {
-            log.info("3銆佺幓鐠冧俊鎭笉绗﹀悎杩涘叆鐞嗙墖绗兼渶灏忓昂瀵革紝鐜荤拑淇℃伅涓簕}", glassInfo);
-            return;
-        }
-        log.info("4銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
-        EdgStorageCageDetails details = new EdgStorageCageDetails();
-        BeanUtils.copyProperties(glassInfo, details);
-        details.setState(Const.GLASS_STATE_IN);
-        details.setSlot(nearestEmpty.getSlot());
-        details.setDeviceId(nearestEmpty.getDeviceId());
-        edgStorageCageDetailsService.save(details);
-        damageService.deleteByGlassId(glassId);
-        log.info("5銆佺幓鐠冧俊鎭凡瀛樺叆鐞嗙墖绗艰鎯呰〃锛岀幓鐠冧俊鎭负{}", details);
-        //娣诲姞杩涚墖浠诲姟
-        boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
-        log.info("6銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃鏄惁瀹屾垚锛歿}", taskCache);
-
-        S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
-        log.info("7銆佸彂閫佺‘璁ゅ瓧瀹屾垚");
-
-    }
-
-    /**
-     * 鏌ヨ鐜荤拑骞惰繘琛屼氦鎹�
-     *
-     * @param glassId
-     * @return
-     */
-    public String queryAndChangeGlass(String glassId) {
-        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
-//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
-        Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");        //鎸夌収鐜荤拑灏哄
-        LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
-                .eq(GlassInfo::getWidth, glassInfo.getWidth())
-                .eq(GlassInfo::getHeight, glassInfo.getHeight())
-                .eq(GlassInfo::getThickness, glassInfo.getThickness())
-                .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid())
-                .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId())
-                .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer())
-                .eq(GlassInfo::getLayer, glassInfo.getLayer())
-                .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId())
-                .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " +
-                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()
-                        + " and state != 100")
-                .orderByAsc(GlassInfo::getTemperingLayoutId)
-                .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)
-                .last("Limit 1");
-        GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
-        if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
-            String swapGlassId = swapGlassInfo.getGlassId();
-            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�,杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
-            swapGlassInfo.setGlassId(glassId);
-            glassInfo.setGlassId(swapGlassId);
-            glassInfoService.updateById(swapGlassInfo);
-            glassInfoService.updateById(glassInfo);
-            return swapGlassId;
-        }
-        return "";
-    }
-
-
-    /**
-     * 鏌ヨ鍗у紡鐞嗙墖鐜荤拑骞惰繘琛屼氦鎹�
-     *
-     * @param glassId
-     * @return
-     */
-    public void queryEdgAndChangeGlass(String glassId, String swapGlassId) {
-        if (StringUtils.isBlank(swapGlassId)) {
-            log.info("褰撳墠鍑虹鐜荤拑涓嶅瓨鍦ㄩ渶瑕佹浛鎹㈢殑鐜荤拑");
-            return;
-        }
-        //鑾峰彇寰呭嚭绗肩殑鐜荤拑
-        EdgStorageCageDetails glassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                .eq(EdgStorageCageDetails::getGlassId, glassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
-//        鑾峰彇寰呭嚭绗肩殑鐜荤拑闇�瑕佹浛鎹㈢殑鐜荤拑淇℃伅
-        EdgStorageCageDetails swapGlassDetailInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                .eq(EdgStorageCageDetails::getGlassId, swapGlassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
-
-//      鐜荤拑灏忕墖琛ㄤ腑鐜荤拑宸茬粡鏇挎崲锛屾洿鏂板崸鐞嗙鍐呯幇鏈夌殑鍑嗗鍑虹鐨勭幓鐠冧俊鎭紝
-        if (null == swapGlassDetailInfo) {
-            GlassInfo glassInfoBase = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                    .eq(GlassInfo::getGlassId, glassId));
-            //闇�瑕佹浛鎹㈢殑鐜荤拑涓哄瓨杩涘崸鐞嗭紝浠呴渶鏇存柊褰撳墠闇�瑕佸嚭绗肩殑鐜荤拑淇℃伅鍗冲彲
-            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
-                    .eq(EdgStorageCageDetails::getGlassId, glassId)
-                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfoBase.getTemperingLayoutId())
-                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfoBase.getTemperingFeedSequence()));
-        } else {
-            //闇�瑕佹浛鎹㈢殑鐜荤拑閮藉湪鍗х悊鍐咃紝鎸夌収鐜荤拑id瀵硅皟鐜荤拑淇℃伅锛氬璋冪幓鐠僫d鍗冲彲
-            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
-                    .eq(EdgStorageCageDetails::getId, glassInfo.getId())
-                    .set(EdgStorageCageDetails::getTemperingLayoutId, swapGlassDetailInfo.getTemperingLayoutId())
-                    .set(EdgStorageCageDetails::getTemperingFeedSequence, swapGlassDetailInfo.getTemperingFeedSequence())
-            );
-            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
-                    .eq(EdgStorageCageDetails::getId, swapGlassDetailInfo.getId())
-                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence())
-            );
-        }
-    }
-
-    /**
-     * 鍑虹墖浠诲姟
-     *
-     * @param out08Glassstate
-     * @param out10Glassstate
-     * @param confirmationWrodAddress
-     * @param glassId
-     * @param currentSlot
-     */
-    public boolean outTo(int out08Glassstate, int out10Glassstate, String confirmationWrodAddress, String glassId, int currentSlot) {
-        //閫昏緫姝ラ锛�
-//        0銆丄09銆丄10鏄惁绌洪棽锛屾槸鍚﹀彲浠ユ墽琛屽嚭鐗囦换鍔�
-//        1銆佽幏鍙栭挗鍖栫増鍥炬槸鍚﹁秴杩囬槇鍊�
-//        1.1銆佽秴杩囬槇鍊硷細鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅
-//        1.1.1銆佽幏鍙栦袱鏉$嚎鏈�鍚庝竴娆″嚭鐗囩殑浠诲姟淇℃伅
-//        1.1.2銆佹寜鐓у嚭鐗囦俊鎭幓璇︽儏琛ㄦ煡璇㈡牸瀛愬湪绗煎瓙閲岄潰鍓╀綑鐩稿悓灏哄鐨勭幓鐠冩暟鎹�
-//        1.1.3銆佸垽鏂摢鏉$嚎鐜荤拑鏁伴噺鍦ㄧ悊鐗囩鍐呯殑鏁版嵁鏈�灏戯紝鍐冲畾鏈�灏忕増鍥捐蛋璇ユ潯绾匡紙闂锛氬鏋滆繖鏉$嚎闈炵┖闂诧紝鐩存帴缁撴潫锛�
-//        1.2銆佹湭瓒呰繃闃堝�硷細
-//        1.2.1銆佽幏鍙栫▼搴忛偅鏉$嚎绌洪棽
-//        1.2.2銆佽幏鍙栬鏉$嚎鏈�鍚庝竴娆″嚭鐗囩殑浠诲姟淇℃伅
-//        1.2.3銆佹寜鐓у嚭鐗囦俊鎭幓璇︽儏琛ㄦ煡璇㈡牸瀛愬湪绗煎瓙閲岄潰鍓╀綑鐩稿悓灏哄鐨勭幓鐠冩暟鎹笖浠ョ増鍥緄d銆佺増搴忓崌搴忔帓搴�  鍙栫涓�鍧楃幓鐠冨嚭鐗�
-//        2銆佸鏋滄病鏈夊巻鍙插嚭鐗囦换鍔�
-//        2.1銆佸嚭褰撳墠鐗堝浘id鏈�灏忕増搴忔渶灏忕殑鐜荤拑锛堥棶棰橈細涓ゆ潯绾块兘娌℃湁鍘嗗彶浠诲姟锛屽嚭鐗囨椂涓ゆ潯绾跨殑鐜荤拑灏哄鐩稿悓锛屾槸鍚︽壘灏哄涓嶅悓鐨勶級
-        if ((out08Glassstate == 2 && out10Glassstate == 2) || (out08Glassstate == 0 && out10Glassstate == 0)) {
-            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", out08Glassstate, out10Glassstate);
-            return Boolean.FALSE;
-        }
-        log.info("0銆佸嚭鐗囦换鍔″嚭鐨勭姸鎬�:A09:銆恵}銆�;A10:銆恵}銆�)", out08Glassstate, out10Glassstate);
-        //瀹氫箟鍑虹墖鐜荤拑淇℃伅
-        int endcell = 0;
-        EdgStorageCageDetails glassInfo = null;
-
-
-        boolean flag = queryMaxMinDiff(threshold);
-        log.info("1銆佽幏鍙栭挗鍖栫増鍥炬槸鍚﹁秴杩囬槇鍊�:{}", flag);
-        if (flag) {
-            //鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅
-            glassInfo = queryMinGlass(0.0, 0.0, glassId);
-            log.info("1.1銆佽秴杩囬槇鍊硷細鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅:{}", glassInfo);
-            if (glassInfo == null) {
-                log.info("绗煎瓙鍐呭拰寰呰繘鐗囨病鏈夌幓鐠�");
-                return Boolean.FALSE;
-            }
-            EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
-            EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
-            endcell = queryLineByGlassInfo(a09EdgGlass, a10EdgGlass, glassInfo, out08Glassstate, out10Glassstate);
-        } else {
-            //鎸夌収鐘舵�佸垽鏂袱鏉$嚎璧伴偅鏉$嚎
-            endcell = computerLineByState(out08Glassstate, out10Glassstate);
-
-            if (out08Glassstate == 1 && out10Glassstate == 1) {
-                EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
-                EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
-                if (a09EdgGlass == null && a10EdgGlass == null) {
-                    MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>();
-                    wrapper.select("count(t.glass_id), t.width, t.height")
-                            .eq("t.state", Const.GLASS_STATE_IN)
-                            .inSql("t.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
-                            .groupBy("t.width, t.height");
-                    if (endcell == Const.A10_OUT_TARGET_POSITION) {
-                        wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
-                                "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
-                                + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
-                    } else {
-                        wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
-                                "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
-                    }
-                    wrapper.last("order by count(t.glass_id) desc  limit 2");
-                    List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
-                    if (CollectionUtil.isEmpty(list)) {
-                        MPJQueryWrapper<GlassInfo> queryWrapper = new MPJQueryWrapper<GlassInfo>()
-                                .selectAll(GlassInfo.class).eq("t.glass_id", glassId);
-                        if (endcell == Const.A10_OUT_TARGET_POSITION) {
-                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
-                                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
-                                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
-                        } else {
-                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
-                                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
-                        }
-                        GlassInfo one = glassInfoService.getOne(queryWrapper);
-                        if (one != null) {
-                            EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
-                            BeanUtils.copyProperties(one, resultDetails);
-                            glassInfo = resultDetails;
-                        } else {
-                            log.info("鑾峰彇绗煎唴鐜荤拑鍜屽緟杩涚墖鐜荤拑涓虹┖鎴栬�呬笉绗﹀悎纾ㄨ竟灏哄");
-                        }
-                    } else {
-                        glassInfo = queryMinGlass(list.get(0).getWidth(), list.get(0).getHeight(), glassId);
-                    }
-                } else if (a09EdgGlass != null && a10EdgGlass != null) {
-                    List<EdgStorageCageDetails> a09Count = queryGlassByTaskLine(Const.A09_OUT_TARGET_POSITION);
-                    List<EdgStorageCageDetails> a10Count = queryGlassByTaskLine(Const.A10_OUT_TARGET_POSITION);
-                    endcell = a09Count.size() > a10Count.size() ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
-                    glassInfo = a09Count.size() > a10Count.size() ? queryMinGlass(a09EdgGlass.getWidth(), a09EdgGlass.getHeight(), glassId)
-                            : queryMinGlass(a10EdgGlass.getWidth(), a10EdgGlass.getHeight(), glassId);
-                } else {
-                    //鎸夌収鍘嗗彶浠诲姟鑾峰彇闇�瑕佹墽琛岀殑璺嚎锛屽鏋滆鏉$嚎绗煎唴鏃犵幓鐠� 璧板叾浠栭�昏緫
-                    endcell = a09EdgGlass == null ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
-                    List<EdgStorageCageDetails> details = queryGlassByTaskLine(endcell);
-                    if (CollectionUtil.isEmpty(details)) {
-                        int othercell = endcell == Const.A10_OUT_TARGET_POSITION ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
-                        glassInfo = queryChangeGlassInfo(othercell, glassId);
-                    } else {
-                        glassInfo = a09EdgGlass != null ? queryMinGlass(a09EdgGlass.getWidth(), a09EdgGlass.getHeight(), glassId)
-                                : queryMinGlass(a10EdgGlass.getWidth(), a10EdgGlass.getHeight(), glassId);
-                    }
-                }
-            } else {
-                List<EdgStorageCageDetails> edgStorageCageDetails = queryGlassByTaskLine(endcell);
-                if (CollectionUtil.isNotEmpty(edgStorageCageDetails)) {
-                    glassInfo = edgStorageCageDetails.get(0);
-                } else {
-                    //鑾峰彇绗煎唴鎵�鏈夌幓鐠冧俊鎭紝鍖呮嫭寰呰繘鐗囩殑
-                    List<EdgStorageCageDetails> glassList = queryEdgAllGlass(glassId);
-                    if (CollectionUtil.isEmpty(glassList)) {
-                        log.info("绗煎唴鍜屽緟杩涚墖閮芥病鏈夌幓鐠�");
-                        return Boolean.FALSE;
-                    }
-                    if (glassList.size() == 1 && glassId.equals(glassList.get(0).getGlassId())) {
-                        glassInfo = glassList.get(0);
-                    } else {
-                        int othercell = endcell == Const.A10_OUT_TARGET_POSITION ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
-                        glassInfo = queryChangeGlassInfo(othercell, glassId);
-                    }
-                }
-            }
-        }
-        return saveOutGlassMessageBySlot(glassInfo, endcell, confirmationWrodAddress, glassId, currentSlot);
-    }
-
-    /**
-     * 鑾峰彇绗煎瓙鍐呮墍鏈夌幓鐠冧俊鎭紝鍖呮嫭寰呰繘鐗囩殑
-     *
-     * @param glassId
-     */
-    private List<EdgStorageCageDetails> queryEdgAllGlass(String glassId) {
-        List<EdgStorageCageDetails> glassList = new ArrayList<>();
-        //鑾峰彇寰呰繘鐗囩幓鐠�
-        //todo: 鑾峰彇姝e湪鎵ц鐨勫伐绋嬩俊鎭�
-        if (StringUtils.isNotBlank(glassId)) {
-            GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                    .eq(GlassInfo::getGlassId, glassId));
-//                    .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
-            EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
-            BeanUtils.copyProperties(one, resultDetails);
-            glassList.add(resultDetails);
-        }
-        //鑾峰彇绗煎唴鐜荤拑
-        List<EdgStorageCageDetails> details = edgStorageCageDetailsService.selectJoinList(EdgStorageCageDetails.class, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class)
-                .leftJoin(EdgStorageCage.class, on -> on.eq(EdgStorageCage::getSlot, EdgStorageCageDetails::getSlot).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN))
-                .eq(EdgStorageCage::getEnableState, Const.SLOT_ON));
-        glassList.addAll(details);
-        return glassList;
-
-    }
-
-    /**
-     * 鑾峰彇璇︽儏琛ㄥ唴鏈�澶ф渶灏忕増鍥緄d鐨勫樊鍊硷紝鍒ゆ柇鏄惁鍑烘渶灏忕増鍥剧幓鐠�
-     *
-     * @return
-     */
-    public boolean queryMaxMinDiff(int threshold) {
-        //鑾峰彇绗煎瓙鍐呮渶澶х増鍥緄d鍜屾渶灏忕増鍥緄d鎻掑�硷紝鍒ゆ柇鏄惁澶т簬闃堝�硷紝澶т簬闃堝�肩洿鎺ュ嚭鏈�灏忕増鍥剧幓鐠�
-        QueryWrapper<EdgStorageCageDetails> queryWrapper = new QueryWrapper<>();
-        queryWrapper.select("max(tempering_layout_id)-min(tempering_layout_id) as diff")
-                .eq("state", Const.GLASS_STATE_IN)
-                .inSql("slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON);
-        List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper);
-        //鑾峰彇绗煎唴鐜荤拑鐗堝浘宸�兼槸鍚﹀ぇ浜庨槇鍊�
-        if (CollectionUtil.isNotEmpty(list)) {
-            Long diff = (Long) list.get(0);
-            return diff > threshold;
-        } else {
-            return Boolean.FALSE;
-        }
-    }
-
-    /**
-     * 鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅
-     *
-     * @param width
-     * @param height
-     */
-    private EdgStorageCageDetails queryMinGlass(double width, double height, String glassId) {
-        //鑾峰彇琛ㄥ唴鐗堝浘id鏈�灏忕殑鐜荤拑淇℃伅
-        EdgStorageCageDetails glassDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                .eq(EdgStorageCageDetails::getState, 100)
-                .eq(width != 0, EdgStorageCageDetails::getWidth, width)
-                .eq(height != 0, EdgStorageCageDetails::getHeight, height)
-                .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
-                .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId)
-                .orderBy(Boolean.TRUE, sequenceOrder, EdgStorageCageDetails::getTemperingFeedSequence)
-                .last("limit 1"));
-        if (StringUtils.isBlank(glassId)) {
-            return glassDetails;
-        }
-        GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                        .eq(GlassInfo::getGlassId, glassId)
-//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")
-        );
-        EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
-        BeanUtils.copyProperties(one, resultDetails);
-        if (null == glassDetails) {
-            return resultDetails;
-        }
-        return resultDetails.getTemperingLayoutId() <= glassDetails.getTemperingLayoutId() && resultDetails.getTemperingFeedSequence() > glassDetails.getTemperingFeedSequence() ?
-                resultDetails : glassDetails;
-    }
-
-    /**
-     * 鑾峰彇浠诲姟琛ㄤ腑鎸囧畾绾胯矾绗煎瓙鍐呰繕鍓╀綑鐨勭幓鐠冧俊鎭�
-     */
-    private List<EdgStorageCageDetails> queryGlassByTaskLine(int line) {
-        //鑾峰彇浠诲姟琛ㄤ腑鏈�鍚庝竴娆″嚭鐗囩殑鐜荤拑id
-        TaskCache taskCache = taskCacheService.queryGlassByTaskCache(line, Const.GLASS_CACHE_TYPE_OUT_ALL);
-        if (null == taskCache) {
-            log.info("娌℃湁鎵惧埌{}绾夸换鍔′俊鎭�", line);
-            return new ArrayList<>();
-        }
-        MPJQueryWrapper<EdgStorageCageDetails> mpjLambdaWrapper = new MPJQueryWrapper<>();
-        mpjLambdaWrapper.select("t1.*")
-                .innerJoin("edg_storage_cage_details t1 on t.width = t1.width and t.height = t1.height")
-                .eq("t.glass_id", taskCache.getGlassId())
-                .ne("t1.glass_id", taskCache.getGlassId())
-                .eq("t1.state", Const.GLASS_STATE_IN)
-                .inSql("t1.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
-                .orderByAsc("t1.tempering_layout_id")
-                .orderBy(Boolean.TRUE, sequenceOrder, "t1.tempering_feed_sequence");
-        List<EdgStorageCageDetails> details = edgStorageCageDetailsService.selectJoinList(EdgStorageCageDetails.class, mpjLambdaWrapper);
-        if (CollectionUtil.isEmpty(details)) {
-            return new ArrayList<>();
-        }
-        return details;
-    }
-
-    /**
-     * 鎸夌収浠诲姟绫诲瀷銆佺嚎鍙疯幏鍙栦换鍔′俊鎭�
-     *
-     * @param line
-     * @param taskTypes
-     * @return
-     */
-    private EdgStorageCageDetails queryGlassByTaskCache(int line, List<Integer> taskTypes) {
-        TaskCache taskCache = taskCacheService.queryGlassByTaskCache(line, taskTypes);
-        if (null == taskCache) {
-            log.info("娌℃湁鎵惧埌{}绾夸换鍔′俊鎭�", line);
-            return null;
-        }
-        return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId())
-                .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
-                .last(" limit 1 "));
-    }
-
-    /**
-     * 鎸夌収浠诲姟鐜荤拑淇℃伅鍜屽緟鍑虹墖鐜荤拑淇℃伅鑾峰彇鍑虹墖璺緞
-     *
-     * @param a08EdgStorageCageDetails 09鍙风嚎鍑虹墖鐜荤拑淇℃伅
-     * @param a10EdgStorageCageDetails 10鍙风嚎鍑虹墖鐜荤拑淇℃伅
-     * @param glassInfo                甯﹀嚭鐗囩幓鐠冧俊鎭�
-     * @param out08Glassstate          09鍙风嚎绌洪棽鐘舵��
-     * @param out10Glassstate          10鍙风嚎绌洪棽鐘舵��
-     * @return
-     */
-    private Integer queryLineByGlassInfo(EdgStorageCageDetails a08EdgStorageCageDetails, EdgStorageCageDetails a10EdgStorageCageDetails,
-                                         EdgStorageCageDetails glassInfo, int out08Glassstate, int out10Glassstate) {
-        //瀛樺湪鍑虹墖浠诲姟 07涓虹┖
-        if (out08Glassstate == 1 && out10Glassstate == 1) {
-            boolean b08 = a08EdgStorageCageDetails != null && a08EdgStorageCageDetails.getHeight() == glassInfo.getHeight()
-                    && a08EdgStorageCageDetails.getWidth() == glassInfo.getWidth();
-            boolean b10 = a10EdgStorageCageDetails != null && a10EdgStorageCageDetails.getHeight() == glassInfo.getHeight()
-                    && a10EdgStorageCageDetails.getWidth() == glassInfo.getWidth();
-            if (b08) {
-                return Const.A09_OUT_TARGET_POSITION;
-            }
-            if (b10) {
-                return Const.A10_OUT_TARGET_POSITION;
-            }
-        }
-        return computerLineByState(out08Glassstate, out10Glassstate);
-    }
-
-    /**
-     * 鎸夌収灏哄鍑虹幓鐠�
-     *
-     * @param endcell endcell = out08Glassstate == 1 ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
-     * @param glassId
-     * @return
-     */
-    public EdgStorageCageDetails queryChangeGlassInfo(int endcell, String glassId) {
-        //鑾峰彇绗煎瓙鍐呮暟閲忓墠浜岀殑鐜荤拑鏁伴噺
-        MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>();
-        wrapper.select("count(t.glass_id) as count, t.width, t.height")
-                .eq("t.state", Const.GLASS_STATE_IN)
-                .inSql("t.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
-                .groupBy("t.width, t.height");
-        if (endcell == Const.A10_OUT_TARGET_POSITION) {
-            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
-                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length >= " + minOneFirstLength + " and t1.second_length >= " + minOneSecondLength + ")");
-        } else {
-            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
-                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
-                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
-        }
-        wrapper.last("order by count(t.glass_id) desc  limit 2");
-        List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
-        if (CollectionUtil.isEmpty(list)) {
-            return null;
-        }
-        log.info("鑾峰彇绗煎瓙鍐呮暟閲忓墠浜岀殑鐜荤拑鏁伴噺锛歿}", list);
-        //鑾峰彇瀹介珮鎷嶇涓�鐨勭幓鐠冧俊鎭�
-        EdgStorageCageDetails firstSize = list.get(0);
-        Integer firstCount = firstSize.getCount();
-        double firstWidth = firstSize.getWidth();
-        double firstHeight = firstSize.getHeight();
-        if (list.size() == 1) {
-            return queryMinGlass(firstWidth, firstHeight, glassId);
-        }
-        //鑾峰彇瀹介珮鎷嶇浜岀殑鐜荤拑淇℃伅
-        EdgStorageCageDetails secondSize = list.get(1);
-        Integer secondCount = secondSize.getCount();
-        double secondWidth = secondSize.getWidth();
-        double secondHeight = secondSize.getHeight();
-        //鑾峰彇鏁伴噺鍓�2鐨勭幓鐠冩暟閲忔瘮渚�
-        Integer mix = firstCount / secondCount;
-        log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负锛歿}", mix);
-
-        if (mix >= 2) {
-            log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负{}锛屽ぇ浜�2锛岀洿鎺ュ嚭鐜荤拑鏁版嵁鐨勬渶澶氱殑锛屽锛歿}锛岄珮锛歿}", mix, firstWidth, firstHeight);
-            return queryMinGlass(firstWidth, firstHeight, glassId);
-        } else {
-            log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负{}锛屽皬浜�2", mix);
-            //鑾峰彇浠诲姟琛ㄤ腑鏈�鍚庝竴娆″嚭鐗囩殑鐜荤拑id
-            TaskCache taskCache = taskCacheService.queryGlassByTaskCache(endcell, Const.GLASS_CACHE_TYPE_OUT_ALL);
-            log.info("鑾峰彇浠诲姟琛ㄤ腑{}绾挎渶鍚庝竴娆″嚭鐗囩殑鐜荤拑浠诲姟淇℃伅锛歿}", endcell, taskCache);
-            if (null == taskCache) {
-                log.info("{}绾挎病鏈夊嚭鐗囦换鍔′俊鎭紝鐩存帴鍑虹墖", endcell);
-                return queryMinGlass(firstSize.getWidth(), firstSize.getHeight(), glassId);
-            }
-            EdgStorageCageDetails outGlassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()).last("limit 1"));
-            log.info("{}绾挎湁鍑虹墖浠诲姟淇℃伅,浠诲姟淇℃伅涓簕}锛岀幓鐠冧俊鎭负{}", endcell, taskCache, outGlassInfo);
-            if (outGlassInfo.getWidth() == firstWidth && outGlassInfo.getHeight() == firstHeight) {
-                log.info("鏁伴噺鏈�澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
-                        firstWidth, firstHeight, endcell, outGlassInfo.getWidth(), outGlassInfo.getHeight(), secondWidth, secondHeight);
-                return queryMinGlass(secondWidth, secondHeight, glassId);
-            } else {
-                log.info("鏁伴噺绗簩澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
-                        secondWidth, secondHeight, endcell, outGlassInfo.getWidth(), outGlassInfo.getHeight(), firstWidth, firstHeight);
-                return queryMinGlass(firstWidth, firstHeight, glassId);
-            }
-        }
-    }
-
-    /**
-     * 淇濆瓨鍑虹墖浠诲姟鐩稿叧淇℃伅
-     *
-     * @param glassInfo
-     * @param endcell
-     * @param confirmationWrodAddress
-     * @param glassId
-     * @return
-     */
-    private boolean saveOutGlassMessage(EdgStorageCageDetails glassInfo, int endcell, String confirmationWrodAddress, String glassId, Integer currentSlot) {
-        if (glassInfo != null) {
-            log.info("4銆佹坊鍔犲嚭鐗囦换鍔★紝鐜荤拑id锛歿}锛屼换鍔$被鍨嬶細{}锛岃捣濮嬩綅缃細{}锛岀粨鏉熶綅缃細{}", glassInfo.getGlassId(),
-                    2, glassInfo.getSlot(), endcell);
-            if (glassInfo.getGlassId().equals(glassId)) {
-
-                log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
-                EdgStorageCageDetails details = new EdgStorageCageDetails();
-                BeanUtils.copyProperties(glassInfo, details);
-                EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(currentSlot, Boolean.TRUE);
-                Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�");
-                log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
-                details.setSlot(nearestEmpty.getSlot());
-                details.setState(Const.GLASS_STATE_OUT);
-                edgStorageCageDetailsService.save(details);
-                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), nearestEmpty.getSlot(), endcell, Const.GLASS_CACHE_TYPE_THROUGH);
-                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
-            } else {
-                log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
-                LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
-                wrapper.eq(EdgStorageCageDetails::getGlassId, glassInfo.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
-                edgStorageCageDetailsService.update(wrapper);
-                log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT);
-
-                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), glassInfo.getSlot(), endcell, Const.GLASS_CACHE_TYPE_OUT);
-                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
-            }
-            boolean glassSizeStatus = saveGlassSize(glassInfo, endcell);
-            log.info("7銆佹坊鍔犲嚭鐗囩幓鐠冨昂瀵镐俊鎭埌纾ㄨ竟鍓嶇幓鐠冭〃鏄惁瀹屾垚锛歿}", glassSizeStatus);
-            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
-            log.info("8銆佸彂閫佺‘璁ゅ瓧宸插畬鎴�");
-            Damage damage = new Damage();
-            damage.setGlassId(glassInfo.getGlassId());
-            damage.setWorkingProcedure("鍒囧壊");
-            damage.setLine(1001);
-            damage.setType(1);
-            damage.setRemark("杩囧崸寮忕悊鐗�");
-            damageService.insertDamage(damage);
-            return Boolean.TRUE;
-        }
-        return Boolean.FALSE;
-    }
-
-    /**
-     * 淇濆瓨鍑虹墖浠诲姟鐩稿叧淇℃伅
-     *
-     * @param glassInfo
-     * @param endcell
-     * @param confirmationWrodAddress
-     * @param glassId
-     * @return
-     */
-    private boolean saveOutGlassMessageBySlot(EdgStorageCageDetails glassInfo, int endcell, String confirmationWrodAddress, String glassId, Integer currentSlot) {
-        if (glassInfo != null) {
-            log.info("4銆佹坊鍔犲嚭鐗囦换鍔★紝鐜荤拑id锛歿}锛屼换鍔$被鍨嬶細{}锛岃捣濮嬩綅缃細{}锛岀粨鏉熶綅缃細{}", glassInfo.getGlassId(),
-                    2, glassInfo.getSlot(), endcell);
-            if (glassInfo.getGlassId().equals(glassId)) {
-                log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
-                EdgStorageCageDetails details = new EdgStorageCageDetails();
-                //鐜荤拑淇℃伅鏇挎崲
-                String glassIdChange = queryAndChangeGlass(glassId);
-                if (StringUtils.isBlank(glassIdChange)) {
-                    BeanUtils.copyProperties(glassInfo, details);
-                } else {
-                    GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
-                    BeanUtils.copyProperties(one, details);
-                }
-                EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(currentSlot, Boolean.TRUE);
-                Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�");
-                log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
-                details.setSlot(nearestEmpty.getSlot());
-                details.setState(Const.GLASS_STATE_OUT);
-                edgStorageCageDetailsService.save(details);
-                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), nearestEmpty.getSlot(), endcell, Const.GLASS_CACHE_TYPE_THROUGH);
-                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
-            } else {
-                log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
-                if (!glassInfo.getSlot().equals(currentSlot)) {
-                    EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                            .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                            .eq(EdgStorageCageDetails::getSlot, currentSlot).eq(EdgStorageCageDetails::getWidth, glassInfo.getWidth())
-                            .eq(EdgStorageCageDetails::getHeight, glassInfo.getHeight()).eq(EdgStorageCageDetails::getThickness, glassInfo.getThickness())
-                    );
-                    if (null != currentGlass) {
-                        glassInfo = currentGlass;
-                    }
-                }
-                //鐜荤拑淇℃伅鏇挎崲
-                String glassIdChange = queryAndChangeGlass(glassInfo.getGlassId());
-                //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
-                queryEdgAndChangeGlass(glassInfo.getGlassId(), glassIdChange);
-                LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
-                wrapper.eq(EdgStorageCageDetails::getGlassId, glassInfo.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
-                edgStorageCageDetailsService.update(wrapper);
-                log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT);
-
-                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), glassInfo.getSlot(), endcell, Const.GLASS_CACHE_TYPE_OUT);
-                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
-            }
-            boolean glassSizeStatus = saveGlassSize(glassInfo, endcell);
-            log.info("7銆佹坊鍔犲嚭鐗囩幓鐠冨昂瀵镐俊鎭埌纾ㄨ竟鍓嶇幓鐠冭〃鏄惁瀹屾垚锛歿}", glassSizeStatus);
-            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
-            log.info("8銆佸彂閫佺‘璁ゅ瓧宸插畬鎴�");
-            Damage damage = new Damage();
-            damage.setGlassId(glassInfo.getGlassId());
-            damage.setWorkingProcedure("鍒囧壊");
-            damage.setLine(1001);
-            damage.setType(1);
-            damage.setRemark("杩囧崸寮忕悊鐗�");
-            damageService.insertDamage(damage);
-            damageService.deleteByGlassId(glassId);
-            return Boolean.TRUE;
-        }
-        return Boolean.FALSE;
-    }
-
-    /**
-     * 娣诲姞鐞嗙墖绗间换鍔�
-     *
-     * @param glassId
-     * @param startcell
-     * @param endcell
-     * @param taskType
-     * @return
-     */
-    private boolean saveTaskCache(String glassId, int startcell, int endcell, int taskType) {
-        TaskCache taskCache = new TaskCache();
-        taskCache.setGlassId(glassId);
-        taskCache.setTaskStatus(0);
-        taskCache.setStartCell(startcell);
-        taskCache.setEndCell(endcell);
-        taskCache.setTaskType(taskType);
-        taskCache.setCreateTime(new Date());
-        return taskCacheService.save(taskCache);
-    }
-
-    /**
-     * 娣诲姞纾ㄨ竟闃熷垪淇℃伅
-     *
-     * @param glassInfo
-     * @param endcell
-     * @return
-     */
-    private boolean saveGlassSize(EdgStorageCageDetails glassInfo, int endcell) {
-        EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo();
-        BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo);
-        edgGlassTaskInfo.setHeight((int) (glassInfo.getHeight() * ratio));
-        edgGlassTaskInfo.setWidth((int) (glassInfo.getWidth() * ratio));
-        edgGlassTaskInfo.setThickness((int) (glassInfo.getThickness() * ratio));
-        edgGlassTaskInfo.setState(Const.EDG_GLASS_BEFORE);
-        edgGlassTaskInfo.setLine(endcell);
-        edgGlassTaskInfo.setCreateTime(new Date());
-        edgGlassTaskInfo.setUpdateTime(new Date());
-        //鍏堝皢鍘嗗彶瀵瑰垪琛ㄤ腑鏈幓鐠冪殑鏁版嵁鍒犻櫎锛岄噸鏂版柊澧炰竴浠芥渶鏂扮殑鏁版嵁
-        edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().eq(EdgGlassTaskInfo::getGlassId, glassInfo.getGlassId()));
-        return edgGlassTaskInfoService.save(edgGlassTaskInfo);
-    }
-
-    /**
-     * 璁$畻鍑虹墖绾胯矾
-     * 宸叉帓闄ら兘涓�2  閮戒负0 鐨勬儏鍐�
-     *
-     * @param out08Glassstate
-     * @param out10Glassstate
-     * @return
-     */
-    private int computerLineByState(int out08Glassstate, int out10Glassstate) {
-        if (out08Glassstate == 0) {
-            if (out10Glassstate == 2) {
-                return Const.A09_OUT_TARGET_POSITION;
-            } else {
-                return Const.A10_OUT_TARGET_POSITION;
-            }
-        } else if (out08Glassstate == 1) {
-            return Const.A09_OUT_TARGET_POSITION;
-        } else {
-            return Const.A10_OUT_TARGET_POSITION;
-        }
-    }
-
-}
+//package com.mes.job;
+//
+//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.query.QueryWrapper;
+//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+//import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+//import com.github.yulichang.query.MPJQueryWrapper;
+//import com.github.yulichang.wrapper.MPJLambdaWrapper;
+//import com.mes.common.S7object;
+//import com.mes.common.config.Const;
+//import com.mes.damage.entity.Damage;
+//import com.mes.damage.service.DamageService;
+//import com.mes.device.PlcParameterObject;
+//import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
+//import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
+//import com.mes.edgstoragecage.entity.EdgStorageCage;
+//import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+//import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
+//import com.mes.edgstoragecage.service.EdgStorageCageService;
+//import com.mes.glassinfo.entity.GlassInfo;
+//import com.mes.glassinfo.service.GlassInfoService;
+//import com.mes.taskcache.entity.TaskCache;
+//import com.mes.taskcache.service.TaskCacheService;
+//import com.mes.tools.WebSocketServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.lang.StringUtils;
+//import org.springframework.beans.BeanUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.stream.Collectors;
+//
+///**
+// * @Author : zhoush
+// * @Date: 2024/5/8 8:17
+// * @Description:
+// */
+//@Component
+//@Slf4j
+//public class CacheGlassTask {
+//
+//    @Autowired
+//    TaskCacheService taskCacheService;
+//    @Autowired
+//    GlassInfoService glassInfoService;
+//    @Autowired
+//    EdgStorageCageService edgStorageCageService;
+//    @Autowired
+//    EdgStorageCageDetailsService edgStorageCageDetailsService;
+//
+//    @Autowired
+//    EdgGlassTaskInfoService edgGlassTaskInfoService;
+//
+//    @Autowired
+//    WebSocketServer webServerService;
+//    @Autowired
+//    DamageService damageService;
+//
+//    @Value("${mes.threshold}")
+//    private int threshold;
+//
+//    @Value("${mes.ratio}")
+//    private int ratio;
+//
+//    @Value("${mes.sequence.order}")
+//    private boolean sequenceOrder;
+//
+//    @Value("${mes.max.firstLength}")
+//    private String firstLength;
+//
+//    @Value("${mes.max.secondLength}")
+//    private String secondLength;
+//
+//    @Value("${mes.cache.cacheWidth}")
+//    private double cacheWidth;
+//
+//    @Value("${mes.cache.cacheHeight}")
+//    private double cacheHeight;
+//
+//    @Value("${mes.min.one.firstLength}")
+//    private String minOneFirstLength;
+//
+//    @Value("${mes.min.one.secondLength}")
+//    private String minOneSecondLength;
+//
+//    @Value("${mes.min.two.firstLength}")
+//    private String minTwoFirstLength;
+//
+//    @Value("${mes.min.two.secondLength}")
+//    private String minTwoSecondLength;
+//
+//    public static String engineerId = "";
+//
+//    //    @Scheduled(fixedDelay = 1000)
+//    public void plcHomeEdgTask() {
+//        Date startDate = new Date();
+//        log.info("鏈浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+//        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+//        String taskRequestTypeValue = plcParameterObject.getPlcParameter("A06_request_word").getValue();
+//        String glassIdeValue = plcParameterObject.getPlcParameter("A05_scanning_ID").getValue();
+//        String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue();
+//        //A08  A09琛ㄧず绾胯矾鐩稿悓  鍙仛绛変环  鏃犳暟鎹浆int寮傚父
+//        String out08Glassstate = plcParameterObject.getPlcParameter("A08_glass_status").getValue();
+//        String out10Glassstate = plcParameterObject.getPlcParameter("A10_glass_status").getValue();
+//        String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
+//        String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue();
+//
+////        taskRequestTypeValue = "2";
+////        out08Glassstate = "1";
+////        out10Glassstate = "1";
+////        currentSlot = "5";
+////        confirmationWrodValue = "0";
+////        glassIdeValue = "P24092706|15|5";
+//
+//        log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佸垎鍒负锛欰09:{}銆丄10:{},褰撳墠鏍煎瓙鍙蜂负锛歿}",
+//                taskRequestTypeValue, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot);
+//
+//        if ("0".equals(taskRequestTypeValue)) {
+//            if ("0".equals(confirmationWrodValue)) {
+//                log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屼笖纭瀛椾负0锛屼笉鎵ц浠诲姟");
+//                return;
+//            }
+//            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0");
+//            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 0);
+//            return;
+//        }
+//        if (!"0".equals(confirmationWrodValue)) {
+//            log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛椾笉涓�0锛岀洿鎺ョ粨鏉�");
+//            return;
+//        }
+//        boolean result = edgStorageCageDetailsService.inToVerify(glassIdeValue);
+//        if ("1".equals(taskRequestTypeValue) && result) {
+//            log.info("2銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�,鎵爜閲嶅ID楠岃瘉銆愭湁閲嶅=false,鏃犻噸澶�=true銆戯細{}", result);
+////            inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
+//        } else if ("2".equals(taskRequestTypeValue)) {
+//            //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
+//            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛屽嚭鐗囦换鍔�");
+//            outTo(Integer.parseInt(out08Glassstate),
+//                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", Integer.parseInt(currentSlot));
+//        } else if ("3".equals(taskRequestTypeValue)) {
+//            log.info("2銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟");
+//            //鍔犵瀛愰噷闈㈡槸鍚︽湁鐜荤拑锛屾湁鍏堝嚭锛屾棤鐜荤拑鍏堣繘
+//            boolean outFlase = outTo(Integer.parseInt(out08Glassstate),
+//                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, glassIdeValue, Integer.parseInt(currentSlot));
+//            log.info("鍑虹墖浠诲姟鏄惁瀹屾垚锛歿},涓旂幓鐠僫d:{}涓嶄负绌哄垯鎵ц杩涚墖浠诲姟,鎵爜閲嶅ID楠岃瘉銆愭湁閲嶅=false,鏃犻噸澶�=true銆戯細{}", outFlase, glassIdeValue, result);
+//            if (!outFlase && StringUtils.isNotBlank(glassIdeValue) && result) {
+////                inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
+//            }
+//        }
+//        Date endDate = new Date();
+//        log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
+//    }
+//
+//
+//    //    @Scheduled(fixedDelay = 1000)
+//    public void dealDamageTask() {
+//        Date startDate = new Date();
+//        log.info("鍗у紡鐞嗙墖鐮存崯鐜荤拑娓呴櫎浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+//        List<TaskCache> taskCacheList = taskCacheService.list(new LambdaQueryWrapper<TaskCache>().in(TaskCache::getTaskStatus, Const.GLASS_STATE_DAMAGE_TAKE)
+//                .in(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT_ALL));
+//        if (CollectionUtils.isNotEmpty(taskCacheList)) {
+//            //鑾峰彇鐮存崯/鎷胯蛋鐜荤拑id
+//            List<String> glassList = taskCacheList.stream().map(TaskCache::getGlassId).collect(Collectors.toList());
+//            //灏嗙(杈归槦鍒楃殑鏁版嵁鍒犻櫎
+//            edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().in(EdgGlassTaskInfo::getGlassId, glassList));
+//            //灏嗕换鍔¤〃涓殑鏁版嵁鍒犻櫎
+//            taskCacheService.remove(new LambdaQueryWrapper<TaskCache>().in(TaskCache::getGlassId, glassList).in(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT_ALL));
+//            List<Damage> damageList = taskCacheList.stream().map(e -> {
+//                Damage damage = new Damage();
+//                damage.setGlassId(e.getGlassId());
+//                damage.setLine(e.getEndCell());
+//                damage.setWorkingProcedure("纾ㄨ竟");
+//                damage.setRemark("纾ㄨ竟鍓嶅崸寮忕悊鐗�");
+//                damage.setStatus(1);
+//                damage.setType(e.getTaskStatus());
+//                return damage;
+//            }).collect(Collectors.toList());
+//            damageService.batchInsertDamage(damageList);
+//        }
+//        Date endDate = new Date();
+//        log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
+//    }
+//
+//
+//    /**
+//     * 杩涚墖浠诲姟
+//     *
+//     * @param glassId
+//     * @param confirmationWrodAddress
+//     * @param currentSlot
+//     */
+////    public void inTo(String glassId, String confirmationWrodAddress, String currentSlot) {
+////        log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅,褰撳墠鏍煎瓙涓�:{}", glassId, currentSlot);
+////
+////        GlassInfo feedGlassInfo = glassInfoService.getOne(
+////                new LambdaQueryWrapper<GlassInfo>()
+////                        .eq(GlassInfo::getGlassId, glassId)
+////        );
+////        if (Math.max(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheWidth || Math.min(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheHeight) {
+////            log.info("1.1銆佺幓鐠冭秴杩囧崸寮忕悊鐗囨渶澶у昂瀵�:{}", feedGlassInfo);
+////            return;
+////        }
+////
+////        //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
+////        EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(task.getCurrentCell(), Integer.parseInt(currentSlot), Boolean.FALSE);
+////        Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧");
+////        log.info("2銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
+////
+////        //鏌ヨ鐜荤拑淇℃伅
+////        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+////        if (glassInfo == null) {
+////            return;
+////        }
+////        if ((glassInfo.getWidth() < Double.parseDouble(minTwoFirstLength) && glassInfo.getHeight() < Double.parseDouble(minTwoSecondLength)) || (glassInfo.getWidth() < Double.parseDouble(minTwoSecondLength) && glassInfo.getHeight() < Double.parseDouble(minTwoFirstLength))) {
+////            log.info("3銆佺幓鐠冧俊鎭笉绗﹀悎杩涘叆鐞嗙墖绗兼渶灏忓昂瀵革紝鐜荤拑淇℃伅涓簕}", glassInfo);
+////            return;
+////        }
+////        log.info("4銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+////        EdgStorageCageDetails details = new EdgStorageCageDetails();
+////        BeanUtils.copyProperties(glassInfo, details);
+////        details.setState(Const.GLASS_STATE_IN);
+////        details.setSlot(nearestEmpty.getSlot());
+////        details.setDeviceId(nearestEmpty.getDeviceId());
+////        edgStorageCageDetailsService.save(details);
+////        damageService.deleteByGlassId(glassId);
+////        log.info("5銆佺幓鐠冧俊鎭凡瀛樺叆鐞嗙墖绗艰鎯呰〃锛岀幓鐠冧俊鎭负{}", details);
+////        //娣诲姞杩涚墖浠诲姟
+////        boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
+////        log.info("6銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃鏄惁瀹屾垚锛歿}", taskCache);
+////
+////        S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
+////        log.info("7銆佸彂閫佺‘璁ゅ瓧瀹屾垚");
+////
+////    }
+//
+//    /**
+//     * 鏌ヨ鐜荤拑骞惰繘琛屼氦鎹�
+//     *
+//     * @param glassId
+//     * @return
+//     */
+//    public String queryAndChangeGlass(String glassId) {
+//        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+////                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
+//        Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");        //鎸夌収鐜荤拑灏哄
+//        LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
+//                .eq(GlassInfo::getWidth, glassInfo.getWidth())
+//                .eq(GlassInfo::getHeight, glassInfo.getHeight())
+//                .eq(GlassInfo::getThickness, glassInfo.getThickness())
+//                .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid())
+//                .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId())
+//                .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer())
+//                .eq(GlassInfo::getLayer, glassInfo.getLayer())
+//                .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId())
+//                .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " +
+//                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()
+//                        + " and state != 100")
+//                .orderByAsc(GlassInfo::getTemperingLayoutId)
+//                .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)
+//                .last("Limit 1");
+//        GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
+//        if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
+//            String swapGlassId = swapGlassInfo.getGlassId();
+//            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�,杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
+//            swapGlassInfo.setGlassId(glassId);
+//            glassInfo.setGlassId(swapGlassId);
+//            glassInfoService.updateById(swapGlassInfo);
+//            glassInfoService.updateById(glassInfo);
+//            return swapGlassId;
+//        }
+//        return "";
+//    }
+//
+//
+//    /**
+//     * 鏌ヨ鍗у紡鐞嗙墖鐜荤拑骞惰繘琛屼氦鎹�
+//     *
+//     * @param glassId
+//     * @return
+//     */
+//    public void queryEdgAndChangeGlass(String glassId, String swapGlassId) {
+//        if (StringUtils.isBlank(swapGlassId)) {
+//            log.info("褰撳墠鍑虹鐜荤拑涓嶅瓨鍦ㄩ渶瑕佹浛鎹㈢殑鐜荤拑");
+//            return;
+//        }
+//        //鑾峰彇寰呭嚭绗肩殑鐜荤拑
+//        EdgStorageCageDetails glassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+//                .eq(EdgStorageCageDetails::getGlassId, glassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
+////        鑾峰彇寰呭嚭绗肩殑鐜荤拑闇�瑕佹浛鎹㈢殑鐜荤拑淇℃伅
+//        EdgStorageCageDetails swapGlassDetailInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+//                .eq(EdgStorageCageDetails::getGlassId, swapGlassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
+//
+////      鐜荤拑灏忕墖琛ㄤ腑鐜荤拑宸茬粡鏇挎崲锛屾洿鏂板崸鐞嗙鍐呯幇鏈夌殑鍑嗗鍑虹鐨勭幓鐠冧俊鎭紝
+//        if (null == swapGlassDetailInfo) {
+//            GlassInfo glassInfoBase = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+//                    .eq(GlassInfo::getGlassId, glassId));
+//            //闇�瑕佹浛鎹㈢殑鐜荤拑涓哄瓨杩涘崸鐞嗭紝浠呴渶鏇存柊褰撳墠闇�瑕佸嚭绗肩殑鐜荤拑淇℃伅鍗冲彲
+//            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+//                    .eq(EdgStorageCageDetails::getGlassId, glassId)
+//                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfoBase.getTemperingLayoutId())
+//                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfoBase.getTemperingFeedSequence()));
+//        } else {
+//            //闇�瑕佹浛鎹㈢殑鐜荤拑閮藉湪鍗х悊鍐咃紝鎸夌収鐜荤拑id瀵硅皟鐜荤拑淇℃伅锛氬璋冪幓鐠僫d鍗冲彲
+//            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+//                    .eq(EdgStorageCageDetails::getId, glassInfo.getId())
+//                    .set(EdgStorageCageDetails::getTemperingLayoutId, swapGlassDetailInfo.getTemperingLayoutId())
+//                    .set(EdgStorageCageDetails::getTemperingFeedSequence, swapGlassDetailInfo.getTemperingFeedSequence())
+//            );
+//            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+//                    .eq(EdgStorageCageDetails::getId, swapGlassDetailInfo.getId())
+//                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
+//                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence())
+//            );
+//        }
+//    }
+//
+//    /**
+//     * 鍑虹墖浠诲姟
+//     *
+//     * @param out08Glassstate
+//     * @param out10Glassstate
+//     * @param confirmationWrodAddress
+//     * @param glassId
+//     * @param currentSlot
+//     */
+//    public boolean outTo(int out08Glassstate, int out10Glassstate, String confirmationWrodAddress, String glassId, int currentSlot) {
+//        //閫昏緫姝ラ锛�
+////        0銆丄09銆丄10鏄惁绌洪棽锛屾槸鍚﹀彲浠ユ墽琛屽嚭鐗囦换鍔�
+////        1銆佽幏鍙栭挗鍖栫増鍥炬槸鍚﹁秴杩囬槇鍊�
+////        1.1銆佽秴杩囬槇鍊硷細鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅
+////        1.1.1銆佽幏鍙栦袱鏉$嚎鏈�鍚庝竴娆″嚭鐗囩殑浠诲姟淇℃伅
+////        1.1.2銆佹寜鐓у嚭鐗囦俊鎭幓璇︽儏琛ㄦ煡璇㈡牸瀛愬湪绗煎瓙閲岄潰鍓╀綑鐩稿悓灏哄鐨勭幓鐠冩暟鎹�
+////        1.1.3銆佸垽鏂摢鏉$嚎鐜荤拑鏁伴噺鍦ㄧ悊鐗囩鍐呯殑鏁版嵁鏈�灏戯紝鍐冲畾鏈�灏忕増鍥捐蛋璇ユ潯绾匡紙闂锛氬鏋滆繖鏉$嚎闈炵┖闂诧紝鐩存帴缁撴潫锛�
+////        1.2銆佹湭瓒呰繃闃堝�硷細
+////        1.2.1銆佽幏鍙栫▼搴忛偅鏉$嚎绌洪棽
+////        1.2.2銆佽幏鍙栬鏉$嚎鏈�鍚庝竴娆″嚭鐗囩殑浠诲姟淇℃伅
+////        1.2.3銆佹寜鐓у嚭鐗囦俊鎭幓璇︽儏琛ㄦ煡璇㈡牸瀛愬湪绗煎瓙閲岄潰鍓╀綑鐩稿悓灏哄鐨勭幓鐠冩暟鎹笖浠ョ増鍥緄d銆佺増搴忓崌搴忔帓搴�  鍙栫涓�鍧楃幓鐠冨嚭鐗�
+////        2銆佸鏋滄病鏈夊巻鍙插嚭鐗囦换鍔�
+////        2.1銆佸嚭褰撳墠鐗堝浘id鏈�灏忕増搴忔渶灏忕殑鐜荤拑锛堥棶棰橈細涓ゆ潯绾块兘娌℃湁鍘嗗彶浠诲姟锛屽嚭鐗囨椂涓ゆ潯绾跨殑鐜荤拑灏哄鐩稿悓锛屾槸鍚︽壘灏哄涓嶅悓鐨勶級
+//        if ((out08Glassstate == 2 && out10Glassstate == 2) || (out08Glassstate == 0 && out10Glassstate == 0)) {
+//            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", out08Glassstate, out10Glassstate);
+//            return Boolean.FALSE;
+//        }
+//        log.info("0銆佸嚭鐗囦换鍔″嚭鐨勭姸鎬�:A09:銆恵}銆�;A10:銆恵}銆�)", out08Glassstate, out10Glassstate);
+//        //瀹氫箟鍑虹墖鐜荤拑淇℃伅
+//        int endcell = 0;
+//        EdgStorageCageDetails glassInfo = null;
+//
+//
+//        boolean flag = queryMaxMinDiff(threshold);
+//        log.info("1銆佽幏鍙栭挗鍖栫増鍥炬槸鍚﹁秴杩囬槇鍊�:{}", flag);
+//        if (flag) {
+//            //鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅
+//            glassInfo = queryMinGlass(0.0, 0.0, glassId);
+//            log.info("1.1銆佽秴杩囬槇鍊硷細鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅:{}", glassInfo);
+//            if (glassInfo == null) {
+//                log.info("绗煎瓙鍐呭拰寰呰繘鐗囨病鏈夌幓鐠�");
+//                return Boolean.FALSE;
+//            }
+//            EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
+//            EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
+//            endcell = queryLineByGlassInfo(a09EdgGlass, a10EdgGlass, glassInfo, out08Glassstate, out10Glassstate);
+//        } else {
+//            //鎸夌収鐘舵�佸垽鏂袱鏉$嚎璧伴偅鏉$嚎
+//            endcell = computerLineByState(out08Glassstate, out10Glassstate);
+//
+//            if (out08Glassstate == 1 && out10Glassstate == 1) {
+//                EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
+//                EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
+//                if (a09EdgGlass == null && a10EdgGlass == null) {
+//                    MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>();
+//                    wrapper.select("count(t.glass_id), t.width, t.height")
+//                            .eq("t.state", Const.GLASS_STATE_IN)
+//                            .inSql("t.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
+//                            .groupBy("t.width, t.height");
+//                    if (endcell == Const.A10_OUT_TARGET_POSITION) {
+//                        wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+//                                "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
+//                                "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+//                                + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
+//                    } else {
+//                        wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+//                                "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
+//                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
+//                    }
+//                    wrapper.last("order by count(t.glass_id) desc  limit 2");
+//                    List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
+//                    if (CollectionUtil.isEmpty(list)) {
+//                        MPJQueryWrapper<GlassInfo> queryWrapper = new MPJQueryWrapper<GlassInfo>()
+//                                .selectAll(GlassInfo.class).eq("t.glass_id", glassId);
+//                        if (endcell == Const.A10_OUT_TARGET_POSITION) {
+//                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+//                                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
+//                                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+//                                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
+//                        } else {
+//                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+//                                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
+//                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
+//                        }
+//                        GlassInfo one = glassInfoService.getOne(queryWrapper);
+//                        if (one != null) {
+//                            EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
+//                            BeanUtils.copyProperties(one, resultDetails);
+//                            glassInfo = resultDetails;
+//                        } else {
+//                            log.info("鑾峰彇绗煎唴鐜荤拑鍜屽緟杩涚墖鐜荤拑涓虹┖鎴栬�呬笉绗﹀悎纾ㄨ竟灏哄");
+//                        }
+//                    } else {
+//                        glassInfo = queryMinGlass(list.get(0).getWidth(), list.get(0).getHeight(), glassId);
+//                    }
+//                } else if (a09EdgGlass != null && a10EdgGlass != null) {
+//                    List<EdgStorageCageDetails> a09Count = queryGlassByTaskLine(Const.A09_OUT_TARGET_POSITION);
+//                    List<EdgStorageCageDetails> a10Count = queryGlassByTaskLine(Const.A10_OUT_TARGET_POSITION);
+//                    endcell = a09Count.size() > a10Count.size() ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+//                    glassInfo = a09Count.size() > a10Count.size() ? queryMinGlass(a09EdgGlass.getWidth(), a09EdgGlass.getHeight(), glassId)
+//                            : queryMinGlass(a10EdgGlass.getWidth(), a10EdgGlass.getHeight(), glassId);
+//                } else {
+//                    //鎸夌収鍘嗗彶浠诲姟鑾峰彇闇�瑕佹墽琛岀殑璺嚎锛屽鏋滆鏉$嚎绗煎唴鏃犵幓鐠� 璧板叾浠栭�昏緫
+//                    endcell = a09EdgGlass == null ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+//                    List<EdgStorageCageDetails> details = queryGlassByTaskLine(endcell);
+//                    if (CollectionUtil.isEmpty(details)) {
+//                        int othercell = endcell == Const.A10_OUT_TARGET_POSITION ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+//                        glassInfo = queryChangeGlassInfo(othercell, glassId);
+//                    } else {
+//                        glassInfo = a09EdgGlass != null ? queryMinGlass(a09EdgGlass.getWidth(), a09EdgGlass.getHeight(), glassId)
+//                                : queryMinGlass(a10EdgGlass.getWidth(), a10EdgGlass.getHeight(), glassId);
+//                    }
+//                }
+//            } else {
+//                List<EdgStorageCageDetails> edgStorageCageDetails = queryGlassByTaskLine(endcell);
+//                if (CollectionUtil.isNotEmpty(edgStorageCageDetails)) {
+//                    glassInfo = edgStorageCageDetails.get(0);
+//                } else {
+//                    //鑾峰彇绗煎唴鎵�鏈夌幓鐠冧俊鎭紝鍖呮嫭寰呰繘鐗囩殑
+//                    List<EdgStorageCageDetails> glassList = queryEdgAllGlass(glassId);
+//                    if (CollectionUtil.isEmpty(glassList)) {
+//                        log.info("绗煎唴鍜屽緟杩涚墖閮芥病鏈夌幓鐠�");
+//                        return Boolean.FALSE;
+//                    }
+//                    if (glassList.size() == 1 && glassId.equals(glassList.get(0).getGlassId())) {
+//                        glassInfo = glassList.get(0);
+//                    } else {
+//                        int othercell = endcell == Const.A10_OUT_TARGET_POSITION ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+//                        glassInfo = queryChangeGlassInfo(othercell, glassId);
+//                    }
+//                }
+//            }
+//        }
+//        return saveOutGlassMessageBySlot(glassInfo, endcell, confirmationWrodAddress, glassId, currentSlot);
+//    }
+//
+//    /**
+//     * 鑾峰彇绗煎瓙鍐呮墍鏈夌幓鐠冧俊鎭紝鍖呮嫭寰呰繘鐗囩殑
+//     *
+//     * @param glassId
+//     */
+//    private List<EdgStorageCageDetails> queryEdgAllGlass(String glassId) {
+//        List<EdgStorageCageDetails> glassList = new ArrayList<>();
+//        //鑾峰彇寰呰繘鐗囩幓鐠�
+//        //todo: 鑾峰彇姝e湪鎵ц鐨勫伐绋嬩俊鎭�
+//        if (StringUtils.isNotBlank(glassId)) {
+//            GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+//                    .eq(GlassInfo::getGlassId, glassId));
+////                    .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
+//            EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
+//            BeanUtils.copyProperties(one, resultDetails);
+//            glassList.add(resultDetails);
+//        }
+//        //鑾峰彇绗煎唴鐜荤拑
+//        List<EdgStorageCageDetails> details = edgStorageCageDetailsService.selectJoinList(EdgStorageCageDetails.class, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class)
+//                .leftJoin(EdgStorageCage.class, on -> on.eq(EdgStorageCage::getSlot, EdgStorageCageDetails::getSlot).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN))
+//                .eq(EdgStorageCage::getEnableState, Const.SLOT_ON));
+//        glassList.addAll(details);
+//        return glassList;
+//
+//    }
+//
+//    /**
+//     * 鑾峰彇璇︽儏琛ㄥ唴鏈�澶ф渶灏忕増鍥緄d鐨勫樊鍊硷紝鍒ゆ柇鏄惁鍑烘渶灏忕増鍥剧幓鐠�
+//     *
+//     * @return
+//     */
+//    public boolean queryMaxMinDiff(int threshold) {
+//        //鑾峰彇绗煎瓙鍐呮渶澶х増鍥緄d鍜屾渶灏忕増鍥緄d鎻掑�硷紝鍒ゆ柇鏄惁澶т簬闃堝�硷紝澶т簬闃堝�肩洿鎺ュ嚭鏈�灏忕増鍥剧幓鐠�
+//        QueryWrapper<EdgStorageCageDetails> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.select("max(tempering_layout_id)-min(tempering_layout_id) as diff")
+//                .eq("state", Const.GLASS_STATE_IN)
+//                .inSql("slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON);
+//        List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper);
+//        //鑾峰彇绗煎唴鐜荤拑鐗堝浘宸�兼槸鍚﹀ぇ浜庨槇鍊�
+//        if (CollectionUtil.isNotEmpty(list)) {
+//            Long diff = (Long) list.get(0);
+//            return diff > threshold;
+//        } else {
+//            return Boolean.FALSE;
+//        }
+//    }
+//
+//    /**
+//     * 鑾峰彇褰撳墠鏈�灏忕増鍥鹃渶瑕佸嚭鐗囩殑鐜荤拑淇℃伅
+//     *
+//     * @param width
+//     * @param height
+//     */
+//    private EdgStorageCageDetails queryMinGlass(double width, double height, String glassId) {
+//        //鑾峰彇琛ㄥ唴鐗堝浘id鏈�灏忕殑鐜荤拑淇℃伅
+//        EdgStorageCageDetails glassDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+//                .eq(EdgStorageCageDetails::getState, 100)
+//                .eq(width != 0, EdgStorageCageDetails::getWidth, width)
+//                .eq(height != 0, EdgStorageCageDetails::getHeight, height)
+//                .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
+//                .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId)
+//                .orderBy(Boolean.TRUE, sequenceOrder, EdgStorageCageDetails::getTemperingFeedSequence)
+//                .last("limit 1"));
+//        if (StringUtils.isBlank(glassId)) {
+//            return glassDetails;
+//        }
+//        GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+//                        .eq(GlassInfo::getGlassId, glassId)
+////                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")
+//        );
+//        EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
+//        BeanUtils.copyProperties(one, resultDetails);
+//        if (null == glassDetails) {
+//            return resultDetails;
+//        }
+//        return resultDetails.getTemperingLayoutId() <= glassDetails.getTemperingLayoutId() && resultDetails.getTemperingFeedSequence() > glassDetails.getTemperingFeedSequence() ?
+//                resultDetails : glassDetails;
+//    }
+//
+//    /**
+//     * 鑾峰彇浠诲姟琛ㄤ腑鎸囧畾绾胯矾绗煎瓙鍐呰繕鍓╀綑鐨勭幓鐠冧俊鎭�
+//     */
+//    private List<EdgStorageCageDetails> queryGlassByTaskLine(int line) {
+//        //鑾峰彇浠诲姟琛ㄤ腑鏈�鍚庝竴娆″嚭鐗囩殑鐜荤拑id
+//        TaskCache taskCache = taskCacheService.queryGlassByTaskCache(line, Const.GLASS_CACHE_TYPE_OUT_ALL);
+//        if (null == taskCache) {
+//            log.info("娌℃湁鎵惧埌{}绾夸换鍔′俊鎭�", line);
+//            return new ArrayList<>();
+//        }
+//        MPJQueryWrapper<EdgStorageCageDetails> mpjLambdaWrapper = new MPJQueryWrapper<>();
+//        mpjLambdaWrapper.select("t1.*")
+//                .innerJoin("edg_storage_cage_details t1 on t.width = t1.width and t.height = t1.height")
+//                .eq("t.glass_id", taskCache.getGlassId())
+//                .ne("t1.glass_id", taskCache.getGlassId())
+//                .eq("t1.state", Const.GLASS_STATE_IN)
+//                .inSql("t1.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
+//                .orderByAsc("t1.tempering_layout_id")
+//                .orderBy(Boolean.TRUE, sequenceOrder, "t1.tempering_feed_sequence");
+//        List<EdgStorageCageDetails> details = edgStorageCageDetailsService.selectJoinList(EdgStorageCageDetails.class, mpjLambdaWrapper);
+//        if (CollectionUtil.isEmpty(details)) {
+//            return new ArrayList<>();
+//        }
+//        return details;
+//    }
+//
+//    /**
+//     * 鎸夌収浠诲姟绫诲瀷銆佺嚎鍙疯幏鍙栦换鍔′俊鎭�
+//     *
+//     * @param line
+//     * @param taskTypes
+//     * @return
+//     */
+//    private EdgStorageCageDetails queryGlassByTaskCache(int line, List<Integer> taskTypes) {
+//        TaskCache taskCache = taskCacheService.queryGlassByTaskCache(line, taskTypes);
+//        if (null == taskCache) {
+//            log.info("娌℃湁鎵惧埌{}绾夸换鍔′俊鎭�", line);
+//            return null;
+//        }
+//        return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId())
+//                .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
+//                .last(" limit 1 "));
+//    }
+//
+//    /**
+//     * 鎸夌収浠诲姟鐜荤拑淇℃伅鍜屽緟鍑虹墖鐜荤拑淇℃伅鑾峰彇鍑虹墖璺緞
+//     *
+//     * @param a08EdgStorageCageDetails 09鍙风嚎鍑虹墖鐜荤拑淇℃伅
+//     * @param a10EdgStorageCageDetails 10鍙风嚎鍑虹墖鐜荤拑淇℃伅
+//     * @param glassInfo                甯﹀嚭鐗囩幓鐠冧俊鎭�
+//     * @param out08Glassstate          09鍙风嚎绌洪棽鐘舵��
+//     * @param out10Glassstate          10鍙风嚎绌洪棽鐘舵��
+//     * @return
+//     */
+//    private Integer queryLineByGlassInfo(EdgStorageCageDetails a08EdgStorageCageDetails, EdgStorageCageDetails a10EdgStorageCageDetails,
+//                                         EdgStorageCageDetails glassInfo, int out08Glassstate, int out10Glassstate) {
+//        //瀛樺湪鍑虹墖浠诲姟 07涓虹┖
+//        if (out08Glassstate == 1 && out10Glassstate == 1) {
+//            boolean b08 = a08EdgStorageCageDetails != null && a08EdgStorageCageDetails.getHeight() == glassInfo.getHeight()
+//                    && a08EdgStorageCageDetails.getWidth() == glassInfo.getWidth();
+//            boolean b10 = a10EdgStorageCageDetails != null && a10EdgStorageCageDetails.getHeight() == glassInfo.getHeight()
+//                    && a10EdgStorageCageDetails.getWidth() == glassInfo.getWidth();
+//            if (b08) {
+//                return Const.A09_OUT_TARGET_POSITION;
+//            }
+//            if (b10) {
+//                return Const.A10_OUT_TARGET_POSITION;
+//            }
+//        }
+//        return computerLineByState(out08Glassstate, out10Glassstate);
+//    }
+//
+//    /**
+//     * 鎸夌収灏哄鍑虹幓鐠�
+//     *
+//     * @param endcell endcell = out08Glassstate == 1 ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+//     * @param glassId
+//     * @return
+//     */
+//    public EdgStorageCageDetails queryChangeGlassInfo(int endcell, String glassId) {
+//        //鑾峰彇绗煎瓙鍐呮暟閲忓墠浜岀殑鐜荤拑鏁伴噺
+//        MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>();
+//        wrapper.select("count(t.glass_id) as count, t.width, t.height")
+//                .eq("t.state", Const.GLASS_STATE_IN)
+//                .inSql("t.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
+//                .groupBy("t.width, t.height");
+//        if (endcell == Const.A10_OUT_TARGET_POSITION) {
+//            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+//                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
+//                    "on t.glass_id = t1.glass_id and (t1.first_length >= " + minOneFirstLength + " and t1.second_length >= " + minOneSecondLength + ")");
+//        } else {
+//            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+//                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
+//                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+//                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
+//        }
+//        wrapper.last("order by count(t.glass_id) desc  limit 2");
+//        List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
+//        if (CollectionUtil.isEmpty(list)) {
+//            return null;
+//        }
+//        log.info("鑾峰彇绗煎瓙鍐呮暟閲忓墠浜岀殑鐜荤拑鏁伴噺锛歿}", list);
+//        //鑾峰彇瀹介珮鎷嶇涓�鐨勭幓鐠冧俊鎭�
+//        EdgStorageCageDetails firstSize = list.get(0);
+//        Integer firstCount = firstSize.getCount();
+//        double firstWidth = firstSize.getWidth();
+//        double firstHeight = firstSize.getHeight();
+//        if (list.size() == 1) {
+//            return queryMinGlass(firstWidth, firstHeight, glassId);
+//        }
+//        //鑾峰彇瀹介珮鎷嶇浜岀殑鐜荤拑淇℃伅
+//        EdgStorageCageDetails secondSize = list.get(1);
+//        Integer secondCount = secondSize.getCount();
+//        double secondWidth = secondSize.getWidth();
+//        double secondHeight = secondSize.getHeight();
+//        //鑾峰彇鏁伴噺鍓�2鐨勭幓鐠冩暟閲忔瘮渚�
+//        Integer mix = firstCount / secondCount;
+//        log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负锛歿}", mix);
+//
+//        if (mix >= 2) {
+//            log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负{}锛屽ぇ浜�2锛岀洿鎺ュ嚭鐜荤拑鏁版嵁鐨勬渶澶氱殑锛屽锛歿}锛岄珮锛歿}", mix, firstWidth, firstHeight);
+//            return queryMinGlass(firstWidth, firstHeight, glassId);
+//        } else {
+//            log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负{}锛屽皬浜�2", mix);
+//            //鑾峰彇浠诲姟琛ㄤ腑鏈�鍚庝竴娆″嚭鐗囩殑鐜荤拑id
+//            TaskCache taskCache = taskCacheService.queryGlassByTaskCache(endcell, Const.GLASS_CACHE_TYPE_OUT_ALL);
+//            log.info("鑾峰彇浠诲姟琛ㄤ腑{}绾挎渶鍚庝竴娆″嚭鐗囩殑鐜荤拑浠诲姟淇℃伅锛歿}", endcell, taskCache);
+//            if (null == taskCache) {
+//                log.info("{}绾挎病鏈夊嚭鐗囦换鍔′俊鎭紝鐩存帴鍑虹墖", endcell);
+//                return queryMinGlass(firstSize.getWidth(), firstSize.getHeight(), glassId);
+//            }
+//            EdgStorageCageDetails outGlassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+//                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()).last("limit 1"));
+//            log.info("{}绾挎湁鍑虹墖浠诲姟淇℃伅,浠诲姟淇℃伅涓簕}锛岀幓鐠冧俊鎭负{}", endcell, taskCache, outGlassInfo);
+//            if (outGlassInfo.getWidth() == firstWidth && outGlassInfo.getHeight() == firstHeight) {
+//                log.info("鏁伴噺鏈�澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
+//                        firstWidth, firstHeight, endcell, outGlassInfo.getWidth(), outGlassInfo.getHeight(), secondWidth, secondHeight);
+//                return queryMinGlass(secondWidth, secondHeight, glassId);
+//            } else {
+//                log.info("鏁伴噺绗簩澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
+//                        secondWidth, secondHeight, endcell, outGlassInfo.getWidth(), outGlassInfo.getHeight(), firstWidth, firstHeight);
+//                return queryMinGlass(firstWidth, firstHeight, glassId);
+//            }
+//        }
+//    }
+//
+//    /**
+//     * 淇濆瓨鍑虹墖浠诲姟鐩稿叧淇℃伅
+//     *
+//     * @param glassInfo
+//     * @param endcell
+//     * @param confirmationWrodAddress
+//     * @param glassId
+//     * @return
+//     */
+//    private boolean saveOutGlassMessage(EdgStorageCageDetails glassInfo, int endcell, String confirmationWrodAddress, String glassId, Integer currentSlot) {
+//        if (glassInfo != null) {
+//            log.info("4銆佹坊鍔犲嚭鐗囦换鍔★紝鐜荤拑id锛歿}锛屼换鍔$被鍨嬶細{}锛岃捣濮嬩綅缃細{}锛岀粨鏉熶綅缃細{}", glassInfo.getGlassId(),
+//                    2, glassInfo.getSlot(), endcell);
+//            if (glassInfo.getGlassId().equals(glassId)) {
+//
+//                log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+//                EdgStorageCageDetails details = new EdgStorageCageDetails();
+//                BeanUtils.copyProperties(glassInfo, details);
+//                EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(task.getCurrentCell(), currentSlot, Boolean.TRUE);
+//                Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�");
+//                log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
+//                details.setSlot(nearestEmpty.getSlot());
+//                details.setState(Const.GLASS_STATE_OUT);
+//                edgStorageCageDetailsService.save(details);
+//                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), nearestEmpty.getSlot(), endcell, Const.GLASS_CACHE_TYPE_THROUGH);
+//                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
+//            } else {
+//                log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+//                LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
+//                wrapper.eq(EdgStorageCageDetails::getGlassId, glassInfo.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
+//                edgStorageCageDetailsService.update(wrapper);
+//                log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT);
+//
+//                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), glassInfo.getSlot(), endcell, Const.GLASS_CACHE_TYPE_OUT);
+//                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
+//            }
+//            boolean glassSizeStatus = saveGlassSize(glassInfo, endcell);
+//            log.info("7銆佹坊鍔犲嚭鐗囩幓鐠冨昂瀵镐俊鎭埌纾ㄨ竟鍓嶇幓鐠冭〃鏄惁瀹屾垚锛歿}", glassSizeStatus);
+//            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
+//            log.info("8銆佸彂閫佺‘璁ゅ瓧宸插畬鎴�");
+//            Damage damage = new Damage();
+//            damage.setGlassId(glassInfo.getGlassId());
+//            damage.setWorkingProcedure("鍒囧壊");
+//            damage.setLine(1001);
+//            damage.setType(1);
+//            damage.setRemark("杩囧崸寮忕悊鐗�");
+//            damageService.insertDamage(damage);
+//            return Boolean.TRUE;
+//        }
+//        return Boolean.FALSE;
+//    }
+//
+//    /**
+//     * 淇濆瓨鍑虹墖浠诲姟鐩稿叧淇℃伅
+//     *
+//     * @param glassInfo
+//     * @param endcell
+//     * @param confirmationWrodAddress
+//     * @param glassId
+//     * @return
+//     */
+//    private boolean saveOutGlassMessageBySlot(EdgStorageCageDetails glassInfo, int endcell, String confirmationWrodAddress, String glassId, Integer currentSlot) {
+//        if (glassInfo != null) {
+//            log.info("4銆佹坊鍔犲嚭鐗囦换鍔★紝鐜荤拑id锛歿}锛屼换鍔$被鍨嬶細{}锛岃捣濮嬩綅缃細{}锛岀粨鏉熶綅缃細{}", glassInfo.getGlassId(),
+//                    2, glassInfo.getSlot(), endcell);
+//            if (glassInfo.getGlassId().equals(glassId)) {
+//                log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+//                EdgStorageCageDetails details = new EdgStorageCageDetails();
+//                //鐜荤拑淇℃伅鏇挎崲
+//                String glassIdChange = queryAndChangeGlass(glassId);
+//                if (StringUtils.isBlank(glassIdChange)) {
+//                    BeanUtils.copyProperties(glassInfo, details);
+//                } else {
+//                    GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+//                    BeanUtils.copyProperties(one, details);
+//                }
+//                EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(task.getCurrentCell(), currentSlot, Boolean.TRUE);
+//                Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�");
+//                log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
+//                details.setSlot(nearestEmpty.getSlot());
+//                details.setState(Const.GLASS_STATE_OUT);
+//                edgStorageCageDetailsService.save(details);
+//                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), nearestEmpty.getSlot(), endcell, Const.GLASS_CACHE_TYPE_THROUGH);
+//                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
+//            } else {
+//                log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+//                if (!glassInfo.getSlot().equals(currentSlot)) {
+//                    EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+//                            .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+//                            .eq(EdgStorageCageDetails::getSlot, currentSlot).eq(EdgStorageCageDetails::getWidth, glassInfo.getWidth())
+//                            .eq(EdgStorageCageDetails::getHeight, glassInfo.getHeight()).eq(EdgStorageCageDetails::getThickness, glassInfo.getThickness())
+//                    );
+//                    if (null != currentGlass) {
+//                        glassInfo = currentGlass;
+//                    }
+//                }
+//                //鐜荤拑淇℃伅鏇挎崲
+//                String glassIdChange = queryAndChangeGlass(glassInfo.getGlassId());
+//                //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
+//                queryEdgAndChangeGlass(glassInfo.getGlassId(), glassIdChange);
+//                LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
+//                wrapper.eq(EdgStorageCageDetails::getGlassId, glassInfo.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
+//                edgStorageCageDetailsService.update(wrapper);
+//                log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT);
+//
+//                boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), glassInfo.getSlot(), endcell, Const.GLASS_CACHE_TYPE_OUT);
+//                log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
+//            }
+//            boolean glassSizeStatus = saveGlassSize(glassInfo, endcell);
+//            log.info("7銆佹坊鍔犲嚭鐗囩幓鐠冨昂瀵镐俊鎭埌纾ㄨ竟鍓嶇幓鐠冭〃鏄惁瀹屾垚锛歿}", glassSizeStatus);
+//            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
+//            log.info("8銆佸彂閫佺‘璁ゅ瓧宸插畬鎴�");
+//            Damage damage = new Damage();
+//            damage.setGlassId(glassInfo.getGlassId());
+//            damage.setWorkingProcedure("鍒囧壊");
+//            damage.setLine(1001);
+//            damage.setType(1);
+//            damage.setRemark("杩囧崸寮忕悊鐗�");
+//            damageService.insertDamage(damage);
+//            damageService.deleteByGlassId(glassId);
+//            return Boolean.TRUE;
+//        }
+//        return Boolean.FALSE;
+//    }
+//
+//    /**
+//     * 娣诲姞鐞嗙墖绗间换鍔�
+//     *
+//     * @param glassId
+//     * @param startcell
+//     * @param endcell
+//     * @param taskType
+//     * @return
+//     */
+//    private boolean saveTaskCache(String glassId, int startcell, int endcell, int taskType) {
+//        TaskCache taskCache = new TaskCache();
+//        taskCache.setGlassId(glassId);
+//        taskCache.setTaskStatus(0);
+//        taskCache.setStartCell(startcell);
+//        taskCache.setEndCell(endcell);
+//        taskCache.setTaskType(taskType);
+//        taskCache.setCreateTime(new Date());
+//        return taskCacheService.save(taskCache);
+//    }
+//
+//    /**
+//     * 娣诲姞纾ㄨ竟闃熷垪淇℃伅
+//     *
+//     * @param glassInfo
+//     * @param endcell
+//     * @return
+//     */
+//    private boolean saveGlassSize(EdgStorageCageDetails glassInfo, int endcell) {
+//        EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo();
+//        BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo);
+//        edgGlassTaskInfo.setHeight((int) (glassInfo.getHeight() * ratio));
+//        edgGlassTaskInfo.setWidth((int) (glassInfo.getWidth() * ratio));
+//        edgGlassTaskInfo.setThickness((int) (glassInfo.getThickness() * ratio));
+//        edgGlassTaskInfo.setState(Const.EDG_GLASS_BEFORE);
+//        edgGlassTaskInfo.setLine(endcell);
+//        edgGlassTaskInfo.setCreateTime(new Date());
+//        edgGlassTaskInfo.setUpdateTime(new Date());
+//        //鍏堝皢鍘嗗彶瀵瑰垪琛ㄤ腑鏈幓鐠冪殑鏁版嵁鍒犻櫎锛岄噸鏂版柊澧炰竴浠芥渶鏂扮殑鏁版嵁
+//        edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().eq(EdgGlassTaskInfo::getGlassId, glassInfo.getGlassId()));
+//        return edgGlassTaskInfoService.save(edgGlassTaskInfo);
+//    }
+//
+//    /**
+//     * 璁$畻鍑虹墖绾胯矾
+//     * 宸叉帓闄ら兘涓�2  閮戒负0 鐨勬儏鍐�
+//     *
+//     * @param out08Glassstate
+//     * @param out10Glassstate
+//     * @return
+//     */
+//    private int computerLineByState(int out08Glassstate, int out10Glassstate) {
+//        if (out08Glassstate == 0) {
+//            if (out10Glassstate == 2) {
+//                return Const.A09_OUT_TARGET_POSITION;
+//            } else {
+//                return Const.A10_OUT_TARGET_POSITION;
+//            }
+//        } else if (out08Glassstate == 1) {
+//            return Const.A09_OUT_TARGET_POSITION;
+//        } else {
+//            return Const.A10_OUT_TARGET_POSITION;
+//        }
+//    }
+//
+//}

--
Gitblit v1.8.0