zhoushihao
2 天以前 4e3b8155722b66e25df3c6fd42cc586b68dea391
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/tools/service/impl/BigStorageBaseServiceImpl.java
@@ -5,23 +5,22 @@
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.wrapper.MPJLambdaWrapper;
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
import com.mes.bigstorage.entity.dto.BigStorageDTO;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.bigstorage.service.BigStorageCageService;
import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
import com.mes.common.S7object;
import com.mes.common.config.Const;
import com.mes.common.config.ConstSysConfig;
import com.mes.device.PlcParameterObject;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.sysconfig.service.SysConfigService;
import com.mes.tools.S7control;
import com.mes.tools.service.BigStorageBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -49,22 +48,27 @@
    @Resource
    GlassInfoService glassInfoService;
    @Value("${mes.slotWidth}")
    private Integer slotWidth;
    @Resource
    SysConfigService sysConfigService;
    @Value("${mes.carWidth}")
    private Integer carWidth;
    @Value("${mes.outCarMaxSize}")
    private Integer outCarMaxSize;
    @Value("${mes.glassGap}")
    private Integer glassGap;
//    @Value("${mes.slotWidth}")
//    private Integer slotWidth;
//
//    @Value("${mes.carWidth}")
//    private Integer carWidth;
//
//    @Value("${mes.outCarMaxSize}")
//    private Integer outCarMaxSize;
//
//    @Value("${mes.glassGap}")
//    private Integer glassGap;
    @Override
    public void updateSlotRemainBySlots(List<Integer> slotList) {
        //获取格子内所有的玻璃信息
        Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH);
        int glassGap = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_GLASS_GAP);
        List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
                .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL));
        Map<Integer, Double> slotRemainMap = new HashMap<>();
@@ -449,88 +453,88 @@
    @Override
    public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) {
        BigStorageDTO bigStorageDTO = null;
        MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
                .selectAll(BigStorageCage.class)
                .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)
                .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId())
                .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
                .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
                .last("limit 1");
        if (glassInfo.getTemperingLayoutId() == 0) {
            wrapper.eq(BigStorageCageDetails::getFlowCardId, glassInfo.getFlowCardId())
                    .eq(BigStorageCageDetails::getLayer, glassInfo.getLayer());
//            wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
        } else {
            wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1);
        }
        BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper);
        if (null != bigStorageCage) {
            log.info("无钢化版图id或根据当前玻璃片序+1找到目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId());
            bigStorageDTO = new BigStorageDTO();
            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
            bigStorageDTO.setSlot(bigStorageCage.getSlot());
            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
            return bigStorageDTO;
        }
        bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                .eq(BigStorageCage::getRemainWidth, slotWidth)
//                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
                .inSql(BigStorageCage::getDeviceId,
                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId())
                .last("limit 1"));
        if (null != bigStorageCage) {
            log.info("根据版图id找到笼子内的目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId());
            bigStorageDTO = new BigStorageDTO();
            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
            bigStorageDTO.setSlot(bigStorageCage.getSlot());
            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
            return bigStorageDTO;
        }
        //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询
        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
        List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
        List<BigStorageCageDetails> engineerCount1 = baseMapper.selectList(
                new LambdaQueryWrapper<BigStorageCageDetails>()
                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
                        .select(BigStorageCageDetails::getEngineerId)
                        .groupBy(BigStorageCageDetails::getEngineerId)
                        .between(BigStorageCageDetails::getDeviceId, 1, 5)
        );
        List<BigStorageCageDetails> engineerCount2 = baseMapper.selectList(
                new LambdaQueryWrapper<BigStorageCageDetails>()
                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
                        .select(BigStorageCageDetails::getEngineerId)
                        .groupBy(BigStorageCageDetails::getEngineerId)
                        .between(BigStorageCageDetails::getDeviceId, 6, 8)
        );
        if (engineerCount1.size() > engineerCount2.size()) {
            deviceUsedList.removeIf(device -> device < 6);
        } else {
            deviceUsedList.removeIf(device -> device > 5);
        }
        if (CollectionUtils.isEmpty(deviceUsedList)) {
            deviceUsedList = deviceUseds;
        }
        for (Integer item : deviceUsedList) {
            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                    .eq(BigStorageCage::getRemainWidth, slotWidth)
                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                    .eq(BigStorageCage::getDeviceId, item)
                    .last("limit 1"));
            if (null != bigStorageCage) {
                log.info("按照存笼玻璃格子数占用最少方式获取信息格子为:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId());
                bigStorageDTO = new BigStorageDTO();
                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
                bigStorageDTO.setSlot(bigStorageCage.getSlot());
                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
                return bigStorageDTO;
            }
        }
//        BigStorageDTO bigStorageDTO = null;
//        MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
//                .selectAll(BigStorageCage.class)
//                .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
//                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
//                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)
//                .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId())
//                .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
//                .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
//                .last("limit 1");
//        if (glassInfo.getTemperingLayoutId() == 0) {
//            wrapper.eq(BigStorageCageDetails::getFlowCardId, glassInfo.getFlowCardId())
//                    .eq(BigStorageCageDetails::getLayer, glassInfo.getLayer());
////            wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
//        } else {
//            wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1);
//        }
//        BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper);
//        if (null != bigStorageCage) {
//            log.info("无钢化版图id或根据当前玻璃片序+1找到目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId());
//            bigStorageDTO = new BigStorageDTO();
//            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
//            bigStorageDTO.setSlot(bigStorageCage.getSlot());
//            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
//            return bigStorageDTO;
//        }
//        bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
//                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
//                .eq(BigStorageCage::getRemainWidth, slotWidth)
////                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
//                .inSql(BigStorageCage::getDeviceId,
//                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId())
//                .last("limit 1"));
//        if (null != bigStorageCage) {
//            log.info("根据版图id找到笼子内的目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId());
//            bigStorageDTO = new BigStorageDTO();
//            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
//            bigStorageDTO.setSlot(bigStorageCage.getSlot());
//            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
//            return bigStorageDTO;
//        }
//
//        //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询
//        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
//        List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
//        List<BigStorageCageDetails> engineerCount1 = baseMapper.selectList(
//                new LambdaQueryWrapper<BigStorageCageDetails>()
//                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
//                        .select(BigStorageCageDetails::getEngineerId)
//                        .groupBy(BigStorageCageDetails::getEngineerId)
//                        .between(BigStorageCageDetails::getDeviceId, 1, 5)
//        );
//        List<BigStorageCageDetails> engineerCount2 = baseMapper.selectList(
//                new LambdaQueryWrapper<BigStorageCageDetails>()
//                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
//                        .select(BigStorageCageDetails::getEngineerId)
//                        .groupBy(BigStorageCageDetails::getEngineerId)
//                        .between(BigStorageCageDetails::getDeviceId, 6, 8)
//        );
//        if (engineerCount1.size() > engineerCount2.size()) {
//            deviceUsedList.removeIf(device -> device < 6);
//        } else {
//            deviceUsedList.removeIf(device -> device > 5);
//        }
//        if (CollectionUtils.isEmpty(deviceUsedList)) {
//            deviceUsedList = deviceUseds;
//        }
//        for (Integer item : deviceUsedList) {
//            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
//                    .eq(BigStorageCage::getRemainWidth, slotWidth)
//                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
//                    .eq(BigStorageCage::getDeviceId, item)
//                    .last("limit 1"));
//            if (null != bigStorageCage) {
//                log.info("按照存笼玻璃格子数占用最少方式获取信息格子为:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId());
//                bigStorageDTO = new BigStorageDTO();
//                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
//                bigStorageDTO.setSlot(bigStorageCage.getSlot());
//                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
//                return bigStorageDTO;
//            }
//        }
        //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择
//        List<Integer> deviceNotUsedList = bigStorageCageService.queryFreeDeviceByNotUsed(glassInfo.getThickness());
@@ -549,12 +553,13 @@
//                return bigStorageDTO;
//            }
//        }
        Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃");
        return bigStorageDTO;
//        Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃");
//        return bigStorageDTO;
        return null;
    }
    @Scheduled(fixedDelay = 300)
    //    @Scheduled(fixedDelay = 300)
    public void querySizeByEngineerTask() {
        log.info("查询结果:{}", querySizeByEngineer("P24072402", 1, 10, 8));
        log.info("查询结果:{}", querySizeByEngineer("P24072402", 1, 5, 8));
@@ -575,13 +580,16 @@
            List<GlassInfo> infoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>()
                    .notInSql(GlassInfo::getGlassId, "select glass_id from damage where tempering_layout_id = " + temperingLayoutId + " and engineer_id = '" + engineerId + "'")
                    .eq(GlassInfo::getTemperingLayoutId, temperingLayoutId).eq(GlassInfo::getEngineerId, engineerId).orderByAsc(GlassInfo::getTemperingFeedSequence));
            int remainWidth = carWidth;
            int remainWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_CAR_WIDTH);
            int trainNumber = 1;
            int serialNumber = 0;
            int min = 0;
            int temp = infoList.get(0).getTemperingFeedSequence();
            int slot = 0;
            int resultTrainNumber = 0;
            int outCarMaxSize = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_OUT_CAR_SIZE);
            int carWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_CAR_WIDTH);
            int glassGap = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_GLASS_GAP);
            for (GlassInfo e : infoList) {
                int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
                if (serialNumber >= outCarMaxSize || maxLength > remainWidth || e.getTemperingFeedSequence() >= minLength) {
@@ -621,10 +629,10 @@
            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
            return bigStorageDTO;
        }
        int slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH);
        bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                .eq(BigStorageCage::getRemainWidth, slotWidth)
                .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot)
                .inSql(BigStorageCage::getDeviceId,
                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + engineerId + "' and tempering_layout_id = " + temperingLayoutId)
                .last("limit 1"));
@@ -642,7 +650,7 @@
        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness);
        for (Integer item : deviceUsedList) {
            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                    .eq(BigStorageCage::getRemainWidth, slotWidth)
                    .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot)
                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                    .eq(BigStorageCage::getDeviceId, item)
                    .last("limit 1"));