xin
2025-05-30 347909bae241fff128b628ea6d12992d7e5b4b10
oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java
New file
@@ -0,0 +1,263 @@
package com.oying.modules.pc.store.rest;
import cn.hutool.core.collection.ListUtil;
import com.oying.utils.R;
import com.oying.modules.pc.store.domain.Store;
import com.oying.modules.pc.store.domain.dto.StoreCreateRequest;
import com.oying.modules.pc.store.domain.dto.StoreFieldUpdateRequest;
import com.oying.modules.pc.store.domain.dto.StoreQueryCriteria;
import com.oying.modules.pc.store.service.StoreCreateService;
import com.oying.modules.pc.store.service.StoreService;
import com.oying.modules.pc.store.view.StoreMerchantView;
import com.oying.modules.pc.store.view.StoreSimpleView;
import com.oying.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
 * 店铺
 *
 * @author lzp
 * @date 2025-04-22
 */
@Api(tags = "店铺(商户端)")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pc/merchant/store")
public class StoreMerchantController {
    private final StoreService storeService;
    private final StoreCreateService storeCreateService;
    @GetMapping(value = "/list")
    @ApiOperation("查询所有店铺")
    //@PreAuthorize("@el.check('merchant:store:list')")
    public ResponseEntity<?> getList() {
        StoreQueryCriteria criteria = new StoreQueryCriteria();
        criteria.setMerchantId(SecurityUtils.getCurrentUserId());
        //criteria.setStatus();
        List<Store> storeList = Optional.ofNullable(storeService.queryAll(criteria)).orElse(ListUtil.empty());
        List<StoreSimpleView> storeViewList = storeList.stream().map(s -> {
            StoreSimpleView view = new StoreSimpleView();
            view.setId(s.getStoreId());
            view.setName(s.getStoreName());
            view.setLogoUrl("");
            view.setStatus(s.getStatus());
            return view;
        }).collect(Collectors.toList());
        return ResponseEntity.ok(R.success(storeViewList));
    }
    @GetMapping(value = "/{storeId}")
    @ApiOperation("查询店铺")
    //@PreAuthorize("@el.check('merchant:store:getById')" +
    //             " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> getById(@PathVariable Long storeId) {
        Store store = storeService.getById(storeId);
        StoreMerchantView view = new StoreMerchantView();
        BeanUtils.copyProperties(store, view);
        view.setLogoUrl("");
        return ResponseEntity.ok(R.success(view));
    }
    @PostMapping
    @ApiOperation("创建店铺")
    //@PreAuthorize("@el.check('merchant:store:create')")
    public ResponseEntity<?> create(@RequestBody StoreCreateRequest request) {
        storeCreateService.create(request);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
    /**
     * 修改店铺信息
     */
    @PostMapping(value = "/{storeId}")
    @ApiOperation("修改店铺")
    //@PreAuthorize("@el.check('merchant:store:update')" +
    //        " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> update(@PathVariable("storeId") Long storeId,
                       @RequestBody Store store) {
        store.setStoreId(storeId);
        storeService.updateById(store);
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺LOGO
     */
    @PatchMapping(value = "/{storeId}/logo")
    @ApiOperation("修改店铺LOGO")
    //@PreAuthorize("@el.check('merchant:store:list')" +
    //        " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateLogo(@PathVariable("storeId") Long storeId,
                           @Validated(value = StoreFieldUpdateRequest.UpdateStoreLogoImageGroup.class)
                           @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateLogo(storeId, request.getLogoImageUploadId());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺名称
     */
    @PatchMapping(value = "/{storeId}/name")
    @ApiOperation("修改店铺名称")
    //@PreAuthorize("@el.check('merchant:store:name')" +
    //        " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateName(@PathVariable("storeId") Long storeId,
                           @Validated(value = StoreFieldUpdateRequest.UpdateStoreNameGroup.class)
                           @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateName(storeId, request.getStoreName());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺简介
     */
    @PatchMapping(value = "/{storeId}/description")
    @ApiOperation("修改店铺简介")
    //@PreAuthorize("@el.check('merchant:store:description')" +
    //        " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateDescription(@PathVariable("storeId") Long storeId,
                                  @Validated(value = StoreFieldUpdateRequest.UpdateStoreDescriptionGroup.class)
                                  @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateDescription(storeId, request.getDescription());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺联系电话
     */
    @PatchMapping(value = "/{storeId}/contactPhone")
    @ApiOperation("修改店铺联系电话")
    @PreAuthorize("@el.check('merchant:store:list')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateContactPhone(@PathVariable("storeId") Long storeId,
                                   @Validated(value = StoreFieldUpdateRequest.UpdateStoreContactPhoneGroup.class)
                                   @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateContactPhone(storeId, request.getContactPhone());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺地址
     */
    @PatchMapping(value = "/{storeId}/address")
    @ApiOperation("修改店铺地址")
    @PreAuthorize("@el.check('merchant:store:address')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateAddress(@PathVariable("storeId") Long storeId,
                              @Validated(value = StoreFieldUpdateRequest.UpdateStoreAddressGroup.class)
                              @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateAddress(storeId, request.getAddress());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺坐标
     */
    @PatchMapping(value = "/{storeId}/location")
    @ApiOperation("修改店铺坐标")
    @PreAuthorize("@el.check('merchant:store:location')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateLocation(@PathVariable("storeId") Long storeId,
                               @Validated(value = StoreFieldUpdateRequest.UpdateStoreLocationGroup.class)
                               @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateLocation(storeId, request.getLongitude(), request.getLatitude());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺配送范围
     */
    @PatchMapping(value = "/{storeId}/radius")
    @ApiOperation("修改店铺配送范围")
    @PreAuthorize("@el.check('merchant:store:radius')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateRadius(@PathVariable("storeId") Long storeId,
                             @Validated(value = StoreFieldUpdateRequest.UpdateStoreRadiusGroup.class)
                             @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateRadius(storeId, request.getRadius());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺绑定的经营类目
     */
    @PatchMapping(value = "/{storeId}/platformCategory")
    @ApiOperation("修改店铺绑定的经营类目")
    @PreAuthorize("@el.check('merchant:store:platformCategory')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updatePlatformCategory(@PathVariable("storeId") Long storeId,
                                       @Validated(value = StoreFieldUpdateRequest.UpdateStorePlatformCategoryGroup.class)
                                       @RequestBody StoreFieldUpdateRequest request) {
        storeService.updatePlatformCategory(storeId, request.getPlatformCategoryId());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改店铺营业时间
     */
    @PatchMapping(value = "/{storeId}/businessHours")
    @ApiOperation("修改店铺营业时间")
    @PreAuthorize("@el.check('merchant:store:businessHours')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateBusinessHours(@PathVariable("storeId") Long storeId,
                                    @Validated(value = StoreFieldUpdateRequest.UpdateStoreBusinessHoursGroup.class)
                                    @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateBusinessHours(storeId, request.getOpenTime(), request.getCloseTime());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改起送金额
     */
    @PatchMapping(value = "/{storeId}/deliveryMinimum")
    @ApiOperation("修改起送金额")
    @PreAuthorize("@el.check('merchant:store:deliveryMinimum')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateDeliveryMinimum(@PathVariable("storeId") Long storeId,
                                      @Validated(value = StoreFieldUpdateRequest.UpdateStoreDeliveryMinimumGroup.class)
                                      @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateDeliveryMinimum(storeId, request.getDeliveryMinimum());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改配送费用
     */
    @PatchMapping(value = "/{storeId}/deliveryFee")
    @ApiOperation("修改配送费用")
    @PreAuthorize("@el.check('merchant:store:deliveryFee')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> updateDeliveryFee(@PathVariable("storeId") Long storeId,
                                  @Validated(value = StoreFieldUpdateRequest.UpdateStoreDeliveryFeeGroup.class)
                                  @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateDeliveryFee(storeId, request.getDeliveryFee());
        return ResponseEntity.noContent().build();
    }
    /**
     * 修改状态
     */
    @PatchMapping(value = "/{storeId}/businessStatus")
    @ApiOperation("修改状态")
    @PreAuthorize("@el.check('merchant:store:businessStatus')" +
            " and @storeMerchantOwnershipService.check(#storeId)")
    public ResponseEntity<?> businessStatus(@PathVariable("storeId") Long storeId,
                               @Validated(value = StoreFieldUpdateRequest.UpdateStoreBusinessStatusGroup.class)
                               @RequestBody StoreFieldUpdateRequest request) {
        storeService.updateStatus(storeId, request.getBusinessStatus());
        return ResponseEntity.noContent().build();
    }
}