package com.mes.bigstorage.service.impl; 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.toolkit.CollectionUtils; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.base.entity.vo.BigStorageVO; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.dto.*; import com.mes.bigstorage.entity.vo.BigStorageQueryVO; import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask; import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO; import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper; import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper; import com.mes.common.config.Const; import com.mes.common.config.ConstSysConfig; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.glassinfo.service.GlassInfoService; import com.mes.pp.entity.OptimizeProject; import com.mes.sysconfig.entity.SysConfig; import com.mes.sysconfig.service.SysConfigService; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.mapper.TemperingGlassInfoMapper; import com.mes.temperingglass.service.TemperingGlassInfoService; import com.mes.utils.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author zhoush * @since 2024-03-27 */ @Slf4j @Service public class BigStorageCageDetailsServiceImpl extends MPJBaseServiceImpl implements BigStorageCageDetailsService { @Resource private BigStorageCageOutTaskMapper bigStorageCageOutTaskMapper; @Resource private BigStorageCageFeedTaskMapper bigStorageCageFeedTaskMapper; @Resource private TemperingGlassInfoMapper temperingGlassInfoMapper; @Resource private BigStorageCageService bigStorageCageService; @Resource private GlassInfoMapper glassInfoMapper; @Resource private GlassInfoService glassInfoService; @Resource private TemperingGlassInfoService temperingGlassInfoService; @Resource private SysConfigService sysConfigService; @Resource private DamageService damageService; @Resource private RedisUtil redisUtil; @Resource BigStorageCageHistoryTaskService bigStorageCageHistoryTaskService; // // @Value("${mes.minCount}") // private int minCount; // // @Value("${mes.slotWidth}") // private Integer slotWidth; // // @Value("${mes.glassGap}") // private Integer glassGap; // // @Value("${mes.sequence.order}") // private boolean sequenceOrder; @Override public List selectFeedTask() { //进片任务数据 LambdaQueryWrapper feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW); List bigStorageCageDetailsList = baseMapper.selectList(feedWrapper); LambdaQueryWrapper feedTaskWrapper = new LambdaQueryWrapper<>(); feedTaskWrapper .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) .isNotNull(BigStorageCageFeedTask::getTargetSlot); List bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper); Map listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); Iterator iterator = bigStorageCageDetailsList.iterator(); while (iterator.hasNext()) { BigStorageCageDetails bigStorageCageDetails = iterator.next(); BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); } return bigStorageCageDetailsList; } @Override public List selectOutTask() { LambdaQueryWrapper outWrapper = new LambdaQueryWrapper<>(); outWrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING, Const.GLASS_STATE_SCHEDULE_ING); List bigStorageCageDetailsList = baseMapper.selectList(outWrapper); LambdaQueryWrapper outTaskWrapper = new LambdaQueryWrapper<>(); outTaskWrapper.lt(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS); List bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(outTaskWrapper); Map listMap = bigStorageCageOutTaskList.stream() .collect(Collectors.toMap(BigStorageCageOutTask::getGlassId, task -> task)); for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) { BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask); } Iterator iterator = bigStorageCageDetailsList.iterator(); while (iterator.hasNext()) { BigStorageCageDetails bigStorageCageDetails = iterator.next(); BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask); } return bigStorageCageDetailsList; } /** * 判断当前玻璃是否能上车 */ @Override public double selectGetBoard(String plcFeedReqLine) { double carWidth = 5000; LambdaQueryWrapper feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, plcFeedReqLine); List bigStorageCageDetailsList = baseMapper.selectList(feedWrapper); LambdaQueryWrapper bigStorageCageFeedTaskWrapper = new LambdaQueryWrapper<>(); bigStorageCageFeedTaskWrapper .eq(BigStorageCageFeedTask::getTaskState, plcFeedReqLine) .eq(BigStorageCageFeedTask::getLine, plcFeedReqLine); List bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(bigStorageCageFeedTaskWrapper); Map listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) { BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); } for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList ) { if (bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState() == 0) { carWidth = carWidth - bigStorageCageDetails.getWidth() - 250; } } return carWidth; } //栓除出片任务.更新格子宽度 @Override public void deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { baseMapper.deleteById(bigStorageCageDetails.getId()); bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); } //理片笼详情破损 @Override public void damageBigStorageCageDetails(String glassId, int status) { LambdaQueryWrapper temperingGlassInfoWrapper = new LambdaQueryWrapper<>(); temperingGlassInfoWrapper.eq(TemperingGlassInfo::getGlassId, glassId); TemperingGlassInfo temperingGlassInfo = temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper); LambdaQueryWrapper bigStorageCageDetailsWrapper = new LambdaQueryWrapper<>(); bigStorageCageDetailsWrapper .eq(BigStorageCageDetails::getGlassId, glassId) .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN); BigStorageCageDetails bigStorageCageDetails = baseMapper.selectOne(bigStorageCageDetailsWrapper); if (temperingGlassInfo != null) { if (status == 0) { temperingGlassInfo.setState(Const.GLASS_STATE_DAMAGE); } else { temperingGlassInfo.setState(Const.GLASS_STATE_TAKE); } temperingGlassInfoMapper.updateById(temperingGlassInfo); } Damage damage = new Damage(); if (status == 0) { bigStorageCageDetails.setState(Const.GLASS_STATE_DAMAGE); damage.setType(Const.GLASS_STATE_DAMAGE); } else { bigStorageCageDetails.setState(Const.GLASS_STATE_TAKE); damage.setType(Const.GLASS_STATE_TAKE); } baseMapper.updateById(bigStorageCageDetails); bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); damage.setGlassId(bigStorageCageDetails.getGlassId()); damage.setWorkingProcedure("钢化"); damage.setLine(4001); damage.setRemark("大理片笼"); damage.setStatus(1); damageService.insertDamage(damage); } //查询玻璃信息 @Override public List selectBigStorageCageDetails(String glassId) { LambdaQueryWrapper glassInfoWrapper = new LambdaQueryWrapper<>(); List bigStorageCageDetailsList = new ArrayList<>(); glassInfoWrapper.eq(GlassInfo::getGlassId, glassId); GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper); BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); if (glassInfo != null) { BeanUtils.copyProperties(glassInfo, bigStorageCageDetails); bigStorageCageDetails.setState(1); bigStorageCageDetails.setGap(250); bigStorageCageDetailsList = new ArrayList<>(); bigStorageCageDetailsList.add(bigStorageCageDetails); } return bigStorageCageDetailsList; } //理片笼详情添加 @Override public void insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { bigStorageCageDetails.setState(100); baseMapper.insert(bigStorageCageDetails); bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); } //理片笼详情完成 @Override public void finishBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { // if (bigStorageCageDetails.getBigStorageCageFeedTask() != null) { // bigStorageCageDetails.setState(Const.BIG_STORAGE_INSIDE); // baseMapper.updateById(bigStorageCageDetails); // } else { // bigStorageCageDetails.setState(Const.BIG_STORAGE_OUTSIDE); // baseMapper.updateById(bigStorageCageDetails); // bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); // } } //手动出片 @Override public void outBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { bigStorageCageDetails.setState(Const.GLASS_STATE_ARTIFICIAL); baseMapper.updateById(bigStorageCageDetails); } @Override public BigStorageDTO queryTargetSlot(String EngineerId, String glassId, int thickness) { BigStorageDTO bigStorageDTO = null; int slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH); BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper() .eq(BigStorageCage::getEnableState, Const.SLOT_ON) .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot) .inSql(BigStorageCage::getDeviceId, "select distinct device_id from big_storage_cage_details where engineer_id = '" + EngineerId + "'") .last("limit 1")); if (null != bigStorageCage) { log.info("根据版图id找到笼子内的目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassId); bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); return bigStorageDTO; } //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询 List deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness); for (Integer item : deviceUsedList) { bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper() .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot) .eq(BigStorageCage::getEnableState, Const.SLOT_ON) .eq(BigStorageCage::getDeviceId, item) .last("limit 1")); if (null != bigStorageCage) { log.info("按照存笼玻璃格子数占用最少方式获取信息格子为:{},玻璃id:{}", bigStorageCage.getSlot(), glassId); bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); return bigStorageDTO; } } Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃"); return bigStorageDTO; } @Override public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) { BigStorageDTO bigStorageDTO = null; int slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH); MPJLambdaWrapper 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() .eq(BigStorageCage::getEnableState, Const.SLOT_ON) .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot) // .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 deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); List deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); List engineerCount1 = baseMapper.selectList( new LambdaQueryWrapper() .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 engineerCount2 = baseMapper.selectList( new LambdaQueryWrapper() .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() .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot) .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 deviceNotUsedList = bigStorageCageService.queryFreeDeviceByNotUsed(glassInfo.getThickness()); // for (Integer item : deviceNotUsedList) { // bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper() // .eq(BigStorageCage::getRemainWidth, slotWidth) // .eq(BigStorageCage::getEnableState, Const.SLOT_ON) // .eq(BigStorageCage::getDeviceId, item) // .last("limit 1")); // if (null != bigStorageCage) { // log.info("按照存笼玻璃格子数剩余最多得方式获取信息版图id:{},格子:{},玻璃id:{}", glassInfo.getTemperingLayoutId(), bigStorageCage.getSlot(), glassInfo.getGlassId()); // bigStorageDTO = new BigStorageDTO(); // bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); // bigStorageDTO.setSlot(bigStorageCage.getSlot()); // bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); // return bigStorageDTO; // } // } Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃"); return bigStorageDTO; } @Override public List temperingIsAllByTemperingLayoutId(String engineerId, Integer temperingLayoutId) { return baseMapper.temperingIsAllByTemperingLayoutId(engineerId, temperingLayoutId); } @Override public List temperingIsAll() { return baseMapper.temperingIsAll(); } @Override public List queryTemperingOccupySlot() { return baseMapper.queryTemperingOccupySlot(10); } @Override public List queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId) { return baseMapper.queryGlassMaxAndMin(engineerId, temperingLayoutId); } @Override public boolean temperingGlass(String temperingLayoutId, String engineerId, String temperingFeedSequence) { LambdaQueryWrapper temperingGlassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); SysConfig sysConfig = sysConfigService.queryConfigById(ConstSysConfig.CACHE_SEQUENCE_ORDER_TRUE); boolean sequenceOrder = Boolean.parseBoolean(sysConfig.getConfigValue()); temperingGlassInfoLambdaQueryWrapper .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW); List temperingGlassInfoList = temperingGlassInfoMapper.selectList(temperingGlassInfoLambdaQueryWrapper); int dispatchCount = bigStorageCageHistoryTaskService.count(new LambdaQueryWrapper() .eq(BigStorageCageHistoryTask::getTaskState, Const.GLASS_STATE_NEW) .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_DISPATCH)); if (temperingGlassInfoList.size() == 0) { MPJLambdaWrapper wrapper = JoinWrappers.lambda(GlassInfo.class) .select("-1 as state,t.filmsid as films_id,t.glass_id,t.flow_card_id,t.glass_type,t.width,t.height" + ",t.thickness,t.ishorizontal,t.tempering_layout_id,t.tempering_feed_sequence,t.x_coordinate,t.y_coordinate," + "t.angle,t1.slot,t.engineer_id") .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId) .eq(GlassInfo::getTemperingLayoutId, temperingLayoutId) .eq(GlassInfo::getEngineerId, engineerId) .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence); if (dispatchCount > 0) { wrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL); } else { wrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN); } List temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, wrapper); if (CollectionUtils.isNotEmpty(temperingGlassInfos)) { if ("0".equals(temperingFeedSequence)) { if (CollectionUtils.isNotEmpty(temperingGlassInfos)) { // plcStorageCageTask.computeOutMoreGlassInfo(temperingGlassInfos, Boolean.FALSE, ""); } } else { temperingGlassInfoService.saveBatch(temperingGlassInfos); } return true; } } return false; } @Override public List selectTemperingGlass(int isTempering) { return baseMapper.selectTemperingGlassCount(isTempering); } @Override public void updateBySlot(List glassList, int state) { baseMapper.updateBySlot(glassList, state); } @Override public String dispatchSwitch(Boolean flag) { redisUtil.setCacheObject("dispatchSwitch", flag); return "success"; } @Override public List queryLackGlassInfo(BigStorageQueryVO bigStorageQueryVO) { return baseMapper.queryLackGlassInfo(bigStorageQueryVO); } @Override public List queryRealGlassInfo(BigStorageQueryVO bigStorageQueryVO) { return this.list(new LambdaQueryWrapper() .eq(BigStorageCageDetails::getEngineerId, bigStorageQueryVO.getEngineerId()) .eq(BigStorageCageDetails::getTemperingLayoutId, bigStorageQueryVO.getTemperingLayoutId()) .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).orderByAsc(BigStorageCageDetails::getTemperingFeedSequence)); } @Override public Map> querybigStorageCageDetail() { List bigStorageCages = baseMapper.querybigStorageCageDetail(); return bigStorageCages.stream().collect(Collectors.groupingBy(item -> item.getDeviceId())); } @Override public boolean cancelTemperingTask() { redisUtil.deleteObject("temperingEngineerId"); return Boolean.TRUE; } @Override public String temperingSwitch(Boolean flag) { redisUtil.setCacheObject("temperingSwitch", flag); return "success"; } @Override public boolean appointTemperingEngineerId(String engineerId) { String oldEngineerId = redisUtil.getCacheObject("temperingEngineerId"); if (StringUtils.isBlank(oldEngineerId)) { redisUtil.setCacheObject("temperingEngineerId", engineerId); return Boolean.TRUE; } else { return Boolean.FALSE; } } @Override public List queryIsAllNeedDispatchVirtualSlot() { return baseMapper.queryIsAllNeedDispatchVirtualSlot(); } @Override public List dispatchBigStorageGlassInfo(BigStorageRelationDTO bigStorageRelationDTO) { return baseMapper.queryNeedDispatchSlot(bigStorageRelationDTO); } @Override public String bigStorageGlassDamageByGlassId(String glassId) { Damage damage = new Damage(); damage.setGlassId(glassId); damage.setType(Const.GLASS_STATE_DAMAGE); damageService.insertDamage(damage); return "success"; } @Override public void updateDeviceIdBySlot(List slotList) { baseMapper.updateDeviceIdBySlot(slotList); } @Override public List queryEngineer() { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.select("distinct engineer_id") .eq("state", 100); return this.list(wrapper); } }