diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ShoppingCartController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ShoppingCartController.java index 31d9c2c9e..32e06a0ec 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ShoppingCartController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/ShoppingCartController.java @@ -32,14 +32,14 @@ public class ShoppingCartController extends XktBaseController { final IShoppingCartService shopCartService; - @PreAuthorize("@ss.hasAnyRoles('seller,agent')") + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,agent')") @ApiOperation(value = "获取用户进货车各状态数量", httpMethod = "GET", response = R.class) @GetMapping("/status/num") public R getStatusNum() { return R.ok(BeanUtil.toBean(shopCartService.getStatusNum(), ShopCartStatusCountResVO.class)); } - @PreAuthorize("@ss.hasAnyRoles('seller,agent')") + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,agent')") @ApiOperation(value = "电商卖家添加商品到进货车", httpMethod = "POST", response = R.class) @Log(title = "电商卖家添加商品到进货车", businessType = BusinessType.INSERT) @PostMapping @@ -47,7 +47,7 @@ public class ShoppingCartController extends XktBaseController { return R.ok(shopCartService.create(BeanUtil.toBean(shopCartVO, ShoppingCartDTO.class))); } - @PreAuthorize("@ss.hasAnyRoles('seller,agent')") + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,agent')") @ApiOperation(value = "电商卖家编辑进货车商品", httpMethod = "PUT", response = R.class) @Log(title = "电商卖家编辑进货车商品", businessType = BusinessType.UPDATE) @PutMapping @@ -55,14 +55,14 @@ public class ShoppingCartController extends XktBaseController { return R.ok(shopCartService.update(BeanUtil.toBean(editVO, ShoppingCartEditDTO.class))); } - @PreAuthorize("@ss.hasAnyRoles('seller,agent')") + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,agent')") @ApiOperation(value = "获取用户进货车列表", httpMethod = "POST", response = R.class) @PostMapping("/page") public R> page(@Validated @RequestBody ShopCartPageVO pageVO) { return R.ok(shopCartService.page(BeanUtil.toBean(pageVO, ShopCartPageDTO.class))); } - @PreAuthorize("@ss.hasAnyRoles('seller,agent')") + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,agent')") @ApiOperation(value = "用户进货车列表点击编辑获取数据", httpMethod = "GET", response = R.class) @GetMapping("/edit/{shoppingCartId}") public R getEditInfo(@PathVariable Long shoppingCartId) { @@ -77,7 +77,7 @@ public class ShoppingCartController extends XktBaseController { return R.ok(BeanUtil.copyToList(shopCartService.getList(BeanUtil.toBean(listVO, ShopCartListDTO.class)), ShopCartResVO.class)); } - @PreAuthorize("@ss.hasAnyRoles('seller,agent')") + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,agent')") @ApiOperation(value = "用户删除进货车商品", httpMethod = "DELETE", response = R.class) @Log(title = "用户删除进货车商品", businessType = BusinessType.DELETE) @DeleteMapping @@ -85,5 +85,14 @@ public class ShoppingCartController extends XktBaseController { return R.ok(shopCartService.delete(BeanUtil.toBean(deleteVO, ShopCartDeleteDTO.class))); } + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,agent')") + @ApiOperation(value = "用户修改进货车明细数量", httpMethod = "PUT", response = R.class) + @Log(title = "用户修改进货车明细数量", businessType = BusinessType.UPDATE) + @PutMapping("/detail/quantity") + public R updateDetailQuantity(@Validated @RequestBody ShopCartDetailQuantityUpdateVO updateQuantityVO) { + return R.ok(shopCartService.updateDetailQuantity(BeanUtil.toBean(updateQuantityVO, ShopCartDetailQuantityUpdateDTO.class))); + } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdPageVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdPageVO.java index 085a50457..6219abd19 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdPageVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdPageVO.java @@ -23,6 +23,8 @@ public class StoreProdPageVO extends BasePageVO { private String prodArtNum; @ApiModelProperty(value = "商品分类ID") private Long prodCateId; + @ApiModelProperty(value = "是否私款 0 否 1 是") + private Integer privateItem; @ApiModelProperty(value = "档口ID", required = true) @NotNull(message = "档口ID不能为空") private Long storeId; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java index 922aad185..6cefa57c8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java @@ -34,6 +34,8 @@ public class StoreProdResVO { private String prodArtNum; @ApiModelProperty(value = "商品标题") private String prodTitle; + @ApiModelProperty(value = "0 否 1 是") + private Integer privateItem; @ApiModelProperty(value = "商品重量") private BigDecimal prodWeight; @ApiModelProperty(value = "生产价格") 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 86ccbebcd..288a34a3c 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 @@ -46,6 +46,10 @@ public class StoreProdVO { @Size(min = 0, max = 60, message = "商品标题不能超过60个字!") @NotBlank(message = "商品标题不能为空!") private String prodTitle; + + @ApiModelProperty(value = "0 否 1 是", required = true) + private Integer privateItem; + @ApiModelProperty(value = "商品重量") private BigDecimal prodWeight; @ApiModelProperty(value = "生产价格") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/userShoppingCart/ShopCartDetailQuantityUpdateVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/userShoppingCart/ShopCartDetailQuantityUpdateVO.java new file mode 100644 index 000000000..5b6af90f0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/userShoppingCart/ShopCartDetailQuantityUpdateVO.java @@ -0,0 +1,25 @@ +package com.ruoyi.web.controller.xkt.vo.userShoppingCart; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel +@Data +public class ShopCartDetailQuantityUpdateVO { + + @NotNull(message = "进货车明细ID不可为空!") + @ApiModelProperty(value = "进货车明细ID", required = true) + private Long shoppingCartDetailId; + @NotNull(message = "数量不可为空!") + @ApiModelProperty(value = "数量", required = true) + private Integer quantity; + +} 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 01ebb18b5..2abb0cd38 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 @@ -427,7 +427,7 @@ public class XktTask { // 5. 打 关注榜 标签,根据关注量,进行排序 this.tagAttentionRank(now, yesterday, tagList); // 6. 打 库存榜 标签,根据库存量,进行排序 - this.tagStockTag(yesterday, oneMonthAgo, tagList); + this.tagStockTag(now, yesterday, oneMonthAgo, tagList); // 7. 打 七日上新 标签 this.tag7DaysNewTag(now, yesterday, oneWeekAgo, tagList); if (CollectionUtils.isEmpty(tagList)) { @@ -503,8 +503,9 @@ public class XktTask { */ @Transactional public void dailyProdWeight() { + // 筛选非私款的商品 List storeProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper() - .eq(StoreProduct::getDelFlag, Constants.UNDELETED)); + .eq(StoreProduct::getDelFlag, Constants.UNDELETED).eq(StoreProduct::getPrivateItem, EProductItemType.NON_PRIVATE_ITEM.getValue())); if (CollectionUtils.isEmpty(storeProdList)) { return; } @@ -543,7 +544,9 @@ public class XktTask { */ @Transactional public void dailyStoreWeight() { - List storeProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper().eq(StoreProduct::getDelFlag, Constants.UNDELETED)); + // 筛选非私款的商品 + List storeProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProduct::getDelFlag, Constants.UNDELETED).eq(StoreProduct::getPrivateItem, EProductItemType.NON_PRIVATE_ITEM.getValue())); if (CollectionUtils.isEmpty(storeProdList)) { return; } @@ -773,8 +776,10 @@ public class XktTask { final List storeIdList = memberList.stream().map(StoreMember::getStoreId).collect(Collectors.toList()); List storeList = this.storeMapper.selectList(new LambdaQueryWrapper() .eq(Store::getDelFlag, Constants.UNDELETED).in(Store::getId, storeIdList)); + // 非私款商品才会计入权重 List storeProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper() - .eq(StoreProduct::getDelFlag, Constants.UNDELETED).in(StoreProduct::getStoreId, storeIdList)); + .eq(StoreProduct::getDelFlag, Constants.UNDELETED).eq(StoreProduct::getPrivateItem, EProductItemType.NON_PRIVATE_ITEM.getValue()) + .in(StoreProduct::getStoreId, storeIdList)); if (CollectionUtils.isEmpty(storeProdList)) { return; } @@ -846,15 +851,16 @@ public class XktTask { public void hourPublicStoreProduct() { // 获取当前时间 格式化为 yyyy-MM-dd HH:00:00 String hourTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00").format(LocalDateTime.now()); - // 当前整点待发布的商品 - List unpublicList = this.storeProdMapper.selectList(new LambdaQueryWrapper() + // 当前整点待发布的商品 必须为非私款商品 + List unPublicList = this.storeProdMapper.selectList(new LambdaQueryWrapper() .eq(StoreProduct::getDelFlag, Constants.UNDELETED).eq(StoreProduct::getListingWaySchedule, hourTime) + .eq(StoreProduct::getPrivateItem, EProductItemType.NON_PRIVATE_ITEM.getValue()) .eq(StoreProduct::getProdStatus, EProductStatus.UN_PUBLISHED.getValue())); - if (CollectionUtils.isEmpty(unpublicList)) { + if (CollectionUtils.isEmpty(unPublicList)) { return; } - System.err.println(unpublicList); - final List storeProdIdList = unpublicList.stream().map(StoreProduct::getId).map(String::valueOf).collect(Collectors.toList()); + System.err.println(unPublicList); + final List storeProdIdList = unPublicList.stream().map(StoreProduct::getId).map(String::valueOf).collect(Collectors.toList()); // 获取所有的商品的第一张主图 List mainPicList = this.storeProdFileMapper.selectMainPic(storeProdIdList); // 所有的商品主图map @@ -880,11 +886,11 @@ public class XktTask { .stream().collect(Collectors.toMap(StoreProductCategoryAttribute::getStoreProdId, x -> x)); // 档口商品对应的档口 Map storeMap = this.storeMapper.selectList(new LambdaQueryWrapper().eq(Store::getDelFlag, Constants.UNDELETED) - .in(Store::getId, unpublicList.stream().map(StoreProduct::getStoreId).collect(Collectors.toList()))) + .in(Store::getId, unPublicList.stream().map(StoreProduct::getStoreId).collect(Collectors.toList()))) .stream().collect(Collectors.toMap(Store::getId, x -> x)); // 构建批量操作请求 List bulkOperations = new ArrayList<>(); - for (StoreProduct product : unpublicList) { + for (StoreProduct product : unPublicList) { final SysProductCategory cate = prodCateMap.get(product.getProdCateId()); final SysProductCategory parCate = ObjectUtils.isEmpty(cate) ? null : prodCateMap.get(cate.getParentId()); final Store store = storeMap.get(product.getStoreId()); @@ -929,7 +935,7 @@ public class XktTask { } catch (Exception e) { log.error("批量插入到 ES 失败", e); } - for (StoreProduct product : unpublicList) { + for (StoreProduct product : unPublicList) { List mainPicUrlList = mainPicMap.get(product.getId()); if (CollUtil.isEmpty(mainPicUrlList)) { return; @@ -1313,6 +1319,7 @@ public class XktTask { */ private void tagSevenDayNew(Date now, Date yesterday, Date fourDaysAgo, Date oneWeekAgo, List tagList) { List storeProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProduct::getPrivateItem, EProductItemType.NON_PRIVATE_ITEM.getValue()) .eq(StoreProduct::getDelFlag, Constants.UNDELETED).between(StoreProduct::getCreateTime, oneWeekAgo, fourDaysAgo)); if (CollectionUtils.isEmpty(storeProdList)) { return; @@ -1332,6 +1339,7 @@ public class XktTask { */ private void tagThreeDayNew(Date now, Date yesterday, Date fourDaysAgo, List tagList) { List storeProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProduct::getPrivateItem, EProductItemType.NON_PRIVATE_ITEM.getValue()) .eq(StoreProduct::getDelFlag, Constants.UNDELETED).between(StoreProduct::getCreateTime, fourDaysAgo, yesterday)); if (CollectionUtils.isEmpty(storeProdList)) { return; @@ -1395,7 +1403,7 @@ public class XktTask { */ private void tag7DaysNewTag(Date now, Date yesterday, Date oneWeekAgo, List tagList) { List newProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper() - .eq(StoreProduct::getDelFlag, Constants.UNDELETED) + .eq(StoreProduct::getDelFlag, Constants.UNDELETED).eq(StoreProduct::getPrivateItem, EProductItemType.NON_PRIVATE_ITEM.getValue()) .in(StoreProduct::getProdStatus, Collections.singletonList(EProductStatus.ON_SALE.getValue())) .between(StoreProduct::getCreateTime, oneWeekAgo, yesterday)); if (CollectionUtils.isEmpty(newProdList)) { @@ -1403,24 +1411,25 @@ public class XktTask { } newProdList.stream().map(StoreProduct::getStoreId).distinct().forEach(x -> { tagList.add(DailyStoreTag.builder().storeId(x).type(StoreTagType.SEVEN_DAY_NEW_RANK.getValue()) - .tag("七日上新").voucherDate(yesterday).build()); + .tag("七日上新").voucherDate(now).build()); }); } /** * 给档口打库存标签 * + * @param now 今天 * @param yesterday 昨天 * @param oneMonthAgo 一月前 * @param tagList 标签列表 */ - private void tagStockTag(Date yesterday, Date oneMonthAgo, List tagList) { + private void tagStockTag(Date now, Date yesterday, Date oneMonthAgo, List tagList) { List top10List = this.stockMapper.selectTop10List(yesterday, oneMonthAgo); if (CollectionUtils.isEmpty(top10List)) { return; } tagList.addAll(top10List.stream().map(x -> DailyStoreTag.builder().storeId(x.getStoreId()).type(StoreTagType.STOCK_RANK.getValue()) - .tag("库存充足").voucherDate(yesterday).build()).collect(Collectors.toList())); + .tag("库存充足").voucherDate(now).build()).collect(Collectors.toList())); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProduct.java b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProduct.java index d656eb49c..fd5ced258 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProduct.java +++ b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProduct.java @@ -58,6 +58,11 @@ public class StoreProduct extends XktBaseEntity { @Excel(name = "商品标题") private String prodTitle; + /** + * 是否私款 0 否 1 是 + */ + private Integer privateItem; + /** * 商品重量 */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java index 5e16c5f7a..42e8e33ff 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java @@ -39,6 +39,8 @@ public class StoreProdDTO { private String prodArtNum; @ApiModelProperty(value = "商品标题") private String prodTitle; + @ApiModelProperty(value = "0 否 1 是") + private Integer privateItem; @ApiModelProperty(value = "商品重量") private BigDecimal prodWeight; @ApiModelProperty(value = "生产价格") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageDTO.java index f16999da7..b43d63f21 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageDTO.java @@ -22,6 +22,8 @@ public class StoreProdPageDTO extends BasePageDTO { private String prodArtNum; @ApiModelProperty(value = "商品分类ID") private Long prodCateId; + @ApiModelProperty(value = "是否私款 0 否 1 是") + private Integer privateItem; @ApiModelProperty(value = "档口ID") private Long storeId; @ApiModelProperty(value = "商品状态") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageResDTO.java index ce24792b1..87884c441 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdPageResDTO.java @@ -19,6 +19,8 @@ import java.util.Date; @Accessors(chain = true) public class StoreProdPageResDTO { + @ApiModelProperty(value = "是否私款 0 否 1 是") + private Integer privateItem; @ApiModelProperty(value = "档口商品颜色ID") private Long storeProdColorId; @ApiModelProperty(value = "档口商品ID") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java index d4b8ac654..0fa9ff8ae 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java @@ -40,6 +40,8 @@ public class StoreProdResDTO { private String prodArtNum; @ApiModelProperty(value = "商品标题") private String prodTitle; + @ApiModelProperty(value = "0 否 1 是") + private Integer privateItem; @ApiModelProperty(value = "商品重量") private BigDecimal prodWeight; @ApiModelProperty(value = "生产价格") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShopCartDetailQuantityUpdateDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShopCartDetailQuantityUpdateDTO.java new file mode 100644 index 000000000..ff60ebae6 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShopCartDetailQuantityUpdateDTO.java @@ -0,0 +1,21 @@ +package com.ruoyi.xkt.dto.userShoppingCart; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel +@Data +public class ShopCartDetailQuantityUpdateDTO { + + @ApiModelProperty(value = "进货车明细ID") + private Long shoppingCartDetailId; + @ApiModelProperty(value = "数量") + private Integer quantity; + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/enums/EProductItemType.java b/xkt/src/main/java/com/ruoyi/xkt/enums/EProductItemType.java new file mode 100644 index 000000000..bdbc331bc --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/enums/EProductItemType.java @@ -0,0 +1,35 @@ +package com.ruoyi.xkt.enums; + +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.exception.ServiceException; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author liangyq + * @date 2025-04-02 23:42 + */ +@Getter +@AllArgsConstructor +public enum EProductItemType { + + // 非私款 + NON_PRIVATE_ITEM(0, "非私款"), + // 私款 + PRIVATE_ITEM(1, "私款"), + + ; + + private final Integer value; + private final String label; + + public static EProductItemType of(Integer value) { + for (EProductItemType e : EProductItemType.values()) { + if (e.getValue().equals(value)) { + return e; + } + } + throw new ServiceException("未知商品私款状态", HttpStatus.ERROR); + } + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java index a0f95af9c..f83e7c697 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java @@ -18,13 +18,6 @@ import java.util.List; */ @Repository public interface StoreProductMapper extends BaseMapper { - /** - * 查询档口商品列表 - * - * @param storeProduct 档口商品 - * @return 档口商品集合 - */ - List selectStoreProductList(StoreProduct storeProduct); /** * 根据商品货号模糊查询档口商品并返回商品主图 @@ -37,6 +30,7 @@ public interface StoreProductMapper extends BaseMapper { /** * 档口商品ID列表 + * 过滤掉 私款商品 * * @param idList id列表 * @return List diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IShoppingCartService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IShoppingCartService.java index 99a911ca7..9fe583fc5 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IShoppingCartService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IShoppingCartService.java @@ -68,4 +68,11 @@ public interface IShoppingCartService { */ ShopCartStatusCountResDTO getStatusNum(); + /** + * 用户更新进货车明细数量 + * + * @param updateQuantityDTO 更新入参 + * @return Integer + */ + Integer updateDetailQuantity(ShopCartDetailQuantityUpdateDTO updateQuantityDTO); } 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 9287438c9..0a16980ab 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 @@ -310,6 +310,26 @@ public class ShoppingCartServiceImpl implements IShoppingCartService { return this.shopCartMapper.getStatusNum(SecurityUtils.getUserId(), sixMonthAgo, now); } + /** + * 用户更新进货车明细数量 + * + * @param updateQuantityDTO 更新入参 + * @return Integer + */ + @Override + @Transactional + public Integer updateDetailQuantity(ShopCartDetailQuantityUpdateDTO updateQuantityDTO) { + // 数量不能小于等于0 + if (0 >= updateQuantityDTO.getQuantity()) { + throw new ServiceException("数量不能小于等于0!", HttpStatus.ERROR); + } + ShoppingCartDetail detail = Optional.ofNullable(this.shopCartDetailMapper.selectOne(new LambdaQueryWrapper() + .eq(ShoppingCartDetail::getId, updateQuantityDTO.getShoppingCartDetailId()).eq(ShoppingCartDetail::getDelFlag, Constants.UNDELETED))) + .orElseThrow(() -> new ServiceException("进货车明细不存在!", HttpStatus.ERROR)); + detail.setQuantity(updateQuantityDTO.getQuantity()); + return this.shopCartDetailMapper.updateById(detail); + } + /** * 获取档口商品颜色尺码的库存 * diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java index 0549c2a61..d900b18f5 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java @@ -217,8 +217,9 @@ public class StoreProductServiceImpl implements IStoreProductService { this.createProdColor(createDTO, storeProd.getId(), storeProd.getStoreId(), storeProd.getProdArtNum()); // 新增档口商品其它属性 this.createOtherProperties(createDTO, storeProd); - // 立即发布 将商品同步到 ES 商品文档,并将商品主图同步到 以图搜款服务中 - if (Objects.equals(storeProd.getListingWay(), ListingType.RIGHT_NOW.getValue())) { + // 非私款的商品 且 立即发布 将商品同步到 ES 商品文档,并将商品主图同步到 以图搜款服务中 + if (Objects.equals(storeProd.getPrivateItem(), EProductItemType.NON_PRIVATE_ITEM.getValue()) + && Objects.equals(storeProd.getListingWay(), ListingType.RIGHT_NOW.getValue())) { // redis中的档口 Store store = this.redisCache.getCacheObject(CacheConstants.STORE_KEY + storeProd.getStoreId()); // 向ES索引: product_info 创建文档 @@ -282,9 +283,10 @@ public class StoreProductServiceImpl implements IStoreProductService { this.updateColorRelation(updateDTO, storeProd.getId(), storeProd.getStoreId(), storeProd.getProdArtNum()); // 处理更新逻辑 this.updateOtherProperties(updateDTO, storeProd); - // 只有在售和尾货状态,更新ES 信息 及 图搜 - if (Objects.equals(storeProd.getProdStatus(), EProductStatus.ON_SALE.getValue()) - || Objects.equals(storeProd.getProdStatus(), EProductStatus.TAIL_GOODS.getValue())) { + // 只有非私款商品 且 只有在售和尾货状态,更新ES 信息 及 图搜 + if (Objects.equals(storeProd.getPrivateItem(), EProductItemType.NON_PRIVATE_ITEM.getValue()) + && (Objects.equals(storeProd.getProdStatus(), EProductStatus.ON_SALE.getValue()) + || Objects.equals(storeProd.getProdStatus(), EProductStatus.TAIL_GOODS.getValue()))) { // 从redis中获取store Store store = this.redisCache.getCacheObject(CacheConstants.STORE_KEY + storeProd.getStoreId()); // 更新索引: product_info 的文档 @@ -573,10 +575,16 @@ public class StoreProductServiceImpl implements IStoreProductService { updateProdList.add(storeProduct); }); this.storeProdMapper.updateById(updateProdList); + // 非私款的商品,才需要更新图搜及ES + final List nonPrivateProdList = updateProdList.stream() + .filter(x -> Objects.equals(x.getPrivateItem(), EProductItemType.NON_PRIVATE_ITEM.getValue())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(nonPrivateProdList)) { + return count; + } // 非删除商品颜色,则更新ES if (!Objects.equals(prodStatusDTO.getProdStatus(), EProductStatus.REMOVED.getValue())) { // 需要更新状态的商品 - Map updateESProdStatusMap = updateProdList.stream().filter(x -> !Objects.equals(storeProdStatusMap.get(x.getId()), x.getProdStatus())) + Map updateESProdStatusMap = nonPrivateProdList.stream().filter(x -> !Objects.equals(storeProdStatusMap.get(x.getId()), x.getProdStatus())) .collect(Collectors.toMap(StoreProduct::getId, StoreProduct::getProdStatus)); // 没有需要更新商品状态的商品 if (MapUtils.isEmpty(updateESProdStatusMap)) { @@ -586,7 +594,7 @@ public class StoreProductServiceImpl implements IStoreProductService { this.updateESProdStatus(updateESProdStatusMap); } else { // 需要删除的商品 - List deleteESProdList = updateProdList.stream().filter(x -> !Objects.equals(storeProdStatusMap.get(x.getId()), x.getProdStatus())).collect(Collectors.toList()); + List deleteESProdList = nonPrivateProdList.stream().filter(x -> !Objects.equals(storeProdStatusMap.get(x.getId()), x.getProdStatus())).collect(Collectors.toList()); List updateESProdIdList = deleteESProdList.stream().map(StoreProduct::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(updateESProdIdList)) { return count; @@ -970,6 +978,7 @@ public class StoreProductServiceImpl implements IStoreProductService { @Override @Transactional(readOnly = true) public List getStatusCateNum(StoreProdStatusCateNumDTO cateNumDTO) { + // 商城首页展示的分类对应的数量,需要过滤掉 私款商品 List statusCateNumList = this.storeProdMapper.getStatusCateNum(cateNumDTO); List countList = new ArrayList<>(); statusCateNumList.stream().collect(Collectors.groupingBy(StoreProdStatusCateCountDTO::getProdStatus)) diff --git a/xkt/src/main/resources/mapper/StoreProductColorMapper.xml b/xkt/src/main/resources/mapper/StoreProductColorMapper.xml index c273badcd..39dacec0f 100644 --- a/xkt/src/main/resources/mapper/StoreProductColorMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductColorMapper.xml @@ -33,7 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" pc.`name` AS prodCateName, spc.prod_status, spc.create_time, - sf.file_url AS mainPicUrl + sf.file_url AS mainPicUrl, + sp.private_item FROM store_product_color spc JOIN store_product sp ON spc.store_prod_id = sp.id @@ -50,6 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and sp.prod_art_num like concat('%', #{prodArtNum}, '%') and sp.prod_cate_id = #{prodCateId} + and sp.private_item = #{privateItem} ORDER BY spc.create_time DESC diff --git a/xkt/src/main/resources/mapper/StoreProductMapper.xml b/xkt/src/main/resources/mapper/StoreProductMapper.xml index dd9b32dc1..dc6d0cfda 100644 --- a/xkt/src/main/resources/mapper/StoreProductMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductMapper.xml @@ -46,7 +46,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" JOIN sys_product_category spc2 ON spc1.parent_id = spc2.id LEFT JOIN ( SELECT store_prod_id, MIN( price ) AS min_price FROM store_product_color_size GROUP BY store_prod_id ) spcp ON sp.id = spcp.store_prod_id WHERE - sp.del_flag = 0 AND sp.id IN + sp.del_flag = 0 + AND sp.private_item = 0 + AND sp.id IN #{id} @@ -275,6 +277,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" JOIN sys_product_category spc ON sp.prod_cate_id = spc.id WHERE sp.del_flag = 0 + AND sp.private_item = 0 AND sp.store_id = #{storeId} GROUP BY sp.prod_status,