package com.mes.bigstorage.service.impl; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.yulichang.base.MPJBaseServiceImpl; 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.SlotSequenceDTO; import com.mes.bigstorage.entity.dto.TemperingLayoutDTO; import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper; import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper; import com.mes.common.config.Const; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.mapper.TemperingGlassInfoMapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author zhoush * @since 2024-03-27 */ @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; @Value("${mes.minCount}") private int minCount; @Value("${mes.carWidth}") private Integer carWidth; @Value("${mes.slotWidth}") private Integer slotWidth; @Value("${mes.carMaxSize}") private Integer carMaxSize; @Value("${mes.galssGap}") private Integer galssGap; /** * 查询进/出片任务 */ @Override public List selectTask(int taskType) { if (taskType == 1) { //进片任务数据 LambdaQueryWrapper feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, Const.BIG_STORAGE_IN); List bigStorageCageDetailsList = baseMapper.selectList(feedWrapper); LambdaQueryWrapper feedTaskWrapper = new LambdaQueryWrapper<>(); feedTaskWrapper.lt(BigStorageCageFeedTask::getTaskState,Const.BIG_STORAGE_IN_SLOT); List bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper); Map listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) { BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); } return bigStorageCageDetailsList; } else { //出片任务数据 LambdaQueryWrapper outWrapper = new LambdaQueryWrapper<>(); outWrapper.eq(BigStorageCageDetails::getState, Const.BIG_STORAGE_OUT); 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); } 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 -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + galssGap; } } 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); BigStorageCageDetails bigStorageCageDetails = baseMapper.selectOne(bigStorageCageDetailsWrapper); if(temperingGlassInfo!=null){ if(status==0){ temperingGlassInfo.setState(Const.TEMPERING_DAMAGE); }else{ temperingGlassInfo.setState(Const.TEMPERING_TAKE); } temperingGlassInfoMapper.updateById(temperingGlassInfo); } baseMapper.deleteById(bigStorageCageDetails.getId()); bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); //todo:插入破损数据 } //查询玻璃信息 @Override public BigStorageCageDetails selectBigStorageCageDetails(String glassId) { LambdaQueryWrapper glassInfoWrapper = new LambdaQueryWrapper<>(); glassInfoWrapper.eq(GlassInfo::getGlassId, glassId); GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper); BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); BeanUtils.copyProperties(glassInfo, bigStorageCageDetails); bigStorageCageDetails.setState(0); bigStorageCageDetails.setGap(galssGap); return bigStorageCageDetails; } //理片笼详情添加 @Override public void insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { 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(4); baseMapper.updateById(bigStorageCageDetails); } @Override public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) { BigStorageDTO bigStorageDTO = null; MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(BigStorageCage.class) .selectAll(BigStorageCage.class) .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot) .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) .gt(BigStorageCage::getRemainWidth, glassInfo.getWidth()) .last("limit 1"); if (glassInfo.getTemperingLayoutId() == 0) { 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) { bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); return bigStorageDTO; } bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper() .eq(BigStorageCage::getRemainWidth, slotWidth) .inSql(BigStorageCage::getDeviceId, "select distinct device_id from big_storage_cage_details where tempering_layout_id = " + glassInfo.getTemperingLayoutId()) .last("limit 1")); if (null != bigStorageCage) { bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); return bigStorageDTO; } bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper() .eq(BigStorageCage::getRemainWidth, slotWidth) .last("limit 1")); Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃"); bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); return bigStorageDTO; } @Override public TemperingLayoutDTO temperingIsAll() { return baseMapper.temperingIsAll(); } @Override public TemperingLayoutDTO queryTemperingOccupySlot() { return baseMapper.queryTemperingOccupySlot(minCount); } @Override public List queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId) { return baseMapper.queryGlassMaxAndMin(engineerId, temperingLayoutId); } }