yujian
2019-05-14 236b8cd939e9c161d5410f530f9539df7ebba484
Merge branch 'dev_1'

Conflicts:
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailServiceImpl.java
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailService.java
12个文件已修改
371 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/RecommendController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/ShareController.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/activity/ActivityUserMapper.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/taobao/dataoke/DaTaoKeDetailMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/activity/ActivityUserMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/taobao/dataoke/DaTaoKeDetailMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserShareGoodsRecordServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserShareGoodsRecordService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/RecommendController.java
@@ -1727,9 +1727,10 @@
            // 缓存半个小时
            redisManager.cacheCommonString(cachekey, array.toString(), 60 * 30);
        }
        Long endTime = nextTime.getTimeInMillis() - java.lang.System.currentTimeMillis();
        JSONObject root = new JSONObject();
        root.put("time", nextTime.getTimeInMillis());
        root.put("endTime", endTime > 0? endTime : 0);
        root.put("listgoods", array);
        return root;
fanli/src/main/java/com/yeshi/fanli/controller/client/ShareController.java
@@ -16,13 +16,21 @@
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.yeshi.fanli.dto.share.ShareInfoDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord.ShareSourceTypeEnum;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.dynamic.DynamicInfo;
import com.yeshi.fanli.entity.dynamic.GoodsPicture;
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;
@@ -30,12 +38,16 @@
import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemClientParamsService;
import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsTextTemplateService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsGroupService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
@@ -45,10 +57,12 @@
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.account.UserUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.MonitorFactory;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -92,6 +106,19 @@
    @Resource
    private ShareGoodsTextTemplateService shareGoodsTextTemplateService;
    @Resource
    private SystemClientParamsService systemClientParamsService;
    @Resource
    private DynamicInfoService dynamicInfoService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Resource
    private SpreadUserImgService spreadUserImgService;
    // 获取商品分享链接
    @RequestMapping(value = "getGoodsShareUrl")
@@ -590,4 +617,177 @@
        out.print(JsonUtil.loadTrueResult(configService.get("share_goods_template_rules")));
    }
    /**
     * 查询顶部分类
     * @param acceptData
     * @param page
     * @param cid
     * @param out
     */
    @RequestMapping(value = "shareDynamic", method = RequestMethod.POST)
    public void shareDynamic(AcceptData acceptData, String id, Long uid, PrintWriter out) {
        try {
            if (uid == null || uid <= 0) {
                out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
                return;
            }
            if (StringUtil.isNullOrEmpty(id)) {
                out.print(JsonUtil.loadFalseResult("参数不能为空"));
                return;
            }
            DynamicInfo dynamicInfo = dynamicInfoService.getById(id);
            if (dynamicInfo == null) {
                out.print(JsonUtil.loadFalseResult("该动态信息已不存在"));
                return;
            }
            JSONObject data = new JSONObject();
            // 分类id
            long cid = dynamicInfo.getClassId();
            if (cid == 1) {     // 热销单品
                // 文字内容
                data.put("title", JsonUtil.getApiCommonGson().toJson(dynamicInfo.getTitle()));
                // 分享奖金
                ClientTextStyleVO desc = dynamicInfo.getDesc();
                String content = desc.getContent();
                int index = content.indexOf("¥");
                data.put("shareMoney", new BigDecimal(content.substring(index + 1, content.length())));
                // 分享链接
                String url = String.format("http://%s/share_mushGoods.html?uid=%s&shareId=%s&source=%s",
                        configService.getH5Host(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY), id, "dynamic");
                String shortLink = HttpUtil.getShortLink(url);
                if (!StringUtil.isNullOrEmpty(shortLink)) {
                    url = shortLink;
                }
                data.put("clickUrl", url);
                // 分享文字图标
                String imgs = configService.get("goods_share_notify_imgs");
                JSONArray array = JSONArray.fromObject(imgs);
                int p = (int) (array.size() * Math.random());
                if (p < array.size()) {
                    data.put("notifyPicture", array.optString(p));
                }
                UserExtraTaoBaoInfo extraInfo = userExtraTaoBaoInfoService.getByUid(uid);
                String relationId = null;
                if (extraInfo != null && extraInfo.getRelationId() != null && extraInfo.getRelationValid() != null
                        && extraInfo.getRelationValid() == true) {
                    relationId = extraInfo.getRelationId();
                }
                TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(uid, 42472466270L, relationId);
                // 淘宝口令
                data.put("token", taoBaoLink.getTaoToken());
                // 商品图片链接
                data.put("shareLink", TbImgUtil.getTBSizeImg(taoBaoLink.getGoods().getPictUrl(), 500));
                // 帮助链接
                data.put("helpLink","https://img.alicdn.com/imgextra/i1/2200656425615/O1CN01dst9HQ1rLiPN7xmhD_!!0-item_pic.jpg");
                // 分享提醒
                data.put("notifyDesc", configService.get("goods_share_notify"));
            } else if (cid == 2) {     // 推荐好货
                List<TaoBaoGoodsBrief> listGoods = new ArrayList<TaoBaoGoodsBrief>();
                List<GoodsPicture> listImgs = dynamicInfo.getImgs();
                for (GoodsPicture goodsPicture: listImgs) {
                    TaoBaoGoodsBriefExtra goods = goodsPicture.getGoods();
                    listGoods.add(goods);
                }
                String title = "";
                List<ClientTextStyleVO> listTitle = dynamicInfo.getTitle();
                for (ClientTextStyleVO textStyleVO: listTitle) {
                    title = title + textStyleVO.getContent();
                }
                if (title.length() > 250) {
                    title = title.substring(0, 250);
                }
                // 文字内容
                data.put("title", JsonUtil.getApiCommonGson().toJson(dynamicInfo.getTitle()));
                // 分享奖金
                ClientTextStyleVO desc = dynamicInfo.getDesc();
                String content = desc.getContent();
                int index = content.indexOf("¥");
                data.put("shareMoney", new BigDecimal(content.substring(index + 1, content.length())));
                // 分享文字图标
                String notifyImgs = configService.get("goods_share_notify_imgs");
                JSONArray array = JSONArray.fromObject(notifyImgs);
                int p = (int) (array.size() * Math.random());
                if (p < array.size()) {
                    data.put("notifyPicture", array.optString(p));
                }
                ShareInfoDTO shareInfo = userShareGoodsRecordService.saveShareRecord(uid, ShareSourceTypeEnum.activity, title, listGoods);
                data.put("shareId", shareInfo.getShareId());
                data.put("clickUrl", shareInfo.getCodeUrl());
                // 商品图片链接
                data.put("shareLink", shareInfo.getShareUrl());
                // 帮助链接
                data.put("helpLink","https://img.alicdn.com/imgextra/i1/2200656425615/O1CN01dst9HQ1rLiPN7xmhD_!!0-item_pic.jpg");
                // 分享提醒
                data.put("notifyDesc", configService.get("goods_share_notify"));
            } else if (cid == 4) { // 邀请分享
                String inviteCode = null;
                UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
                if (userInfoExtra != null && !StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
                    inviteCode = userInfoExtra.getInviteCode();
                } else {
                    out.print(JsonUtil.loadFalseResult(9001, "邀请码未激活"));
                    return;
                }
                Integer showType = dynamicInfo.getShowType();
                if (showType == 0) {  // 无图分享
                    String shortLink = UserUtil.getInviteShortLink(uid);
                    List<ClientTextStyleVO> listTitle = dynamicInfo.getTitle();
                    for (ClientTextStyleVO textStyleVO: listTitle) {
                        String content = textStyleVO.getContent();
                        content = content.replace("邀请码", inviteCode);
                        content = content.replace("邀请链接", shortLink);
                        textStyleVO .setContent(content);
                    }
                    data.put("title", listTitle);
                } else { // 有图分享
                    // 1、邀请规则
                    BusinessSystem system = new BusinessSystem();
                    system.setCreatetime(java.lang.System.currentTimeMillis());
                    system.setPlatform(1);
                    system.setId(4L);
                    String key = "inviteRules"; // key值
                    SystemClientParams values = systemClientParamsService.getSystemClientParamsBySystemAndKey(system, key);
                    String valueN = values.getValue();
                    String valueBr = valueN.replace("\n", "<br><br>");
                    data.put("inviteRules", valueBr);
                    // 邀请链接
                    String shortLink = HttpUtil.getShortLink("http://" + Constant.wxGZConfig.getLoginHost() + "/"
                            + Constant.systemCommonConfig.getProjectName() + "/client/threeShareNew?uid=" + uid);
                    data.put("inviteLink", shortLink);
                    // 邀请图片
                    List<GoodsPicture> imgs = dynamicInfo.getImgs();
                    String imgLink = spreadUserImgService.getUserSpreadImg(uid, imgs.get(0).getUrl());
                    data.put("imgLink", imgLink);
                }
            }
            out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult("分享记录失败"));
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/activity/ActivityUserMapper.java
@@ -2,21 +2,20 @@
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
public interface ActivityUserMapper {
public interface ActivityUserMapper extends BaseMapper<ActivityUser>{
    int deleteByPrimaryKey(Long id);
    int insert(ActivityUser record);
    int insertSelective(ActivityUser record);
    ActivityUser selectByPrimaryKey(Long id);
    int updateByPrimaryKeySelective(ActivityUser record);
    int updateByPrimaryKey(ActivityUser record);
    List<ActivityUser> selectList();
    /**
     * 随机抽取
     * @param count
     * @return
     */
    List<ActivityUser> listRand(@Param("count") int count);
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/taobao/dataoke/DaTaoKeDetailMapper.java
@@ -47,6 +47,16 @@
     * @return
     */
    List<DaTaoKeDetail> listByIds(@Param("idList") List<Long> idList);
    /**
     * 取出最新的id
     *
     * @param ids
     * @return
     */
    List<DaTaoKeDetail> getGoodsNotInList(@Param("cid") Long cid, @Param("list") List<Long> list, @Param("count") int count);
    /**
     * 根据标题查询
fanli/src/main/java/com/yeshi/fanli/mapping/activity/ActivityUserMapper.xml
@@ -24,7 +24,11 @@
    </select>
    <select id="listRand" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List" />
        FROM yeshi_ec_activity_user ORDER BY RAND() LIMIT #{count}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_activity_user where au_id = #{id,jdbcType=BIGINT}
fanli/src/main/java/com/yeshi/fanli/mapping/taobao/dataoke/DaTaoKeDetailMapper.xml
@@ -69,6 +69,18 @@
        </foreach>
    </select>
    <select id="getGoodsNotInList" resultMap="BaseResultMap">
        SELECT * FROM `yeshi_ec_goods_dataoke` d
        WHERE 1=1
            <if test="cid != null">
                AND d.`cid` = #{cid}
            </if>
            <if test="list != null">
                 AND d.`id` NOT IN <foreach collection="list" item="item" open="(" close=")"
                    separator=",">#{item}</foreach>
            </if>
        ORDER BY RAND() LIMIT #{count}
    </select>
    <select id="listByDtitle" resultMap="BaseResultMap"
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailServiceImpl.java
@@ -116,7 +116,7 @@
    public List<DaTaoKeDetail> listByIds(List<Long> idList) {
        return daTaoKeDetailMapper.listByIds(idList);
    }
    @Override
    public List<DaTaoKeDetail> listByDtitle(String dtitle) {
        return daTaoKeDetailMapper.listByDtitle(dtitle.trim());
@@ -133,4 +133,11 @@
        return daTaoKeDetailMapper.countSearchByTitleWithCid(title, (cid == null || cid == 0 ? null : cid));
    }
    @Override
    public List<DaTaoKeDetail> getGoodsNotInList(Long cid, List<Long> listId,int count) {
        return daTaoKeDetailMapper.getGoodsNotInList(cid, listId,count);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsServiceImpl.java
@@ -10,6 +10,7 @@
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.mybatis.taobao.dataoke.DaTaoKeDetailMapper;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsService;
@@ -19,6 +20,9 @@
@Service
public class DaTaoKeGoodsServiceImpl implements DaTaoKeGoodsService {
    @Resource
    private DaTaoKeDetailMapper daTaoKeDetailMapper;
    @Resource
    private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
@@ -100,5 +104,10 @@
        } else
            return list;
    }
    @Override
    public List<DaTaoKeDetail> getGoodsNotInList(Long cid, List<Long> listId,int count) {
        return daTaoKeDetailMapper.getGoodsNotInList(cid, listId,count);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserShareGoodsRecordServiceImpl.java
@@ -26,6 +26,7 @@
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.share.UserShareGoodsRecordMapper;
import com.yeshi.fanli.dto.share.ShareInfoDTO;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsGroup;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord.ShareSourceTypeEnum;
@@ -298,6 +299,59 @@
        return map;
    }
    /**
     * 保存分享记录
     *
     * @param userShareGoodsRecord
     *            分享记录: uid、picture、source 为必输入
     * @throws UserShareGoodsRecordException
     */
    @Override
    public ShareInfoDTO saveShareRecord(Long uid, ShareSourceTypeEnum source, String title,
            List<TaoBaoGoodsBrief> listGoods) throws UserShareGoodsRecordException {
        if (listGoods == null || listGoods.size() == 0) {
            throw new UserShareGoodsRecordException(1, "分享商品数量不足");
        }
        if (uid == null) {
            throw new UserShareGoodsRecordException(1, "用户ID不能为空");
        }
        if (source == null) {
            throw new UserShareGoodsRecordException(1, "分享来源不能为空");
        }
        UserShareGoodsRecord userShareGoodsRecord = new UserShareGoodsRecord();
        userShareGoodsRecord.setUid(uid);
        userShareGoodsRecord.setSource(source);
        userShareGoodsRecord.setTitle(title);
        // 取一个商品图片作为主图
        userShareGoodsRecord.setPicture(listGoods.get(0).getPictUrl());
        Date date = new Date();
        userShareGoodsRecord.setShareState(0); // 初始未分享
        userShareGoodsRecord.setCreateTime(date);
        userShareGoodsRecord.setUpdateTime(date);
        userShareGoodsRecordMapper.insertSelective(userShareGoodsRecord);
        Map<String, Object> map = new HashMap<String, Object>();
        // 多个商品分享
        FileUploadResult loadResult = multipleGoodsShare(userShareGoodsRecord, listGoods);
        ShareInfoDTO shareInfo = new ShareInfoDTO();
        shareInfo.setMd5(loadResult.getMd5());
        shareInfo.setCodeUrl(loadResult.getUrl());
        shareInfo.setShareId(userShareGoodsRecord.getId());
        shareInfo.setShareUrl(getShareUrl(userShareGoodsRecord));
        return shareInfo;
    }
    /**
     * 单个商品分享生成记录
@@ -412,6 +466,22 @@
        return shareImg;
    }
    public String  getShareUrl (UserShareGoodsRecord shareRecord) {
        Long uid = shareRecord.getUid();
        Long shareId = shareRecord.getId();
        String source = shareRecord.getSource().name();
        String url = String.format("http://%s/share_mushGoods.html?uid=%s&shareId=%s&source=%s",
                configService.getH5Host(), AESUtil.encrypt(uid + "", Constant.UIDAESKEY), shareId + "",
                source + "");
        String shortLink = HttpUtil.getShortLink(url);
        if (!StringUtil.isNullOrEmpty(shortLink)) {
            url = shortLink;
        }
        return url;
    }
    /**
     * 生成分享图
     * 
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailService.java
@@ -49,7 +49,7 @@
     */
    public List<DaTaoKeDetail> listByIds(List<Long> idList);
    /**
    /**
     * 根据标题查询
     * 
     * @param dtitle
@@ -79,4 +79,14 @@
     */
    public Long countSearchByTitleWithCid(String title, Long cid);
    /*
     * 查询一类全部
     * @param cid
     * @param listId
     * @param count
     * @return
     */
    public List<DaTaoKeDetail> getGoodsNotInList(Long cid, List<Long> listId, int count);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsService.java
@@ -30,4 +30,8 @@
     */
    public List<DaTaoKeDetail> getCurrentHotSalesRankGoodsList();
    public List<DaTaoKeDetail> getGoodsNotInList(Long cid, List<Long> listId, int count);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserShareGoodsRecordService.java
@@ -5,6 +5,7 @@
import net.sf.json.JSONObject;
import com.yeshi.fanli.dto.share.ShareInfoDTO;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsRecord.ShareSourceTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -123,4 +124,16 @@
     */
    public long countShareRecordByUid(Long uid);
    /**
     * 多商品分享
     * @param uid
     * @param source
     * @param title
     * @param listGoods
     * @return
     * @throws UserShareGoodsRecordException
     */
    public ShareInfoDTO saveShareRecord(Long uid, ShareSourceTypeEnum source, String title, List<TaoBaoGoodsBrief> listGoods)
            throws UserShareGoodsRecordException;
}