| | |
| | | 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.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.dao.user.UserInfoDao;
|
| | | 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
|
| | |
| | | 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) {
|
| | |
| | | }
|
| | |
|
| | | @Override
|
| | | public List<String> getUserSpreadImg(Long uid) {
|
| | | public List<String> getUserSpreadImg(Long uid, HttpServletRequest request) {
|
| | | List<String> imgList = new ArrayList<>();
|
| | |
|
| | | // 查询当前用户的推广图
|
| | |
| | |
|
| | | 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);
|
| | |
| | | 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) {
|
| | | // 查询是否存在
|
| | |
| | | // }
|
| | |
|
| | | // 生成
|
| | | 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();
|
| | |
| | |
|
| | | @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();
|
| | |
| | |
|
| | | @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;
|
| | | } |
| | | }
|