商品分组排序需求

This commit is contained in:
谭凯凯 2025-04-07 10:12:20 +08:00 committed by Tankaikai
parent 90be23cc09
commit a77ecb4170
7 changed files with 62 additions and 33 deletions

View File

@ -94,7 +94,23 @@ public class ProdGroupController {
public CzgResult<Void> updateProdGroup(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ProdGroupDTO dto) {
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
prodGroupService.updateProdGroup(dto);
prodGroupService.updateProdGroup(dto,true);
ThreadUtil.execAsync(() -> {
rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId));
});
return CzgResult.success();
}
/**
* 修改
*/
@PutMapping
@OperationLog("商品分组-修改")
//@SaAdminCheckPermission("prodGroup:update")
public CzgResult<Void> updateProdGroupV2(@RequestBody ProdGroupDTO dto) {
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
prodGroupService.updateProdGroup(dto,false);
ThreadUtil.execAsync(() -> {
rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId));
});

View File

@ -50,7 +50,7 @@ public class ProdGroup implements Serializable {
*/
private Integer sort;
/**
* 排序方式 0-默认; 1-价格从高到低; 2-销量由高到低;
* 排序方式 0-默认; 1-价格从高到低; 2-价格从低到高; 3-销量由高到低
*/
private String sortMode;
/**

View File

@ -56,8 +56,9 @@ public interface ProdGroupService extends IService<ProdGroup> {
* 更新商品分组
*
* @param dto 商品分组DTO
* @param isUpdateProduct 是否需要修改分组下的商品
*/
void updateProdGroup(ProdGroupDTO dto);
void updateProdGroup(ProdGroupDTO dto,boolean isUpdateProduct);
/**
* 禁用商品分组

View File

@ -109,4 +109,8 @@ public class ShopProductVo implements Serializable {
* 排序
*/
private Integer sort;
/**
* 销量
*/
private BigDecimal salesVolume;
}

View File

@ -88,7 +88,7 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT, ADMIN_CLIENT_PRODUCT_LIST}, key = "#dto.shopId", allEntries = true)
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT}, key = "#dto.shopId", allEntries = true)
public void addProdGroup(ProdGroupDTO dto) {
Long shopId = StpKit.USER.getShopId(0L);
boolean exists = super.exists(query().eq(ProdGroup::getName, dto.getName()).eq(ProdGroup::getShopId, shopId));
@ -114,8 +114,8 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT, ADMIN_CLIENT_PRODUCT_LIST}, key = "#dto.shopId", allEntries = true)
public void updateProdGroup(ProdGroupDTO dto) {
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT}, key = "#dto.shopId", allEntries = true)
public void updateProdGroup(ProdGroupDTO dto, boolean isUpdateProduct) {
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
boolean exists = super.exists(query().eq(ProdGroup::getName, dto.getName()).eq(ProdGroup::getShopId, shopId).ne(ProdGroup::getId, dto.getId()));
@ -124,6 +124,9 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
}
ProdGroup entity = BeanUtil.copyProperties(dto, ProdGroup.class);
super.updateById(entity);
if (!isUpdateProduct) {
return;
}
prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProdGroupId, entity.getId()));
Long[] productIds = dto.getProductIds();
if (ArrayUtil.isNotEmpty(productIds)) {
@ -141,14 +144,14 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT, ADMIN_CLIENT_PRODUCT_LIST}, key = "#shopId", allEntries = true)
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT}, key = "#shopId", allEntries = true)
public void deleteProdGroup(Long shopId, Long id) {
super.remove(query().eq(ProdGroup::getId, id).eq(ProdGroup::getShopId, shopId));
prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProdGroupId, id));
}
@Override
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT, ADMIN_CLIENT_PRODUCT_LIST}, key = "#shopId", allEntries = true)
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT}, key = "#shopId", allEntries = true)
public void disableProdGroup(Long shopId, Long id) {
UpdateChain.of(ProdGroup.class)
.set(ProdGroup::getStatus, StatusEnum.DISABLE.value())
@ -160,7 +163,7 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
}
@Override
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT, ADMIN_CLIENT_PRODUCT_LIST}, key = "#shopId", allEntries = true)
@CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT}, key = "#shopId", allEntries = true)
public void enableProdGroup(Long shopId, Long id) {
UpdateChain.of(ProdGroup.class)
.set(ProdGroup::getStatus, StatusEnum.ENABLED.value())

View File

@ -74,10 +74,10 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
@Override
@Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()")
public List<ShopGroupProductVo> queryGroupProductList(Long shopId) {
List<ShopGroupProductVo> groupList = prodGroupMapper.selectListByQueryAs(query().select(ProdGroup::getId,
ProdGroup::getName, ProdGroup::getUseTime, ProdGroup::getSaleStartTime, ProdGroup::getSaleEndTime)
.eq(ProdGroup::getShopId, shopId).eq(ProdGroup::getStatus, StatusEnum.ENABLED.value())
.orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class);
List<ShopGroupProductVo> groupList = prodGroupMapper.selectListByQueryAs(
query().select(ProdGroup::getId, ProdGroup::getName, ProdGroup::getSortMode, ProdGroup::getUseTime, ProdGroup::getSaleStartTime, ProdGroup::getSaleEndTime)
.eq(ProdGroup::getShopId, shopId).eq(ProdGroup::getStatus, StatusEnum.ENABLED.value())
.orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class);
List<ShopProductVo> productAllList = productMapper.selectGroupProductList(shopId);
productAllList.forEach(item -> {
item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime()));
@ -112,13 +112,16 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
product.setIsSaleTime(isSaleTime);
});
// switch (group.getSortMode()) {
// case "0" -> productList.sort(Comparator.comparing(ShopProductVo::getSalePrice));
// case "1" -> productList.sort((o1, o2) -> o2.getSalePrice().compareTo(o1.getSalePrice()));
// case "2" -> productList.sort((o1, o2) -> o2.getSort().compareTo(o1.getSort()));
//
// }
productList.sort(Comparator.comparing(ShopProductVo::getSalePrice));
// 1-价格从高到低; 2-价格从低到高; 3-销量由高到低4-销量由低到高
if("1".equals(group.getSortMode())){
productList = productList.stream().sorted(Comparator.comparing(ShopProductVo::getSalePrice).reversed()).toList();
}else if("2".equals(group.getSortMode())){
productList = productList.stream().sorted(Comparator.comparing(ShopProductVo::getSalePrice)).toList();
}else if("3".equals(group.getSortMode())){
productList = productList.stream().sorted(Comparator.comparing(ShopProductVo::getSalesVolume).reversed()).toList();
}else if("4".equals(group.getSortMode())){
productList = productList.stream().sorted(Comparator.comparing(ShopProductVo::getSalesVolume)).toList();
}
group.setProductList(productList);
}
return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList();

View File

@ -91,20 +91,22 @@
ifnull(t2.suit_num, 1) as suit_num,
t1.select_spec_info,
t1.group_snap,
t1.pack_fee
t1.pack_fee,
ifnull(t4.sales_volume, 0) as sales_volume
from tb_product t1
left join (select x.product_id,
x.id as sku_id,
MIN(x.sale_price) as sale_price,
x.origin_price,
x.member_price,
x.suit_num
from tb_prod_sku x
where x.is_del = 0
and x.is_grounding = 1
and x.shop_id = #{shopId}
group by x.product_id) t2 on t1.id = t2.product_id
left join tb_shop_prod_unit t3 on t1.unit_id = t3.id
left join (select x.product_id,
x.id as sku_id,
MIN(x.sale_price) as sale_price,
x.origin_price,
x.member_price,
x.suit_num
from tb_prod_sku x
where x.is_del = 0
and x.is_grounding = 1
and x.shop_id = #{shopId}
group by x.product_id) t2 on t1.id = t2.product_id
left join tb_shop_prod_unit t3 on t1.unit_id = t3.id
left join (select product_id,sum(num) as sales_volume from tb_order_detail where pay_amount is not null group by product_id) t4 on t1.id = t4.product_id
</sql>
<select id="selectProductPage" resultType="com.czg.product.dto.ProductDTO">
<include refid="productQuery"/>