package com.oying.modules.pc.store.rest; import cn.hutool.core.util.ObjUtil; import com.oying.modules.pc.product.domain.Product; import com.oying.modules.pc.product.domain.dto.ProductQueryCriteria; import com.oying.modules.pc.product.domain.enums.ProductStatusEnum; import com.oying.modules.pc.product.service.ProductService; import com.oying.modules.pc.store.domain.Store; import com.oying.modules.pc.store.domain.StoreQualification; import com.oying.modules.pc.store.domain.dto.StoreCustomerDetailDto; import com.oying.modules.pc.store.domain.dto.StoreQualificationQueryCriteria; import com.oying.modules.pc.store.domain.dto.StoreQueryCriteria; import com.oying.modules.pc.store.service.StoreQualificationService; import com.oying.modules.pc.store.service.StoreQueryService; import com.oying.modules.pc.store.service.StoreService; import com.oying.modules.pc.store.view.CustomerStoreView; import com.oying.modules.pc.utils.BusinessHoursUtils; import com.oying.utils.PageResult; import com.oying.utils.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 店铺 * * @author lzp * @date 2025-04-22 */ @Api(tags = "店铺(客户端)") @RestController @RequestMapping("/api/pc/customer/store") @RequiredArgsConstructor public class StoreCustomerController { private final StoreService storeService; private final StoreQueryService storeQueryService; private final StoreQualificationService storeQualificationService; private final ProductService productService; @GetMapping(value = "/page") @ApiOperation("查询店铺") public ResponseEntity getStoresByPage(StoreQueryCriteria criteria) { PageResult pagedStores = storeQueryService.findPagedStores(criteria); List stores = pagedStores.getContent(); for (Store store : stores) { store.setProducts(this.getProductsByStoreId(store.getStoreId())); } return ResponseEntity.ok(R.success(stores)); } @GetMapping(value = "/{storeId}") @ApiOperation("查询店铺") public ResponseEntity getStoreById(@PathVariable("storeId") Long storeId) { Store store = storeService.getById(storeId); CustomerStoreView view = new CustomerStoreView(); BeanUtils.copyProperties(store, view); view.setBusinessHours(BusinessHoursUtils.formatBusinessHours(store.getOpenTime(), store.getCloseTime())); return ResponseEntity.ok(R.success(view)); } @GetMapping(value = "/{storeId}/details") @ApiOperation("查询店铺") public ResponseEntity getStoreDetailsById(@PathVariable("storeId") Long storeId) { Store store = storeService.getById(storeId); if (ObjUtil.isNotEmpty(store)) { store.setQualifications(storeQualificationService.queryByStoreId(storeId)); } return ResponseEntity.ok(R.success(store)); } private List getProductsByStoreId(Long storeId) { ProductQueryCriteria criteria = new ProductQueryCriteria(); criteria.setStoreId(storeId); criteria.setStatus(ProductStatusEnum.AVAILABLE.getValue()); criteria.setLimit(3); return productService.queryAll(criteria); } }