package com.nova.sankuai.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nova.sankuai.domain.dto.AddChannelCityLinkDto; import com.nova.sankuai.domain.dto.QueryChannelCityLinkPageDto; import com.nova.sankuai.domain.dto.UpdateChannelCityLinkDto; import com.nova.sankuai.domain.entity.ChannelCityLink; import com.nova.sankuai.domain.entity.City; import com.nova.sankuai.domain.vo.ChannelCityLinkListVo; import com.nova.sankuai.infra.config.CommonException; import com.nova.sankuai.infra.mapper.ChannelCityLinkMapper; import com.nova.sankuai.infra.mapper.CityMapper; import com.nova.sankuai.infra.utils.PageUtil; import com.nova.sankuai.service.ChannelCityLinkService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Service @Slf4j @AllArgsConstructor public class ChannelCityLinkServiceImpl extends ServiceImpl implements ChannelCityLinkService { private final PageUtil pageUtil; private final ChannelCityLinkMapper channelCityLinkMapper; private final CityMapper cityMapper; @Override @Transactional(rollbackFor = Exception.class) public void addChannelCityLink(AddChannelCityLinkDto channelCityLinkDto) { List cityIds = channelCityLinkDto.getCityIds(); if (cityIds == null || cityIds.isEmpty()) { throw new CommonException("请至少添加一个城市"); } List cityIdsSelect = channelCityLinkMapper.getCityIds(channelCityLinkDto.getChannelId()); if (!cityIdsSelect.isEmpty() && cityIdsSelect != null) { for (String cityId : cityIds) { if (cityIdsSelect.contains(cityId)){ City city = cityMapper.selectOne(new LambdaQueryWrapper().eq(City::getCityId, cityId)); throw new CommonException(city.getName()+"已存在下载链接"); } } } ArrayList channelCityLinks = new ArrayList<>(); cityIds.stream().map(item -> { ChannelCityLink channelCityLink = new ChannelCityLink(); channelCityLink.setAndroidLink(channelCityLinkDto.getAndroidLink()); channelCityLink.setChannelId(channelCityLinkDto.getChannelId()); channelCityLink.setCityId(item); channelCityLink.setIosLink(channelCityLinkDto.getIosLink()); channelCityLink.setCreationDate(new Date()); channelCityLink.setLastUpdateDate(new Date()); channelCityLinks.add(channelCityLink); return item; }).collect(Collectors.toList()); boolean save = saveBatch(channelCityLinks); if (!save) { throw new CommonException("添加失败"); } } @Override public void updateChannelCityLink(UpdateChannelCityLinkDto channelCityLinkDto) { ChannelCityLink byId = getById(channelCityLinkDto.getId()); if (byId == null) { throw new CommonException("未查询到该渠道城市下载地址"); } LambdaUpdateWrapper channelCityLinkLambdaUpdateWrapper = Wrappers.lambdaUpdate(); channelCityLinkLambdaUpdateWrapper.set(ChannelCityLink::getAndroidLink, channelCityLinkDto.getAndroidLink()); channelCityLinkLambdaUpdateWrapper.set(ChannelCityLink::getIosLink, channelCityLinkDto.getIosLink()); channelCityLinkLambdaUpdateWrapper.set(ChannelCityLink::getLastUpdateDate, new Date()); channelCityLinkLambdaUpdateWrapper.eq(ChannelCityLink::getId, channelCityLinkDto.getId()); boolean update = update(channelCityLinkLambdaUpdateWrapper); if (!update) { throw new CommonException("修改失败"); } } @Override public void deleteChannelCityLink(String id) { boolean update = update(Wrappers.lambdaUpdate().set(ChannelCityLink::getIsDelete, 1) .eq(ChannelCityLink::getId, id)); if (!update) { throw new CommonException("删除失败"); } } @Override public IPage getChannelCityLink(QueryChannelCityLinkPageDto cityLinkPageDto) { Page page = pageUtil.getPage(cityLinkPageDto); IPage channelCityLinkListVoIPage = channelCityLinkMapper.pageChannelCityLink(page, cityLinkPageDto.getChannelId()); return channelCityLinkListVoIPage; } }