fanli/src/main/java/com/yeshi/fanli/controller/TestController.java
@@ -243,10 +243,6 @@ } } @RequestMapping(value = "insetDynamicInfoInvite") public void insetDynamicInfo(String content, String url,PrintWriter out) { dynamicInfoService.insertInviteMaterial(content, url, null, null); } @RequestMapping(value = "insertShop") fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java
@@ -30,6 +30,7 @@ import com.yeshi.fanli.entity.system.BusinessSystem; import com.yeshi.fanli.entity.system.SystemClientParams; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.entity.taobao.TaoBaoLink; import com.yeshi.fanli.entity.taobao.TaoKeAppInfo; import com.yeshi.fanli.exception.ShareGoodsException; @@ -678,6 +679,23 @@ long cid = dynamicInfo.getClassId(); if (cid == 1 || cid == 2) { // 1 热销单品 2 推荐好货 if (cid == 1) { List<GoodsPicture> imgs = dynamicInfo.getImgs(); GoodsPicture goodsPicture = imgs.get(0); if (goodsPicture.getGoodState() == 1) { out.print(JsonUtil.loadFalseResult("该商品已下架")); return; } else { TaoBaoGoodsBriefExtra goods = goodsPicture.getGoods(); try { TaoKeApiUtil.getSimpleGoodsInfo(goods.getAuctionId()); } catch (TaobaoGoodsDownException e) { out.print(JsonUtil.loadFalseResult("该商品已下架")); return; } } } // 分享文字 String title = null; List<ClientTextStyleVO> listTitle = dynamicInfo.getTitle(); @@ -771,7 +789,10 @@ } else { // 有图分享 List<GoodsPicture> imgs = dynamicInfo.getImgs(); String bgUrl = imgs.get(0).getUrlOriginal(); GoodsPicture goodsPicture = imgs.get(0); String bgUrl = goodsPicture.getUrlOriginal(); if (StringUtil.isNullOrEmpty(bgUrl)) { out.print(JsonUtil.loadFalseResult("图片路径不存在")); return; @@ -781,8 +802,13 @@ UserInfo userInfo = userInfoService.selectByPKey(uid); String portrait = userInfo.getPortrait(); // 画邀请图片 if (StringUtil.isNullOrEmpty(dynamicInfo.getInviteMaterialId())) { String imgLink = spreadUserImgService.drawInviteQrCodeNew(bgUrl,uid, portrait, inviteCode); Long activityId = dynamicInfo.getActivityId(); if (activityId != null) { Integer pX = goodsPicture.getPx();; Integer pY = goodsPicture.getPy();; Integer size = goodsPicture.getSize(); String imgLink = spreadUserImgService.drawInviteQrCodeNew(bgUrl,uid, portrait,pX, pY, size, inviteCode); data.put("imgLink", imgLink); } else { String title = imgs.get(0).getTitleOriginal(); fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsPicture.java
@@ -28,6 +28,14 @@ private String urlOriginal ; // 分享图片文字 private String titleOriginal ; // 自定义二维码的位置 private Integer px; private Integer py; private Integer size; // 商品状态: 1真实下架 0 private int goodState; public String getUrl() { return url; @@ -92,4 +100,37 @@ public void setTitleOriginal(String titleOriginal) { this.titleOriginal = titleOriginal; } public Integer getPx() { return px; } public void setPx(Integer px) { this.px = px; } public Integer getPy() { return py; } public void setPy(Integer py) { this.py = py; } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } public int getGoodState() { return goodState; } public void setGoodState(int goodState) { this.goodState = goodState; } } fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java
@@ -10,6 +10,7 @@ import org.yeshi.utils.DateUtil; import com.yeshi.fanli.entity.bus.activity.RecommendActivity; import com.yeshi.fanli.entity.bus.activity.RecommendActivityInviteInfo; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.activity.ActivityService; import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService; @@ -188,20 +189,17 @@ Integer type = activity.getType(); if (RecommendActivity.TYPE_SHARE_GOODS == type) { // 商品动态 dynamicInfoService.saveActivityRecommend(activity); dynamicInfoService.insertActivityRecommend(activity); activity.setState(1); activityService.updateByPrimaryKeySelective(activity); } else if (RecommendActivity.TYPE_INVITE == type) { // 邀请素材 String imgUrl = null; List<String> imageList = activityService.getImgByActivityId(activity.getId()); if (imageList != null && imageList.size() > 0) { imgUrl = imageList.get(0); } RecommendActivityInviteInfo inviteInfo = activityService.getRecommendActivityInviteInfoByActivityId(activity.getId()); activity.setInviteInfo(inviteInfo); dynamicInfoService.insertInviteMaterial(activity.getTitle(), imgUrl, activity.getId(), activity.getActivityUser()); dynamicInfoService.insertInviteActivity(activity); activity.setState(1); activityService.updateByPrimaryKeySelective(activity); fanli/src/main/java/com/yeshi/fanli/service/impl/activity/ActivityServiceImpl.java
@@ -576,13 +576,14 @@ updateActivity.setTotalGetMoney("预估分享奖金:¥" + taotaoMoney.toString()); recommendActivityMapper.updateByPrimaryKeySelective(updateActivity); // 1.5.4 动态信息更新 RecommendActivity exist = recommendActivityMapper.selectByPrimaryKey(activity.getId()); if (exist.getState() != null && exist.getState() == 1) { try { ActivityUser activityUser = activityUserService.selectByPrimaryKey(activityUid); exist.setActivityUser(activityUser); exist.setGoodsList(listgoods); dynamicInfoService.saveActivityRecommend(exist); dynamicInfoService.insertActivityRecommend(exist); } catch (Exception e) { e.printStackTrace(); } @@ -645,7 +646,12 @@ if (exist.getState() != null && exist.getState() == 1) { try { ActivityUser activityUser = activityUserService.selectByPrimaryKey(activityUid); dynamicInfoService.insertInviteMaterial(exist.getTitle(), url, activity.getId(), activityUser); activity.setActivityUser(activityUser); activity.setInviteInfo(recommendActivityInviteInfo); List<String> imageList = new ArrayList<String>(); imageList.add(url); activity.setImageList(imageList); dynamicInfoService.insertInviteActivity(activity); } catch (Exception e) { e.printStackTrace(); } fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/DynamicInfoServiceImpl.java
@@ -20,6 +20,7 @@ import com.yeshi.fanli.dto.taobao.TaoBaoShopDTO; import com.yeshi.fanli.entity.bus.activity.ActivityUser; import com.yeshi.fanli.entity.bus.activity.RecommendActivity; import com.yeshi.fanli.entity.bus.activity.RecommendActivityInviteInfo; import com.yeshi.fanli.entity.bus.activity.RecommendActivityTaoBaoGoods; import com.yeshi.fanli.entity.bus.clazz.GoodsClass; import com.yeshi.fanli.entity.dynamic.DynamicInfo; @@ -586,29 +587,48 @@ return goodsPicture; } @Override public void updateShareCount(DynamicInfo record) { dynamicInfoDao.updateShareCount(record); } @Override public void insertInviteMaterial(String title, String picUrl, Long activityId, ActivityUser activityUser) { public void insertInviteActivity(RecommendActivity activity) throws Exception{ DynamicInfo existInfo = null; if (activityId != null) { existInfo = dynamicInfoDao.getByActivityId(activityId); if (existInfo != null) { dynamicInfoDao.deleteById(existInfo.getId()); } String title = activity.getTitle(); String picUrl = null; List<String> imageList = activity.getImageList(); if (imageList != null && imageList.size() > 0) { picUrl = imageList.get(0); } if (StringUtil.isNullOrEmpty(title) || StringUtil.isNullOrEmpty(picUrl)) { return; } // 判断是否已存在 String dynamicInfoId = null; Long activityId = activity.getId(); DynamicInfo dynamicVO = dynamicInfoDao.getByActivityId(activityId); if (dynamicVO == null) { dynamicVO = new DynamicInfo(); dynamicVO.setId(UUID.randomUUID().toString().replace("-", "")); dynamicVO.setCreateTime(DateUtil.reduceRandomMinute(new Date(), 8)); } else { dynamicInfoId = dynamicVO.getId(); } if (!StringUtil.isNullOrEmpty(title)) { title = title.replaceAll("<p>", ""); title = title.replaceAll("</p>", ""); title = title.replaceAll("<br>", "\n"); if (!StringUtil.isNullOrEmpty(title)) { title = title.replace("<p>", ""); title = title.replace("</p>", ""); int index = title.lastIndexOf("\n"); String newDesc = title.substring(index + 1); if(StringUtil.isNullOrEmpty(newDesc)) { title = title.substring(0, index); } } DynamicInfo dynamicVO = new DynamicInfo(); dynamicVO.setId(UUID.randomUUID().toString().replace("-", "")); dynamicVO.setActivityId(activityId); dynamicVO.setClassId(4L); @@ -616,77 +636,228 @@ dynamicVO.setShareType(DynamicInfo.SHARE_TYPE_INVITE); dynamicVO.setUpdateTime(new Date()); if (existInfo != null) { dynamicVO.setCreateTime(existInfo.getCreateTime()); dynamicVO.setShareCount(existInfo.getShareCount()); } else { dynamicVO.setCreateTime(DateUtil.reduceRandomMinute(new Date(), 8)); Integer shareCount = activity.getShareCount(); if (shareCount == null || shareCount <= 0) { dynamicVO.setShareCount(1000 + (int) (Math.random() * 8000)); } else { dynamicVO.setShareCount(shareCount); } // 发布用户 ActivityUser activityUser = activity.getActivityUser(); if (activityUser == null) { dynamicVO.setUser(activityUserService.listRand(1).get(0)); dynamicVO.setUser(activityUserService.selectByPrimaryKey(2L)); } else { dynamicVO.setUser(activityUser); } // 介绍内容 List<ClientTextStyleVO> listtitle = new ArrayList<ClientTextStyleVO>(); List<GoodsPicture> listImg = new ArrayList<GoodsPicture>(); if(StringUtil.isNullOrEmpty(picUrl)) { dynamicVO.setImgs(listImg); dynamicVO.setShowType(DynamicInfo.SHOW_TYPE_ZERO); // 介绍内容 SimpleDateFormat format = new SimpleDateFormat("MM月dd日"); StringBuffer buffer = new StringBuffer(); buffer.append("-------------------\n"); buffer.append("今天 : " + format.format(new Date())); buffer.append(" "); buffer.append(DateLunarUtil.getWeekd(new Date()) + "\n"); buffer.append("各位亲爱的你"); buffer.append(" "); buffer.append("早安~\n"); buffer.append("我的邀请码:【邀请码】\n"); buffer.append("购物省钱返利券App:【邀请链接】"); if(!StringUtil.isNullOrEmpty(title)) { ClientTextStyleVO row1 = new ClientTextStyleVO(); row1.setColor("#333333"); row1.setContent(title + "\n" + buffer.toString()); row1.setContent(title ); listtitle.add(row1); dynamicVO.setTitle(listtitle); dynamicInfoDao.insert(dynamicVO); } else { try { dynamicVO.setTitle(listtitle); dynamicVO.setShowType(DynamicInfo.SHOW_TYPE_ONE); // 图片 String imgLink = qrCodeService.drawInviteQrCodeNew(picUrl , null, null, null); GoodsPicture p2 = new GoodsPicture(); p2.setW(100); p2.setH(100); p2.setUrl(imgLink); p2.setUrlOriginal(picUrl); listImg.add(p2); dynamicVO.setImgs(listImg); dynamicInfoDao.insert(dynamicVO); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } // 图片 List<GoodsPicture> listImg = new ArrayList<GoodsPicture>(); if(StringUtil.isNullOrEmpty(picUrl)) { dynamicVO.setShowType(DynamicInfo.SHOW_TYPE_ZERO); } else { dynamicVO.setShowType(DynamicInfo.SHOW_TYPE_ONE); RecommendActivityInviteInfo inviteInfo = activity.getInviteInfo(); Integer pX = null; Integer pY = null; Integer size = null; if (inviteInfo != null) { pX = inviteInfo.getPx(); pY = inviteInfo.getPy(); size = inviteInfo.getSize(); } // 图片 String imgLink = qrCodeService.drawInviteQrCodeNew(picUrl , null, null, pX, pY, size, null); GoodsPicture p2 = new GoodsPicture(); p2.setW(100); p2.setH(100); p2.setUrl(imgLink); p2.setUrlOriginal(picUrl); p2.setPx(pX); p2.setPy(pY); p2.setSize(size); listImg.add(p2); } dynamicVO.setImgs(listImg); dynamicVO.setTitle(listtitle); if (!StringUtil.isNullOrEmpty(dynamicInfoId)) { dynamicInfoDao.deleteById(dynamicInfoId); } dynamicInfoDao.insert(dynamicVO); } @Override public void insertActivityRecommend(RecommendActivity activity) { if (activity == null || activity.getGoodsList() == null) { return; } try { String dynamicInfoId = null; DynamicInfo dynamicInfo = dynamicInfoDao.getByActivityId(activity.getId()); if (dynamicInfo == null) { dynamicInfo = new DynamicInfo(); dynamicInfo.setId(UUID.randomUUID().toString().replace("-", "")); dynamicInfo.setCreateTime(new Date()); } else { dynamicInfoId = dynamicInfo.getId(); } dynamicInfo.setClassId(2L); dynamicInfo.setSubclassId(0L); dynamicInfo.setUser(activity.getActivityUser()); dynamicInfo.setActivityId(activity.getId()); dynamicInfo.setUpdateTime(new Date()); List<ClientTextStyleVO> listtitle = new ArrayList<ClientTextStyleVO>(); String title = activity.getTitle(); if (!StringUtil.isNullOrEmpty(title)) { title = title.replaceAll("<p>", ""); title = title.replaceAll("</p>", ""); title = title.replaceAll("<br>", "\n"); int index = title.lastIndexOf("\n"); String newDesc = title.substring(index + 1); if(StringUtil.isNullOrEmpty(newDesc)) { title = title.substring(0, index); } ClientTextStyleVO row1 = new ClientTextStyleVO(); row1.setColor("#333333"); row1.setContent(title ); listtitle.add(row1); } dynamicInfo.setTitle(listtitle); Integer shareCount = activity.getShareCount(); if (shareCount == null || shareCount <= 0) { dynamicInfo.setShareCount(1000 + (int) (Math.random() * 8000)); } else { dynamicInfo.setShareCount(shareCount); } // 发布用户 ActivityUser activityUser = activity.getActivityUser(); if (activityUser == null) { dynamicInfo.setUser(activityUserService.selectByPrimaryKey(2L)); } else { dynamicInfo.setUser(activityUser); } List<TaoBaoGoodsBrief> listGoods = new ArrayList<TaoBaoGoodsBrief>(); // 商品列表 List<GoodsPicture> listPicture = new ArrayList<GoodsPicture>(); BigDecimal proportion = hongBaoManageService.getFanLiRate(); // 分享奖金 BigDecimal shareMoney = new BigDecimal(0); if (activity.getGoodsList() != null) { for (RecommendActivityTaoBaoGoods activityGoods : activity.getGoodsList()) { TaoBaoGoodsBrief taoBaoGoodsBrief = null; TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = null; String auctionId = activityGoods.getAuctionId(); try { taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(auctionId)); taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); if (!taoBaoGoodsBriefExtra.isCoupon()) { taoBaoGoodsBriefExtra.setState(1); } BigDecimal money = taoBaoGoodsBriefService.getShareGoodsUserHongBao(taoBaoGoodsBrief); shareMoney = MoneyBigDecimalUtil.add(shareMoney, money); } catch (TaobaoGoodsDownException e) { taoBaoGoodsBrief = activityGoods.getTaoBaoGoodsBrief(); taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); taoBaoGoodsBriefExtra.setState(1); taoBaoGoodsBriefExtra.setCoupon(false); } listGoods.add(taoBaoGoodsBrief); // 商品图片 taoBaoGoodsBriefExtra.setCouponInfo(null); taoBaoGoodsBriefExtra.setUpdatetime(new Date()); JSONObject item = new JSONObject(); item.put("id", auctionId); item.put("from", "dynamics"); GoodsPicture goodsPicture = new GoodsPicture(); goodsPicture.setH(100); goodsPicture.setW(100); goodsPicture.setUrl(TbImgUtil.getTBSize320Img(taoBaoGoodsBrief.getPictUrl())); goodsPicture.setJumpDetail(jumpDetailV2Service.getByTypeCache("goodsdetail")); goodsPicture.setParams(item.toString()); goodsPicture.setGoods(taoBaoGoodsBriefExtra); listPicture.add(goodsPicture); } } dynamicInfo.setImgs(listPicture); dynamicInfo.setListGoodsBrief(listGoods); ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); shareMoneyDesc.setColor("#FFFFFF"); shareMoneyDesc.setBottomColor("#E8AE48"); shareMoneyDesc.setContent("预估分享奖金:¥" + shareMoney); dynamicInfo.setDesc(shareMoneyDesc); dynamicInfo.setShowType(2); if (listPicture.size() < 7) { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_TWO); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_FOUR); // 分享类型4图 } else { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_THREE); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_NINE); // 分享类型9图 } if (!StringUtil.isNullOrEmpty(dynamicInfoId)) { dynamicInfoDao.deleteById(dynamicInfoId); } // 保存信息 dynamicInfoDao.insert(dynamicInfo); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } @Override public void deleteActivity(Long activityId) { DynamicInfo dynamicInfo = dynamicInfoDao.getByActivityId(activityId); if (dynamicInfo != null) { // 删除之前的 dynamicInfoDao.deleteById(dynamicInfo.getId()); } } @Override @@ -694,6 +865,32 @@ dynamicInfoDao.removeByDate(createTime); } @Override public void updateShareCount(DynamicInfo record) { dynamicInfoDao.updateShareCount(record); } @Override @Cacheable(value = "dynamicCache", key = "'count-'+#cid+'-'+#subId") public long count(Long cid, Long subId) { return dynamicInfoDao.count(cid, subId); } @Override @Cacheable(value = "dynamicCache", key = "'query-'+#start+'-'+#count+'-'+#cid+'-'+#subId") public List<DynamicInfo> query(int start, int count, Long cid, Long subId) { List<DynamicInfo> list = dynamicInfoDao.query(start, count, cid, subId); // 更新商品信息 executor.execute(new Runnable() { @Override public void run() { updateGoodInfo(list); } }); return list; } /** @@ -773,6 +970,9 @@ oldExtra.setUpdatetime(new Date()); goodsPicture.setGoods(oldExtra); // 商品真实下架 goodsPicture.setGoodState(1); // 更新热销单品的分享奖金 ,其余不做更新 if (classId == 1) { ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); @@ -784,8 +984,6 @@ e.printStackTrace(); } } // 更新商品 List<TaoBaoGoodsBrief> listGoodsBrief = dynamicInfo.getListGoodsBrief(); @@ -814,160 +1012,10 @@ dynamicInfo.setListGoodsBrief(listGoods); } } dynamicInfo.setImgs(imgs); dynamicInfo.setUpdateTime(new Date()); dynamicInfoDao.updateGoodInfo(dynamicInfo); } } @Override public void deleteActivity(Long activityId) { DynamicInfo dynamicInfo = dynamicInfoDao.getByActivityId(activityId); if (dynamicInfo != null) { // 删除之前的 dynamicInfoDao.deleteById(dynamicInfo.getId()); } } @Override public void saveActivityRecommend(RecommendActivity activity) { if (activity == null || activity.getGoodsList() == null) { return; } try { DynamicInfo existInfo = dynamicInfoDao.getByActivityId(activity.getId()); if (existInfo != null) { dynamicInfoDao.deleteById(existInfo.getId()); } DynamicInfo dynamicInfo = new DynamicInfo(); dynamicInfo.setId(UUID.randomUUID().toString().replace("-", "")); dynamicInfo.setClassId(2L); dynamicInfo.setSubclassId(0L); dynamicInfo.setUser(activity.getActivityUser()); dynamicInfo.setActivityId(activity.getId()); String title = activity.getTitle(); if (!StringUtil.isNullOrEmpty(title)) { title = title.replace("<p>", ""); title = title.replace("</p>", ""); dynamicInfo.setTitle(convertIntroduce(title)); } if (existInfo != null) { dynamicInfo.setCreateTime(existInfo.getCreateTime()); dynamicInfo.setShareCount(existInfo.getShareCount()); } else { dynamicInfo.setCreateTime(new Date()); dynamicInfo.setUpdateTime(new Date()); dynamicInfo.setShareCount(1000 + (int) (Math.random() * 8000)); } List<TaoBaoGoodsBrief> listGoods = new ArrayList<TaoBaoGoodsBrief>(); // 商品列表 List<GoodsPicture> listPicture = new ArrayList<GoodsPicture>(); BigDecimal proportion = hongBaoManageService.getFanLiRate(); // 分享奖金 BigDecimal shareMoney = new BigDecimal(0); if (activity.getGoodsList() != null) { for (RecommendActivityTaoBaoGoods activityGoods : activity.getGoodsList()) { TaoBaoGoodsBrief taoBaoGoodsBrief = null; TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = null; String auctionId = activityGoods.getAuctionId(); try { taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(auctionId)); taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); if (!taoBaoGoodsBriefExtra.isCoupon()) { taoBaoGoodsBriefExtra.setState(1); } BigDecimal money = taoBaoGoodsBriefService.getShareGoodsUserHongBao(taoBaoGoodsBrief); shareMoney = MoneyBigDecimalUtil.add(shareMoney, money); } catch (TaobaoGoodsDownException e) { taoBaoGoodsBrief = activityGoods.getTaoBaoGoodsBrief(); taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null); taoBaoGoodsBriefExtra.setState(1); taoBaoGoodsBriefExtra.setCoupon(false); } listGoods.add(taoBaoGoodsBrief); // 商品图片 taoBaoGoodsBriefExtra.setCouponInfo(null); taoBaoGoodsBriefExtra.setUpdatetime(new Date()); JSONObject item = new JSONObject(); item.put("id", auctionId); item.put("from", "dynamics"); GoodsPicture goodsPicture = new GoodsPicture(); goodsPicture.setH(100); goodsPicture.setW(100); goodsPicture.setUrl(TbImgUtil.getTBSize320Img(taoBaoGoodsBrief.getPictUrl())); goodsPicture.setJumpDetail(jumpDetailV2Service.getByTypeCache("goodsdetail")); goodsPicture.setParams(item.toString()); goodsPicture.setGoods(taoBaoGoodsBriefExtra); listPicture.add(goodsPicture); } } dynamicInfo.setImgs(listPicture); dynamicInfo.setListGoodsBrief(listGoods); ClientTextStyleVO shareMoneyDesc = new ClientTextStyleVO(); shareMoneyDesc.setColor("#FFFFFF"); shareMoneyDesc.setBottomColor("#E8AE48"); shareMoneyDesc.setContent("预估分享奖金:¥" + shareMoney); dynamicInfo.setDesc(shareMoneyDesc); dynamicInfo.setShowType(2); if (listPicture.size() < 7) { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_TWO); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_FOUR); // 分享类型4图 } else { dynamicInfo.setShowType(DynamicInfo.SHOW_TYPE_THREE); dynamicInfo.setShareType(DynamicInfo.SHARE_TYPE_NINE); // 分享类型9图 } // 保存信息 dynamicInfoDao.insert(dynamicInfo); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } @Override @Cacheable(value = "dynamicCache", key = "'count-'+#cid+'-'+#subId") public long count(Long cid, Long subId) { return dynamicInfoDao.count(cid, subId); } @Override @Cacheable(value = "dynamicCache", key = "'query-'+#start+'-'+#count+'-'+#cid+'-'+#subId") public List<DynamicInfo> query(int start, int count, Long cid, Long subId) { List<DynamicInfo> list = dynamicInfoDao.query(start, count, cid, subId); // 更新商品信息 executor.execute(new Runnable() { @Override public void run() { updateGoodInfo(list); } }); return list; } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/QrCodeServiceImpl.java
@@ -134,7 +134,7 @@ @Override public String drawInviteQrCodeNew(String url, Long uid, String portrait, String inviteCode) throws IOException { public String drawInviteQrCodeNew(String url, Long uid, String portrait, Integer pX, Integer pY, Integer size, String inviteCode) throws IOException { if (StringUtil.isNullOrEmpty(url)) { return null; @@ -174,28 +174,36 @@ portraitInputStream = HttpUtil.getAsInputStream(portrait); // 头像 erCodeInputStream = new FileInputStream(new File(erCodeTempPath)); // 二维码 } // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片 ImageUtil.inviteFriendImg(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, inviteCode); ImageUtil.inviteFriendImgWhitecustom(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, pX, pY, size, inviteCode); // 删除二维码文件 if(erCodeInputStream != null) { erCodeInputStream.close(); } if (erCodeTempPath != null && new File(erCodeTempPath).exists()) { new File(erCodeTempPath).delete(); } // 上传文件相对位置 if (new File(targetPath).exists() && new File(targetPath).length() > 0) { int index = url.lastIndexOf("/"); String newUrl = url.substring(index + 1); String urlMd5 = newUrl.substring(0, newUrl.lastIndexOf(".")); String fileUrl= null; if (uid == null) { fileUrl= "ercode/" + "ercode_" + uuid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg"; fileUrl = "ercode/" + "ercode_" + uuid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg"; } else { fileUrl = "ercode/" + "ercode_" + uid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg"; if (new File(erCodeTempPath).exists()) new File(erCodeTempPath).delete(); } // 上传文件 String imgUrl = COSManager.getInstance().uploadFile(new File(targetPath), fileUrl).getUrl(); if (new File(targetPath).exists()) new File(targetPath).delete(); // 删除本地缓存文件 new File(targetPath).delete(); return imgUrl; } @@ -245,6 +253,15 @@ // 开始根据 url(背景图), qrCode(二维码), portrait(头像) 生成图片 ImageUtil.drawInviteToGreet(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, inviteCode, content, date); // 删除二维码文件 if(erCodeInputStream != null) { erCodeInputStream.close(); } if (erCodeTempPath != null && new File(erCodeTempPath).exists()) { new File(erCodeTempPath).delete(); } // 上传文件 if (new File(targetPath).exists() && new File(targetPath).length() > 0) { int index = url.lastIndexOf("/"); @@ -254,22 +271,18 @@ // 上传文件相对位置 String fileUrl= null; if (uid == null) { fileUrl= "ercode/" + "ercode_" + uuid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg"; fileUrl = "ercode/" + "ercode_" + uuid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg"; } else { fileUrl = "ercode/" + "ercode_" + uid + "_" + System.currentTimeMillis() + "_" + urlMd5 + ".jpg"; if (new File(erCodeTempPath).exists()) new File(erCodeTempPath).delete(); } // 上传 String imgUrl = COSManager.getInstance().uploadFile(new File(targetPath), fileUrl).getUrl(); if (new File(targetPath).exists()) new File(targetPath).delete(); // 删除缓存文件 new File(targetPath).delete(); return imgUrl; } return null; } fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java
@@ -183,11 +183,12 @@ if (img.getMd5().equalsIgnoreCase(md5)) { // 画图 try { String imgUrl = qrCodeService.drawInviteQrCode(img.getUrl(), uid, StringUtil.isNullOrEmpty(user.getPortrait()) ? Constant.systemCommonConfig.getDefaultPortrait() : user.getPortrait(), inviteCode); String portrait = user.getPortrait(); if (StringUtil.isNullOrEmpty(portrait)) { portrait = Constant.systemCommonConfig.getDefaultPortrait(); } String imgUrl = qrCodeService.drawInviteQrCodeNew(img.getUrl(), uid, portrait, null, null, null, inviteCode); if (!StringUtil.isNullOrEmpty(imgUrl)) { if (imgUrl != null) { addUserInviteImg(uid, imgUrl); @@ -252,8 +253,8 @@ @Override public String drawInviteQrCodeNew(String bgImg, Long uid, String portrait, String inviteCode) throws Exception { return qrCodeService.drawInviteQrCodeNew(bgImg, uid, portrait, inviteCode); public String drawInviteQrCodeNew(String bgImg, Long uid, String portrait, Integer pX, Integer pY, Integer size, String inviteCode) throws Exception { return qrCodeService.drawInviteQrCodeNew(bgImg, uid, portrait, pX, pY, size, inviteCode); } fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/DynamicInfoService.java
@@ -3,7 +3,6 @@ import java.util.Date; import java.util.List; import com.yeshi.fanli.entity.bus.activity.ActivityUser; import com.yeshi.fanli.entity.bus.activity.RecommendActivity; import com.yeshi.fanli.entity.dynamic.DynamicInfo; @@ -44,11 +43,11 @@ public void updateShareCount(DynamicInfo record); /** * 插入邀请素材 * 插入邀请素材 - 动态 * @param content * @param picUrl */ public void insertInviteMaterial(String content, String picUrl, Long activityId, ActivityUser activityUser); public void insertInviteActivity(RecommendActivity activity) throws Exception; public void insert(DynamicInfo record); @@ -70,7 +69,7 @@ * 动态商品 * @param activity */ public void saveActivityRecommend(RecommendActivity activity); public void insertActivityRecommend(RecommendActivity activity); /** * 删除动态信息 fanli/src/main/java/com/yeshi/fanli/service/inter/user/QrCodeService.java
@@ -62,5 +62,5 @@ * @return * @throws IOException */ public String drawInviteQrCodeNew(String url, Long uid, String portrait, String inviteCode) throws IOException; public String drawInviteQrCodeNew(String url, Long uid, String portrait, Integer pX, Integer pY, Integer size, String inviteCode) throws IOException; } fanli/src/main/java/com/yeshi/fanli/service/inter/user/SpreadUserImgService.java
@@ -58,7 +58,7 @@ * @return * @throws Exception */ String drawInviteQrCodeNew(String bgImg, Long uid, String portrait, String inviteCode) throws Exception; String drawInviteQrCodeNew(String bgImg, Long uid, String portrait, Integer pX, Integer pY, Integer size, String inviteCode) throws Exception; /** * 邀请图片 问候 fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java
@@ -1094,7 +1094,7 @@ return originalImage; } static BufferedImage roundImage(BufferedImage srcImage, int cornerRadius) { // 半径 public static BufferedImage roundImage(BufferedImage srcImage, int cornerRadius) { // 半径 int width = srcImage.getWidth(); int height = srcImage.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); @@ -1176,6 +1176,121 @@ } /** * 头像加白底图 邀请好友图片 * @param urlInputStream * @param portraitInputStream * @param erCodeInputStream * @param targetPath * @param inviteCode * @throws IOException */ public static void inviteFriendImgWhite(InputStream urlInputStream, InputStream portraitInputStream, InputStream erCodeInputStream, String targetPath,String inviteCode) throws IOException { inviteFriendImgWhite(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, 260, 908, 230, inviteCode); } /** * 头像加白底图 邀请好友图片 -自定义二维码位置 * @param urlInputStream * @param portraitInputStream * @param erCodeInputStream * @param targetPath * @param inviteCode * @throws IOException */ public static void inviteFriendImgWhitecustom(InputStream urlInputStream, InputStream portraitInputStream, InputStream erCodeInputStream, String targetPath, Integer pX, Integer pY, Integer size, String inviteCode) throws IOException { inviteFriendImgWhite(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, pX, pY, size, inviteCode); } /** * 邀请好友图片加上头像加上白底 */ public static void inviteFriendImgWhite(InputStream urlInputStream, InputStream portraitInputStream, InputStream erCodeInputStream, String targetPath, Integer pX, Integer pY, Integer size, String inviteCode) throws IOException { if (pX == null) { pX = 260; } if (pY == null) { pY = 908; } if (size == null) { size = 230; } BufferedImage bgImage = ImageIO.read(urlInputStream); final BufferedImage targetImg = new BufferedImage(bgImage.getWidth(), bgImage.getHeight(), BufferedImage.TYPE_INT_RGB); HashMap<Key, Object> mapH = new HashMap<Key, Object>(); mapH.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 抗锯齿 (抗锯齿总开关) mapH.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);// 文字抗锯齿 // 画 背景图片 final Graphics2D g2d = targetImg.createGraphics(); g2d.drawImage(bgImage, 0, 0, bgImage.getWidth(), bgImage.getHeight(), null); g2d.setRenderingHints(mapH); // 画 二维码 BufferedImage qrCodeImage = ImageIO.read(erCodeInputStream); qrCodeImage = ImageUtil.qrCodeImage(g2d, qrCodeImage, pX, pY, size, size); int portraitSize = size * 5 / 23; int pPX = pX + size / 2 - portraitSize / 2; int pPY = pY + size / 2 - portraitSize / 2; // 头像白色边框 g2d.fillRoundRect(pPX-4, pPY-4,portraitSize+8, portraitSize + 8, 5, 5); g2d.setRenderingHints(mapH); // 画 头像 BufferedImage portraitImg = ImageIO.read(portraitInputStream); portraitImg = ImageUtil.zoomInImage(portraitImg, portraitSize, portraitSize); portraitImg = ImageUtil.roundImage(portraitImg, 10); g2d.drawImage(portraitImg, pPX, pPY, portraitSize, portraitSize, null); // 画邀请码(邀请码的大小与字体固定) if (!StringUtil.isNullOrEmpty(inviteCode)) { String st = "邀请码:" + inviteCode; String os = System.getProperty("os.name"); String fontBoldPath = "/usr/share/fonts/PingFang_Medium.ttf"; if (os.toLowerCase().startsWith("win")) { fontBoldPath = "D:/PingFang_Medium.ttf"; } Font boldFont = null; try { boldFont = Font.createFont(Font.PLAIN, new File(fontBoldPath)).deriveFont(36.0f); } catch (FontFormatException e) { e.printStackTrace(); } g2d.setFont(boldFont); g2d.getFontMetrics(boldFont); g2d.setColor(new Color(0, 0, 0)); int ax = pX - 30; int ay = pY + size + 118; g2d.setColor(new Color(0, 0, 0)); g2d.drawString(st, ax, ay); } OutputStream out = new FileOutputStream(new File(targetPath)); ImageIO.write(targetImg, "JPEG", out); out.flush(); out.close(); } /** * 绘制邀请问候图 * @param bgPigInStream 背景图 @@ -1203,6 +1318,7 @@ final Graphics2D g2d = targetImg.createGraphics(); g2d.drawImage(bgImage, 0, 0, bgImage.getWidth(), bgImage.getHeight(), null); g2d.setRenderingHints(mapH); g2d.setBackground(Color.WHITE); // 画 蒙层 BufferedImage mengCeng = ImageIO @@ -1217,23 +1333,32 @@ int size = 210; // 230 // 画 二维码 BufferedImage qrCodeImage = ImageIO.read(erCodeInStream); qrCodeImage = ImageUtil.qrCodeImage(g2d, qrCodeImage, pX, pY, size, size); // 二维码长宽 qrCodeImage = qrCodeImage(g2d, qrCodeImage, pX, pY, size, size); // 二维码长宽 // 230*230 // 画 头像 int portraitSize = size * 5 / 23; int pPX = pX + size / 2 - portraitSize / 2; int pPY = pY + size / 2 - portraitSize / 2; // 头像白色边框 g2d.fillRoundRect(pPX-4, pPY-4,portraitSize+8, portraitSize + 8, 5, 5); g2d.setRenderingHints(mapH); BufferedImage portraitImg = ImageIO.read(portraitInStream); portraitImg = ImageUtil.portraitImg(g2d, portraitImg, pPX, pPY, portraitSize, portraitSize);// 头像长宽 portraitImg = ImageUtil.zoomInImage(portraitImg, portraitSize, portraitSize); portraitImg = ImageUtil.roundImage(portraitImg, 10); g2d.drawImage(portraitImg, pPX, pPY, portraitSize, portraitSize, null); // 文字白色 // 字体白色 Color color = new Color(255, 255, 255); String os = System.getProperty("os.name"); String fontBoldPath = "/usr/share/fonts/yahei.ttf"; if (os.toLowerCase().startsWith("win")) { fontBoldPath = "C:/yahei.ttf"; } Font boldFont = null; // 画邀请码(邀请码的大小与字体固定) @@ -1349,4 +1474,5 @@ out.flush(); out.close(); } }