diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/BrandController.java b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/BrandController.java index 7a2f4ece..44900449 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/BrandController.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/BrandController.java @@ -28,8 +28,9 @@ public class BrandController extends BaseController { */ @Anonymous @GetMapping(value = "/getTree/{storeId}") - public AjaxResult getBrandTree(@PathVariable String storeId) { - return AjaxResult.success(brandService.getBrandTree(storeId)); + public AjaxResult getBrandTree(@PathVariable String storeId, + @RequestParam(required = false) String brandName) { + return AjaxResult.success(brandService.getBrandTree(storeId,brandName)); } /** diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ClassificationController.java b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ClassificationController.java index f3784e95..91657f58 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ClassificationController.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ClassificationController.java @@ -7,6 +7,8 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.web.domain.Classification; import com.ruoyi.web.service.ClassIficationService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -21,6 +23,8 @@ public class ClassificationController extends BaseController { @Resource private ClassIficationService classIficationService; + private static final Logger log = LoggerFactory.getLogger(ClassificationController.class); + /** * 获取商品分类树 * @@ -28,8 +32,10 @@ public class ClassificationController extends BaseController { */ @Anonymous @GetMapping(value = "/getTree/{storeId}") - public AjaxResult getClassIficationTree(@PathVariable String storeId) { - return AjaxResult.success(classIficationService.getIficationTree(storeId)); + public AjaxResult getClassIficationTree(@PathVariable String storeId, + @RequestParam(required = false) String classificationName) { + log.info("获取商品分类树" + storeId); + return AjaxResult.success(classIficationService.getIficationTree(storeId,classificationName)); } /** diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/OrderController.java b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/OrderController.java index 43ed5b15..3ba366cd 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/OrderController.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/OrderController.java @@ -5,11 +5,14 @@ import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.web.domain.Order; import com.ruoyi.web.service.OrderService; +import org.checkerframework.checker.units.qual.A; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; /** @@ -23,12 +26,13 @@ public class OrderController extends BaseController { private OrderService orderService; /** - * 获取商品订单列表 + * 查询订单列表 */ -// @PreAuthorize("@ss.hasPermi('product:list')") +// @PreAuthorize("@ss.hasPermi('mall:order:list')") @Anonymous @GetMapping("/list") public AjaxResult list(Order order) { - return AjaxResult.success(orderService.selectList(order)); + return AjaxResult.success( orderService.selectOrderList(order)); } + } \ No newline at end of file diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ProductStoreController.java b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ProductStoreController.java index 3d6557f2..05d571fc 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ProductStoreController.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/controller/ProductStoreController.java @@ -42,6 +42,7 @@ public class ProductStoreController extends BaseController { return AjaxResult.success(productService.selectList(product)); } + /** * 批量删除商品 */ diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/domain/Order.java b/ruoyi-mall/src/main/java/com/ruoyi/web/domain/Order.java index 156c3772..ebbdef7c 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/domain/Order.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/domain/Order.java @@ -6,6 +6,7 @@ import lombok.Data; import java.math.BigDecimal; import java.util.Date; +import java.util.List; /** * 商品订单记录表 mall_order @@ -39,14 +40,14 @@ public class Order extends BaseEntity { */ private Integer payStatus; - /** - * 商品id - */ - private Integer productId; - /** * 支付时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date payTime; + + /** + * 订单商品明细列表 + */ + private List orderItems; } diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/domain/OrderItem.java b/ruoyi-mall/src/main/java/com/ruoyi/web/domain/OrderItem.java new file mode 100644 index 00000000..cce9e2a3 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/domain/OrderItem.java @@ -0,0 +1,68 @@ +package com.ruoyi.web.domain; + + +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; + + +import java.math.BigDecimal; + + +/** + * 订单商品明细对象 mall_order_item + */ +@Data +public class OrderItem extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 明细ID + */ + private Long id; + + /** + * 订单ID + */ + private Long orderId; + + /** + * 商品ID + */ + private Long productId; + + /** + * 商品名称(快照) + */ + private String productName; + + /** + * 商品编号(快照) + */ + private String productNo; + + /** + * 商品图片(快照) + */ + private String mainImage; + + /** + * 商品规格 + */ + private String spec; + + /** + * 单价(快照) + */ + private BigDecimal unitPrice; + + /** + * 购买数量 + */ + private Integer quantity; + + /** + * 小计金额 + */ + private BigDecimal subtotal; + +} \ No newline at end of file diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/ClassIficationMapper.java b/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/ClassIficationMapper.java index 8491832a..4af52770 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/ClassIficationMapper.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/ClassIficationMapper.java @@ -12,7 +12,7 @@ import java.util.List; public interface ClassIficationMapper { - List selectRootBrands(String storeId); + List selectRootBrands(@Param("storeId") String storeId); List selectByParentId(@Param("parentId") Long parentId); diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/OrderMapper.java b/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/OrderMapper.java index c53ad451..188b4364 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/OrderMapper.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/mapper/OrderMapper.java @@ -11,5 +11,6 @@ import java.util.List; public interface OrderMapper { - List selectList(Order order); + + List selectOrderList(Order order); } \ No newline at end of file diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/service/BrandService.java b/ruoyi-mall/src/main/java/com/ruoyi/web/service/BrandService.java index aee2a897..0ffeb8a2 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/service/BrandService.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/service/BrandService.java @@ -7,7 +7,7 @@ import java.util.List; public interface BrandService { // 获取品牌树(一级品牌包含子品牌) - List getBrandTree(String storeId); + List getBrandTree(String storeId,String brandName); // 添加品牌 int addBrand(Brand brand); diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/service/ClassIficationService.java b/ruoyi-mall/src/main/java/com/ruoyi/web/service/ClassIficationService.java index 4083fe89..efe32236 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/service/ClassIficationService.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/service/ClassIficationService.java @@ -6,7 +6,7 @@ import java.util.List; public interface ClassIficationService { - List getIficationTree(String storeId); + List getIficationTree(String storeId,String classificationName); int addClassification(Classification classification); diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/service/OrderService.java b/ruoyi-mall/src/main/java/com/ruoyi/web/service/OrderService.java index 2c787366..90d80c82 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/service/OrderService.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/service/OrderService.java @@ -11,5 +11,6 @@ import java.util.List; */ public interface OrderService { - List selectList(Order order); + + List selectOrderList(Order order); } diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/BrandServiceImpl.java b/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/BrandServiceImpl.java index e008c3dc..01b32fee 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/BrandServiceImpl.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/BrandServiceImpl.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service public class BrandServiceImpl implements BrandService { @@ -23,13 +24,41 @@ public class BrandServiceImpl implements BrandService { private BrandMapper brandMapper; @Override - public List getBrandTree(String storeId) { + public List getBrandTree(String storeId, String brandName) { + List rootBrands = brandMapper.selectRootBrands(storeId); - return buildTree(rootBrands); + List brands = buildTree(rootBrands); + + if (StringUtils.isEmpty(brandName)) { + return brands; + } + + return brands.stream() + .filter(node -> containsName(node, brandName)) + .collect(Collectors.toList()); } + /** + * 检查节点或其子节点是否包含指定名称 + */ + private boolean containsName(Brand node, String targetName) { + // 当前节点匹配 + if (targetName.equals(node.getBrandName())) { + return true; + } + + // 子节点中是否有匹配的 + if (node.getChildren() != null) { + return node.getChildren().stream() + .anyMatch(child -> containsName(child, targetName)); + } + + return false; + } + + private List buildTree(List allList) { List rootList = new ArrayList<>(); diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/ClassIficationServiceImpl.java b/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/ClassIficationServiceImpl.java index 588d77e9..292ea8a7 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/ClassIficationServiceImpl.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/ClassIficationServiceImpl.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service public class ClassIficationServiceImpl implements ClassIficationService { @@ -22,11 +23,36 @@ public class ClassIficationServiceImpl implements ClassIficationService { private ClassIficationMapper classIficationMapper; @Override - public List getIficationTree(String storeId) { + public List getIficationTree(String storeId,String classificationName) { List rootBrands = classIficationMapper.selectRootBrands(storeId); // 构建树形结构 - return buildTree(rootBrands); + List classifications = buildTree(rootBrands); + if (StringUtils.isEmpty(classificationName)) { + return classifications; + } + + return classifications.stream() + .filter(node -> containsName(node, classificationName)) + .collect(Collectors.toList()); + } + + /** + * 检查节点或其子节点是否包含指定名称 + */ + private boolean containsName(Classification node, String targetName) { + // 当前节点匹配 + if (targetName.equals(node.getClassificationName())) { + return true; + } + + // 子节点中是否有匹配的 + if (node.getChildren() != null) { + return node.getChildren().stream() + .anyMatch(child -> containsName(child, targetName)); + } + + return false; } /** diff --git a/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/OrderServiceImpl.java b/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/OrderServiceImpl.java index 5cec7d93..060ac913 100644 --- a/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/OrderServiceImpl.java +++ b/ruoyi-mall/src/main/java/com/ruoyi/web/service/impl/OrderServiceImpl.java @@ -18,8 +18,9 @@ public class OrderServiceImpl implements OrderService { @Resource private OrderMapper orderMapper; + @Override - public List selectList(Order order) { - return orderMapper.selectList(order); + public List selectOrderList(Order order) { + return orderMapper.selectOrderList(order); } } diff --git a/ruoyi-mall/src/main/resources/mapper/commodity/OrderMapper.xml b/ruoyi-mall/src/main/resources/mapper/commodity/OrderMapper.xml index f62c5d6d..2c405cee 100644 --- a/ruoyi-mall/src/main/resources/mapper/commodity/OrderMapper.xml +++ b/ruoyi-mall/src/main/resources/mapper/commodity/OrderMapper.xml @@ -4,176 +4,87 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - + + + - - - - + + - - select id, - order_no, - store_id, - pay_amount, - pay_time, - pay_status, - product_id, - create_by, - create_time, - update_by, - update_time - from mall_order - + + + + + + + + + + + + + + + + + + + + + - + SELECT + o.id, + o.order_no, + o.store_id, + o.pay_amount, + o.pay_time, + o.pay_status, + o.create_time, + o.update_time, + o.del_flag, + o.create_by, + o.update_by, + oi.id as item_id, + oi.order_id, + oi.product_id, + oi.product_name, + oi.product_no, + oi.main_image, + oi.spec, + oi.unit_price, + oi.quantity, + oi.subtotal, + oi.del_flag as item_del_flag, + oi.create_by as item_create_by, + oi.create_time as item_create_time + FROM mall_order o + LEFT JOIN mall_order_item oi ON o.id = oi.order_id AND oi.del_flag = '0' + + o.del_flag = '0' + + AND o.order_no like concat('%', #{orderNo}, '%') + + + AND o.store_id = #{storeId} + + + AND o.pay_status = #{payStatus} + + + ORDER BY o.create_time DESC, oi.create_time ASC - - - - - - insert into mall_product_store ( - product_code, - product_name, - product_desc, - main_image, - store_price, - cost_price, - original_price, - store_id, - stock_quantity, - sold_quantity, - status, - create_by, - remark, - shelf_code, - product_bar_code, - shelf_life, - production_date, - approaching, - create_time - )values( - #{productCode}, - #{productName}, - #{productDesc}, - #{mainImage}, - #{storePrice}, - #{costPrice}, - #{originalPrice}, - #{storeId}, - #{stockQuantity}, - #{soldQuantity}, - #{status}, - #{createBy}, - #{remark}, - #{shelfCode}, - #{productBarCode}, - #{shelfLife}, - #{productionDate}, - #{approaching}, - sysdate() - ) - - - - - update mall_product_store - - product_code = #{productCode}, - product_name = #{productName}, - product_desc = #{productDesc}, - main_image = #{mainImage}, - store_price = #{storePrice}, - cost_price = #{costPrice}, - stock_quantity = #{stockQuantity}, - sold_quantity = #{soldQuantity}, - status = #{status}, - shelf_code = #{shelfCode}, - product_bar_code = #{productBarCode}, - update_by = #{updateBy}, - remark = #{remark}, - shelf_life = #{shelfLife}, - production_date = #{productionDate}, - approaching = #{approaching}, - product_brand = #{productBrand}, - classifcation = #{classifcation}, - update_time = sysdate() - - where id = #{id} - - - - update mall_product_store - - product_code = #{productCode}, - product_name = #{productName}, - product_desc = #{productDesc}, - main_image = #{mainImage}, - store_price = #{storePrice}, - cost_price = #{costPrice}, - stock_quantity = #{stockQuantity}, - sold_quantity = #{soldQuantity}, - status = #{status}, - shelf_code = #{shelfCode}, - product_bar_code = #{productBarCode}, - update_by = #{updateBy}, - remark = #{remark}, - shelf_life = #{shelfLife}, - production_date = #{productionDate}, - approaching = #{approaching}, - product_brand = #{productBrand}, - classifcation = #{classifcation}, - update_time = sysdate() - - where product_bar_code = #{productBarCode} - - - - delete - from sys_config - where config_id = #{configId} - - - - delete from sys_config where config_id in - - #{configId} - - - - - update mall_product_store - set del_flag = '2' - where id = #{id} - - - - UPDATE mall_product_store - SET del_flag = 2 - WHERE id IN - - #{id} - - \ No newline at end of file diff --git a/ruoyi-mall/src/main/resources/mapper/commodity/ProductMapper.xml b/ruoyi-mall/src/main/resources/mapper/commodity/ProductMapper.xml index 3be50d4d..60d4e41a 100644 --- a/ruoyi-mall/src/main/resources/mapper/commodity/ProductMapper.xml +++ b/ruoyi-mall/src/main/resources/mapper/commodity/ProductMapper.xml @@ -62,18 +62,14 @@ del_flag = '0' - AND product_bar_code = #{productBarCode} - - - AND product_name like concat('%', #{productName}, '%') + AND product_bar_code like concat('%', #{productBarCode}, '%') AND store_id = #{storeId} - - - AND stock_quantity > 0 - + + AND stock_quantity = #{stockQuantity} + AND status = #{status}