yujian
2019-05-24 ff942c3f9f6fe84f6d141c87f47e58bf70273d40
动态 二维码样式修改  已下架商品不提供分享
12个文件已修改
802 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/TestController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsPicture.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/activity/ActivityServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/DynamicInfoServiceImpl.java 490 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/QrCodeServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/SpreadUserImgServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/DynamicInfoService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/QrCodeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/SpreadUserImgService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
}