Java V2.0商城
现在只能把标签关闭
调用栈
com.zbkj.front.controller.ProductController#getList
com.zbkj.front.service.impl.FrontProductServiceImpl#getList
com.zbkj.service.service.impl.ProductServiceImpl#findH5List
com.zbkj.service.service.impl.ProductTagServiceImpl#getProductTags
com.zbkj.service.service.impl.ProductTagServiceImpl#calcProductTagForLastThirtyDaysSalesByOptionUnitByJava
/**
* 查询爆品用java代码重写
*
* @param unit
* @return
*/
private List<ProductTagTaskItem> calcProductTagForLastThirtyDaysSalesByOptionUnitByJava(Integer unit) {
List<ProductTagTaskItem> itemList = new ArrayList<>();
/* 1. 查询所有的30天以内的订单详情
a.查询product_type = 0 的普通商品
b.查询product_type = 1 的秒杀商品 TODO 如果后期还有更多类型需需要在此根据逻辑补全对应营销商品
2. 将上面product_type = 1 的秒杀商品id根据业务替换成真实的商品id 作为爆款的统计数据
3. 将数据整理成标签数据所需格式
5. 再根据订单查询订单表去掉未支付数据
**/
// 根据支付订单信息查询购买数量
LambdaQueryWrapper<Order> lqr_Order = Wrappers.lambdaQuery();
lqr_Order.ge(Order::getLevel, 1).eq(Order::getPaid, 1).gt(Order::getPayTime, LocalDate.now().minusDays(30).toString());
List<Order> orders = orderdao.selectList(lqr_Order);
// 查询全部商品订单详情
LambdaQueryWrapper<OrderDetail> lqr_OrderDetail = Wrappers.lambdaQuery();
lqr_OrderDetail.in(OrderDetail::getOrderNo, orders.stream().map(Order::getOrderNo).collect(Collectors.toList()));
List<OrderDetail> orderDetails = orderDetailDao.selectList(lqr_OrderDetail);
// 处理秒杀商品数据 根据秒杀商品关联关系 修改订单中的商品id为真实商品id 仅仅在此计算中生效
List<OrderDetail> OrderDetailIsSkillProduct = orderDetails.stream().filter(orderDetail -> orderDetail.getProductMarketingType().equals(ProductConstants.PRODUCT_MARKETING_TYPE_SECKILL)).collect(Collectors.toList());
if (!OrderDetailIsSkillProduct.isEmpty()) {
List<Integer> secKillIds = OrderDetailIsSkillProduct.stream().map(OrderDetail::getProductId).distinct().collect(Collectors.toList());
if (!secKillIds.isEmpty()) {
LambdaQueryWrapper<SeckillProduct> lqr_secKill = Wrappers.lambdaQuery();
lqr_secKill.in(SeckillProduct::getId, secKillIds);
List<SeckillProduct> seckillProducts = seckillProductDao.selectList(lqr_secKill);
for (OrderDetail orderDetail : orderDetails) {
List<SeckillProduct> seckillPs = seckillProducts.stream().filter(seckillProduct -> orderDetail.getProductId().equals(seckillProduct.getId())).collect(Collectors.toList());
for (SeckillProduct seckillP : seckillPs) {
if (orderDetail.getProductMarketingType().equals(ProductConstants.PRODUCT_MARKETING_TYPE_SECKILL) && seckillP.getId().equals(orderDetail.getProductId())) {
orderDetail.setProductId(seckillP.getProductId());
break;
}
}
}
}
}
// 筛过秒杀订单之后 将秒杀订单销量赚到普通订单的商品之后的数据
Map<Integer, ProductTagTaskItem> itemList_temp = new HashMap<>();
// 构造满足条件的商品
for (OrderDetail orderDetail : orderDetails) {
ProductTagTaskItem item = itemList_temp.get(orderDetail.getProductId());
if (null != item && item.getId() > 0) {
item.setFlag(item.getFlag() + orderDetail.getPayNum());
} else {
// 以商品id为主键 添加标签数据
ProductTagTaskItem tagTaskItem = new ProductTagTaskItem();
tagTaskItem.setFlag(orderDetail.getPayNum());
tagTaskItem.setTagName("爆品");
tagTaskItem.setId(orderDetail.getProductId());
itemList_temp.put(tagTaskItem.getId(), tagTaskItem);
}
}
// 合并数组中根据商品id唯一合并flag的操作,这里的flag就是购买数量
for (Integer id : itemList_temp.keySet()) {
itemList.add(itemList_temp.get(id));
}
itemList = itemList.stream().filter(tag -> tag.getFlag() > unit).collect(Collectors.toList());
return itemList;
}
