| | |
| | | package cc.mrbird.febs.mall.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.configure.FebsConfigure; |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.entity.QueryRequest; |
| | | import cc.mrbird.febs.mall.entity.MallActivity; |
| | | import cc.mrbird.febs.mall.mapper.MallActivityMapper; |
| | | import cc.mrbird.febs.common.enumerates.ActivityTypeEnum; |
| | | import cc.mrbird.febs.common.enumerates.GoodsTypeEnum; |
| | | import cc.mrbird.febs.common.enumerates.YesOrNoOrIngEnum; |
| | | import cc.mrbird.febs.common.utils.MallUtils; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | | import cc.mrbird.febs.mall.service.IActivityService; |
| | | import cc.mrbird.febs.mall.vo.AdminActivityAddDto; |
| | | import cc.mrbird.febs.mall.vo.AdminDiscountVO; |
| | | import cc.mrbird.febs.mall.vo.AdminMallActivityListVo; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | @Transactional |
| | | public class ActivityServiceImpl extends ServiceImpl<MallActivityMapper, MallActivity> implements IActivityService { |
| | | |
| | | private final CouponGoodsMapper couponGoodsMapper; |
| | | private final MallGoodsMapper mallGoodsMapper; |
| | | private final MallGoodsSkuMapper mallGoodsSkuMapper; |
| | | private final MallGoodsStyleMapper mallGoodsStyleMapper; |
| | | private final FebsConfigure febsConfigure; |
| | | @Override |
| | | public IPage<MallActivity> getAdminListInPage(MallActivity mallActivity, QueryRequest request) { |
| | | Page<MallActivity> page = new Page<>(request.getPageNum(), request.getPageSize()); |
| | |
| | | Page<MallActivity> mallActivityPage = this.baseMapper.selectPage(page, mallActivityLambdaQueryWrapper); |
| | | return mallActivityPage; |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse addAdminActivity(AdminActivityAddDto adminActivityAddDto) { |
| | | |
| | | MallActivity mallActivity = new MallActivity(); |
| | | mallActivity.setName(adminActivityAddDto.getName()); |
| | | String hd = MallUtils.getOrderNum("HD"); |
| | | mallActivity.setCode(hd); |
| | | mallActivity.setStartTime(adminActivityAddDto.getStartTime()); |
| | | mallActivity.setEndTime(adminActivityAddDto.getEndTime()); |
| | | mallActivity.setMaxImage(adminActivityAddDto.getMaxImage()); |
| | | mallActivity.setMinImage(adminActivityAddDto.getMinImage()); |
| | | mallActivity.setState(YesOrNoOrIngEnum.NO.getValue()); |
| | | mallActivity.setType(adminActivityAddDto.getType()); |
| | | |
| | | List<Long> activityGoodsIds = adminActivityAddDto.getActivityGoodsIds(); |
| | | String collect = activityGoodsIds.stream() |
| | | .map(String::valueOf) // 将 Long 转换为 String |
| | | .collect(Collectors.joining(","));// 使用逗号连接 |
| | | mallActivity.setActivityGoodsIds(collect); |
| | | this.baseMapper.insert(mallActivity); |
| | | |
| | | if(ActivityTypeEnum.ZHE_KOU.getValue() == adminActivityAddDto.getType()){ |
| | | BigDecimal discountSize = adminActivityAddDto.getDiscountSize(); |
| | | mallActivity.setDiscountSize(discountSize); |
| | | addDiscountGoods(mallActivity.getId(),discountSize,activityGoodsIds); |
| | | } |
| | | |
| | | if(ActivityTypeEnum.YOU_HUI_JUAN.getValue() == adminActivityAddDto.getType()){ |
| | | mallActivity.setCouponId(adminActivityAddDto.getCouponId()); |
| | | // addCouponGoods(adminActivityAddDto.getCouponId(),activityGoodsIds); |
| | | } |
| | | this.baseMapper.updateById(mallActivity); |
| | | |
| | | return new FebsResponse().success().data("操作成功"); |
| | | } |
| | | |
| | | private void addDiscountGoods(Long activityId,BigDecimal discountSize, List<Long> goodsIds){ |
| | | MallActivity mallActivity = this.baseMapper.selectById(activityId); |
| | | //将对应选中的商品按照这个折扣力度重新计算一遍 |
| | | List<MallGoods> mallGoods = mallGoodsMapper.selectList( |
| | | new LambdaQueryWrapper<MallGoods>() |
| | | .eq(MallGoods::getIsNormal, GoodsTypeEnum.PU_TONG.getValue()) |
| | | .in(MallGoods::getId, goodsIds) |
| | | ); |
| | | if(CollUtil.isNotEmpty(mallGoods)){ |
| | | List<CompletableFuture<Void>> futures = new ArrayList<>(); |
| | | //复制对应的商品的规则 |
| | | for(MallGoods mallGoodsItem:mallGoods){ |
| | | CompletableFuture<Void> uCompletableFuture = CompletableFuture.runAsync(() -> { |
| | | Long goodsId = mallGoodsItem.getId(); |
| | | //新增活动商品 |
| | | Long goodsIdNew = addGoodsEntity(mallActivity, discountSize, mallGoodsItem); |
| | | |
| | | List<MallGoodsStyle> mallGoodsStyles = mallGoodsStyleMapper.selectList( |
| | | new LambdaQueryWrapper<MallGoodsStyle>() |
| | | .eq(MallGoodsStyle::getGoodsId, goodsId) |
| | | ); |
| | | |
| | | if(CollUtil.isNotEmpty(mallGoodsStyles)){ |
| | | for(MallGoodsStyle mallGoodsStyleItem:mallGoodsStyles){ |
| | | Long styleItemId = mallGoodsStyleItem.getId(); |
| | | |
| | | Long styleItemIdNew = addGoodsStyleEntity(goodsIdNew, mallGoodsStyleItem); |
| | | List<MallGoodsSku> mallGoodsSkus = mallGoodsSkuMapper.selectList( |
| | | new LambdaQueryWrapper<MallGoodsSku>() |
| | | .eq(MallGoodsSku::getStyleId, styleItemId) |
| | | .eq(MallGoodsSku::getGoodsId, goodsId) |
| | | ); |
| | | if(CollUtil.isNotEmpty(mallGoodsSkus)){ |
| | | for(MallGoodsSku mallGoodsSkuItem:mallGoodsSkus){ |
| | | addGoodsSkuEntity(goodsIdNew,styleItemIdNew,discountSize,mallGoodsSkuItem); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | },febsConfigure.asyncThreadPoolTaskExecutor()); |
| | | futures.add(uCompletableFuture); |
| | | } |
| | | // 等待所有任务完成 |
| | | CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); |
| | | allOf.join(); |
| | | } |
| | | } |
| | | |
| | | private Long addGoodsEntity(MallActivity mallActivity,BigDecimal discountSize,MallGoods mallGoodsItem){ |
| | | mallGoodsItem.setIsNormal(GoodsTypeEnum.HUO_DONG.getValue()); |
| | | mallGoodsItem.setGoodsName(mallActivity.getName()+"-"+(StrUtil.isEmpty(mallGoodsItem.getGoodsName()) ? "":mallGoodsItem.getGoodsName())); |
| | | mallGoodsItem.setGoodsNo(mallGoodsItem.getGoodsNo()+"-"+mallActivity.getCode()); |
| | | mallGoodsItem.setActivityId(mallActivity.getId()); |
| | | BigDecimal presentPrice = new BigDecimal(mallGoodsItem.getPresentPrice()).multiply(discountSize).setScale(2, RoundingMode.DOWN); |
| | | mallGoodsItem.setPresentPrice(presentPrice.toString()); |
| | | mallGoodsMapper.insert(mallGoodsItem); |
| | | return mallGoodsItem.getId(); |
| | | } |
| | | |
| | | private Long addGoodsStyleEntity(Long goodsId,MallGoodsStyle mallGoodsStyleItem){ |
| | | mallGoodsStyleItem.setGoodsId(goodsId); |
| | | mallGoodsStyleMapper.insert(mallGoodsStyleItem); |
| | | return mallGoodsStyleItem.getId(); |
| | | } |
| | | |
| | | private Long addGoodsSkuEntity(Long goodsId,Long styleId,BigDecimal discountSize,MallGoodsSku sku){ |
| | | sku.setGoodsId(goodsId); |
| | | sku.setStyleId(styleId); |
| | | BigDecimal presentPrice = sku.getPresentPrice().multiply(discountSize).setScale(2, RoundingMode.DOWN); |
| | | sku.setPresentPrice(presentPrice); |
| | | mallGoodsSkuMapper.insert(sku); |
| | | return sku.getId(); |
| | | } |
| | | |
| | | private void addCouponGoods(Long couponId,List<Long> goodsIds){ |
| | | // 先判断是否存在关联商品,再进行查询和删除 |
| | | if (CollUtil.isNotEmpty(couponGoodsMapper.selectList( |
| | | new LambdaQueryWrapper<CouponGoods>() |
| | | .select(CouponGoods::getId) |
| | | .eq(CouponGoods::getCouponId, couponId)))) { |
| | | couponGoodsMapper.delete(new LambdaQueryWrapper<CouponGoods>().eq(CouponGoods::getCouponId, couponId)); |
| | | } |
| | | |
| | | // 处理 goodsIds 为 null 或空的情况 |
| | | if (CollUtil.isNotEmpty(goodsIds)) { |
| | | for (Long goodsId : goodsIds) { |
| | | CouponGoods couponGoods = new CouponGoods(); |
| | | couponGoods.setGoodsId(goodsId); |
| | | couponGoods.setCouponId(couponId); |
| | | couponGoodsMapper.insert(couponGoods); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse discountUpdate(AdminDiscountVO adminDiscountVO) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<AdminMallActivityListVo> getAdminActivityList() { |
| | | List<AdminMallActivityListVo> mallActivityList = new ArrayList<>(); |
| | | |
| | | List<MallActivity> mallActivities = this.baseMapper.selectList( |
| | | new LambdaQueryWrapper<MallActivity>() |
| | | .select(MallActivity::getId, MallActivity::getName) |
| | | .eq(MallActivity::getState, YesOrNoOrIngEnum.YES.getValue()) |
| | | ); |
| | | if(CollUtil.isNotEmpty(mallActivities)){ |
| | | for (MallActivity mallActivity : mallActivities) { |
| | | AdminMallActivityListVo adminMallActivityListVo = new AdminMallActivityListVo(); |
| | | adminMallActivityListVo.setId(mallActivity.getId()); |
| | | adminMallActivityListVo.setName(mallActivity.getName()); |
| | | mallActivityList.add(adminMallActivityListVo); |
| | | } |
| | | } |
| | | return mallActivityList; |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse changeAdminState(Long id, Integer state) { |
| | | MallActivity mallActivity = this.baseMapper.selectById(id); |
| | | mallActivity.setState(state); |
| | | this.baseMapper.updateById(mallActivity); |
| | | return new FebsResponse().success().message("操作成功"); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse delAdminActivity(Long id) { |
| | | this.baseMapper.deleteById(id); |
| | | return new FebsResponse().success().message("操作成功"); |
| | | } |
| | | |
| | | @Override |
| | | public List<AdminMallActivityListVo> getAdminActivityListByType(Integer type) { |
| | | List<AdminMallActivityListVo> mallActivityList = new ArrayList<>(); |
| | | List<MallActivity> mallActivities = this.baseMapper.selectList( |
| | | new LambdaQueryWrapper<MallActivity>() |
| | | .select(MallActivity::getId, MallActivity::getName) |
| | | .eq(MallActivity::getState, YesOrNoOrIngEnum.YES.getValue()) |
| | | .eq(MallActivity::getType, type) |
| | | ); |
| | | if(CollUtil.isNotEmpty(mallActivities)){ |
| | | for (MallActivity mallActivity : mallActivities) { |
| | | AdminMallActivityListVo adminMallActivityListVo = new AdminMallActivityListVo(); |
| | | adminMallActivityListVo.setId(mallActivity.getId()); |
| | | adminMallActivityListVo.setName(mallActivity.getName()); |
| | | mallActivityList.add(adminMallActivityListVo); |
| | | } |
| | | } |
| | | return mallActivityList; |
| | | } |
| | | } |