From 98b1a0affd69bbe63223c21fdd2c404e8bedfccb Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 20 五月 2020 17:25:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into 2.1.2

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java |  283 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 259 insertions(+), 24 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java
index 9b236b9..9a6b6e2 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java
+++ b/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,40 +11,48 @@
 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;
 
 import com.yeshi.fanli.dao.mybatis.share.SpreadUserImgMapper;
-import com.yeshi.fanli.dao.user.SpreadImgDao;
-import com.yeshi.fanli.dao.user.SpreadUserImgDao;
-import com.yeshi.fanli.dao.user.UserInfoDao;
+import com.yeshi.fanli.dao.mybatis.user.SpreadImgMapper;
 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.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;
-import org.yeshi.utils.ListUtil;
-import org.yeshi.utils.tencentcloud.COSManager;
 
 @Service
 public class SpreadUserImgServiceImpl implements SpreadUserImgService {
 
 	@Resource
-	private SpreadUserImgDao spreadUserImgDao;
-
-	@Resource
 	private SpreadUserImgMapper spreadUserImgMapper;
 
 	@Resource
-	private SpreadImgDao spreadImgDao;
+	private SpreadImgMapper spreadImgMapper;
 
 	@Resource
 	private QrCodeService qrCodeService;
 
 	@Resource
-	private UserInfoDao userInfoDao;
+	private UserInfoService userInfoService;
+
+	@Resource
+	private UserInfoExtraService userInfoExtraService;
+	
+	@Resource
+	private SpreadImgService spreadImgService;
 
 	@Override
 	public void addUserInviteImg(Long uid, String imgUrl) {
@@ -50,7 +61,7 @@
 		spreadUserImg.setUrl(imgUrl); // 鏈嶅姟鍣ㄤ笂鐨剈rl鍦板潃
 		spreadUserImg.setType(0);
 		spreadUserImg.setCreatetime(new Date());
-		spreadUserImgDao.save(spreadUserImg);
+		spreadUserImgMapper.insertSelective(spreadUserImg);
 	}
 
 	@Override
@@ -89,13 +100,13 @@
 	}
 
 	@Override
-	public List<String> getUserSpreadImg(Long uid) {
+	public List<String> getUserSpreadImg(Long uid, HttpServletRequest request) {
 		List<String> imgList = new ArrayList<>();
 
 		// 鏌ヨ褰撳墠鐢ㄦ埛鐨勬帹骞垮浘
-		List<SpreadUserImg> spreadUserImgList = spreadUserImgDao.list("from SpreadUserImg su where su.uid=" + uid);
+		List<SpreadUserImg> spreadUserImgList = spreadUserImgMapper.listByUid(uid);
 		// 鏌ヨ绯荤粺鐨勬帹骞垮浘
-		List<SpreadImg> spreadImgList = spreadImgDao.list("from SpreadImg");
+		List<SpreadImg> spreadImgList = spreadImgMapper.listAll();
 
 		for (SpreadUserImg img : spreadUserImgList) {
 			img.setMd5(getSpreadUserImgMD5(img.getUrl()));
@@ -160,7 +171,7 @@
 		for (String md5 : extraList) {
 			for (SpreadUserImg img : spreadUserImgList)
 				if (img.getMd5().equalsIgnoreCase(md5)) {
-					spreadUserImgDao.delete(img);
+					spreadUserImgMapper.deleteByPrimaryKey(img.getId());
 					break;
 				}
 		}
@@ -169,16 +180,48 @@
 
 		UserInfo user = null;
 		if (dlist != null && dlist.size() > 0)
-			user = userInfoDao.find(UserInfo.class, uid);
+			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)
 				if (img.getMd5().equalsIgnoreCase(md5)) {
 					// 鐢诲浘
 					try {
-						String imgUrl = qrCodeService.drawInviteQrCode(img.getUrl(), uid,
-								StringUtil.isNullOrEmpty(user.getPortrait())
-										? Constant.systemCommonConfig.getDefaultPortrait() : user.getPortrait());
+						String portrait = user.getPortrait();
+						if (StringUtil.isNullOrEmpty(portrait)) {
+							portrait = Constant.systemCommonConfig.getDefaultPortrait();
+						}
+						
+						// 鑳屾櫙鍥剧墖缂撳瓨
+						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);
@@ -192,13 +235,176 @@
 		}
 
 		// 閲嶆柊鏌ヨ
-		spreadUserImgList = spreadUserImgDao.list("from SpreadUserImg su where su.uid=" + uid);
+		spreadUserImgList = spreadUserImgMapper.listByUid(uid);
 		imgList.clear();
 		if (spreadUserImgList != null)
 			for (SpreadUserImg img : spreadUserImgList)
 				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) {
@@ -213,9 +419,9 @@
 		// }
 
 		// 鐢熸垚
-		UserInfo user = userInfoDao.find(UserInfo.class, uid);
+		UserInfo user = userInfoService.selectByPKey(uid);
 		try {
-			String imgUrl = qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait());
+			String imgUrl = qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait(), null);
 			return imgUrl;
 		} catch (IOException e) {
 			e.printStackTrace();
@@ -225,10 +431,10 @@
 
 	@Override
 	public String getUserSpreadImg(Long uid, String bgImg, int erCodePostionX, int erCodePostionY, int erCodeSize) {
-		UserInfo user = userInfoDao.find(UserInfo.class, uid);
+		UserInfo user = userInfoService.selectByPKey(uid);
 		try {
 			String imgUrl = qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait(), erCodePostionX,
-					erCodePostionY, erCodeSize);
+					erCodePostionY, erCodeSize, null);
 			return imgUrl;
 		} catch (IOException e) {
 			e.printStackTrace();
@@ -236,4 +442,33 @@
 		return null;
 	}
 
+	@Override
+	public int countUserSpreadImg(Long uid) {
+		return (int) (spreadUserImgMapper.imgUrlCount(uid));
+	}
+
+	
+	@Override
+	public String drawInviteQrCodeNew(String bgImg, Long uid, String portrait, Integer pX, Integer pY, Integer size, String inviteCode) throws Exception {
+		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);
+	}
+	
+	
+	@Override
+	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;
+	}	
 }

--
Gitblit v1.8.0