From b9ac177a64a908167f68dfed8bfd6d82ae098714 Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Wed, 14 May 2025 22:04:11 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E8=BF=9B=E8=B4=A7=E8=BD=A6?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=8D=95=E4=BB=B7=E5=8F=8A=E6=80=BB=E4=BB=B7?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/xkt/AdvertRoundController.java | 9 +++++ .../AdminAdRoundSysInterceptVO.java | 5 ++- .../vo/advertRound/AdRoundUploadPicVO.java | 3 ++ .../xkt/vo/storeProd/StoreProdVO.java | 2 ++ .../java/com/ruoyi/quartz/task/XktTask.java | 7 ++++ .../com/ruoyi/xkt/domain/AdvertRound.java | 2 +- .../AdminAdRoundPageResDTO.java | 2 ++ .../AdminAdRoundSysInterceptDTO.java | 2 ++ .../dto/advertRound/AdRoundUploadPicDTO.java | 4 +-- .../dto/userShoppingCart/ShoppingCartDTO.java | 1 + .../xkt/service/IAdvertRoundService.java | 9 +++++ .../impl/AdminAdvertRoundServiceImpl.java | 36 +++++++++++++++---- .../service/impl/AdvertRoundServiceImpl.java | 34 ++++++++++++++++-- .../service/impl/ShoppingCartServiceImpl.java | 22 +++++++++--- .../resources/mapper/AdvertRoundMapper.xml | 3 +- 15 files changed, 123 insertions(+), 18 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AdvertRoundController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AdvertRoundController.java index 1c7244642..b80bd0e0a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AdvertRoundController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AdvertRoundController.java @@ -116,5 +116,14 @@ public class AdvertRoundController extends XktBaseController { return R.ok(advertRoundService.uploadAdvertPic(BeanUtil.toBean(uploadPicVO, AdRoundUploadPicDTO.class))); } + /** + * 查看图片审核拒绝理由 + */ + @ApiOperation(value = "查看图片审核拒绝理由", httpMethod = "PUT", response = R.class) + @PutMapping("/reject-reason/{advertRoundId}") + public R getRejectReason(@PathVariable Long advertRoundId) { + return R.ok(advertRoundService.getRejectReason(advertRoundId)); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/adminAdvertRound/AdminAdRoundSysInterceptVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/adminAdvertRound/AdminAdRoundSysInterceptVO.java index 09a0db077..f8453d8b9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/adminAdvertRound/AdminAdRoundSysInterceptVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/adminAdvertRound/AdminAdRoundSysInterceptVO.java @@ -25,9 +25,12 @@ public class AdminAdRoundSysInterceptVO { @NotNull(message = "推广轮次ID不能为空") @ApiModelProperty(value = "推广轮次ID") private Long advertRoundId; - @NotBlank(message = "档口ID不能为空") + @NotNull(message = "档口ID不能为空") @ApiModelProperty(value = "档口ID") private Long storeId; + @NotBlank(message = "档口名称不能为空") + @ApiModelProperty(value = "档口名称") + private String storeName; @ApiModelProperty(value = "管理员上传推广图") private AARSIFileVO file; @ApiModelProperty(value = "档口商品ID集合") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/AdRoundUploadPicVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/AdRoundUploadPicVO.java index 042d8f78b..216f80053 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/AdRoundUploadPicVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/AdRoundUploadPicVO.java @@ -24,6 +24,9 @@ public class AdRoundUploadPicVO { @NotNull(message = "推广轮次ID不能为空!") @ApiModelProperty(value = "推广轮次ID") private Long advertRoundId; + @NotNull(message = "档口ID不能为空!") + @ApiModelProperty(value = "档口ID") + private Long storeId; @NotBlank(message = "文件名称不能为空!") @ApiModelProperty(value = "文件名称") private String fileName; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java index 9824716ca..22a10b72b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java @@ -2,6 +2,7 @@ package com.ruoyi.web.controller.xkt.vo.storeProd; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.common.xss.Xss; import com.ruoyi.web.controller.xkt.vo.storeColor.StoreColorVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -97,6 +98,7 @@ public class StoreProdVO { private StoreProdSvcVO svc; @NotBlank(message = "详情内容不能为空!") @ApiModelProperty(value = "详情内容", required = true) + @Xss private String detail; @ApiModelProperty(value = "档口生产工艺") private StoreProdProcessVO process; diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java index 5cd0c762b..8da87735e 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java @@ -462,6 +462,13 @@ public class XktTask { }); } + /** + * 每天晚上11点将单据日期为当天的图片拷贝到store_advert_file中 + */ + public void copyPicToStoreAdvertFile() { + + } + /** * 给商品打风格标签 diff --git a/xkt/src/main/java/com/ruoyi/xkt/domain/AdvertRound.java b/xkt/src/main/java/com/ruoyi/xkt/domain/AdvertRound.java index ca8a6b81d..6e53209d4 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/domain/AdvertRound.java +++ b/xkt/src/main/java/com/ruoyi/xkt/domain/AdvertRound.java @@ -96,7 +96,7 @@ public class AdvertRound extends XktBaseEntity { */ private Integer picAuditStatus; /** - * 图片是否设置 0 未设置 1已设置 + * 图片是否设置 1 未设置 2已设置 */ private Integer picSetType; /** diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundPageResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundPageResDTO.java index 84470627b..839795dbb 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundPageResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundPageResDTO.java @@ -17,6 +17,8 @@ public class AdminAdRoundPageResDTO { @ApiModelProperty(value = "推广轮次ID") private Long advertRoundId; + @ApiModelProperty(value = "档口ID") + private Long storeId; @ApiModelProperty(value = "档口名称") private String storeName; @ApiModelProperty(value = "投放平台") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundSysInterceptDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundSysInterceptDTO.java index 8d65f1217..7d4182c90 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundSysInterceptDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/adminAdvertRound/AdminAdRoundSysInterceptDTO.java @@ -24,6 +24,8 @@ public class AdminAdRoundSysInterceptDTO { private Long advertRoundId; @ApiModelProperty(value = "档口ID") private Long storeId; + @ApiModelProperty(value = "档口名称") + private String storeName; @ApiModelProperty(value = "管理员上传推广图") private AARSIFileVO file; @ApiModelProperty(value = "档口商品ID集合") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/AdRoundUploadPicDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/AdRoundUploadPicDTO.java index 42e6b9a41..5833e7dae 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/AdRoundUploadPicDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/AdRoundUploadPicDTO.java @@ -6,8 +6,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import java.math.BigDecimal; /** @@ -23,6 +21,8 @@ public class AdRoundUploadPicDTO { @ApiModelProperty(value = "推广轮次ID") private Long advertRoundId; + @ApiModelProperty(value = "档口ID") + private Long storeId; @ApiModelProperty(value = "文件名称") private String fileName; @ApiModelProperty(value = "文件路径") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShoppingCartDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShoppingCartDTO.java index a7ac318ef..475c215ab 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShoppingCartDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShoppingCartDTO.java @@ -33,6 +33,7 @@ public class ShoppingCartDTO { @Data @ApiModel(value = "档口优惠列表") + @Accessors(chain = true) public static class SCDetailDTO { @ApiModelProperty(value = "档口商品颜色ID") private Long storeProdColorId; diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IAdvertRoundService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IAdvertRoundService.java index b6b762bbb..f01621d92 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IAdvertRoundService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IAdvertRoundService.java @@ -107,4 +107,13 @@ public interface IAdvertRoundService { * @return Integer */ Integer uploadAdvertPic(AdRoundUploadPicDTO picDTO); + + /** + * 获取审核失败的拒绝理由 + * + * @param advertRoundId 档口轮次ID + * @return String + */ + String getRejectReason(Long advertRoundId); + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdminAdvertRoundServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdminAdvertRoundServiceImpl.java index 37c4bebbe..0ce1a2f9a 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdminAdvertRoundServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdminAdvertRoundServiceImpl.java @@ -24,6 +24,7 @@ import com.ruoyi.xkt.mapper.SysFileMapper; import com.ruoyi.xkt.service.IAdminAdvertRoundService; import com.ruoyi.xkt.service.IAssetService; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; @@ -79,7 +80,7 @@ public class AdminAdvertRoundServiceImpl implements IAdminAdvertRoundService { .setPicSetTypeName(ObjectUtils.isNotEmpty(item.getPicSetType()) ? AdPicSetType.of(item.getPicSetType()).getLabel() : "") .setTypeName(AdType.of(item.getTypeId()).getLabel()) .setBiddingStatusName(ObjectUtils.isNotEmpty(item.getBiddingStatus()) ? AdBiddingStatus.of(item.getBiddingStatus()).getLabel() : "")); - return Page.convert(new PageInfo<>(BeanUtil.copyToList(list, AdminAdRoundPageResDTO.class))); + return Page.convert(new PageInfo<>(list)); } /** @@ -121,10 +122,14 @@ public class AdminAdvertRoundServiceImpl implements IAdminAdvertRoundService { .eq(AdvertRound::getId, unsubscribeDTO.getAdvertRoundId()).eq(AdvertRound::getDelFlag, Constants.UNDELETED) .eq(AdvertRound::getStoreId, unsubscribeDTO.getStoreId()))) .orElseThrow(() -> new ServiceException("档口购买的推广位不存在!", HttpStatus.ERROR)); + // 若是推广位已投放,则不可退订 + if (Objects.equals(advertRound.getLaunchStatus(), AdLaunchStatus.LAUNCHING.getValue())) { + throw new ServiceException("推广位已投放,购买后不可退订!", HttpStatus.ERROR); + } // 判断当前时间距离开播是否小于12h,若是:则不可取消 Date twelveHoursAfter = DateUtils.toDate(LocalDateTime.now().plusHours(12)); if (twelveHoursAfter.after(advertRound.getStartTime())) { - throw new ServiceException("距推广开播小于12小时,不可退订!"); + throw new ServiceException("距推广开播小于12小时,不可退订!", HttpStatus.ERROR); } // 如果扣除了费用,则减去退回金额 BigDecimal remainPayPrice = advertRound.getPayPrice().subtract(ObjectUtils.defaultIfNull(unsubscribeDTO.getDeductionFee(), BigDecimal.ZERO)); @@ -146,7 +151,8 @@ public class AdminAdvertRoundServiceImpl implements IAdminAdvertRoundService { this.isSuperAdmin(); AdvertRound advertRound = Optional.ofNullable(this.advertRoundMapper.selectOne(new LambdaQueryWrapper() - .eq(AdvertRound::getId, picDTO.getAdvertRoundId()).eq(AdvertRound::getDelFlag, Constants.UNDELETED))) + .eq(AdvertRound::getId, picDTO.getAdvertRoundId()).eq(AdvertRound::getStoreId, picDTO.getStoreId()) + .eq(AdvertRound::getDelFlag, Constants.UNDELETED))) .orElseThrow(() -> new ServiceException("推广位不存在!", HttpStatus.ERROR)); SysFile file = BeanUtil.toBean(picDTO, SysFile.class); int count = this.fileMapper.insert(file); @@ -186,15 +192,32 @@ public class AdminAdvertRoundServiceImpl implements IAdminAdvertRoundService { if (Objects.equals(advertRound.getSysIntercept(), AdSysInterceptType.INTERCEPT.getValue())) { throw new ServiceException("该推广位已被拦截,不可再次拦截!", HttpStatus.ERROR); } + // 若是 时间范围,则判断该推广位、该轮次是否有相同档口已出价或竞价成功,若是,则不可购买。若是位置枚举,则判断该位置 是否是相同档口已出价,若是,则不可购买。 + if (Objects.equals(advertRound.getShowType(), AdShowType.TIME_RANGE.getValue())) { + List timeRangeExistList = this.advertRoundMapper.selectList(new LambdaQueryWrapper() + .eq(AdvertRound::getAdvertId, advertRound.getAdvertId()).eq(AdvertRound::getRoundId, advertRound.getRoundId()) + .eq(AdvertRound::getStoreId, interceptDTO.getStoreId()).eq(AdvertRound::getDelFlag, Constants.UNDELETED)); + if (CollectionUtils.isNotEmpty(timeRangeExistList)) { + throw new ServiceException("档口" + interceptDTO.getStoreName() + "已出价该推广位,不可重复购买!", HttpStatus.ERROR); + } + } else { + List positionEnumExistList = this.advertRoundMapper.selectList(new LambdaQueryWrapper() + .eq(AdvertRound::getAdvertId, advertRound.getAdvertId()).eq(AdvertRound::getRoundId, advertRound.getRoundId()) + .eq(AdvertRound::getPosition, advertRound.getPosition()).eq(AdvertRound::getDelFlag, Constants.UNDELETED) + .eq(AdvertRound::getStoreId, interceptDTO.getStoreId())); + } + + + // 若该推广位已投放 if (Objects.equals(advertRound.getLaunchStatus(), AdLaunchStatus.LAUNCHING.getValue())) { - // 若该广告位 为时间范围 且 为档口正常购买(也有可能为系统拦截),则均不可不可拦截该推广位 + // 若该广告位 为时间范围 且 为档口正常购买(也有可能为系统拦截),则均不可拦截该推广位 if (Objects.equals(advertRound.getShowType(), AdShowType.TIME_RANGE.getValue()) && ObjectUtils.isNotEmpty(advertRound.getStoreId())) { throw new ServiceException("该推广位为档口正常购买,已投放,不可拦截!", HttpStatus.ERROR); } // 若该广告位为位置枚举,则不可购买,因为位置枚举一般都是第二天播放 if (Objects.equals(advertRound.getShowType(), AdShowType.POSITION_ENUM.getValue())) { - throw new ServiceException("该推广位为位置枚举,不可购买,因为位置枚举一般都是第二天播放!", HttpStatus.ERROR); + throw new ServiceException("该推广位不可购买,因为正在播放!", HttpStatus.ERROR); } // 若为待投放推广 } else { @@ -218,7 +241,8 @@ public class AdminAdvertRoundServiceImpl implements IAdminAdvertRoundService { if (ObjectUtils.isNotEmpty(interceptDTO.getFile())) { SysFile file = BeanUtil.toBean(interceptDTO.getFile(), SysFile.class); this.fileMapper.insert(file); - advertRound.setPicId(file.getId()).setPicAuditStatus(AdPicAuditStatus.AUDIT_PASS.getValue()).setPicDesignType(AdDesignType.SYS_DESIGN.getValue()); + advertRound.setPicId(file.getId()).setPicAuditStatus(AdPicAuditStatus.AUDIT_PASS.getValue()) + .setPicDesignType(AdDesignType.SYS_DESIGN.getValue()).setPicSetType(AdPicSetType.SET.getValue()); } if (ObjectUtils.isNotEmpty(interceptDTO.getStoreProdIdList())) { advertRound.setProdIdStr(StringUtils.join(interceptDTO.getStoreProdIdList(), ",")); diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java index f9f9dba97..ef58e910b 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java @@ -385,8 +385,8 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService { .setSysIntercept(AdSysInterceptType.UN_INTERCEPT.getValue()) .setStoreId(createDTO.getStoreId()).setPayPrice(createDTO.getPayPrice()).setVoucherDate(java.sql.Date.valueOf(LocalDate.now())) .setBiddingStatus(AdBiddingStatus.BIDDING.getValue()).setBiddingTempStatus(AdBiddingStatus.BIDDING_SUCCESS.getValue()) - // 展示类型非商品才赋值 setType .setPicSetType(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? AdPicSetType.UN_SET.getValue() : null) + .setPicAuditStatus(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? AdPicAuditStatus.UN_AUDIT.getValue() : null) .setPicDesignType(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? createDTO.getPicDesignType() : null) .setPicAuditStatus(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? AdPicAuditStatus.UN_AUDIT.getValue() : null) .setProdIdStr(createDTO.getProdIdStr()); @@ -575,13 +575,41 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService { // 更新推广位的图片ID advertRound.setPicId(file.getId()); this.advertRoundMapper.updateById(advertRound); - // 将档口上传图片保存到AdvertStoreFile + + // TODO 是否要保存到AdvertStoreFile 因为还没审核通过 + // TODO 是否要保存到AdvertStoreFile 因为还没审核通过 + // TODO 是否要保存到AdvertStoreFile 因为还没审核通过 + // TODO 是否要保存到AdvertStoreFile 因为还没审核通过 + + + + + + /*// 将档口上传图片保存到AdvertStoreFile AdvertStoreFile advertStoreFile = new AdvertStoreFile().setAdvertRoundId(advertRound.getId()) .setStoreId(advertRound.getStoreId()).setFileId(file.getId()).setTypeId(advertRound.getTypeId()); - this.advertStoreFileMapper.insert(advertStoreFile); + this.advertStoreFileMapper.insert(advertStoreFile);*/ + + return count; } + /** + * 获取审核失败的拒绝理由 + * + * @param advertRoundId 档口轮次ID + * @return String + */ + @Override + @Transactional(readOnly = true) + public String getRejectReason(Long advertRoundId) { + AdvertRound advertRound = Optional.ofNullable(this.advertRoundMapper.selectOne(new LambdaQueryWrapper() + .eq(AdvertRound::getId, advertRoundId).eq(AdvertRound::getDelFlag, Constants.UNDELETED) + .eq(AdvertRound::getPicAuditStatus, AdPicAuditStatus.AUDIT_REJECTED.getValue()))) + .orElseThrow(() -> new ServiceException("推广位不存在!", HttpStatus.ERROR)); + return advertRound.getRejectReason(); + } + /** * 通过定时任务往redis中放当前推广位 当前播放轮 或 即将播放轮 的截止时间;每晚12:05:00执行 * 比如:5.1 - 5.3 diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java index 832f5949d..60f3cdafb 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java @@ -23,6 +23,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -286,10 +287,23 @@ public class ShoppingCartServiceImpl implements IShoppingCartService { .in(ShoppingCartDetail::getShoppingCartId, shoppingCartList.stream().map(ShoppingCart::getId).collect(Collectors.toList())) .eq(ShoppingCartDetail::getDelFlag, Constants.UNDELETED)); Map> detailMap = detailList.stream().collect(Collectors.groupingBy(ShoppingCartDetail::getShoppingCartId)); - return shoppingCartList.stream().map(x -> BeanUtil.toBean(x, ShoppingCartDTO.class) - .setStoreName(ObjectUtils.isNotEmpty(storeMap.get(x.getStoreId())) ? storeMap.get(x.getStoreId()).getStoreName() : "") - .setDetailList(BeanUtil.copyToList(detailMap.get(x.getId()), ShoppingCartDTO.SCDetailDTO.class))) - .collect(Collectors.toList()); + // 获取明细商品的价格 + List priceList = this.prodColorPriceMapper.selectList(new LambdaQueryWrapper() + .in(StoreProductColorPrice::getStoreProdId, shoppingCartList.stream().map(ShoppingCart::getStoreProdId).collect(Collectors.toList())) + .in(StoreProductColorPrice::getStoreColorId, detailList.stream().map(ShoppingCartDetail::getStoreColorId).collect(Collectors.toList())) + .eq(StoreProductColorPrice::getDelFlag, Constants.UNDELETED)); + // 商品价格map + Map priceMap = priceList.stream().collect(Collectors + .toMap(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString(), x -> ObjectUtils.defaultIfNull(x.getPrice(), BigDecimal.ZERO))); + return shoppingCartList.stream().map(x -> { + ShoppingCartDTO shopCartDTO = BeanUtil.toBean(x, ShoppingCartDTO.class) + .setStoreName(ObjectUtils.isNotEmpty(storeMap.get(x.getStoreId())) ? storeMap.get(x.getStoreId()).getStoreName() : ""); + List shopCartDetailList = detailMap.get(x.getId()).stream().map(detail -> { + final BigDecimal price = ObjectUtils.defaultIfNull(priceMap.get(x.getStoreProdId().toString() + detail.getStoreColorId().toString()), BigDecimal.ZERO); + return BeanUtil.toBean(detail, ShoppingCartDTO.SCDetailDTO.class).setPrice(price).setAmount(price.multiply(BigDecimal.valueOf(detail.getQuantity()))); + }).collect(Collectors.toList()); + return shopCartDTO.setDetailList(shopCartDetailList); + }).collect(Collectors.toList()); } /** diff --git a/xkt/src/main/resources/mapper/AdvertRoundMapper.xml b/xkt/src/main/resources/mapper/AdvertRoundMapper.xml index bfe3f58f5..f64810763 100644 --- a/xkt/src/main/resources/mapper/AdvertRoundMapper.xml +++ b/xkt/src/main/resources/mapper/AdvertRoundMapper.xml @@ -67,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"