admin
2019-01-11 20f1758957a19bb5fec47fcc1c83818ee268676b
修改资金统计信息,优化H5的商品详情
11个文件已修改
331 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/ShareController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/UserMoneyController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2Mapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2Mapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/HongBaoV2ServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/hongbao/HongBaoV2Service.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/money/UserMoneyStatisticVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/ShareController.java
@@ -26,6 +26,7 @@
import com.yeshi.fanli.exception.ShareGoodsException;
import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
@@ -61,6 +62,9 @@
    @Resource
    private UserShareGoodsGroupService userShareGoodsGroupService;
    @Resource
    private CommonGoodsService commonGoodsService;
    // 获取商品分享链接
    @RequestMapping(value = "getGoodsShareUrl")
fanli/src/main/java/com/yeshi/fanli/controller/client/UserMoneyController.java
@@ -26,6 +26,7 @@
import com.google.gson.stream.JsonWriter;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyDetailService;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
@@ -51,6 +52,9 @@
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private HongBaoV2Service hongBaoV2Service;
    /**
     * 新版资金详情(1.4.9)
@@ -226,7 +230,7 @@
        typeList.add(UserMoneyDetailTypeEnum.invite);
        typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
        typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
        minDate = new Date(0L);
        maxDate = new Date(timeStamp);
        vo.setTotalInviteMoney(
@@ -254,6 +258,16 @@
        vo.setTotalShareMoney(
                userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
        maxDate = new Date(timeStamp);
        minDate = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(timeStamp, "yyyy-MM"), "yyyy-MM"));
        // 本月未到账
        vo.setMonthUnRecievedMoney(hongBaoV2Service.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate));
        // 全部未到账
        minDate = new Date(0);
        vo.setTotalUnRecievedMoney(hongBaoV2Service.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate));
        Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create();
        out.print(JsonUtil.loadTrueResult(gson.toJson(vo)));
    }
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5RecommendController.java
@@ -8,9 +8,6 @@
import javax.annotation.Resource;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -32,6 +29,8 @@
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.ShareGoodsException;
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.SystemConfigService;
@@ -50,9 +49,13 @@
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.Utils;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("api/h5/v1/webRecommend")
@@ -102,7 +105,7 @@
    @Resource
    private UserShareGoodsGroupService userShareGoodsGroupService;
    /**
     * 
     * 方法说明: 推荐轮播商品信息
@@ -264,75 +267,107 @@
            out.print(JsonUtil.loadFalseResult(1, "请上传id"));
            return;
        }
        List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS);
        UserShareGoodsHistory shareHistory = null;
        String pid = configList.get(0).getDefaultPid();
        if (!StringUtil.isNullOrEmpty(uid)) {
            try {
                uid = AESUtil.decrypt(uid, Constant.UIDAESKEY);
                TBPid tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_SHARE_GOODS);
                if (tbPid != null)
                    pid = tbPid.getPid();
                // 查询该PID,UID,商品ID下是否有这个商品的信息
                // 判断这个产品是否从APP中分享而来
                try {
                    shareHistory = shareGoodsService.getShareGoodsHistoryDetail(Long.parseLong(uid),
                            Long.parseLong(id));
                } catch (Exception e) {
                }
                userShareGoodsGroupService.updateBrowseRecord(Long.parseLong(uid), Long.parseLong(id), 1);
            } catch (Exception e) {
            }
            uid = AESUtil.decrypt(uid, Constant.UIDAESKEY);
        }
        TaoBaoGoodsBrief goods = null;
        try {
        String token = null;
        if (!StringUtil.isNullOrEmpty(uid)) {
            // 查询是否有分享记录
            UserShareGoodsHistory shareHistory = null;
            try {
                shareHistory = shareGoodsService.getShareGoodsHistoryDetail(Long.parseLong(uid), Long.parseLong(id));
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (ShareGoodsException e) {
                e.printStackTrace();
            }
            if (shareHistory != null) {// 有分享记录
                token = shareHistory.getTkCode();
                goods = redisManager.getTaoBaoGoodsTemp(Long.parseLong(id));
                if (goods == null)
                    try {
                        goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id));
                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                    } catch (TaobaoGoodsDownException e) {
                        e.printStackTrace();
                    }
            } else {// 没有分享记录,需要直接分享
                List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService
                        .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS);
                String pid = null;
                TBPid tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_SHARE_GOODS);
                if (tbPid != null)
                    pid = tbPid.getPid();
                else {
                    pid = configList.get(0).getDefaultPid();
                }
                // 获取
                TaoKeAppInfo app = new TaoKeAppInfo();
                app.setAdzoneId(pid.split("_")[3]);
                app.setAppKey(configList.get(0).getAppKey());
                app.setAppSecret(configList.get(0).getAppSecret());
                app.setPid(pid);
                try {
                    goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app);
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                } catch (TaobaoGoodsDownException e) {
                    e.printStackTrace();
                }
                if (goods != null) {
                    String url = goods.getAuctionUrl();
                    if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) {
                        url = goods.getCouponLink();
                    }
                    token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url);
                }
            }
        } else {
            List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService
                    .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS);
            String pid = configList.get(0).getDefaultPid();
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAdzoneId(pid.split("_")[3]);
            app.setAppKey(configList.get(0).getAppKey());
            app.setAppSecret(configList.get(0).getAppSecret());
            app.setPid(pid);
            goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (TaobaoGoodsDownException e) {
            e.printStackTrace();
            try {
                goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app);
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            }
            if (goods != null) {
                String url = goods.getAuctionUrl();
                if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) {
                    url = goods.getCouponLink();
                }
                token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url);
            }
        }
        if (goods == null) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败")));
            return;
        }
        // 券后价
        BigDecimal afterCouponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
        TaoBaoLink link = null;
        if (shareHistory != null) {
            link = new TaoBaoLink();
            link.setTaoToken(shareHistory.getTkCode());
        } else {
            link = new TaoBaoLink();
            try {
                String url = goods.getCouponLink();
                if (StringUtil.isNullOrEmpty(url))
                    url = goods.getAuctionUrl();
                String tbk = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url);
                link.setTaoToken(tbk);
            } catch (Exception e) {
                link = null;
            }
        }
        if (link == null) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("淘口令生成失败")));
        if (StringUtil.isNullOrEmpty(token)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("口令生成失败")));
            return;
        }
        // 券后价
        BigDecimal afterCouponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
        TaoBaoLink link = new TaoBaoLink();
        link.setTaoToken(token);
        JSONObject data = new JSONObject();
        data.put("title", goods.getTitle());
@@ -348,6 +383,22 @@
        data.put("reservePrice", goods.getReservePrice());
        data.put("shopType", goods.getUserType() == 1 ? 2 : 1);
        out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
        final String tempUid = uid;
        ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
                try {
                    if (!StringUtil.isNullOrEmpty(tempUid))
                        userShareGoodsGroupService.updateBrowseRecord(Long.parseLong(tempUid), Long.parseLong(id), 1);
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                } catch (UserShareGoodsRecordException e) {
                    e.printStackTrace();
                }
            }
        });
        return;
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2Mapper.java
@@ -81,6 +81,16 @@
    BigDecimal getUnRecievedFanLiMoney(Long uid);
    /**
     * 根据创建时间与用户ID获取未到账的金额
     *
     * @param uid
     * @param minDate
     * @param maxDate
     * @return
     */
    BigDecimal getUnRecievedMoneyWithCreateTime(@Param("uid")Long uid, @Param("minDate") Date minDate, @Param("maxDate") Date maxDate);
    /**
     * 根据红包类型获取结算列表
     * 
     * @param type
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2Mapper.xml
@@ -230,7 +230,7 @@
        NOW()>=hb_pre_get_time limit
        #{count}
    </select>
    <select id="countInviteOrderCountByUidAndSettleTime" resultType="java.lang.Long">
        SELECT COUNT(h.hb_id) FROM yeshi_ec_hongbao_v2 h LEFT JOIN
        yeshi_ec_hongbao_order ho ON h.`hb_pid`=ho.`ho_hongbao_id` LEFT JOIN
@@ -242,6 +242,19 @@
    </select>
    <select id="getUnRecievedMoneyWithCreateTime" resultType="java.math.BigDecimal">
        SELECT
        SUM(h.`hb_money`) FROM yeshi_ec_hongbao_v2 h
        WHERE h.`hb_uid`=#{uid}
        AND (h.`hb_state`=1 OR
        h.`hb_state`=2) and hb_create_time>=#{minDate}
        and #{maxDate} > hb_create_time
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_hongbao_v2 where hb_id = #{id,jdbcType=BIGINT}
    </delete>
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java
@@ -32,9 +32,11 @@
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.ShareGoodsException;
import com.yeshi.fanli.exception.goods.CommonGoodsException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
@@ -47,6 +49,8 @@
import com.yeshi.fanli.util.ImageUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -86,6 +90,9 @@
    @Resource
    private UserShareGoodsRecordService userShareGoodsRecordService;
    @Resource
    private CommonGoodsService commonGoodsService;
    @Override
    public void addShareGoodsHistory(UserShareGoodsHistory history) {
        UserShareGoodsHistory userShareGoodsHistory = userShareGoodsHistoryMapper
@@ -98,7 +105,6 @@
        } else
            userShareGoodsHistoryMapper.insertSelective(history);
    }
    @Override
@@ -391,6 +397,8 @@
            goods.setAuctionUrl(taoBaoLink.getClickUrl());
        }
        // 保存商品详情
        // 创建淘口令
        TaoBaoLink tbLink = new TaoBaoLink();
        tbLink.setAuctionId(goods.getAuctionId());
@@ -411,6 +419,10 @@
        tbLink.setGoods(goods);
        // 存储分享商品的信息,用于加快分享网页接口请求速度
        if (Constant.IS_OUTNET)
            redisManager.saveTaoBaoGoodsBriefTemp(goods);
        return tbLink;
    }
fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/HongBaoV2ServiceImpl.java
@@ -751,4 +751,13 @@
        BigDecimal money = hongBaoV2Mapper.getUnRecievedFanLiMoney(uid);
        return money == null ? new BigDecimal(0) : money;
    }
    @Override
    public BigDecimal getUnRecievedMoneyWithCreateTime(Long uid, Date minDate, Date maxDate) {
        BigDecimal money = hongBaoV2Mapper.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate);
        if (money == null)
            return new BigDecimal(0);
        else
            return money;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/hongbao/HongBaoV2Service.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.service.inter.hongbao;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.yeshi.fanli.dto.HongBaoDTO;
@@ -100,5 +101,14 @@
     * @return
     */
    BigDecimal getUnRecievedFanLiMoney(Long uid);
    /**
     * 尚未到账的金额
     * @param uid
     * @param minDate
     * @param maxDate
     * @return
     */
    BigDecimal getUnRecievedMoneyWithCreateTime(Long uid,Date minDate,Date maxDate);
}
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java
@@ -39,7 +39,7 @@
    private TaoBaoShopService taoBaoShopService;
    @Resource
    private TaoBaoUnionConfigService taoBaoUnionConfigService;
    private TaoBaoUnionConfigService taoBaoUnionConfigService;
    @Resource
    private ConfigService configService;
@@ -131,6 +131,30 @@
    }
    /**
     * 临时存储淘宝的商品详情
     *
     * @param goods
     */
    public void saveTaoBaoGoodsBriefTemp(TaoBaoGoodsBrief goods) {
        if (goods == null)
            return;
        String key = "taobao-goods-temp-" + goods.getAuctionId();
        if (Constant.IS_OUTNET) {
            // 暂存4个小时的分享
            cacheCommonString(key, JsonUtil.getSimpleGson().toJson(goods), 60 * 60 * 4);
        }
    }
    public TaoBaoGoodsBrief getTaoBaoGoodsTemp(Long auctionId) {
        String key = "taobao-goods-temp-" + auctionId;
        String value = getCommonString(key);
        if (!StringUtil.isNullOrEmpty(value)) {
            return JsonUtil.getSimpleGson().fromJson(value, TaoBaoGoodsBrief.class);
        }
        return null;
    }
    /**
     * 删除缓存
     * 
     * @param auctionId
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -224,25 +224,24 @@
        }
        return null;
    }
    public static List<TaoBaoGoodsBrief> getBatchGoodsInfo(List<Long> listId) throws TaoKeApiException,TaobaoGoodsDownException {
    public static List<TaoBaoGoodsBrief> getBatchGoodsInfo(List<Long> listId)
            throws TaoKeApiException, TaobaoGoodsDownException {
        if (listId == null || listId.size() == 0) {
            throw new TaobaoGoodsDownException(1,"淘宝商品ID不能为空");
            throw new TaobaoGoodsDownException(1, "淘宝商品ID不能为空");
        }
        if ( listId.size() > 40) {
            throw new TaobaoGoodsDownException(1,"淘宝商品ID不能超过40个");
        if (listId.size() > 40) {
            throw new TaobaoGoodsDownException(1, "淘宝商品ID不能超过40个");
        }
        StringBuffer ids = new StringBuffer();
        for (Long id: listId) {
        for (Long id : listId) {
            ids.append(id + ",");
        }
        return getBatchGoodsInfos(ids.substring(0, ids.length() -1));
        return getBatchGoodsInfos(ids.substring(0, ids.length() - 1));
    }
    /**
     * 获取商品详情,简版
@@ -1436,6 +1435,29 @@
        return result;
    }
    /**
     * 从淘宝链接中解析商品ID(高级接口)
     * @param link
     * @return
     */
    public static String parseAuctionIdFromLink(String link) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.item.click.extract");
        map.put("click_url", link + "");
        JSONObject resultJSON = null;
        try {
            resultJSON = TaoKeBaseUtil.baseRequest(map, true);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        if (resultJSON == null)
            return null;
        return null;
    }
    private static TaoBaoGoodsBrief parseWuLiaoItemFromMaterialId(JSONObject item) {
        TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
        // 设置成320*320的图片尺寸
fanli/src/main/java/com/yeshi/fanli/vo/money/UserMoneyStatisticVO.java
@@ -12,6 +12,24 @@
    private BigDecimal totalRecievedMoney;// 累计到账
    private BigDecimal totalShareMoney;// 累计分享奖金
    private BigDecimal totalInviteMoney;// 累计邀请奖金
    private BigDecimal monthUnRecievedMoney;// 本月未到账
    private BigDecimal totalUnRecievedMoney; // 全部未到账
    public BigDecimal getMonthUnRecievedMoney() {
        return monthUnRecievedMoney;
    }
    public void setMonthUnRecievedMoney(BigDecimal monthUnRecievedMoney) {
        this.monthUnRecievedMoney = monthUnRecievedMoney;
    }
    public BigDecimal getTotalUnRecievedMoney() {
        return totalUnRecievedMoney;
    }
    public void setTotalUnRecievedMoney(BigDecimal totalUnRecievedMoney) {
        this.totalUnRecievedMoney = totalUnRecievedMoney;
    }
    public BigDecimal getBalanceMoney() {
        return balanceMoney;