yujian
2020-01-18 f4a0f2acc63d7785eab108419a4e16f5f688cb95
fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SwiperPictureServiceImpl.java
@@ -1,24 +1,35 @@
package com.yeshi.fanli.service.impl.homemodule;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.yeshi.utils.tencentcloud.COSManager;
import com.yeshi.fanli.dao.mybatis.homemodule.SwiperPictureMapper;
import com.yeshi.fanli.entity.AppVersionInfo;
import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl;
import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl.AdActivityType;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
import com.yeshi.fanli.exception.NotExistObjectException;
import com.yeshi.fanli.entity.common.JumpDetailV2;
import com.yeshi.fanli.exception.banner.SwiperPictureException;
import com.yeshi.fanli.service.inter.config.SystemConfigService;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.AppVersionService;
import com.yeshi.fanli.service.inter.homemodule.AdActivityVersionControlService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.StringUtil;
@Service
@@ -26,94 +37,124 @@
   @Resource
   private SwiperPictureMapper swiperPictureMapper;
   @Resource
   private SystemConfigService systemConfigService;
   @Override
   public int deleteByPrimaryKey(Long id) throws SwiperPictureException{
      return swiperPictureMapper.deleteByPrimaryKey(id);
   }
   private JumpDetailV2Service jumpDetailV2Service;
   @Resource
   private AdActivityVersionControlService adActivityVersionControlService;
   @Resource
   private AppVersionService appVersionService;
   @Override
   public int insert(SwiperPicture record) throws SwiperPictureException{
      return swiperPictureMapper.insert(record);
   }
   @Override
   public int insertSelective(SwiperPicture record) throws SwiperPictureException{
   public int insertSelective(SwiperPicture record) {
      return swiperPictureMapper.insertSelective(record);
   }
   @Override
   public SwiperPicture selectByPrimaryKey(Long id) throws SwiperPictureException{
   public SwiperPicture selectByPrimaryKey(Long id) {
      return swiperPictureMapper.selectByPrimaryKey(id);
   }
   @Override
   public int updateByPrimaryKeySelective(SwiperPicture record) throws SwiperPictureException{
   public int updateByPrimaryKeySelective(SwiperPicture record) {
      return swiperPictureMapper.updateByPrimaryKeySelective(record);
   }
   @Override
   public int updateByPrimaryKey(SwiperPicture record) throws SwiperPictureException{
   public int updateByPrimaryKey(SwiperPicture record) {
      return swiperPictureMapper.updateByPrimaryKey(record);
   }
   @Override
   public List<SwiperPicture> queryByBannerID(long start, int count, Long bannerId) throws SwiperPictureException{
   public List<SwiperPicture> queryByBannerID(long start, int count, Long bannerId) throws SwiperPictureException {
      return swiperPictureMapper.queryByBannerID(start, count, bannerId);
   }
   @Override
   public long countQueryByBannerID(Long bannerId) throws SwiperPictureException{
   public long countQueryByBannerID(Long bannerId) throws SwiperPictureException {
      return swiperPictureMapper.countQueryByBannerID(bannerId);
   }
   @Override
   public void save(SwiperPicture record) throws SwiperPictureException{
   public void saveObject(MultipartFile file, SwiperPicture record, String jumpType)
         throws SwiperPictureException, Exception {
      if (record == null) {
         throw new SwiperPictureException(1, "参数不能为空");
      }
      Long bannerId = record.getBannerId();
      if (bannerId == null) {
         throw new SwiperPictureException(1, "标识管理ID不能为空");
      }
      String params = record.getParams();
      if (!StringUtil.isNullOrEmpty(params)) {
         try {
            String jumpValue = systemConfigService.get("jump");
            if (StringUtil.isNullOrEmpty(jumpValue)) {
               jumpValue = "{\"url\":\"#\"}";
            }
            params = jumpValue.replace("#", params);
         } catch (NotExistObjectException e) {
            e.printStackTrace();
      if (params == null || params.trim().length() == 0 || "null".equalsIgnoreCase(params)) {
         record.setParams(null);
      } else if (!StringUtil.isJson(params)) {
         throw new SwiperPictureException(1, "跳转参数非JSON格式");
      } else {
         record.setParams(params.trim());
      }
      if (!StringUtil.isNullOrEmpty(jumpType)) {
         List<JumpDetailV2> listByType = jumpDetailV2Service.listByType(jumpType);
         if (listByType != null && listByType.size() > 0) {
            record.setJumpDetail(listByType.get(0));
         }
      }
      try {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
         String startTime_str = record.getStartTime_str();
         if (startTime_str != null && startTime_str.trim().length() > 0) {
            startTime_str = startTime_str.replaceAll("T", " ");
            record.setStartTime(format.parse(startTime_str));
         }
         String endTime_str = record.getEndTime_str();
         if (endTime_str != null && endTime_str.trim().length() > 0) {
            endTime_str = endTime_str.replaceAll("T", " ");
            record.setEndTime(format.parse(endTime_str));
         }
      } catch (ParseException e) {
         e.printStackTrace();
      }
      String remark = record.getRemark();
      if (remark != null && (remark.trim().length() == 0 || remark.equalsIgnoreCase("null"))) {
         record.setRemark(null);
      }
      String picture = null;
      if (file != null) {
         picture = uploadPicture(file);
      }
      Long id = record.getId();
      if (id == null) {
         // 新增
         int maxOrder = swiperPictureMapper.getMaxOrderByBannerID(bannerId);
         record.setOrder(maxOrder + 1);
         Integer state = record.getState();
         // 默认停用
         record.setState(1);
         // 默认非系统控制
         record.setAutoControl(1);
         // 默认非登陆
         record.setJumpNeedLogin(false);
         if (state == null) {
            record.setState(1);
         }
         Integer autoControl = record.getAutoControl();
         if (autoControl == null) {
            // 默认非系统控制
            record.setAutoControl(1);
         }
         record.setCreatetime(new Date());
         record.setUpdatetime(new Date());
         record.setSrc(picture);
         swiperPictureMapper.insert(record);
      } else {
         // 修改
@@ -121,67 +162,94 @@
         if (resultObj == null) {
            throw new SwiperPictureException(1, "参数不能为空");
         }
         if (picture != null && picture.trim().length() > 0) {
            // 删除已存在图片
            removePicture(resultObj);
            record.setSrc(picture);
         } else {
            record.setSrc(resultObj.getSrc());
         }
         record.setOrder(resultObj.getOrder());
         record.setCreatetime(resultObj.getCreatetime());
         record.setUpdatetime(new Date());
         swiperPictureMapper.updateByPrimaryKey(record);
      }
   }
   /**
    * 上传图片
    *
    * @param file
    * @return
    * @throws Exception
    */
   public String uploadPicture(MultipartFile file) throws Exception {
      // 文件解析
      InputStream inputStream = file.getInputStream();
      String contentType = file.getContentType();
      String type = contentType.substring(contentType.indexOf("/") + 1);
      // 文件路径
      String filePath = FilePathEnum.swiper.getPath() + UUID.randomUUID().toString().replace("-", "") + "." + type;
      // 执行上传
      String fileLink = COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
      return fileLink;
   }
   /**
    * 删除图片-不更新数据库
    *
    * @param record
    * @throws Exception
    */
   public void removePicture(SwiperPicture record) throws Exception {
      String picture = record.getSrc();
      if (picture != null && picture.trim().length() > 0) {
         COSManager.getInstance().deleteFile(picture);
      }
   }
   @Override
   @Transactional
   public int deleteBatchByPrimaryKey(List<Long> list) throws SwiperPictureException{
   @Transactional(rollbackFor = Exception.class)
   public int deleteBatchByPrimaryKey(List<Long> list) throws SwiperPictureException {
      List<SwiperPicture> listSwiper = swiperPictureMapper.queryByListPrimaryKey(list);
      for (SwiperPicture swiperPicture: listSwiper) {
      for (SwiperPicture swiperPicture : listSwiper) {
         String src = swiperPicture.getSrc();
         if (!StringUtil.isNullOrEmpty(src)) {
            COSManager.getInstance().deleteFile(src);
         }
      }
      if (listSwiper != null)
         for (SwiperPicture picture : listSwiper) {
            List<AdActivityVersionControl> versionList = adActivityVersionControlService
                  .listByTypeAndSourceId(AdActivityType.banner, picture.getId());
            if (versionList != null)
               for (AdActivityVersionControl control : versionList)
                  adActivityVersionControlService.deleteByPrimaryKey(control.getId());
         }
      return swiperPictureMapper.deleteBatchByPrimaryKey(list);
   }
   @Override
   public int deleteBatchByBannerID(List<Long> list) throws SwiperPictureException{
   public int deleteBatchByBannerID(List<Long> list) throws SwiperPictureException {
      return swiperPictureMapper.deleteBatchByBannerID(list);
   }
   @Override
   public List<SwiperPicture> queryByListBannerID(List<Long> list) throws Exception{
   public List<SwiperPicture> queryByListBannerID(List<Long> list) throws Exception {
      return swiperPictureMapper.queryByListBannerID(list);
   }
   @Override
   public void uploadPicture(MultipartFile file, SwiperPicture record) throws Exception {
      InputStream inputStream = file.getInputStream();
      String contentType = file.getContentType();
      String type = contentType.substring(contentType.indexOf("/") + 1);
      // 上传文件相对位置
      String fileUrl="swiperPic/"+UUID.randomUUID().toString().replace("-", "") + "." + type;
      /*  修改图片时,先删除已存在图片  */
      String src = record.getSrc();
      if (!StringUtil.isNullOrEmpty(src)) {
         COSManager.getInstance().deleteFile(src);
      }
      String uploadFilePath = COSManager.getInstance().uploadFile(inputStream, fileUrl).getUrl();
      /*  更新数据库信息  */
      if (!StringUtil.isNullOrEmpty(uploadFilePath)) {
         record.setSrc(uploadFilePath);
         record.setUpdatetime(new Date());
         updateByPrimaryKeySelective(record);
      }
   }
   @Override
   public List<SwiperPicture> getOrderByBannerID(Long bannerId, Integer type, Integer order) throws SwiperPictureException {
   public List<SwiperPicture> getOrderByBannerID(Long bannerId, Integer type, Integer order) {
      return swiperPictureMapper.getOrderByBannerID(bannerId, type, order);
   }
@@ -189,12 +257,133 @@
   public int getMaxOrderByBannerID(Long bannerId) throws SwiperPictureException {
      return swiperPictureMapper.getMaxOrderByBannerID(bannerId);
   }
   @Override
   @Cacheable(value = "bannerCache", key = "'getByBannerCard-'+#card")
   public List<SwiperPicture> getByBannerCard(String card) throws SwiperPictureException {
      return swiperPictureMapper.getByBannerCard(card);
   public List<SwiperPicture> getByBannerCard(String card) {
      List<SwiperPicture> list = swiperPictureMapper.getByBannerCard(card);
      if (list != null && list.size() > 0) {
         for (SwiperPicture swiperPicture : list) {
            boolean needLogin = swiperPicture.isJumpNeedLogin();
            JumpDetailV2 jumpDetail = swiperPicture.getJumpDetail();
            if (jumpDetail != null) {
               jumpDetail.setNeedLogin(needLogin);
               swiperPicture.setJumpDetail(jumpDetail);
            }
         }
      }
      return list;
   }
}
   /**
    * 专题版本过滤
    *
    * @param list
    * @param platform
    * @param versionCode
    */
   private void filterSwipePicture(List<SwiperPicture> list, String platform, int versionCode) {
      if (list == null || list.size() == 0)
         return;
      AppVersionInfo app = appVersionService.getClientVersion(platform, versionCode);
      if (app == null) {
         list.clear();
         return;
      }
      List<Long> versionIdList = new ArrayList<>();
      versionIdList.add(app.getId());
      List<Long> sourceIdList = new ArrayList<>();
      for (SwiperPicture picture : list) {
         sourceIdList.add(picture.getId());
      }
      Set<Long> sourceIds = adActivityVersionControlService.filterSourceIdByVersion(sourceIdList,
            AdActivityType.banner, versionIdList);
      for (int i = 0; i < list.size(); i++) {
         if (!sourceIds.contains(list.get(i).getId())) {
            list.remove(i--);
         }
      }
   }
   @Cacheable(value = "bannerCache", key = "'getByBannerCardAndVersion-'+#card+'-'+#platform+'-'+#version")
   @Override
   public List<SwiperPicture> getByBannerCardAndVersion(String card, String platform, int version) {
      List<SwiperPicture> list = swiperPictureMapper.getByBannerCard(card);
      filterSwipePicture(list, platform, version);
      for (SwiperPicture picture : list) {
         if (picture.isJumpNeedLogin() && picture.getJumpDetail() != null) {
            picture.getJumpDetail().setNeedLogin(true);
         }
      }
      return list;
   }
   @Override
   @Cacheable(value = "bannerCache", key = "'getByBannerId-'+#bannerId")
   public List<SwiperPicture> getByBannerId(Long bannerId) {
      return swiperPictureMapper.getByBannerId(bannerId);
   }
   @Cacheable(value = "bannerCache", key = "'getByBannerId-'+#bannerId+'-'+#platform+'-'+#version")
   @Override
   public List<SwiperPicture> getByBannerId(Long bannerId, String platform, int version)
         throws SwiperPictureException {
      List<SwiperPicture> pictureList = swiperPictureMapper.getByBannerId(bannerId);
      filterSwipePicture(pictureList, platform, version);
      return pictureList;
   }
   @Transactional(rollbackFor = Exception.class)
   @Override
   public void setVersions(Long id, List<Long> versions) throws SwiperPictureException {
      SwiperPicture swiperPicture = selectByPrimaryKey(id);
      if (swiperPicture == null) {
         throw new SwiperPictureException(1, "Banner不存在");
      }
      Set<Long> oldSet = new HashSet<>();
      List<AdActivityVersionControl> versionList = adActivityVersionControlService
            .listByTypeAndSourceId(AdActivityType.banner, swiperPicture.getId());
      if (versionList != null) {
         for (AdActivityVersionControl control : versionList)
            oldSet.add(control.getVersion().getId());
      }
      Set<Long> newSet = new HashSet<>();
      for (Long version : versions) {
         newSet.add(version);
      }
      Set<Long> delSet = new HashSet<>();
      delSet.addAll(oldSet);
      delSet.removeAll(newSet);
      for (Long versionId : delSet) {
         // 根据
         adActivityVersionControlService.deleteBySourceAndVersion(id, AdActivityType.banner, versionId);
      }
      Set<Long> addSet = new HashSet<>();
      addSet.addAll(newSet);
      addSet.removeAll(oldSet);
      // 添加映射
      for (Long versionId : addSet) {
         AdActivityVersionControl control = new AdActivityVersionControl();
         control.setCreateTime(new Date());
         control.setSourceId(swiperPicture.getId());
         control.setType(AdActivityType.banner);
         control.setVersion(new AppVersionInfo(versionId));
         try {
            adActivityVersionControlService.addVersionControl(control);
         } catch (Exception e) {
            throw new SwiperPictureException(2, e.getMessage());
         }
      }
   }
}