From 02fb5e406abcda2534ed1f2505c5226027c13473 Mon Sep 17 00:00:00 2001 From: zepengdev <lzpsmith@outlook.com> Date: Mon, 23 Jun 2025 00:57:32 +0800 Subject: [PATCH] fix:调整字段 --- oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java | 197 ++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 163 insertions(+), 34 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 445170a..f7fbfb4 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,24 +1,44 @@ 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; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.oying.exception.EntityExistException; +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; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalTime; -import java.time.ZonedDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; /** * 店铺Service业务层处理 @@ -32,6 +52,9 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements StoreService { private final StoreMapper storeMapper; + private final StoreUserMapper storeUserMapper; + private final StoreQualificationService qualificationService; + private final BucketStorageService bucketStorageService; @Override public PageResult<Store> queryByPage(StoreQueryCriteria criteria) { @@ -50,94 +73,126 @@ } @Override - public boolean create(Store store) { - // store.setStoreId(StoreIdGenerator.getId()); - store.setCreateBy(SecurityUtils.getCurrentUserId()); - store.setCreateTime(ZonedDateTime.now()); - return save(store); + public List<Store> queryUserStores(Long userId) { + return storeMapper.queryUserStores(userId); } @Override - public boolean updateLogo(Long storeId, String logo) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId).set(Store::getLogoImageId, logo); + @Transactional(rollbackFor = Exception.class) + public boolean create(StoreCreateRequest request) { + Store store = StoreAssembler.to(request); + storeMapper.insert(store); + this.processQualificationCreate(store, request.getQualificationList()); + this.bindUser(store.getStoreId()); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean update(StoreUpdateRequest request) { + Store existingStore = this.findOrThrow(request); + this.processImagesUpdate(request, existingStore); + this.processQualificationUpdate(request); + existingStore.copy(StoreAssembler.to(request)); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(existingStore.getStoreId(), existingStore.getVersion()); + return this.update(existingStore, wrapper); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateLogo(Long storeId, String logo, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) + .set(Store::getLogoImageId, logo); return update(wrapper); } @Override - public boolean updateName(Long storeId, String storeName) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateName(Long storeId, String storeName, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getStoreName, storeName); return update(wrapper); } @Override - public boolean updateDescription(Long storeId, String description) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateDescription(Long storeId, String description, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getDescription, description); return update(wrapper); } @Override - public boolean updateContactPhone(Long storeId, String contactPhone) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateContactPhone(Long storeId, String contactPhone, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getContactPhone, contactPhone); return update(wrapper); } @Override - public boolean updateAddress(Long storeId, String address) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateAddress(Long storeId, String address, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getAddress, address); return update(wrapper); } @Override - public boolean updateLocation(Long storeId, Double longitude, Double latitude) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateLocation(Long storeId, Double longitude, Double latitude, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getLongitude, longitude) .set(Store::getLatitude, latitude); return update(wrapper); } @Override - public boolean updateRadius(Long storeId, Integer radius) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateRadius(Long storeId, Integer radius, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getRadius, radius); return update(wrapper); } @Override - public boolean updatePlatformCategory(Long storeId, Long platformCategory) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updatePlatformCategory(Long storeId, Long platformCategory, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getPlatformCategoryId, platformCategory); return update(wrapper); } @Override - public boolean updateBusinessHours(Long storeId, LocalTime openTime, LocalTime endTime) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateBusinessHours(Long storeId, LocalTime openTime, LocalTime endTime, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getOpenTime, openTime) .set(Store::getCloseTime, endTime); return update(wrapper); } @Override - public boolean updateDeliveryMinimum(Long storeId, BigDecimal deliveryMinimum) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateDeliveryMinimum(Long storeId, BigDecimal deliveryMinimum, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getDeliveryMinimum, deliveryMinimum); return update(wrapper); } @Override - public boolean updateDeliveryFee(Long storeId, BigDecimal deliveryFee) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateDeliveryFee(Long storeId, BigDecimal deliveryFee, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getDeliveryFee, deliveryFee); return update(wrapper); } @Override - public boolean updateStatus(Long storeId, Integer status) { - LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId) + public boolean updateStatus(Long storeId, Integer status, Long version) { + Store existingStore = this.findOrThrow(storeId, version); + LambdaUpdateWrapper<Store> wrapper = this.createLambdaUpdateWrapper(storeId, existingStore.getVersion()) .set(Store::getStatus, status); return update(wrapper); } @@ -151,9 +206,83 @@ return Optional.ofNullable(store).map(i -> merchantId.equals(i.getMerchantId())).orElse(false); } - private LambdaUpdateWrapper<Store> createLambdaUpdateWrapper(Long storeId) { - return new LambdaUpdateWrapper<Store>() - .eq(Store::getStoreId, storeId) - .set(Store::getUpdateBy, SecurityUtils.getCurrentUserId()); + 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) { + StoreUser storeUser = new StoreUser(); + storeUser.setStoreId(storeId); + storeUser.setUserId(SecurityUtils.getCurrentUserId()); + storeUser.setRoleType(""); + storeUser.setPermissions(""); + storeUserMapper.insert(storeUser); + } + + private LambdaUpdateWrapper<Store> createLambdaUpdateWrapper(Long storeId, Long version) { + Objects.requireNonNull(storeId, String.format("方法 '%s' 调用失败:参数 'storeId'(店铺ID)不能为 null", "createLambdaUpdateWrapper")); + LambdaUpdateWrapper<Store> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Store::getStoreId, storeId); + if (ObjUtil.isNotEmpty(version)) { + 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