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);
}
}