Explorar el Código

收银台功能 菜品优惠+服务费 桌号和菜品修改

liudongzhi hace 3 semanas
padre
commit
01fd068afe

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/StorePrice.java

@@ -35,6 +35,10 @@ public class StorePrice {
     @TableField("name")
     private String name;
 
+    @ApiModelProperty(value = "分类ids(JSON数组,如:[1,2,3])")
+    @TableField("category_ids")
+    private String categoryIds;
+
     @ApiModelProperty(value = "总价")
     @TableField("total_price")
     private BigDecimal totalPrice;

+ 5 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreBookingTableVo.java

@@ -1,6 +1,7 @@
 package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -34,6 +35,10 @@ public class StoreBookingTableVo {
 
     @ApiModelProperty(value = "座位数")
     private Integer seatingCapacity;
+    
+    @JsonProperty("seating_capacity")
+    @ApiModelProperty(value = "座位数(下划线字段)")
+    private Integer seatingCapacitySnake;
 
     @ApiModelProperty(value = "类型(1:美食,2:通用)")
     private Integer type;

+ 41 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreProductSelectVo.java

@@ -0,0 +1,41 @@
+package shop.alien.entity.store.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "StoreProductSelectVo", description = "菜品选择列表VO")
+public class StoreProductSelectVo {
+
+    @ApiModelProperty("主键ID")
+    private Integer id;
+
+    @ApiModelProperty("门店ID")
+    private Integer storeId;
+
+    @ApiModelProperty("类型: 1美食 2其他")
+    private Integer type;
+
+    @ApiModelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("价格")
+    private BigDecimal totalPrice;
+
+    @ApiModelProperty("图片")
+    private String images;
+
+    @ApiModelProperty("分类ID原始字符串")
+    private String categoryIds;
+
+    @ApiModelProperty("分类ID列表")
+    private List<Integer> categoryIdList;
+
+    @ApiModelProperty("分类名称列表")
+    private List<String> categoryNames;
+}
+

+ 98 - 7
alien-store/src/main/java/shop/alien/store/controller/StoreProductDiscountController.java

@@ -10,11 +10,21 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreCuisine;
+import shop.alien.entity.store.StoreCuisineCategory;
+import shop.alien.entity.store.StorePrice;
 import shop.alien.entity.store.dto.StoreProductDiscountRuleSaveDto;
+import shop.alien.entity.store.vo.StoreProductSelectVo;
 import shop.alien.entity.store.vo.StoreProductDiscountRuleDetailVo;
 import shop.alien.entity.store.vo.StoreProductDiscountRuleListVo;
+import shop.alien.store.service.StoreCuisineCategoryService;
 import shop.alien.store.service.StoreCuisineService;
 import shop.alien.store.service.StoreProductDiscountService;
+import shop.alien.store.service.StorePriceService;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Api(tags = {"门店-菜品优惠"})
@@ -25,12 +35,15 @@ public class StoreProductDiscountController {
 
 	private final StoreProductDiscountService discountService;
 	private final StoreCuisineService storeCuisineService;
+	private final StorePriceService storePriceService;
+	private final StoreCuisineCategoryService storeCuisineCategoryService;
 
 	@ApiOperation("菜品列表(支持按名称模糊查询)")
 	@GetMapping("/productList")
-	public R<IPage<StoreCuisine>> productList(
+	public R<IPage<StoreProductSelectVo>> productList(
 			@RequestParam Integer storeId,
 			@RequestParam(required = false) String name,
+			@RequestParam(required = false) String type,
 			@RequestParam(defaultValue = "1") Integer pageNum,
 			@RequestParam(defaultValue = "10") Integer pageSize) {
 		if (storeId == null) {
@@ -38,14 +51,39 @@ public class StoreProductDiscountController {
 		}
 		int pn = pageNum == null || pageNum < 1 ? 1 : pageNum;
 		int ps = pageSize == null || pageSize < 1 ? 10 : pageSize;
-		Page<StoreCuisine> page = new Page<>(pn, ps);
-		LambdaQueryWrapper<StoreCuisine> wrapper = new LambdaQueryWrapper<>();
-		wrapper.eq(StoreCuisine::getStoreId, storeId);
+		String typeValue = StringUtils.hasText(type) ? type.trim() : "1";
+		if (!"1".equals(typeValue) && !"2".equals(typeValue)) {
+			return R.fail("type参数不合法,仅支持1(美食)或2(其他)");
+		}
+		Map<Integer, String> categoryNameMap = storeCuisineCategoryService.getCategoryList(storeId)
+				.stream()
+				.collect(Collectors.toMap(StoreCuisineCategory::getId, StoreCuisineCategory::getCategoryName, (a, b) -> a));
+
+		if ("1".equals(typeValue)) {
+			Page<StoreCuisine> page = new Page<>(pn, ps);
+			LambdaQueryWrapper<StoreCuisine> wrapper = new LambdaQueryWrapper<>();
+			wrapper.eq(StoreCuisine::getStoreId, storeId);
+			if (StringUtils.hasText(name)) {
+				wrapper.like(StoreCuisine::getName, name.trim());
+			}
+			wrapper.orderByDesc(StoreCuisine::getUpdatedTime);
+			IPage<StoreCuisine> cuisinePage = storeCuisineService.page(page, wrapper);
+			Page<StoreProductSelectVo> result = new Page<>(pn, ps, cuisinePage.getTotal());
+			result.setRecords(cuisinePage.getRecords().stream().map(item -> toProductSelectVo(item, categoryNameMap)).collect(Collectors.toList()));
+			return R.data(result);
+		}
+
+		Page<StorePrice> page = new Page<>(pn, ps);
+		LambdaQueryWrapper<StorePrice> wrapper = new LambdaQueryWrapper<>();
+		wrapper.eq(StorePrice::getStoreId, storeId);
 		if (StringUtils.hasText(name)) {
-			wrapper.like(StoreCuisine::getName, name.trim());
+			wrapper.like(StorePrice::getName, name.trim());
 		}
-		wrapper.orderByDesc(StoreCuisine::getUpdatedTime);
-		return R.data(storeCuisineService.page(page, wrapper));
+		wrapper.orderByDesc(StorePrice::getUpdatedTime);
+		IPage<StorePrice> pricePage = storePriceService.page(page, wrapper);
+		Page<StoreProductSelectVo> result = new Page<>(pn, ps, pricePage.getTotal());
+		result.setRecords(pricePage.getRecords().stream().map(item -> toProductSelectVo(item, categoryNameMap)).collect(Collectors.toList()));
+		return R.data(result);
 	}
 
 	@ApiOperation("优惠规则列表")
@@ -96,5 +134,58 @@ public class StoreProductDiscountController {
 		int count = discountService.autoCloseExpiredCustomRules();
 		return R.data(count);
 	}
+
+	private StoreProductSelectVo toProductSelectVo(StoreCuisine item, Map<Integer, String> categoryNameMap) {
+		StoreProductSelectVo vo = new StoreProductSelectVo();
+		vo.setId(item.getId());
+		vo.setStoreId(item.getStoreId());
+		vo.setType(1);
+		vo.setName(item.getName());
+		vo.setTotalPrice(item.getTotalPrice());
+		vo.setImages(item.getImages());
+		vo.setCategoryIds(item.getCategoryIds());
+		List<Integer> categoryIdList = parseCategoryIds(item.getCategoryIds());
+		vo.setCategoryIdList(categoryIdList);
+		vo.setCategoryNames(categoryIdList.stream().map(categoryNameMap::get).filter(StringUtils::hasText).collect(Collectors.toList()));
+		return vo;
+	}
+
+	private StoreProductSelectVo toProductSelectVo(StorePrice item, Map<Integer, String> categoryNameMap) {
+		StoreProductSelectVo vo = new StoreProductSelectVo();
+		vo.setId(item.getId());
+		vo.setStoreId(item.getStoreId());
+		vo.setType(2);
+		vo.setName(item.getName());
+		vo.setTotalPrice(item.getTotalPrice());
+		vo.setImages(item.getImages());
+		vo.setCategoryIds(item.getCategoryIds());
+		List<Integer> categoryIdList = parseCategoryIds(item.getCategoryIds());
+		vo.setCategoryIdList(categoryIdList);
+		vo.setCategoryNames(categoryIdList.stream().map(categoryNameMap::get).filter(StringUtils::hasText).collect(Collectors.toList()));
+		return vo;
+	}
+
+	private List<Integer> parseCategoryIds(String categoryIds) {
+		if (!StringUtils.hasText(categoryIds)) {
+			return Collections.emptyList();
+		}
+		try {
+			String cleaned = categoryIds.trim()
+					.replace("[", "")
+					.replace("]", "")
+					.replace("\"", "");
+			if (!StringUtils.hasText(cleaned)) {
+				return Collections.emptyList();
+			}
+			return java.util.Arrays.stream(cleaned.split(","))
+					.map(String::trim)
+					.filter(StringUtils::hasText)
+					.map(Integer::valueOf)
+					.collect(Collectors.toList());
+		} catch (Exception e) {
+			log.warn("解析分类ID失败: {}", categoryIds, e);
+			return Collections.emptyList();
+		}
+	}
 }
 

+ 3 - 2
alien-store/src/main/java/shop/alien/store/controller/StoreServiceFeeRuleController.java

@@ -73,8 +73,9 @@ public class StoreServiceFeeRuleController {
     @GetMapping("/tableList")
     public R<List<StoreBookingTableVo>> tableList(
             @RequestParam Integer storeId,
-            @RequestParam(required = false) Integer categoryId) {
-        return storeServiceFeeRuleService.getTableList(storeId, categoryId);
+            @RequestParam(required = false) Integer categoryId,
+            @RequestParam(required = false) String name) {
+        return storeServiceFeeRuleService.getTableList(storeId, categoryId, name);
     }
 }
 

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/StoreServiceFeeRuleService.java

@@ -21,7 +21,7 @@ public interface StoreServiceFeeRuleService {
 
     R<Boolean> deleteRule(Integer id);
 
-    R<List<StoreBookingTableVo>> getTableList(Integer storeId, Integer categoryId);
+    R<List<StoreBookingTableVo>> getTableList(Integer storeId, Integer categoryId, String name);
 
     /**
      * 自动关闭已过期的自定义日期服务费规则

+ 1 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreBookingTableServiceImpl.java

@@ -94,6 +94,7 @@ public class StoreBookingTableServiceImpl extends ServiceImpl<StoreBookingTableM
                 .map(table -> {
                     StoreBookingTableVo vo = new StoreBookingTableVo();
                     BeanUtils.copyProperties(table, vo);
+                    vo.setSeatingCapacitySnake(table.getSeatingCapacity());
                     // 设置分类名称
                     if (table.getCategoryId() != null) {
                         vo.setCategoryName(categoryMap.get(table.getCategoryId()));

+ 7 - 1
alien-store/src/main/java/shop/alien/store/service/impl/StoreServiceFeeRuleServiceImpl.java

@@ -191,11 +191,17 @@ public class StoreServiceFeeRuleServiceImpl implements StoreServiceFeeRuleServic
     }
 
     @Override
-    public R<List<StoreBookingTableVo>> getTableList(Integer storeId, Integer categoryId) {
+    public R<List<StoreBookingTableVo>> getTableList(Integer storeId, Integer categoryId, String name) {
         if (storeId == null) {
             return R.fail("门店ID不能为空");
         }
         List<StoreBookingTableVo> list = storeBookingTableService.getTableListWithCategoryName(storeId, categoryId);
+        if (StringUtils.hasText(name)) {
+            String keyword = name.trim();
+            list = list.stream()
+                    .filter(item -> item != null && StringUtils.hasText(item.getTableNumber()) && item.getTableNumber().contains(keyword))
+                    .collect(Collectors.toList());
+        }
         return R.data(list);
     }