package com.mes.hollow.service.impl; 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.StringUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.common.config.Const; import com.mes.common.config.ConstSysConfig; import com.mes.hollow.entity.HollowBigStorageCage; import com.mes.hollow.entity.HollowBigStorageCageDetails; import com.mes.hollow.entity.dto.FlowCardVirtualSlotDTO; import com.mes.hollow.entity.dto.HollowBigStorageAndDetailsDTO; import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO; import com.mes.hollow.mapper.HollowBigStorageCageMapper; import com.mes.hollow.mapper.HollowGlassRelationInfoMapper; import com.mes.hollow.service.HollowBigStorageCageDetailsService; import com.mes.hollow.service.HollowBigStorageCageService; import com.mes.sysconfig.service.SysConfigService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * (HollowBigStorageCage)表服务实现类 * * @author makejava * @since 2024-11-21 09:22:46 */ @Service public class HollowBigStorageCageServiceImpl extends ServiceImpl implements HollowBigStorageCageService { // @Value("${mes.slotWidth}") // private Integer slotWidth; @Resource private HollowBigStorageCageDetailsService hollowBigStorageCageDetailsService; @Resource private HollowGlassRelationInfoMapper hollowGlassRelationInfoMapper; @Resource private SysConfigService sysConfigService; @Override public List queryHollowBigStorageCageDetail(HollowBigStorageDetailsQueryVO query) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); wrapper.selectAll(HollowBigStorageCage.class).selectCollection(HollowBigStorageCageDetails.class, HollowBigStorageCage::getHollowBigStorageCageDetails) .leftJoin(HollowBigStorageCageDetails.class, on -> on.eq(HollowBigStorageCageDetails::getSlot, HollowBigStorageCage::getSlot) .like(StringUtils.isNotBlank(query.getFilmsId()), HollowBigStorageCageDetails::getFilmsId, query.getFilmsId()) .like(StringUtils.isNotBlank(query.getFlowCardId()), HollowBigStorageCageDetails::getFlowCardId, query.getFlowCardId()) .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL, Const.GLASS_STATE_OUT_ING)) // .eq(HollowBigStorageCage::getDeviceId, query.getDeviceId()) .orderByAsc(HollowBigStorageCage::getDeviceId) .orderByAsc(HollowBigStorageCage::getSlot); return baseMapper.selectJoinList(HollowBigStorageAndDetailsDTO.class, wrapper); } @Override public Map> queryHollowbigStorageCageDetail() { MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); wrapper.selectAll(HollowBigStorageCage.class).selectCollection(HollowBigStorageCageDetails.class, HollowBigStorageCage::getHollowBigStorageCageDetails) .leftJoin(HollowBigStorageCageDetails.class, on -> on.eq(HollowBigStorageCageDetails::getSlot, HollowBigStorageCage::getSlot) .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).orderByAsc(HollowBigStorageCageDetails::getUpdateTime)); List bigStorageCages = baseMapper.selectJoinList(HollowBigStorageCage.class, wrapper); Map> listMap = bigStorageCages.stream().collect(Collectors.groupingBy(item -> item.getDeviceId())); return listMap; } @Override public List> selectBigStorageCageUsage() { Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.select("device_id,ROUND(1 - SUM(CASE WHEN remain_width = " + slotWidth + " THEN 1 ELSE 0 END) / COUNT(device_id), 2)*100 AS percentage,SUM(CASE WHEN remain_width = " + slotWidth + " THEN 1 ELSE 0 END) AS count") .groupBy("device_id"); return baseMapper.selectMaps(wrapper); } @Override public Boolean resetCage() { // 复位:重置理片笼基础信息1、清除笼内状态为0的脏数据; hollowBigStorageCageDetailsService.remove(new LambdaQueryWrapper() .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_NEW)); // 2将空格子的尺寸置为初始尺寸 Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH); this.update(new LambdaUpdateWrapper() .set(HollowBigStorageCage::getRemainWidth, slotWidth) .notInSql(HollowBigStorageCage::getSlot, "select distinct slot from hollow_big_storage_cage_details where state in( 100 , 102 , 103 ,104)")); // 3、将不在笼内的流程卡的关系表重置 // 仅获取理片笼内的流程卡信息避免玻璃 List list = hollowBigStorageCageDetailsService.queryFlowCardIdsAndLayer(); for (FlowCardVirtualSlotDTO item : list) { hollowGlassRelationInfoMapper.clearDirtyFlowCardData(item.getFlowCardId(), item.getLayer()); } return Boolean.TRUE; } }