package com.yeshi.fanli.service.impl.user; import java.io.IOException; 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 org.springframework.stereotype.Service; 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.entity.bus.invite.SpreadImg; import com.yeshi.fanli.entity.bus.invite.SpreadUserImg; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.service.inter.user.QrCodeService; import com.yeshi.fanli.service.inter.user.SpreadUserImgService; import com.yeshi.fanli.util.Constant; 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; @Resource private QrCodeService qrCodeService; @Resource private UserInfoDao userInfoDao; @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()); spreadUserImgDao.save(spreadUserImg); } @Override public List getImgUrlList(Long uid) { return spreadUserImgMapper.getImgUrlList(uid); } @Override public int imgUrlCount(Long uid) { return spreadUserImgMapper.imgUrlCount(uid); } @Override public void deleteImgUrl(Long uid) { // 先删除远程文件 List 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 getUserSpreadImg(Long uid) { List imgList = new ArrayList<>(); // 查询当前用户的推广图 List spreadUserImgList = spreadUserImgDao.list("from SpreadUserImg su where su.uid=" + uid); // 查询系统的推广图 List spreadImgList = spreadImgDao.list("from SpreadImg"); for (SpreadUserImg img : spreadUserImgList) { img.setMd5(getSpreadUserImgMD5(img.getUrl())); } for (SpreadImg img : spreadImgList) { img.setMd5(getSpreadImgMD5(img.getUrl())); } Comparator cmSpreadImg = new Comparator() { @Override public int compare(SpreadImg o1, SpreadImg o2) { return o1.getMd5().compareTo(o2.getMd5()); } }; Comparator cmUserSpreadImg = new Comparator() { @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 spreadUserMD5List = new ArrayList<>(); for (SpreadUserImg userImg : spreadUserImgList) spreadUserMD5List.add(userImg.getMd5()); List spreadMD5List = new ArrayList<>(); for (SpreadImg img : spreadImgList) spreadMD5List.add(img.getMd5()); // 删除多余的 // 获取交集 List ilist = ListUtil.getIntersection(spreadUserMD5List, spreadMD5List); // 获取多余的集合 List extraList = ListUtil.getDifference(spreadUserMD5List, ilist); for (String md5 : extraList) { for (SpreadUserImg img : spreadUserImgList) if (img.getMd5().equalsIgnoreCase(md5)) { spreadUserImgDao.delete(img); break; } } List dlist = ListUtil.getDifference(spreadMD5List, ilist); UserInfo user = null; if (dlist != null && dlist.size() > 0) user = userInfoDao.find(UserInfo.class, uid); // 添加原来没有的 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()); if (!StringUtil.isNullOrEmpty(imgUrl)) { if (imgUrl != null) { addUserInviteImg(uid, imgUrl); } } } catch (IOException e) { e.printStackTrace(); } // 背景图 break; } } // 重新查询 spreadUserImgList = spreadUserImgDao.list("from SpreadUserImg su where su.uid=" + uid); imgList.clear(); if (spreadUserImgList != null) for (SpreadUserImg img : spreadUserImgList) imgList.add(img.getUrl()); return imgList; } @Override public String getUserSpreadImg(Long uid, String bgImg) { // 查询是否存在 // String md5 = getSpreadImgMD5(bgImg); // List 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 = userInfoDao.find(UserInfo.class, uid); try { String imgUrl = qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait()); 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 = userInfoDao.find(UserInfo.class, uid); try { String imgUrl = qrCodeService.drawInviteQrCode(bgImg, uid, user.getPortrait(), erCodePostionX, erCodePostionY, erCodeSize); return imgUrl; } catch (IOException e) { e.printStackTrace(); } return null; } @Override public int countUserSpreadImg(Long uid) { return (int) (spreadUserImgDao.getCount("select count(*) from SpreadUserImg u where u.uid=" + uid)); } }