admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java
@@ -1,6 +1,9 @@
package com.yeshi.fanli.service.impl.user;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -8,8 +11,10 @@
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.ListUtil;
import org.yeshi.utils.tencentcloud.COSManager;
@@ -18,12 +23,14 @@
import com.yeshi.fanli.entity.bus.invite.SpreadImg;
import com.yeshi.fanli.entity.bus.invite.SpreadUserImg;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.SpreadImgService;
import com.yeshi.fanli.service.inter.user.QrCodeService;
import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.StringUtil;
@Service
@@ -43,6 +50,9 @@
   @Resource
   private UserInfoExtraService userInfoExtraService;
   @Resource
   private SpreadImgService spreadImgService;
   @Override
   public void addUserInviteImg(Long uid, String imgUrl) {
@@ -90,7 +100,7 @@
   }
   @Override
   public List<String> getUserSpreadImg(Long uid) {
   public List<String> getUserSpreadImg(Long uid, HttpServletRequest request) {
      List<String> imgList = new ArrayList<>();
      // 查询当前用户的推广图
@@ -173,6 +183,15 @@
         user = userInfoService.selectByPKey(uid);
      String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
      // 缓存路径
      String rootPath = request.getSession().getServletContext().getRealPath("/").replace("\\", "/");
      String projectName = request.getContextPath();
      String path = rootPath.replace(projectName, "/temp");
      File f = new File(path);
      if (!f.exists())
         f.mkdirs();
      // 添加原来没有的
      for (String md5 : dlist) {
         for (SpreadImg img : spreadImgList)
@@ -184,7 +203,25 @@
                     portrait = Constant.systemCommonConfig.getDefaultPortrait();
                  }
                  
                  String imgUrl = qrCodeService.drawInviteQrCodeNew(img.getUrl(), uid, portrait, null, null, null, inviteCode);
                  // 背景图片缓存
                  int index = img.getUrl().lastIndexOf("/");
                  String fileName = img.getUrl().substring(index + 1);
                  InputStream inputStream = null;
                  String cachePath = path  +  fileName;
                  File file = new File(cachePath);
                  if (file.exists()) {
                     inputStream = new FileInputStream(file);
                  } else {
                     // 网络下载
                     InputStream input = HttpUtil.getAsInputStream(img.getUrl());
                     // 缓存本地
                     FileUtil.saveAsFile(input, cachePath);
                     // 获取流
                     inputStream = new FileInputStream(file);
                  }
                  String imgUrl = qrCodeService.drawInviteQrCodeNew(inputStream, fileName, uid, portrait, null, null, null, inviteCode);
                  if (!StringUtil.isNullOrEmpty(imgUrl)) {
                     if (imgUrl != null) {
                        addUserInviteImg(uid, imgUrl);
@@ -205,6 +242,169 @@
            imgList.add(img.getUrl());
      return imgList;
   }
   @Override
   public List<String> getUserSpreadImgToPage(Long uid, int page, int count, HttpServletRequest request) {
      // 查询系统的推广图
      List<SpreadImg> spreadImgList = spreadImgService.listAll();
      //用户的已生成推广图
      List<SpreadUserImg> spreadUserImgList = spreadUserImgMapper.listByUid(uid);
      for (SpreadUserImg img : spreadUserImgList) {
         img.setMd5(getSpreadUserImgMD5(img.getUrl()));
      }
      for (SpreadImg img : spreadImgList) {
         img.setMd5(getSpreadImgMD5(img.getUrl()));
      }
      Comparator<SpreadImg> cmSpreadImg = new Comparator<SpreadImg>() {
         @Override
         public int compare(SpreadImg o1, SpreadImg o2) {
            return o1.getMd5().compareTo(o2.getMd5());
         }
      };
      Comparator<SpreadUserImg> cmUserSpreadImg = new Comparator<SpreadUserImg>() {
         @Override
         public int compare(SpreadUserImg o1, SpreadUserImg o2) {
            return o1.getMd5().compareTo(o2.getMd5());
         }
      };
      Collections.sort(spreadUserImgList, cmUserSpreadImg);
      Collections.sort(spreadImgList, cmSpreadImg);
      boolean equal = true;
      if (spreadUserImgList.size() != spreadImgList.size()) {
         equal = false;
      } else {
         for (int i = 0; i < spreadUserImgList.size(); i++) {
            if (!spreadUserImgList.get(i).getMd5().equalsIgnoreCase(spreadImgList.get(i).getMd5())) {
               equal = false;
               break;
            }
         }
      }
      // 分页处理
      int start = 0;
      if (page > 1)
         start = 3;
      List<String> imgList = new ArrayList<>();
      if (equal) {
         for (; start < spreadUserImgList.size() && start < count; start++) {
            imgList.add(spreadUserImgList.get(start).getUrl());
         }
         return imgList;
      }
      String path = null;
      if (page == 1) {
         // 删除多余历史数据
         for (int j = 0; j < spreadUserImgList.size(); j++) {
            boolean needRemove = true;
            SpreadUserImg userImg = spreadUserImgList.get(j);
            String imgMD5User = getSpreadUserImgMD5(userImg.getUrl());
            for (int i = 0; i < spreadImgList.size(); i++) {
               String imgMD5 = getSpreadImgMD5(spreadImgList.get(i).getUrl());
               if (imgMD5.equalsIgnoreCase(imgMD5User)) {
                  needRemove = false;
                  break;
               }
            }
            if (needRemove) {
               spreadUserImgMapper.deleteByPrimaryKey(userImg.getId());
               spreadUserImgList.remove(j);
               j--;
            }
         }
         // 缓存路径
         String rootPath = request.getSession().getServletContext().getRealPath("/").replace("\\", "/");
         String projectName = request.getContextPath();
         path = rootPath.replace(projectName, "/temp");
         File f = new File(path);
         if (!f.exists())
            f.mkdirs();
      }
      // 用户头像
      UserInfo user = userInfoService.selectByPKey(uid);
      String portrait = user.getPortrait();
      if (StringUtil.isNullOrEmpty(portrait)) {
         portrait = Constant.systemCommonConfig.getDefaultPortrait();
      }
      // 邀请码
      String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
      for (; start < spreadImgList.size() && start < count; start++) {
         String url =  null;
         SpreadImg spreadImg = spreadImgList.get(start);
         String imgMD5 = getSpreadImgMD5(spreadImg.getUrl());
         for (int j = 0; j < spreadUserImgList.size(); j++) {
            String imgMD5User = getSpreadUserImgMD5(spreadUserImgList.get(j).getUrl());
            if (imgMD5.equalsIgnoreCase(imgMD5User)) {
               url = spreadUserImgList.get(j).getUrl();
               break;
            }
         }
         if (!StringUtil.isNullOrEmpty(url)) {
            imgList.add(url);
         } else {
            url = getInviteImgUrl(uid, portrait, inviteCode, imgMD5, spreadImg.getUrl(), path);
            if (!StringUtil.isNullOrEmpty(url)) {
               addUserInviteImg(uid, url);
               imgList.add(url);
            }
         }
      }
      return imgList;
   }
   /**
    * 邀请图画图
    * @param uid
    * @param portrait
    * @param inviteCode
    * @param urlMd5
    * @param url
    * @param path
    * @return
    */
   private String getInviteImgUrl (Long uid, String portrait, String inviteCode, String urlMd5, String url, String path) {
      try {
         InputStream inputStream = null;
         String cachePath = path  +  urlMd5;
         File file = new File(cachePath);
         if (file.exists()) {
            inputStream = new FileInputStream(file);
         } else {
            // 网络下载
            InputStream input = HttpUtil.getAsInputStream(url);
            // 缓存本地
            FileUtil.saveAsFile(input, cachePath);
            // 获取流
            inputStream = new FileInputStream(file);
         }
         return qrCodeService.drawInviteQrCodeNew(inputStream, urlMd5, uid, portrait, null, null, null, inviteCode);
      } catch (Exception e) {
          LogHelper.errorDetailInfo(e);
      }
      return null;
   }
   @Override
   public String getUserSpreadImg(Long uid, String bgImg) {
@@ -250,7 +450,13 @@
   
   @Override
   public String drawInviteQrCodeNew(String bgImg, Long uid, String portrait, Integer pX, Integer pY, Integer size, String inviteCode) throws Exception {
      return qrCodeService.drawInviteQrCodeNew(bgImg, uid, portrait, pX, pY, size, inviteCode);
      InputStream asInputStream = HttpUtil.getAsInputStream(bgImg);
      int index = bgImg.lastIndexOf("/");
      String newUrl = bgImg.substring(index + 1);
      String urlMd5 = newUrl.substring(0, newUrl.lastIndexOf("."));
      return qrCodeService.drawInviteQrCodeNew(asInputStream, urlMd5, uid, portrait, pX, pY, size, inviteCode);
   }
   
   
@@ -258,4 +464,11 @@
   public String getInviteImgToGreet(String bgImg, Long uid,  String portrait, String inviteCode, String content, Date date) throws Exception {
      return qrCodeService.drawInviteToGreet(bgImg, uid,portrait, inviteCode, content, date);
   }
   private static String getProjectRootPath(){
      String rootPath=Thread.currentThread().getContextClassLoader().getResource("").getPath();
      rootPath = rootPath.substring(1,rootPath.indexOf("WEB-INF"));
      return rootPath;
   }
}