AdminMerchantController.java 3.89 KB
package com.diligrp.rider.controller;

import com.diligrp.rider.common.exception.BizException;
import com.diligrp.rider.common.result.Result;
import com.diligrp.rider.dto.MerchantStoreDTO;
import com.diligrp.rider.entity.MerchantStore;
import com.diligrp.rider.service.MerchantService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;

@RestController
@RequestMapping("/api/admin/merchant")
@RequiredArgsConstructor
public class AdminMerchantController {

    private final MerchantService merchantService;

    @GetMapping("/store/list")
    public Result<List<MerchantStore>> storeList(@RequestParam(required = false) Long cityId,
                                                 @RequestParam(required = false) String keyword,
                                                 @RequestParam(defaultValue = "1") int page,
                                                 HttpServletRequest request) {
        return Result.success(merchantService.storeList(resolveQueryCityId(request, cityId), keyword, page));
    }

    @PostMapping("/store/add")
    public Result<Long> addStore(@Valid @RequestBody MerchantStoreDTO dto, HttpServletRequest request) {
        return Result.success(merchantService.addStore(dto, resolveScopedCityId(request)));
    }

    @PutMapping("/store/edit")
    public Result<Void> editStore(@Valid @RequestBody MerchantStoreDTO dto, HttpServletRequest request) {
        merchantService.editStore(dto, resolveScopedCityId(request));
        return Result.success();
    }

    @GetMapping("/store/detail")
    public Result<MerchantStore> storeDetail(@RequestParam Long storeId, HttpServletRequest request) {
        return Result.success(merchantService.getStore(storeId, resolveScopedCityId(request)));
    }

    @PostMapping("/store/setOperatingState")
    public Result<Void> setOperatingState(@RequestParam Long storeId,
                                          @RequestParam int state,
                                          HttpServletRequest request) {
        merchantService.setOperatingState(storeId, state, resolveScopedCityId(request));
        return Result.success();
    }

    @PostMapping("/store/setAutoOrder")
    public Result<Void> setAutoOrder(@RequestParam Long storeId,
                                     @RequestParam int auto,
                                     HttpServletRequest request) {
        merchantService.setAutoOrder(storeId, auto);
        return Result.success();
    }

    @PostMapping("/store/updateFeeConfig")
    public Result<Void> updateFeeConfig(@RequestParam Long storeId,
                                        @RequestParam(defaultValue = "0") BigDecimal freeShipping,
                                        @RequestParam(defaultValue = "0") BigDecimal upToSend,
                                        HttpServletRequest request) {
        merchantService.updateFeeConfig(storeId, freeShipping, upToSend, resolveScopedCityId(request));
        return Result.success();
    }

    @DeleteMapping("/store/del")
    public Result<Void> delStore(@RequestParam Long storeId, HttpServletRequest request) {
        merchantService.delStore(storeId, resolveScopedCityId(request));
        return Result.success();
    }

    private Long resolveScopedCityId(HttpServletRequest request) {
        if (!"substation".equals(request.getAttribute("role"))) {
            return null;
        }
        Long cityId = (Long) request.getAttribute("cityId");
        if (cityId == null || cityId < 1) {
            throw new BizException("当前账号未绑定有效城市");
        }
        return cityId;
    }

    private Long resolveQueryCityId(HttpServletRequest request, Long queryCityId) {
        Long scopedCityId = resolveScopedCityId(request);
        return scopedCityId != null ? scopedCityId : queryCityId;
    }
}