package com.mes.edgstoragecage.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.entity.vo.EdgSlotRemainVO; import com.mes.edgstoragecage.entity.vo.EdgStorageCageVO; import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper; import com.mes.edgstoragecage.mapper.EdgStorageCageMapper; import com.mes.edgstoragecage.service.EdgStorageCageService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /** *

* 服务实现类 *

* * @author zhoush * @since 2024-04-07 */ @Slf4j @Service public class EdgStorageCageServiceImpl extends MPJBaseServiceImpl implements EdgStorageCageService { @Resource EdgStorageCageDetailsMapper edgStorageCageDetailsMapper; @Autowired DamageService damageService; @Override public EdgStorageCage selectNearestEmpty(Integer currentSlot, int deviceId, boolean flag) { List emptyList = this.selectJoinList(EdgStorageCage.class, new MPJLambdaWrapper() .selectAll(EdgStorageCage.class) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getDeviceId, EdgStorageCage::getDeviceId) .eq(EdgStorageCageDetails::getSlot, EdgStorageCage::getSlot) .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)) .isNull(EdgStorageCageDetails::getSlot) .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) .eq(EdgStorageCage::getDeviceId, deviceId) .last("order by abs(t.slot - " + currentSlot + ") asc limit 2") ); if (flag && CollectionUtil.isNotEmpty(emptyList)) { return emptyList.get(0); } if (CollectionUtil.isEmpty(emptyList) || emptyList.size() == 1) { return null; } return emptyList.get(0); } /** * 按照设备号返回对应的笼内详情数据 * * @return */ @Override public List selectEdgStorageCagesByDeviceId(int deviceId) { List storageCageVOS = this.selectJoinList(EdgStorageCageVO.class, new MPJLambdaWrapper() .selectAll(EdgStorageCage.class) .selectCollection(EdgStorageCageDetails.class, EdgStorageCageVO::getDetails) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getDeviceId, EdgStorageCage::getDeviceId) .eq(EdgStorageCageDetails::getSlot, EdgStorageCage::getSlot) .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)) .eq(EdgStorageCage::getDeviceId, deviceId) .orderByAsc(EdgStorageCage::getSlot) .orderByAsc(EdgStorageCageDetails::getId) ); return storageCageVOS; } /** * 修改理片笼信息 功能:对笼内栅格玻璃 【启用/禁用】 * * @param edgStorageCage * @return */ @Override public boolean updateEdgStorageCage(EdgStorageCage edgStorageCage) { EdgStorageCage edgItem = baseMapper.selectById(edgStorageCage.getId()); if (edgItem != null) { edgItem.setEnableState(edgStorageCage.getEnableState()); baseMapper.updateById(edgItem); log.info("卧室缓存:【启用/禁用】 参数:{} 结果:成功", edgStorageCage); return true; } log.info("卧室缓存:【启用/禁用】 参数:{} 结果:失败", edgStorageCage); return false; } /** * 修改理片笼信息 功能:对笼内栅格玻璃 【添加/删除/更换】 * * @param edgStorageCageId * @param edgStorageCageDetails * @return */ @Override public boolean updateEdgStorageCageDetails(int edgStorageCageId, EdgStorageCageDetails edgStorageCageDetails) { EdgStorageCage edgItem = baseMapper.selectById(edgStorageCageId); log.info("正常" + edgItem); EdgStorageCageDetails edgDItem = edgStorageCageDetailsMapper.selectById(edgStorageCageDetails.getId()); if (edgItem != null) { //移除 (破损,目前两个概念混合在一起,建议拆开) EdgStorageCageDetails result = edgStorageCageDetailsMapper.selectOne( new MPJLambdaWrapper() .eq(EdgStorageCageDetails::getSlot, edgStorageCageId) .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) ); if (result != null) { result.setSlot(0); result.setState(201); Damage damage = new Damage(); damage.setGlassId(edgStorageCageDetails.getGlassId()); damage.setLine(2001); damage.setWorkingProcedure("磨边"); damage.setStatus(1); damage.setType(8); damageService.insertDamage(damage); edgStorageCageDetailsMapper.updateById(result); } //添加 if (edgDItem != null) { //只传格子 :移除玻璃 EdgStorageCageDetails newresult = edgStorageCageDetailsMapper.selectById(edgStorageCageDetails.getId()); newresult.setSlot(edgItem.getSlot()); edgStorageCageDetailsMapper.updateById(newresult); } } return true; } @Override public EdgStorageCage getEdgStorageCageBySize(int deviceId, double width, double height, int slot) { return baseMapper.getEdgStorageCageBySize(deviceId, width, height, slot); } @Override public void resetSlotRemainWidth(List edgSlotRemainVOS) { baseMapper.resetSlotRemainWidth(edgSlotRemainVOS); } }