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; } /** * 商品爆单列表