商品分组排序需求
This commit is contained in:
@@ -94,7 +94,23 @@ public class ProdGroupController {
|
|||||||
public CzgResult<Void> updateProdGroup(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ProdGroupDTO dto) {
|
public CzgResult<Void> updateProdGroup(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ProdGroupDTO dto) {
|
||||||
Long shopId = StpKit.USER.getShopId(0L);
|
Long shopId = StpKit.USER.getShopId(0L);
|
||||||
dto.setShopId(shopId);
|
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(() -> {
|
ThreadUtil.execAsync(() -> {
|
||||||
rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId));
|
rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class ProdGroup implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
/**
|
/**
|
||||||
* 排序方式 0-默认; 1-价格从高到低; 2-销量由高到低;
|
* 排序方式 0-默认; 1-价格从高到低; 2-价格从低到高; 3-销量由高到低;
|
||||||
*/
|
*/
|
||||||
private String sortMode;
|
private String sortMode;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -56,8 +56,9 @@ public interface ProdGroupService extends IService<ProdGroup> {
|
|||||||
* 更新商品分组
|
* 更新商品分组
|
||||||
*
|
*
|
||||||
* @param dto 商品分组DTO
|
* @param dto 商品分组DTO
|
||||||
|
* @param isUpdateProduct 是否需要修改分组下的商品
|
||||||
*/
|
*/
|
||||||
void updateProdGroup(ProdGroupDTO dto);
|
void updateProdGroup(ProdGroupDTO dto,boolean isUpdateProduct);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 禁用商品分组
|
* 禁用商品分组
|
||||||
|
|||||||
@@ -109,4 +109,8 @@ public class ShopProductVo implements Serializable {
|
|||||||
* 排序
|
* 排序
|
||||||
*/
|
*/
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
|
/**
|
||||||
|
* 销量
|
||||||
|
*/
|
||||||
|
private BigDecimal salesVolume;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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) {
|
public void addProdGroup(ProdGroupDTO dto) {
|
||||||
Long shopId = StpKit.USER.getShopId(0L);
|
Long shopId = StpKit.USER.getShopId(0L);
|
||||||
boolean exists = super.exists(query().eq(ProdGroup::getName, dto.getName()).eq(ProdGroup::getShopId, shopId));
|
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
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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 updateProdGroup(ProdGroupDTO dto) {
|
public void updateProdGroup(ProdGroupDTO dto, boolean isUpdateProduct) {
|
||||||
Long shopId = StpKit.USER.getShopId(0L);
|
Long shopId = StpKit.USER.getShopId(0L);
|
||||||
dto.setShopId(shopId);
|
dto.setShopId(shopId);
|
||||||
boolean exists = super.exists(query().eq(ProdGroup::getName, dto.getName()).eq(ProdGroup::getShopId, shopId).ne(ProdGroup::getId, dto.getId()));
|
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);
|
ProdGroup entity = BeanUtil.copyProperties(dto, ProdGroup.class);
|
||||||
super.updateById(entity);
|
super.updateById(entity);
|
||||||
|
if (!isUpdateProduct) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProdGroupId, entity.getId()));
|
prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProdGroupId, entity.getId()));
|
||||||
Long[] productIds = dto.getProductIds();
|
Long[] productIds = dto.getProductIds();
|
||||||
if (ArrayUtil.isNotEmpty(productIds)) {
|
if (ArrayUtil.isNotEmpty(productIds)) {
|
||||||
@@ -141,14 +144,14 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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) {
|
public void deleteProdGroup(Long shopId, Long id) {
|
||||||
super.remove(query().eq(ProdGroup::getId, id).eq(ProdGroup::getShopId, shopId));
|
super.remove(query().eq(ProdGroup::getId, id).eq(ProdGroup::getShopId, shopId));
|
||||||
prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProdGroupId, id));
|
prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProdGroupId, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
public void disableProdGroup(Long shopId, Long id) {
|
||||||
UpdateChain.of(ProdGroup.class)
|
UpdateChain.of(ProdGroup.class)
|
||||||
.set(ProdGroup::getStatus, StatusEnum.DISABLE.value())
|
.set(ProdGroup::getStatus, StatusEnum.DISABLE.value())
|
||||||
@@ -160,7 +163,7 @@ public class ProdGroupServiceImpl extends ServiceImpl<ProdGroupMapper, ProdGroup
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
public void enableProdGroup(Long shopId, Long id) {
|
||||||
UpdateChain.of(ProdGroup.class)
|
UpdateChain.of(ProdGroup.class)
|
||||||
.set(ProdGroup::getStatus, StatusEnum.ENABLED.value())
|
.set(ProdGroup::getStatus, StatusEnum.ENABLED.value())
|
||||||
|
|||||||
@@ -74,10 +74,10 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
|
|||||||
@Override
|
@Override
|
||||||
@Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()")
|
@Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()")
|
||||||
public List<ShopGroupProductVo> queryGroupProductList(Long shopId) {
|
public List<ShopGroupProductVo> queryGroupProductList(Long shopId) {
|
||||||
List<ShopGroupProductVo> groupList = prodGroupMapper.selectListByQueryAs(query().select(ProdGroup::getId,
|
List<ShopGroupProductVo> groupList = prodGroupMapper.selectListByQueryAs(
|
||||||
ProdGroup::getName, ProdGroup::getUseTime, ProdGroup::getSaleStartTime, ProdGroup::getSaleEndTime)
|
query().select(ProdGroup::getId, ProdGroup::getName, ProdGroup::getSortMode, ProdGroup::getUseTime, ProdGroup::getSaleStartTime, ProdGroup::getSaleEndTime)
|
||||||
.eq(ProdGroup::getShopId, shopId).eq(ProdGroup::getStatus, StatusEnum.ENABLED.value())
|
.eq(ProdGroup::getShopId, shopId).eq(ProdGroup::getStatus, StatusEnum.ENABLED.value())
|
||||||
.orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class);
|
.orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class);
|
||||||
List<ShopProductVo> productAllList = productMapper.selectGroupProductList(shopId);
|
List<ShopProductVo> productAllList = productMapper.selectGroupProductList(shopId);
|
||||||
productAllList.forEach(item -> {
|
productAllList.forEach(item -> {
|
||||||
item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime()));
|
item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime()));
|
||||||
@@ -112,13 +112,16 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
|
|||||||
product.setIsSaleTime(isSaleTime);
|
product.setIsSaleTime(isSaleTime);
|
||||||
});
|
});
|
||||||
|
|
||||||
// switch (group.getSortMode()) {
|
// 1-价格从高到低; 2-价格从低到高; 3-销量由高到低;4-销量由低到高;
|
||||||
// case "0" -> productList.sort(Comparator.comparing(ShopProductVo::getSalePrice));
|
if("1".equals(group.getSortMode())){
|
||||||
// case "1" -> productList.sort((o1, o2) -> o2.getSalePrice().compareTo(o1.getSalePrice()));
|
productList = productList.stream().sorted(Comparator.comparing(ShopProductVo::getSalePrice).reversed()).toList();
|
||||||
// case "2" -> productList.sort((o1, o2) -> o2.getSort().compareTo(o1.getSort()));
|
}else if("2".equals(group.getSortMode())){
|
||||||
//
|
productList = productList.stream().sorted(Comparator.comparing(ShopProductVo::getSalePrice)).toList();
|
||||||
// }
|
}else if("3".equals(group.getSortMode())){
|
||||||
productList.sort(Comparator.comparing(ShopProductVo::getSalePrice));
|
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);
|
group.setProductList(productList);
|
||||||
}
|
}
|
||||||
return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList();
|
return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList();
|
||||||
|
|||||||
@@ -91,20 +91,22 @@
|
|||||||
ifnull(t2.suit_num, 1) as suit_num,
|
ifnull(t2.suit_num, 1) as suit_num,
|
||||||
t1.select_spec_info,
|
t1.select_spec_info,
|
||||||
t1.group_snap,
|
t1.group_snap,
|
||||||
t1.pack_fee
|
t1.pack_fee,
|
||||||
|
ifnull(t4.sales_volume, 0) as sales_volume
|
||||||
from tb_product t1
|
from tb_product t1
|
||||||
left join (select x.product_id,
|
left join (select x.product_id,
|
||||||
x.id as sku_id,
|
x.id as sku_id,
|
||||||
MIN(x.sale_price) as sale_price,
|
MIN(x.sale_price) as sale_price,
|
||||||
x.origin_price,
|
x.origin_price,
|
||||||
x.member_price,
|
x.member_price,
|
||||||
x.suit_num
|
x.suit_num
|
||||||
from tb_prod_sku x
|
from tb_prod_sku x
|
||||||
where x.is_del = 0
|
where x.is_del = 0
|
||||||
and x.is_grounding = 1
|
and x.is_grounding = 1
|
||||||
and x.shop_id = #{shopId}
|
and x.shop_id = #{shopId}
|
||||||
group by x.product_id) t2 on t1.id = t2.product_id
|
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 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>
|
</sql>
|
||||||
<select id="selectProductPage" resultType="com.czg.product.dto.ProductDTO">
|
<select id="selectProductPage" resultType="com.czg.product.dto.ProductDTO">
|
||||||
<include refid="productQuery"/>
|
<include refid="productQuery"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user