diff --git a/pom.xml b/pom.xml index d221cb4f4..813c1d4bb 100644 --- a/pom.xml +++ b/pom.xml @@ -16,11 +16,11 @@ yudao-module-member yudao-module-system yudao-module-infra - + yudao-module-pay - + yudao-module-mall yudao-example diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java index d57fb21b9..eb6645212 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.common.util.collection; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.map.MapUtil; import com.google.common.collect.ImmutableMap; import java.util.*; @@ -149,6 +150,41 @@ public class CollectionUtils { return builder.build(); } + /** + * 数据划分为需要新增的、还是删除的、还是更新的。 + * + * @param list1 需要处理的数据的相关编号列表 + * @param list2 数据库中存在的数据的相关编号列表 + * @param func 比较出哪些记录是新增,还是修改,还是删除 + * @return 包含需要新增、修改、删除的数据 Map 对象 + */ + public static Map> convertCDUMap(Collection list1, Collection list2, + Function>, Map>> func) { + HashMap> mapData = MapUtil.newHashMap(3); + if (CollUtil.isEmpty(list1)) { + return func.apply(mapData); + } + if (CollUtil.isEmpty(list2)) { + return func.apply(mapData); + } + // 后台存在的前端不存在的 + List d = CollectionUtils.filterList(list2, item -> !list1.contains(item)); + if (CollUtil.isNotEmpty(d)) { + mapData.put("delete", d); + } + // 前端存在的后端不存在的 + List c = CollectionUtils.filterList(list1, item -> !list2.contains(item)); + if (CollUtil.isNotEmpty(c)) { + mapData.put("create", c); + } + // 更新已存在的 + List u = CollectionUtils.filterList(list1, list2::contains); + if (CollUtil.isNotEmpty(u)) { + mapData.put("update", u); + } + return func.apply(mapData); + } + public static boolean containsAny(Collection source, Collection candidates) { return org.springframework.util.CollectionUtils.containsAny(source, candidates); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java index 0742fd314..da1220eb4 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java @@ -2,10 +2,12 @@ package cn.iocoder.yudao.module.promotion.service.combination; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; @@ -31,9 +33,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Set; +import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; @@ -67,7 +67,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic // 获取所选 spu下的所有 sku List skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(createReqVO.getSpuId())); // 校验商品 sku 是否存在 - validateProductSkuExistence(skus, createReqVO.getProducts(), CombinationProductCreateReqVO::getSkuId); + validateProductSkuExistence(createReqVO.getProducts(), skus, CombinationProductCreateReqVO::getSkuId); // TODO 艿艿 有个小问题:现在有活动时间和限制时长,活动时间的结束时间早于设置的限制时间怎么算状态比如: // 活动时间 2023-08-05 15:00:00 - 2023-08-05 15:20:00 限制时长 2小时,那么活动时间结束就结束还是加时到满两小时 @@ -119,7 +119,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic // 获取所选 spu下的所有 sku List skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(updateReqVO.getSpuId())); // 校验商品 sku 是否存在 - validateProductSkuExistence(skus, updateReqVO.getProducts(), CombinationProductUpdateReqVO::getSkuId); + validateProductSkuExistence(updateReqVO.getProducts(), skus, CombinationProductUpdateReqVO::getSkuId); // 更新 CombinationActivityDO updateObj = CombinationActivityConvert.INSTANCE.convert(updateReqVO); @@ -130,7 +130,6 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic /** * 更新秒杀商品 - * TODO 更新商品要不要封装成通用方法 * * @param updateObj DO * @param products 商品配置 @@ -141,25 +140,28 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic Set convertSet = CollectionUtils.convertSet(combinationProductDOs, CombinationProductDO::getSkuId); // 前端传过来的活动商品 Set convertSet1 = CollectionUtils.convertSet(products, CombinationProductUpdateReqVO::getSkuId); - // 删除后台存在的前端不存在的商品 - List d = CollectionUtils.filterList(convertSet, item -> !convertSet1.contains(item)); - if (CollUtil.isNotEmpty(d)) { - combinationProductMapper.deleteBatchIds(d); - } - // 前端存在的后端不存在的商品 - List c = CollectionUtils.filterList(convertSet1, item -> !convertSet.contains(item)); - if (CollUtil.isNotEmpty(c)) { - List vos = CollectionUtils.filterList(products, item -> c.contains(item.getSkuId())); - List productDOs = CombinationActivityConvert.INSTANCE.convertList(updateObj, vos); - combinationProductMapper.insertBatch(productDOs); - } - // 更新已存在的商品 - List u = CollectionUtils.filterList(convertSet1, convertSet::contains); - if (CollUtil.isNotEmpty(u)) { - List vos = CollectionUtils.filterList(products, item -> u.contains(item.getSkuId())); - List productDOs = CombinationActivityConvert.INSTANCE.convertList1(updateObj, vos, combinationProductDOs); - combinationProductMapper.updateBatch(productDOs); - } + // 分化数据 + Map> data = CollectionUtils.convertCDUMap(convertSet1, convertSet, mapData -> { + HashMap> cdu = MapUtil.newHashMap(3); + MapUtils.findAndThen(mapData, "create", list -> { + cdu.put("create", CombinationActivityConvert.INSTANCE.convertList(updateObj, + CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())))); + }); + MapUtils.findAndThen(mapData, "delete", list -> { + cdu.put("create", CollectionUtils.filterList(combinationProductDOs, item -> list.contains(item.getSkuId()))); + }); + MapUtils.findAndThen(mapData, "update", list -> { + cdu.put("update", CombinationActivityConvert.INSTANCE.convertList1(updateObj, + CollectionUtils.filterList(products, item -> list.contains(item.getSkuId())), combinationProductDOs)); + }); + return cdu; + }); + + // 执行增删改 + MapUtils.findAndThen(data, "create", item -> combinationProductMapper.insertBatch(item)); + MapUtils.findAndThen(data, "delete", item -> combinationProductMapper.deleteBatchIds( + CollectionUtils.convertSet(item, CombinationProductDO::getId))); + MapUtils.findAndThen(data, "update", item -> combinationProductMapper.updateBatch(item)); } @Override @@ -274,6 +276,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic } // TODO @puhui999:status 传入进来搞哈; + /** * APP 端获取开团记录 * diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckillactivity/SeckillActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckillactivity/SeckillActivityServiceImpl.java index 9538019f4..aa0c88726 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckillactivity/SeckillActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckillactivity/SeckillActivityServiceImpl.java @@ -64,7 +64,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { List skus = productSkuApi.getSkuListBySpuId(CollUtil.newArrayList(createReqVO.getSpuId())); // 校验商品 sku 是否存在 // TODO @puhui999:直接校验 sku 数量,是不是就完事啦,不需要校验的特别严谨哈; - validateProductSkuExistence(skus, createReqVO.getProducts(), SeckillProductCreateReqVO::getSkuId); + validateProductSkuExistence(createReqVO.getProducts(), skus, SeckillProductCreateReqVO::getSkuId); // 插入秒杀活动 SeckillActivityDO activity = SeckillActivityConvert.INSTANCE.convert(createReqVO) @@ -122,7 +122,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { // 获取所选 spu下的所有 sku List skus = productSkuApi.getSkuListBySpuId(CollUtil.newArrayList(updateReqVO.getSpuId())); // 校验商品 sku 是否存在 - validateProductSkuExistence(skus, updateReqVO.getProducts(), SeckillProductUpdateReqVO::getSkuId); + validateProductSkuExistence(updateReqVO.getProducts(), skus, SeckillProductUpdateReqVO::getSkuId); // 更新活动 SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO) diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java index f1cd18816..4c16c7836 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java @@ -31,8 +31,14 @@ public class PromotionUtils { return LocalDateTimeUtils.beforeNow(endTime) ? CommonStatusEnum.DISABLE.getStatus() : CommonStatusEnum.ENABLE.getStatus(); } - // TODO @puhui999:写个注释哈。 - public static void validateProductSkuExistence(List skus, List products, Function func) { + /** + * 校验商品 sku 是否存在 + * + * @param products 需要校验的商品 + * @param skus 数据库中的商品 skus + * @param func 获取需要校验的商品的 skuId + */ + public static void validateProductSkuExistence(List products, List skus, Function func) { // 校验 sku 个数是否一致 Set skuIdsSet = CollectionUtils.convertSet(products, func); Set skuIdsSet1 = CollectionUtils.convertSet(skus, ProductSkuRespDTO::getId); diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml index b151e6ef2..04118f184 100644 --- a/yudao-server/pom.xml +++ b/yudao-server/pom.xml @@ -54,11 +54,11 @@ - - - - - + + cn.iocoder.boot + yudao-module-pay-biz + ${revision} + @@ -68,21 +68,21 @@ - - - - - - - - - - - - - - - + + cn.iocoder.boot + yudao-module-promotion-biz + ${revision} + + + cn.iocoder.boot + yudao-module-product-biz + ${revision} + + + cn.iocoder.boot + yudao-module-trade-biz + ${revision} +