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;
|
import java.util.Date;
|
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.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;
|
|
@Service
|
public class SpreadUserImgServiceImpl implements SpreadUserImgService {
|
|
@Resource
|
private SpreadUserImgMapper spreadUserImgMapper;
|
|
@Resource
|
private SpreadImgMapper spreadImgMapper;
|
|
@Resource
|
private QrCodeService qrCodeService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private SpreadImgService spreadImgService;
|
|
|
|
|
@Override
|
public void addUserInviteImg(Long uid, String imgUrl) {
|
SpreadUserImg spreadUserImg = new SpreadUserImg();
|
spreadUserImg.setUid(uid);
|
spreadUserImg.setUrl(imgUrl); // 服务器上的url地址
|
spreadUserImg.setType(0);
|
spreadUserImg.setCreatetime(new Date());
|
spreadUserImgMapper.insertSelective(spreadUserImg);
|
}
|
|
@Override
|
public List<String> getImgUrlList(Long uid) {
|
return spreadUserImgMapper.getImgUrlList(uid);
|
}
|
|
@Override
|
public int imgUrlCount(Long uid) {
|
return spreadUserImgMapper.imgUrlCount(uid);
|
}
|
|
@Override
|
public void deleteImgUrl(Long uid) {
|
// 先删除远程文件
|
List<String> urlList = getImgUrlList(uid);
|
spreadUserImgMapper.deleteImgUrl(uid);
|
if (urlList != null)
|
for (String img : urlList) {
|
COSManager.getInstance().deleteFile(img);
|
}
|
}
|
|
// 获取图片的MD5值
|
private String getSpreadUserImgMD5(String url) {
|
// https://ec-1255749512.file.myqcloud.com/ercode/ercode_578435_16a56f70b2b74aae9277f0e87a242f47.jpg
|
String imgName = url.split("_")[url.split("_").length - 1];
|
return imgName.replace(".jpg", "").replace(".png", "");
|
}
|
|
// 获取图片的MD5值
|
private String getSpreadImgMD5(String url) {
|
// https://ec-1255749512.file.myqcloud.com/16a56f70b2b74aae9277f0e87a242f47.png
|
String imgName = url.split("/")[url.split("/").length - 1];
|
return imgName.substring(0, imgName.indexOf("."));
|
}
|
|
@Override
|
public List<String> getUserSpreadImg(Long uid, HttpServletRequest request) {
|
List<String> imgList = new ArrayList<>();
|
|
// 查询当前用户的推广图
|
List<SpreadUserImg> spreadUserImgList = spreadUserImgMapper.listByUid(uid);
|
// 查询系统的推广图
|
List<SpreadImg> spreadImgList = spreadImgMapper.listAll();
|
|
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())
|
for (int i = 0; i < spreadUserImgList.size(); i++) {
|
if (!spreadUserImgList.get(i).getMd5().equalsIgnoreCase(spreadImgList.get(i).getMd5())) {
|
equal = false;
|
break;
|
}
|
}
|
else
|
equal = false;
|
|
// 没有更改
|
if (equal) {
|
for (SpreadUserImg userImg : spreadUserImgList)
|
imgList.add(userImg.getUrl());
|
return imgList;
|
}
|
|
// 有过更改
|
|
List<String> spreadUserMD5List = new ArrayList<>();
|
for (SpreadUserImg userImg : spreadUserImgList)
|
spreadUserMD5List.add(userImg.getMd5());
|
List<String> spreadMD5List = new ArrayList<>();
|
for (SpreadImg img : spreadImgList)
|
spreadMD5List.add(img.getMd5());
|
// 删除多余的
|
|
// 获取交集
|
List<String> ilist = ListUtil.getIntersection(spreadUserMD5List, spreadMD5List);
|
|
// 获取多余的集合
|
List<String> extraList = ListUtil.getDifference(spreadUserMD5List, ilist);
|
|
for (String md5 : extraList) {
|
for (SpreadUserImg img : spreadUserImgList)
|
if (img.getMd5().equalsIgnoreCase(md5)) {
|
spreadUserImgMapper.deleteByPrimaryKey(img.getId());
|
break;
|
}
|
}
|
|
List<String> dlist = ListUtil.getDifference(spreadMD5List, ilist);
|
|
UserInfo user = null;
|
if (dlist != null && dlist.size() > 0)
|
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 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);
|
}
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
} // 背景图
|
break;
|
}
|
}
|
|
// 重新查询
|
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) {
|
// 查询是否存在
|
// String md5 = getSpreadImgMD5(bgImg);
|
// List<SpreadUserImg> spreadUserImgList = spreadUserImgDao.list("from
|
// SpreadUserImg su where su.uid=" + uid);
|
// for (SpreadUserImg img : spreadUserImgList) {
|
// img.setMd5(getSpreadUserImgMD5(img.getUrl()));
|
// if (md5.equalsIgnoreCase(getSpreadUserImgMD5(img.getUrl())))
|
// return img.getUrl();// 原来存在
|
// }
|
|
// 生成
|
UserInfo user = userInfoService.selectByPKey(uid);
|
try {
|
String imgUrl = qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait(), null);
|
return imgUrl;
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
@Override
|
public String getUserSpreadImg(Long uid, String bgImg, int erCodePostionX, int erCodePostionY, int erCodeSize) {
|
UserInfo user = userInfoService.selectByPKey(uid);
|
try {
|
String imgUrl = qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait(), erCodePostionX,
|
erCodePostionY, erCodeSize, null);
|
return imgUrl;
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
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;
|
}
|
|
}
|