package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.BannerMapper; import com.doumee.dao.business.model.Banner; import com.doumee.service.business.BannerService; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; /** * 轮播图Service实现 * @author rk * @date 2026/04/08 */ @Service public class BannerServiceImpl implements BannerService { @Autowired private BannerMapper bannerMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Override @Transactional(rollbackFor = {Exception.class, BusinessException.class}) public Integer create(Banner banner) { validateBanner(banner, false); LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); banner.setDeleted(Constants.ZERO); banner.setCreateTime(new Date()); banner.setCreateUser(loginUserInfo.getId()); banner.setUpdateTime(new Date()); banner.setUpdateUser(loginUserInfo.getId()); bannerMapper.insert(banner); return banner.getId(); } @Override public void deleteById(Integer id) { bannerMapper.update(new UpdateWrapper().lambda() .set(Banner::getDeleted, Constants.ONE) .eq(Banner::getId, id)); } @Override public void delete(Banner banner) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(banner); bannerMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } for (Integer id : ids) { this.deleteById(id); } } @Override @Transactional(rollbackFor = {Exception.class, BusinessException.class}) public void updateById(Banner banner) { validateBanner(banner, true); LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); banner.setUpdateTime(new Date()); banner.setUpdateUser(loginUserInfo.getId()); bannerMapper.updateById(banner); } @Override public void updateStatus(Banner banner) { if (Objects.isNull(banner) || Objects.isNull(banner.getId()) || Objects.isNull(banner.getStatus())) { throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); banner.setUpdateTime(new Date()); banner.setUpdateUser(loginUserInfo.getId()); bannerMapper.updateById(banner); } @Override public void updateByIdInBatch(List banners) { if (CollectionUtils.isEmpty(banners)) { return; } for (Banner banner : banners) { this.updateById(banner); } } @Override public Banner findById(Integer id) { Banner banner = bannerMapper.selectById(id); if (Objects.isNull(banner)) { throw new BusinessException(ResponseStatus.DATA_EMPTY); } if (StringUtils.isNotBlank(banner.getImgurl())) { String path = getBannerPath(); banner.setImgurlFull(path + banner.getImgurl()); } return banner; } @Override public Banner findOne(Banner banner) { QueryWrapper wrapper = new QueryWrapper<>(banner); return bannerMapper.selectOne(wrapper); } @Override public List findList(Banner banner) { QueryWrapper wrapper = new QueryWrapper<>(banner); return bannerMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); pageWrap.getModel().setDeleted(Constants.ZERO); if (pageWrap.getModel().getDeleted() != null) { queryWrapper.lambda().eq(Banner::getDeleted, pageWrap.getModel().getDeleted()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(Banner::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getPosition() != null) { queryWrapper.lambda().eq(Banner::getPosition, pageWrap.getModel().getPosition()); } if (StringUtils.isNotBlank(pageWrap.getModel().getTitle())) { queryWrapper.lambda().like(Banner::getTitle, pageWrap.getModel().getTitle()); } if (pageWrap.getModel().getType() != null) { queryWrapper.lambda().eq(Banner::getType, pageWrap.getModel().getType()); } for (PageWrap.SortData sortData : pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } PageData result = PageData.from(bannerMapper.selectPage(page, queryWrapper)); if (result != null && result.getRecords() != null) { String path = getBannerPath(); for (Banner b : result.getRecords()) { if (StringUtils.isNotBlank(b.getImgurl())) { b.setImgurlFull(path + b.getImgurl()); } } } return result; } @Override public long count(Banner banner) { QueryWrapper wrapper = new QueryWrapper<>(banner); return bannerMapper.selectCount(wrapper); } @Override public List findListByPosition(Integer position) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Banner::getDeleted, Constants.ZERO) .eq(Banner::getStatus, Constants.ZERO) .eq(Banner::getPosition, position) .orderByAsc(Banner::getSortnum); List list = bannerMapper.selectList(wrapper); if (list != null && !list.isEmpty()) { String path = getBannerPath(); for (Banner b : list) { if (StringUtils.isNotBlank(b.getImgurl())) { b.setImgurlFull(path + b.getImgurl()); } } } return list; } private void validateBanner(Banner banner, boolean requireId) { if (Objects.isNull(banner)) { throw new BusinessException(ResponseStatus.BAD_REQUEST); } if (requireId && Objects.isNull(banner.getId())) { throw new BusinessException(ResponseStatus.BAD_REQUEST); } if (StringUtils.isBlank(banner.getTitle())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "标题不能为空"); } if (StringUtils.isBlank(banner.getImgurl())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "图片不能为空"); } if (Objects.isNull(banner.getStatus())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "状态不能为空"); } if (Objects.isNull(banner.getPosition())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "显示位置不能为空"); } if (Objects.isNull(banner.getType())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "跳转类型不能为空"); } // 跳转类型为1(富文本)或2(外链)时,内容必填 if (!Constants.equalsInteger(banner.getType(), Constants.ZERO) && StringUtils.isBlank(banner.getContent())) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "内容不能为空"); } } private String getBannerPath() { return systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.BANNER_FILES).getCode(); } }