yujian
2020-06-29 880238957a973ecd9676237672276b0e99d31115
免单
8个文件已修改
206 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/dto/pdd/PDDSearchFilter.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/goods/HDKGoodsJob.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinInviteService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/RedPackDetailFactory.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/redpack/RedPackMessageListener.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/HaoDanKuApiUtil.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/pdd/PDDSearchFilter.java
@@ -1,5 +1,7 @@
package com.yeshi.fanli.dto.pdd;
import java.util.List;
public class PDDSearchFilter {
    private String kw;// 关键字
    private Long optId;// 标签类目ID
@@ -12,7 +14,8 @@
    private Long[] goodsIdList;// 商品列表ID
    private Integer merchantType;// 卖家类型
    private String pid;// 推广位ID
    private List<PDDSearchRange> rangeList; // 筛选范围列表
    public String getKw() {
        return kw;
    }
@@ -100,4 +103,13 @@
    public void setIsBrand(Boolean isBrand) {
        this.isBrand = isBrand;
    }
    public List<PDDSearchRange> getRangeList() {
        return rangeList;
    }
    public void setRangeList(List<PDDSearchRange> rangeList) {
        this.rangeList = rangeList;
    }
}
fanli/src/main/java/com/yeshi/fanli/job/goods/HDKGoodsJob.java
@@ -5,12 +5,14 @@
import javax.annotation.Resource;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.fanli.dto.taobao.haodanku.HDKGoodsListResultDTO;
import com.yeshi.fanli.entity.taobao.haodanku.HDKGoodsDetail;
import com.yeshi.fanli.service.inter.goods.PullNewGoodsService;
import com.yeshi.fanli.service.inter.taobao.haodanku.HDKGoodsDetailService;
import com.yeshi.fanli.util.taobao.HaoDanKuApiUtil;
@@ -19,6 +21,12 @@
    @Resource
    private HDKGoodsDetailService hdkGoodsDetailService;
    @Resource
    private PullNewGoodsService pullNewGoodsService;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    /**
     * 同步所有商品
@@ -119,6 +127,17 @@
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        executor.execute(new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    pullNewGoodsService.updateGoods(goods);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                        });
                    }
            } else {
                minId = null;
@@ -152,6 +171,18 @@
            List<Long> tempList = ids.subList(start, start + pageSize > ids.size() ? ids.size() : start + pageSize);
            hdkGoodsDetailService.deleteByItemIds(tempList);
        }
        executor.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    pullNewGoodsService.deleteGoods(ids);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        return ReturnT.SUCCESS;
    }
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
@@ -19,8 +19,10 @@
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoRegister;
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.redpack.RedPackDetail;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
@@ -33,6 +35,7 @@
import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
import com.yeshi.fanli.service.inter.user.UserInfoRegisterService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService;
@@ -71,6 +74,9 @@
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private UserInfoRegisterService userInfoRegisterService;
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
@@ -466,6 +472,14 @@
            return;
        }
        
        // 注册时间
        UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid);
        if (register == null)
            return;
        // 注册48小时 + 以内
        long registerTime = register.getCreateTime().getTime();
        // 是否存在上下级关系
        ThreeSale threeSale = threeSaleSerivce.getByWorkerId(orderUid);
        if (threeSale == null)
@@ -501,6 +515,13 @@
        boolean satisfy = false;
        // 遍历是否存在符合相应商品
        for (CommonOrder commonOrder: list) {
            // 邀请关系之后
            long downTime = commonOrder.getThirdCreateTime().getTime();
            if (downTime < threeSale.getCreateTime())
                continue;
            // 48小时限制
            if (downTime < registerTime || downTime > registerTime + 1000*60*60*48)
                continue;
            // 付款金额限制
            BigDecimal payment = commonOrder.getPayment();
            if (payment == null || payment.compareTo(limitPayMent) < 0) 
@@ -569,11 +590,13 @@
        return count;
    }
    
//    @Override
//    public void arriveMoney(Long uid, ) {
//        // 4、增加红包
//        redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createSeriesReward(winInvite));
//    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void arriveMoney(Long uid, BigDecimal money, Date date) throws Exception {
        RedPackDetail detail = RedPackDetailFactory.createByMonth(uid, money, date);
        redPackBalanceService.addRedPack(uid, money, detail);
    }
    
    
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinInviteService.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.service.inter.redpack;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
@@ -126,5 +127,13 @@
     * @return
     */
    List<RedPackWinInvite> listLastMonthByUid(int start, int count, Long uid);
    /**
     * 红包到账
     * @param uid
     * @param money
     * @param date
     */
    void arriveMoney(Long uid, BigDecimal money, Date date) throws Exception;
    
}
fanli/src/main/java/com/yeshi/fanli/util/factory/RedPackDetailFactory.java
@@ -12,6 +12,7 @@
import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
import com.yeshi.fanli.exception.redpack.RedPackDetailException;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
public class RedPackDetailFactory {
@@ -355,4 +356,27 @@
        return detail;
    }
    /**
     *
     * @param uid
     * @param money
     * @param date
     * @return
     * @throws RedPackDetailException
     */
    public static RedPackDetail createByMonth(Long uid, BigDecimal money, Date date) throws RedPackDetailException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        String time = sdf.format(date);
        String title = sdf.format(date) + "邀请红包";
        RedPackDetail detail = new RedPackDetail();
        detail.setDisplay(true);
        detail.setUid(uid);
        detail.setMoney(money);
        detail.setTitle(title);
        detail.setType(RedPackDetailTypeEnum.redMonthly);
        detail.setIdentifyCode(StringUtil.Md5(RedPackDetailTypeEnum.redMonthly.name() + ":" + time));
        detail.setCreateTime(new Date());
        return detail;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java
@@ -80,6 +80,7 @@
     * @return
     */
    public static PDDGoodsResult searchGoods(PDDSearchFilter sf) {
        Gson gson = new GsonBuilder().disableHtmlEscaping().create();
        Map<String, String> map = new HashMap<>();
        map.put("type", "pdd.ddk.goods.search");
        if (sf.getOptId() != null)
@@ -102,6 +103,11 @@
            map.put("goods_id_list", "[" + StringUtil.concat(sf.getGoodsIdList(), ",") + "]");
        if (sf.getMerchantType() != null)
            map.put("merchant_type", sf.getMerchantType() + "");
        if (sf.getRangeList() != null && sf.getRangeList().size() > 0) {
            map.put("range_list",gson.toJson(sf.getRangeList()).toString());
        }
        map.put("pid", PID_FANLI);
        String result = baseRequest(map);
        JSONObject json = JSONObject.fromObject(result);
@@ -118,7 +124,6 @@
        Type type = new TypeToken<List<PDDGoodsDetail>>() {
        }.getType();
        Gson gson = new GsonBuilder().disableHtmlEscaping().create();
        List<PDDGoodsDetail> goodsList = gson.fromJson(array.toString(), type);
        int totalCount = root.optInt("total_count");
        return new PDDGoodsResult(totalCount, goodsList);
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/redpack/RedPackMessageListener.java
@@ -11,11 +11,12 @@
import com.aliyun.openservices.ons.api.Producer;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.OrderConfirmMQMsg;
import com.yeshi.fanli.dto.mq.order.body.OrderMQMsg;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.redpack.RedPackGiveRecordService;
import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
/**
@@ -45,14 +46,41 @@
                new String(message.getBody()));
        String tag = message.getTag();
        if (tag == null)
            tag = "";
        if (MQTopicName.TOPIC_ORDER.name().equalsIgnoreCase(message.getTopic())) {
            if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderConfirm.name())) {// 订单确认收货
                OrderConfirmMQMsg mqMsg = new Gson().fromJson(new String(message.getBody()),
                        OrderConfirmMQMsg.class);
                redPackWinInviteService.winRedPackByOrder(mqMsg.getSourceUid(), mqMsg.getOrderNo(), mqMsg.getSourceType());
            if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderStatistic.name())) {// 订单统
                OrderMQMsg orderMQMsg = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class);
                // 发送24小时延时消息
                // 测试时发送
                int hour = 48;
                if (Constant.IS_TEST) {
                    hour = 1;
                }
                orderMQMsg.setDelayHour(hour);
                Message msg = new Message(message.getTopic(), OrderTopicTagEnum.orderStatisticDelay.name(),
                        new Gson().toJson(orderMQMsg).getBytes());
                if (orderMQMsg.getStaticticDate().getTime() + 1000 * 60 * 60L * hour > System.currentTimeMillis())// 时间是否已经过了
                    msg.setStartDeliverTime(orderMQMsg.getStaticticDate().getTime() + 1000 * 60 * 60L * hour);
                else
                    msg.setStartDeliverTime(System.currentTimeMillis() + 1000 * 60);
                producer.send(msg);
                return Action.CommitMessage;
            } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderStatisticDelay.name())) {// 订单统计
                OrderMQMsg mqMsg = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class);
                int hour = 48;
                if (Constant.IS_TEST) {
                    hour = 1;
                }
                if (mqMsg.getDelayHour() == hour) {
                    try {// 邀请奖励
                        redPackWinInviteService.winRedPackByOrder(mqMsg.getUid(), mqMsg.getOrderId(), mqMsg.getType());
                    } catch (Exception e) {
                        LogHelper.errorDetailInfo(e);
                        return Action.ReconsumeLater;
                    }
                }
                return Action.CommitMessage;
            }
        }
fanli/src/main/java/com/yeshi/fanli/util/taobao/HaoDanKuApiUtil.java
@@ -11,6 +11,7 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.dto.taobao.haodanku.HDKGoodsListResultDTO;
import com.yeshi.fanli.dto.taobao.haodanku.HDKSearchFilter;
import com.yeshi.fanli.dto.taobao.haodanku.HDKWXCircleContentDTO;
import com.yeshi.fanli.entity.taobao.haodanku.HDKGoodsDetail;
import com.yeshi.fanli.util.StringUtil;
@@ -128,6 +129,53 @@
    }
    
    /**
     * 商品列表筛选
     * @param filter
     * @return
     */
    public HDKGoodsListResultDTO queryList(HDKSearchFilter filter) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("back", filter.getBack() + ""));
        params.add(new ParamsKeyValue("min_id", filter.getMinId() + ""));
        params.add(new ParamsKeyValue("nav", filter.getNav() + ""));
        if (!StringUtil.isNullOrEmpty(filter.getCid()))
            params.add(new ParamsKeyValue("cid", filter.getCid()));
        if (filter.getPriceMin() != null)
            params.add(new ParamsKeyValue("price_min", filter.getPriceMin() + ""));
        if (filter.getPriceMax() != null)
            params.add(new ParamsKeyValue("price_max", filter.getPriceMax() + ""));
        if (filter.getSaleMin() != null)
            params.add(new ParamsKeyValue("sale_min", filter.getSaleMin() + ""));
        if (filter.getSaleMax() != null)
            params.add(new ParamsKeyValue("sale_max", filter.getSaleMax() + ""));
        if (filter.getCouponMin() != null)
            params.add(new ParamsKeyValue("coupon_min", filter.getCouponMin() + ""));
        if (filter.getCouponMax() != null)
            params.add(new ParamsKeyValue("coupon_max", filter.getCouponMax() + ""));
        if (filter.getTkratesMin()!= null)
            params.add(new ParamsKeyValue("tkrates_min", filter.getTkratesMin() + ""));
        if (filter.getTkratesMax() != null)
            params.add(new ParamsKeyValue("tkrates_max", filter.getTkratesMax() + ""));
        if (filter.getTkmoneyMin()!= null)
            params.add(new ParamsKeyValue("tkmoney_min", filter.getTkmoneyMin() + ""));
        if (filter.getItemType()!= null)
            params.add(new ParamsKeyValue("item_type", filter.getItemType() + ""));
        String result = baseGetRequest("itemlist", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    
    /**
     * 商品爆单列表