package com.mes.bigstorage.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.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
import com.mes.bigstorage.mapper.BigStorageCageMapper;
import com.mes.bigstorage.service.BigStorageCageService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import lombok.extern.slf4j.Slf4j;
import com.mes.glassinfo.entity.GlassInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author zhoush
* @since 2024-03-27
*/
@Service
@Slf4j
public class BigStorageCageServiceImpl extends ServiceImpl implements BigStorageCageService {
@Resource
private BigStorageCageMapper bigStorageCageMapper;
@Resource
private BigStorageCageDetailsMapper bigStorageCageDetailsMapper;
@Resource
private TemperingGlassInfoService temperingGlassInfoService;
@Resource
private GlassInfoService glassInfoService;
//进片逻辑
@Override
public BigStorageCageDetails feedGlass(GlassInfo glassInfo, BigStorageCageDetails bigStorageCageDetails) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() - 1);
BigStorageCageDetails layoutSlotInfo;
layoutSlotInfo= bigStorageCageDetailsMapper.selectOne(wrapper);
log.info("1、查询理片笼内片序-1等于当前玻璃片序的玻璃"+layoutSlotInfo);
BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
log.info("2、查询理片笼内片序-1等于当前玻璃片序的玻璃的结果不为空时"+layoutSlotInfo.getSlot());
if (layoutSlotInfo.getSlot() != null&&selectWidthSufficient(layoutSlotInfo,bigStorageCageDetails.getWidth())) {
bigStorageCageDetails.setSlot(layoutSlotInfo.getSlot());
} else {
log.info("3、查询理片笼内片序-1等于当前玻璃片序的玻璃的结果为空时获取当前玻璃版图id是否存在理片笼内");
LambdaQueryWrapper bigStorageCageDetailslambdaQueryWrapper = new LambdaQueryWrapper<>();
bigStorageCageDetailslambdaQueryWrapper
.select(BigStorageCageDetails::getTemperingLayoutId);
layoutSlotInfo = bigStorageCageDetailsMapper.selectOne(bigStorageCageDetailslambdaQueryWrapper);
if(layoutSlotInfo != null&&selectWidthSufficient(layoutSlotInfo,bigStorageCageDetails.getWidth())){
log.info("4、获取笼子内适合的格子");
BigStorageCage bigStorageCage=bigStorageCageSlot(layoutSlotInfo.getDeviceId());
bigStorageCageDetails.setSlot(bigStorageCage.getSlot());
}else{
log.info("5、获取每个笼子版图id的个数");
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.select("a.device_id", "COUNT(DISTINCT b.tempering_layout_id) AS layoutCount")
.groupBy("a.device_id")
.apply("LEFT JOIN (SELECT device_id, tempering_layout_id FROM big_storage_cage_details) b ON a.device_id = b.device_id AND a.slot = b.slot")
.orderByAsc("layoutCount")
.orderByAsc("a.device_id");
List