|
@@ -1,32 +1,29 @@
|
|
|
package com.txz.mall.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
-import com.github.pagehelper.PageHelper;
|
|
|
-import com.github.pagehelper.PageInfo;
|
|
|
import com.txz.mall.core.AbstractService;
|
|
|
import com.txz.mall.core.ServiceException;
|
|
|
-import com.txz.mall.dubbo.client.CifUserDubboServiceClient;
|
|
|
import com.txz.mall.model.StoreCombination;
|
|
|
import com.txz.mall.model.StoreFlashActivity;
|
|
|
-import com.txz.mall.model.StorePink;
|
|
|
import com.txz.mall.model.StoreProduct;
|
|
|
-import com.txz.mall.service.*;
|
|
|
-import dto.GoPinkDTO;
|
|
|
+import com.txz.mall.service.StoreCombinationService;
|
|
|
+import com.txz.mall.service.StoreFlashActivityService;
|
|
|
+import com.txz.mall.service.StorePinkService;
|
|
|
+import com.txz.mall.service.StoreProductService;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import tk.mybatis.mapper.entity.Condition;
|
|
|
import tk.mybatis.mapper.entity.Example;
|
|
|
-import vo.ActivityProductVO;
|
|
|
import vo.FlashActivityVO;
|
|
|
|
|
|
-import java.util.*;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@@ -41,9 +38,6 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
|
|
|
private final StoreProductService storeProductService;
|
|
|
private final StoreFlashActivityService storeFlashActivityService;
|
|
|
private final StorePinkService storePinkService;
|
|
|
- private final ProductAttrService productAttrService;
|
|
|
- private final ProductAttrValueService productAttrValueService;
|
|
|
- private final CifUserDubboServiceClient userDubboServiceClient;
|
|
|
|
|
|
@Override
|
|
|
public void addActivityProduct(List<StoreCombination> list, Long activityId) {
|
|
@@ -57,10 +51,12 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
|
|
|
.collect(Collectors.joining(","));
|
|
|
List<StoreProduct> productList = storeProductService.findByIds(idsStr);
|
|
|
for (StoreCombination storeCombination : list) {
|
|
|
- StoreProduct product = productList.stream()
|
|
|
- .filter(item -> item.getId().equals(storeCombination.getProductId()))
|
|
|
- .findFirst().orElse(null);
|
|
|
- BeanUtils.copyProperties(product, storeCombination);
|
|
|
+ List<StoreProduct> productCollect = productList.stream()
|
|
|
+ .filter(item -> item.getId().equals(storeCombination.getProductId())).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isEmpty(productCollect)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ BeanUtils.copyProperties(productCollect.get(0), storeCombination);
|
|
|
storeCombination.setStartTime(flashActivity.getStartTime());
|
|
|
storeCombination.setStopTime(flashActivity.getEndTime());
|
|
|
if (activityVO != null) {
|
|
@@ -86,143 +82,6 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
|
|
|
save(list);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public PageInfo<ActivityProductVO> getActivityProduct(Long activityId, Integer page, Integer size) {
|
|
|
- PageHelper.startPage(page, size);
|
|
|
- PageInfo pageInfo = null;
|
|
|
- Condition productCondition = new Condition(StoreProduct.class);
|
|
|
- Example.Criteria productCriteria = productCondition.createCriteria();
|
|
|
- productCriteria.andEqualTo("isDelete", 0);
|
|
|
- List<StoreProduct> productList = storeProductService.findByCondition(productCondition);
|
|
|
- List<Long> productCollect = productList.stream().map(StoreProduct::getId).collect(Collectors.toList());
|
|
|
-
|
|
|
- Condition condition = new Condition(StoreCombination.class);
|
|
|
- Example.Criteria criteria = condition.createCriteria();
|
|
|
- criteria.andEqualTo("isDelete", 0);
|
|
|
- criteria.andEqualTo("activityId", activityId);
|
|
|
- List<StoreCombination> activityList = findByCondition(condition);
|
|
|
- List<Long> combinationCollect = activityList.stream().map(StoreCombination::getProductId).collect(Collectors.toList());
|
|
|
-
|
|
|
- Set<Long> combinationSet = new HashSet<>(combinationCollect);
|
|
|
- Set<Long> productSet = new HashSet<>(productCollect);
|
|
|
-
|
|
|
- // 交集
|
|
|
- Set<Long> intersectionSet = new HashSet<>(productSet);
|
|
|
- intersectionSet.retainAll(combinationSet);
|
|
|
-
|
|
|
-// List<ActivityProductVO> list = productList.stream()
|
|
|
-// .map(product -> {
|
|
|
-// ActivityProductVO vo = new ActivityProductVO();
|
|
|
-// BeanUtils.copyProperties(vo, product); // Spring BeanUtils
|
|
|
-// if (intersectionSet.contains(vo.getId())) {
|
|
|
-// vo.setIsExist(1);
|
|
|
-// } else {
|
|
|
-// vo.setIsExist(0);
|
|
|
-// }
|
|
|
-// return vo;
|
|
|
-// })
|
|
|
-// .collect(Collectors.toList());
|
|
|
-//
|
|
|
-// return new PageInfo(list);
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public void goPink(GoPinkDTO dto) {
|
|
|
- Date date = new Date();
|
|
|
- if (dto.getPinkId() == null && dto.getCid() != null) {
|
|
|
- automaticMatch(dto);
|
|
|
- }
|
|
|
- if (dto.getPinkId() != null) {
|
|
|
- StorePink teamPink = storePinkService.findById(dto.getPinkId());
|
|
|
- if (ObjectUtil.isNull(teamPink) || teamPink.getIsRefund().equals(1)) {
|
|
|
- throw new ServiceException("对应的拼团不存在");
|
|
|
- }
|
|
|
- Condition condition = new Condition(StoreCombination.class);
|
|
|
- Example.Criteria criteria = condition.createCriteria();
|
|
|
- criteria.andEqualTo("isDelete", 0);
|
|
|
- criteria.andEqualTo("isShow", 1);
|
|
|
- criteria.andLessThanOrEqualTo("startTime", date);
|
|
|
- criteria.andGreaterThanOrEqualTo("stopTime", date);
|
|
|
- List<StoreCombination> combinationList = findByCondition(condition);
|
|
|
- if (CollUtil.isEmpty(combinationList)) {
|
|
|
- throw new ServiceException("拼团商品不存在或未开启");
|
|
|
- }
|
|
|
-
|
|
|
- Condition pinkCondition = new Condition(StorePink.class);
|
|
|
- Example.Criteria pinkCriteria = pinkCondition.createCriteria();
|
|
|
- pinkCriteria.andEqualTo("isDelete", 0);
|
|
|
- pinkCriteria.andEqualTo("kId", dto.getPinkId());
|
|
|
- pinkCriteria.andEqualTo("status", 1);
|
|
|
- List<StorePink> pinkList = storePinkService.findByCondition(pinkCondition);
|
|
|
-
|
|
|
- //拼团剩余人数
|
|
|
- int count = teamPink.getPeople() - (CollUtil.isEmpty(pinkList) ? 0 : pinkList.size());
|
|
|
- if (count < 1) {
|
|
|
- throw new ServiceException("拼团已满");
|
|
|
- }
|
|
|
- List<Long> uidList = pinkList.stream().map(StorePink::getUid).collect(Collectors.toList());
|
|
|
- if (uidList.contains(dto.getUserId())) {
|
|
|
- throw new ServiceException("您已加入该拼团");
|
|
|
- }
|
|
|
- // 加入拼团
|
|
|
- StorePink storePink = new StorePink();
|
|
|
- BeanUtils.copyProperties(teamPink, storePink);
|
|
|
- storePink.setId(null);
|
|
|
-// storePink.setOrderId(null);
|
|
|
- storePink.setOrderIdKey(null);
|
|
|
- storePink.setUid(dto.getUserId());
|
|
|
- storePink.setKId(1L);
|
|
|
- storePink.setCreateTime(date);
|
|
|
- storePinkService.save(storePink);
|
|
|
- if (count == 1) {
|
|
|
- storePinkService.pinkSuccess(teamPink.getId());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 自动匹配
|
|
|
- */
|
|
|
- private void automaticMatch(GoPinkDTO dto) {
|
|
|
- // 找一个最快能成团的
|
|
|
- Date date = new Date();
|
|
|
- StoreCombination storeCombination = findById(dto.getCid());
|
|
|
- if (ObjectUtil.isNull(storeCombination) || storeCombination.getIsDelete().equals(1)) {
|
|
|
- throw new ServiceException("对应拼团商品不存在");
|
|
|
- }
|
|
|
- Condition pinkCondition = new Condition(StorePink.class);
|
|
|
- Example.Criteria pinkCriteria = pinkCondition.createCriteria();
|
|
|
- pinkCriteria.andEqualTo("isDelete", 0);
|
|
|
- pinkCriteria.andEqualTo("cid", dto.getCid());
|
|
|
- pinkCriteria.andEqualTo("status", 1);
|
|
|
- List<StorePink> pinkList = storePinkService.findByCondition(pinkCondition);
|
|
|
- Map<String, List<StorePink>> collect = pinkList.stream().collect(Collectors.groupingBy(StorePink::getOrderId));
|
|
|
- // 找出最多value对应的key
|
|
|
- List<StorePink> maxPinkList = collect.values().stream()
|
|
|
- .max(Comparator.comparing(List::size))
|
|
|
- .orElse(Collections.emptyList());
|
|
|
- if (CollectionUtils.isNotEmpty(maxPinkList)) {
|
|
|
- StorePink pink = maxPinkList.stream().filter(i -> i.getKId().equals(0L)).collect(Collectors.toList()).get(0);
|
|
|
- int count = pink.getPeople() - (CollUtil.isEmpty(pinkList) ? 0 : pinkList.size());
|
|
|
- if (count > 0) {
|
|
|
- StorePink storePink = new StorePink();
|
|
|
- BeanUtils.copyProperties(pink, storePink);
|
|
|
- storePink.setId(null);
|
|
|
-// storePink.setOrderId(null);
|
|
|
- storePink.setOrderIdKey(null);
|
|
|
- storePink.setUid(dto.getUserId());
|
|
|
- storePink.setKId(1L);
|
|
|
- storePink.setCreateTime(date);
|
|
|
- storePinkService.save(storePink);
|
|
|
- if (count == 1) {
|
|
|
- storePinkService.pinkSuccess(pink.getId());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
public List<StoreCombination> getMore(Integer comId) {
|