package xiaozhi.modules.device.service.impl; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.micrometer.common.util.StringUtils; import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.modules.device.dao.OtaDao; import xiaozhi.modules.device.entity.OtaEntity; import xiaozhi.modules.device.service.OtaService; @Service public class OtaServiceImpl extends BaseServiceImpl implements OtaService { @Override public PageData page(Map params) { IPage page = baseDao.selectPage( getPage(params, "update_date", true), getWrapper(params)); return new PageData<>(page.getRecords(), page.getTotal()); } private QueryWrapper getWrapper(Map params) { String firmwareName = (String) params.get("firmwareName"); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.like(StringUtils.isNotBlank(firmwareName), "firmware_name", firmwareName); return wrapper; } @Override public void update(OtaEntity entity) { // 检查是否存在相同类型和版本的固件(排除当前记录) QueryWrapper queryWrapper = new QueryWrapper() .eq("type", entity.getType()) .eq("version", entity.getVersion()) .ne("id", entity.getId()); // 排除当前记录 if (baseDao.selectCount(queryWrapper) > 0) { throw new RuntimeException("已存在相同类型和版本的固件,请修改后重试"); } entity.setUpdateDate(new Date()); baseDao.updateById(entity); } @Override public void delete(String[] ids) { baseDao.deleteByIds(Arrays.asList(ids)); } @Override public boolean save(OtaEntity entity) { QueryWrapper queryWrapper = new QueryWrapper() .eq("type", entity.getType()); // 同类固件只保留最新的一条 List otaList = baseDao.selectList(queryWrapper); if (otaList != null && otaList.size() > 0) { OtaEntity otaBefore = otaList.get(0); entity.setId(otaBefore.getId()); baseDao.updateById(entity); return true; } return baseDao.insert(entity) > 0; } @Override public OtaEntity getLatestOta(String type) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("type", type) .orderByDesc("update_date") .last("LIMIT 1"); return baseDao.selectOne(wrapper); } }