Compare commits
12 Commits
ed0138c777
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3dd3e106dc | ||
|
|
1427538598 | ||
|
|
8f01832b65 | ||
|
|
379df40aee | ||
|
|
a0aa1432ab | ||
|
|
4da4b1f922 | ||
|
|
c12912f1c5 | ||
|
|
5e7cdc1bc4 | ||
|
|
4f39d3ec45 | ||
|
|
4ac409020a | ||
|
|
84324774da | ||
|
|
c74a46b110 |
@@ -36,6 +36,11 @@ public class Category {
|
|||||||
*/
|
*/
|
||||||
private String icon;
|
private String icon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态: 1启用 0禁用
|
* 状态: 1启用 0禁用
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单实体类
|
* 订单实体类
|
||||||
@@ -109,4 +110,10 @@ public class Order {
|
|||||||
*/
|
*/
|
||||||
@TableField("deleted")
|
@TableField("deleted")
|
||||||
private Integer deleted;
|
private Integer deleted;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单明细(不存数据库,仅用于API返回)
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private List<OrderItem> items;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,21 @@ public class Product {
|
|||||||
*/
|
*/
|
||||||
private BigDecimal price;
|
private BigDecimal price;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 长度(mm)
|
||||||
|
*/
|
||||||
|
private BigDecimal length;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度(mm)
|
||||||
|
*/
|
||||||
|
private BigDecimal width;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 面积(m²)
|
||||||
|
*/
|
||||||
|
private BigDecimal area;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 成本价
|
* 成本价
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -119,8 +119,8 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
item.setSubtotal(subtotal);
|
item.setSubtotal(subtotal);
|
||||||
orderItems.add(item);
|
orderItems.add(item);
|
||||||
|
|
||||||
// 4. 暂时不扣减库存,等确认完成时再扣减
|
// 4. 创建订单时立即扣减库存
|
||||||
// decreaseStock(product.getProductId(), itemDTO.getQuantity(), order.getOrderId(), operatorId);
|
decreaseStock(product.getProductId(), itemDTO.getQuantity(), order.getOrderId(), operatorId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置订单原价
|
// 设置订单原价
|
||||||
@@ -191,7 +191,27 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
wrapper.le(Order::getCreatedAt, endDate);
|
wrapper.le(Order::getCreatedAt, endDate);
|
||||||
}
|
}
|
||||||
wrapper.orderByDesc(Order::getCreatedAt);
|
wrapper.orderByDesc(Order::getCreatedAt);
|
||||||
return orderMapper.selectPage(pageParam, wrapper);
|
Page<Order> result = orderMapper.selectPage(pageParam, wrapper);
|
||||||
|
|
||||||
|
// 查询每个订单的明细
|
||||||
|
if (result.getRecords() != null && !result.getRecords().isEmpty()) {
|
||||||
|
for (Order order : result.getRecords()) {
|
||||||
|
try {
|
||||||
|
if (order.getOrderId() != null) {
|
||||||
|
List<OrderItem> items = orderItemMapper.selectList(
|
||||||
|
new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderId, order.getOrderId()));
|
||||||
|
order.setItems(items);
|
||||||
|
} else {
|
||||||
|
order.setItems(new ArrayList<>());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 查询明细失败时设置空列表
|
||||||
|
order.setItems(new ArrayList<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -233,7 +253,13 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
throw new RuntimeException("订单状态不允许取消");
|
throw new RuntimeException("订单状态不允许取消");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 未完成订单没有扣减库存,不需要恢复
|
// 取消订单需要恢复库存(因为创建时已扣减库存)
|
||||||
|
List<OrderItem> items = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
|
||||||
|
.eq(OrderItem::getOrderId, orderId));
|
||||||
|
for (OrderItem item : items) {
|
||||||
|
increaseStock(item.getProductId(), item.getQuantity(), orderId, operatorId);
|
||||||
|
}
|
||||||
|
|
||||||
// 更新订单状态
|
// 更新订单状态
|
||||||
order.setStatus(2); // 已取消
|
order.setStatus(2); // 已取消
|
||||||
orderMapper.updateById(order);
|
orderMapper.updateById(order);
|
||||||
@@ -282,14 +308,18 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (status == 1) {
|
if (status == 1) {
|
||||||
// 确认完成:扣减库存
|
// 确认完成:订单在创建时已扣减库存,此处不再扣减
|
||||||
|
// 只需更新状态为已完成
|
||||||
|
}
|
||||||
|
// 取消订单需要恢复库存(因为创建时已扣减)
|
||||||
|
if (status == 2) {
|
||||||
|
// 取消订单需要恢复库存(因为创建时已扣减)
|
||||||
List<OrderItem> items = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
|
List<OrderItem> items = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
|
||||||
.eq(OrderItem::getOrderId, orderId));
|
.eq(OrderItem::getOrderId, orderId));
|
||||||
for (OrderItem item : items) {
|
for (OrderItem item : items) {
|
||||||
decreaseStock(item.getProductId(), item.getQuantity(), orderId, operatorId);
|
increaseStock(item.getProductId(), item.getQuantity(), orderId, operatorId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 取消不需要恢复库存(因为创建时没扣减)
|
|
||||||
|
|
||||||
order.setStatus(status);
|
order.setStatus(status);
|
||||||
orderMapper.updateById(order);
|
orderMapper.updateById(order);
|
||||||
@@ -336,10 +366,17 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
// 重新计算金额
|
// 重新计算金额
|
||||||
BigDecimal totalAmount = BigDecimal.ZERO;
|
BigDecimal totalAmount = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
// 删除旧的订单明细前,先恢复库存
|
||||||
|
List<OrderItem> oldItems = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
|
||||||
|
.eq(OrderItem::getOrderId, orderId));
|
||||||
|
for (OrderItem oldItem : oldItems) {
|
||||||
|
increaseStock(oldItem.getProductId(), oldItem.getQuantity(), orderId, operatorId);
|
||||||
|
}
|
||||||
|
|
||||||
// 删除旧的订单明细
|
// 删除旧的订单明细
|
||||||
orderItemMapper.delete(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderId, orderId));
|
orderItemMapper.delete(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderId, orderId));
|
||||||
|
|
||||||
// 重新创建订单明细
|
// 重新创建订单明细,并扣减库存
|
||||||
List<OrderItem> orderItems = new ArrayList<>();
|
List<OrderItem> orderItems = new ArrayList<>();
|
||||||
for (CreateOrderRequest.OrderItemDTO itemDTO : request.getItems()) {
|
for (CreateOrderRequest.OrderItemDTO itemDTO : request.getItems()) {
|
||||||
Product product = productMapper.selectById(itemDTO.getProductId());
|
Product product = productMapper.selectById(itemDTO.getProductId());
|
||||||
@@ -373,6 +410,8 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
item.setSubtotal(subtotal);
|
item.setSubtotal(subtotal);
|
||||||
orderItems.add(item);
|
orderItems.add(item);
|
||||||
orderItemMapper.insert(item);
|
orderItemMapper.insert(item);
|
||||||
|
// 扣减库存
|
||||||
|
decreaseStock(product.getProductId(), itemDTO.getQuantity(), orderId, operatorId);
|
||||||
}
|
}
|
||||||
|
|
||||||
order.setTotalAmount(totalAmount);
|
order.setTotalAmount(totalAmount);
|
||||||
|
|||||||
@@ -133,6 +133,15 @@ public class ProductServiceImpl implements ProductService {
|
|||||||
product.setProductId(UUID.randomUUID().toString());
|
product.setProductId(UUID.randomUUID().toString());
|
||||||
product.setStatus(1);
|
product.setStatus(1);
|
||||||
productMapper.insert(product);
|
productMapper.insert(product);
|
||||||
|
|
||||||
|
// 创建商品时自动创建库存记录
|
||||||
|
Stock stock = new Stock();
|
||||||
|
stock.setStockId(UUID.randomUUID().toString());
|
||||||
|
stock.setProductId(product.getProductId());
|
||||||
|
stock.setQuantity(0);
|
||||||
|
stock.setLockedQuantity(0);
|
||||||
|
stockMapper.insert(stock);
|
||||||
|
|
||||||
return product;
|
return product;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
-- 添加商品长度、宽度、面积字段
|
||||||
|
ALTER TABLE products ADD COLUMN length DECIMAL(10,2);
|
||||||
|
COMMENT ON COLUMN products.length IS '长度(mm)';
|
||||||
|
ALTER TABLE products ADD COLUMN width DECIMAL(10,2);
|
||||||
|
COMMENT ON COLUMN products.width IS '宽度(mm)';
|
||||||
|
ALTER TABLE products ADD COLUMN area DECIMAL(10,4);
|
||||||
|
COMMENT ON COLUMN products.area IS '面积(m²)';
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
-- 添加订单明细长度、宽度、面积字段
|
||||||
|
ALTER TABLE order_items ADD COLUMN length DECIMAL(10,2);
|
||||||
|
COMMENT ON COLUMN order_items.length IS '长度(mm)';
|
||||||
|
ALTER TABLE order_items ADD COLUMN width DECIMAL(10,2);
|
||||||
|
COMMENT ON COLUMN order_items.width IS '宽度(mm)';
|
||||||
|
ALTER TABLE order_items ADD COLUMN area DECIMAL(10,4);
|
||||||
|
COMMENT ON COLUMN order_items.area IS '面积(m²)';
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- 添加分类描述字段
|
||||||
|
ALTER TABLE categories ADD COLUMN IF NOT EXISTS description TEXT;
|
||||||
Reference in New Issue
Block a user