admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java
@@ -1,254 +1,481 @@
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 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.entity.bus.user.UserInfoExtra;
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.util.Constant;
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 UserInfoDao userInfoDao;
   @Resource
   private UserInfoExtraService userInfoExtraService;
   @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) {
      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 = userInfoDao.find(UserInfo.class, uid);
      String inviteCode = null;
      UserInfoExtra extraInfo = userInfoExtraService.getUserInfoExtra(uid);
      if (extraInfo != null) {
         inviteCode = extraInfo.getInviteCode();
      }
      // 添加原来没有的
      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(),
                        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 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 = userInfoDao.find(UserInfo.class, 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 = userInfoDao.find(UserInfo.class, 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));
   }
}
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 com.yeshi.fanli.service.inter.config.SystemConfigService;
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;
    @Resource
    private SystemConfigService systemConfigService;
    @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();
        String defaultPortrait = userInfoService.getDefaultPortrait(uid);
        // 添加原来没有的
        for (String md5 : dlist) {
            for (SpreadImg img : spreadImgList)
                if (img.getMd5().equalsIgnoreCase(md5)) {
                    // 画图
                    try {
                        String portrait = user.getPortrait();
                        if (StringUtil.isNullOrEmpty(portrait)) {
                            portrait = defaultPortrait;
                        }
                        // 背景图片缓存
                        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 defaultPortrait = userInfoService.getDefaultPortrait(user.getSystem());
        String portrait = user.getPortrait();
        if (StringUtil.isNullOrEmpty(portrait)) {
            portrait = defaultPortrait;
        }
        // 邀请码
        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;
    }
}