From 43315000b2840313a5aff96bf314b3c061e4616d Mon Sep 17 00:00:00 2001 From: zepengdev <lzpsmith@outlook.com> Date: Mon, 14 Jul 2025 21:00:53 +0800 Subject: [PATCH] feat: 增加店铺和商品审核功能 --- oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java | 173 ++++++++++++++++++++++++--------------------------------- 1 files changed, 72 insertions(+), 101 deletions(-) diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java b/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java index 8531306..253d66c 100644 --- a/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java @@ -1,7 +1,5 @@ package com.oying.modules.pc.store.service.impl; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -9,21 +7,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.oying.exception.BadRequestException; import com.oying.exception.EntityNotFoundException; -import com.oying.modules.pc.common.ValueUpdate; import com.oying.modules.pc.store.converter.StoreAssembler; -import com.oying.modules.pc.store.converter.StoreQualificationAssembler; import com.oying.modules.pc.store.domain.Store; -import com.oying.modules.pc.store.domain.StoreQualification; import com.oying.modules.pc.store.domain.StoreUser; import com.oying.modules.pc.store.domain.dto.StoreCreateRequest; -import com.oying.modules.pc.store.domain.dto.StoreQualificationCreateRequest; import com.oying.modules.pc.store.domain.dto.StoreQueryCriteria; import com.oying.modules.pc.store.domain.dto.StoreUpdateRequest; import com.oying.modules.pc.store.mapper.StoreMapper; import com.oying.modules.pc.store.mapper.StoreUserMapper; -import com.oying.modules.pc.store.service.StoreQualificationService; import com.oying.modules.pc.store.service.StoreService; -import com.oying.service.BucketStorageService; import com.oying.utils.PageResult; import com.oying.utils.PageUtil; import com.oying.utils.SecurityUtils; @@ -35,11 +27,10 @@ import java.math.BigDecimal; import java.time.LocalTime; -import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.stream.Collectors; +import java.util.Set; /** * 店铺Service业务层处理 @@ -54,8 +45,6 @@ private final StoreMapper storeMapper; private final StoreUserMapper storeUserMapper; - private final StoreQualificationService qualificationService; - private final BucketStorageService bucketStorageService; @Override public PageResult<Store> queryByPage(StoreQueryCriteria criteria) { @@ -69,13 +58,44 @@ } @Override + public List<Long> queryStoreIds(StoreQueryCriteria criteria) { + return storeMapper.queryStoreIds(criteria); + } + + @Override public Store getMerchantStore(Long merchantId) { return storeMapper.selectStoreByMerchantId(merchantId); } @Override - public List<Store> queryUserStores(Long userId) { + public List<Store> getStoresByIds(Set<Long> ids) { + return storeMapper.queryByIds(ids); + } + + @Override + public List<Store> getUserStores(Long userId) { return storeMapper.queryUserStores(userId); + } + + @Override + public Store getOrThrow(Long storeId, Long version) { + Objects.requireNonNull(storeId, String.format("方法 '%s' 调用失败:参数 'storeId'(店铺ID)不能为 null", "findOrThrow")); + LambdaQueryWrapper<Store> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Store::getStoreId, storeId); + if (ObjUtil.isNotEmpty(version)) { + wrapper.eq(Store::getVersion, version); + } + Store existingStore = storeMapper.selectOne(wrapper); + if (ObjUtil.isEmpty(existingStore)) { + throw new EntityNotFoundException(Store.class, "storeId", storeId.toString()); + } + return existingStore; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(Store resources) { + storeMapper.insert(resources); } @Override @@ -88,17 +108,26 @@ // 创建店铺 Store store = StoreAssembler.to(request); storeMapper.insert(store); - this.processQualificationCreate(store, request.getQualificationList()); - this.bindUser(store.getStoreId()); return store; } @Override @Transactional(rollbackFor = Exception.class) + public boolean update(Store resources, boolean isDirectUpdate) { + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(resources.getStoreId(), resources.getVersion()); + if (isDirectUpdate) { + return this.update(resources, wrapper); + } else { + Store existingStore = this.getById(resources.getStoreId()); + existingStore.copy(resources); + return this.update(existingStore, wrapper); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) public boolean update(StoreUpdateRequest request) { - Store existingStore = this.findOrThrow(request); - this.processImagesUpdate(request, existingStore); - this.processQualificationUpdate(request); + Store existingStore = this.getOrThrow(request.getStoreId(), request.getVersion()); existingStore.copy(StoreAssembler.to(request)); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(existingStore.getStoreId(), existingStore.getVersion()); return this.update(existingStore, wrapper); @@ -106,16 +135,16 @@ @Override @Transactional(rollbackFor = Exception.class) - public boolean updateLogo(Long storeId, String logo, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + public boolean updateLogo(Long storeId, Long logoImageId, Long version) { + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) - .set(Store::getLogoImageId, logo); + .set(Store::getLogoImageId, logoImageId); return update(wrapper); } @Override public boolean updateName(Long storeId, String storeName, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getStoreName, storeName); return update(wrapper); @@ -123,7 +152,7 @@ @Override public boolean updateDescription(Long storeId, String description, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getDescription, description); return update(wrapper); @@ -131,7 +160,7 @@ @Override public boolean updateContactPhone(Long storeId, String contactPhone, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getContactPhone, contactPhone); return update(wrapper); @@ -139,7 +168,7 @@ @Override public boolean updateAddress(Long storeId, String address, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getAddress, address); return update(wrapper); @@ -147,7 +176,7 @@ @Override public boolean updateLocation(Long storeId, Double longitude, Double latitude, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getLongitude, longitude) .set(Store::getLatitude, latitude); @@ -156,7 +185,7 @@ @Override public boolean updateRadius(Long storeId, Integer radius, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getRadius, radius); return update(wrapper); @@ -164,7 +193,7 @@ @Override public boolean updatePlatformCategory(Long storeId, Long platformCategory, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getPlatformCategoryId, platformCategory); return update(wrapper); @@ -172,7 +201,7 @@ @Override public boolean updateBusinessHours(Long storeId, LocalTime openTime, LocalTime endTime, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getOpenTime, openTime) .set(Store::getCloseTime, endTime); @@ -181,7 +210,7 @@ @Override public boolean updateDeliveryMinimum(Long storeId, BigDecimal deliveryMinimum, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getDeliveryMinimum, deliveryMinimum); return update(wrapper); @@ -189,7 +218,7 @@ @Override public boolean updateDeliveryFee(Long storeId, BigDecimal deliveryFee, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getDeliveryFee, deliveryFee); return update(wrapper); @@ -197,7 +226,7 @@ @Override public boolean updateStatus(Long storeId, Integer status, Long version) { - Store existingStore = this.findOrThrow(storeId, version); + Store existingStore = this.getOrThrow(storeId, version); LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getStatus, status); return update(wrapper); @@ -214,32 +243,23 @@ } @Override - public boolean existsByIdAndMerchantId(Long storeId, Long merchantId) { - if (storeId == null || merchantId == null) { - return false; - } - Store store = getById(storeId); - return Optional.ofNullable(store).map(i -> merchantId.equals(i.getMerchantId())).orElse(false); - } - - private void processQualificationCreate(Store store, List<StoreQualificationCreateRequest> qualificationRequests) { - if (CollectionUtil.isNotEmpty(qualificationRequests)) { - List<StoreQualification> storeQualificationList = qualificationRequests.stream().map(i -> { - i.setStoreId(store.getStoreId()); - return StoreQualificationAssembler.to(i); - }).collect(Collectors.toList()); - storeQualificationList.forEach(i -> i.setStoreId(store.getStoreId())); - qualificationService.batchCreate(storeQualificationList); - } - } - - private void bindUser(Long storeId) { + public boolean bindUser(Long storeId) { StoreUser storeUser = new StoreUser(); storeUser.setStoreId(storeId); storeUser.setUserId(SecurityUtils.getCurrentUserId()); storeUser.setRoleType(""); storeUser.setPermissions(""); storeUserMapper.insert(storeUser); + return true; + } + + @Override + public boolean existsByIdAndMerchantId(Long storeId, Long merchantId) { + if (storeId == null || merchantId == null) { + return false; + } + Store store = getById(storeId); + return Optional.ofNullable(store).map(i -> merchantId.equals(i.getMerchantId())).orElse(false); } private LambdaUpdateWrapper<Store> createLambdaUpdateWrapper(Long storeId, Long version) { @@ -250,55 +270,6 @@ updateWrapper.eq(Store::getVersion, version); updateWrapper.set(Store::getVersion, version + 1); } - updateWrapper.set(Store::getUpdateBy, SecurityUtils.getCurrentUserId()); return updateWrapper; - } - - private Store findOrThrow(StoreUpdateRequest request) { - return this.findOrThrow(request.getStoreId(), request.getVersion()); - } - - private Store findOrThrow(Long storeId, Long version) { - Objects.requireNonNull(storeId, String.format("方法 '%s' 调用失败:参数 'storeId'(店铺ID)不能为 null", "findOrThrow")); - LambdaQueryWrapper<Store> wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(Store::getStoreId, storeId); - if (ObjUtil.isNotEmpty(version)) { - wrapper.eq(Store::getVersion, version); - } - Store existingStore = storeMapper.selectOne(wrapper); - if (ObjUtil.isEmpty(existingStore)) { - throw new EntityNotFoundException(Store.class, "storeId", storeId.toString()); - } - return existingStore; - } - - private List<Long> getDeleteImageIds(List<ValueUpdate<Long>> imageValues) { - List<Long> deleteImageIds = new ArrayList<>(); - for (ValueUpdate<Long> imageValue : imageValues) { - if (imageValue.isChangeAndOldValueNotEmpty()) { - deleteImageIds.add(imageValue.getOldValue()); - } - } - return deleteImageIds; - } - - private void processImagesUpdate(StoreUpdateRequest request, Store existingStore) { - List<ValueUpdate<Long>> imageValues = ListUtil.toList( - new ValueUpdate<>(request.getLogoImageId(), existingStore.getLogoImageId()), - new ValueUpdate<>(request.getCoverImageId(), existingStore.getCoverImageId()) - ); - bucketStorageService.deleteAll(this.getDeleteImageIds(imageValues)); - } - - private void processQualificationUpdate(StoreUpdateRequest request) { - if (CollectionUtil.isNotEmpty(request.getDeletedQualificationIds())) { - qualificationService.deleteAll(request.getDeletedQualificationIds()); - } - if (CollectionUtil.isNotEmpty(request.getUpdatedQualifications())) { - qualificationService.batchUpdate(request.getUpdatedQualifications()); - } - if (CollectionUtil.isNotEmpty(request.getNewQualifications())) { - qualificationService.batchCreate(request.getNewQualifications()); - } } } -- Gitblit v1.9.3