feat(订单): 添加查询未归还订单商品功能

在ShopOrderGoodsService、OrderApplicationService、ShopOrderGoodsServiceImpl和ShopOrderGoodsMapper中添加了selectUnReturnOrderGoods方法,用于查询未归还的订单商品。同时,在StatsDTO中新增了未归还商品数量、未归还订单数量和未归还金额字段,并在ShopController的stats方法中实现了相关统计逻辑。
This commit is contained in:
dzq 2025-05-21 09:22:55 +08:00
parent 10329475f3
commit ffc5befc81
6 changed files with 57 additions and 0 deletions

View File

@ -11,6 +11,7 @@ import com.agileboot.domain.common.command.BulkOperationCommand;
import com.agileboot.domain.mqtt.MqttService;
import com.agileboot.domain.shop.goods.GoodsApplicationService;
import com.agileboot.domain.shop.order.OrderApplicationService;
import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity;
import com.agileboot.domain.shop.order.db.TodayLatestOrderGoodsDTO;
import com.agileboot.domain.shop.shop.ShopApplicationService;
import com.agileboot.domain.shop.shop.command.AddShopCommand;
@ -20,6 +21,8 @@ import com.agileboot.domain.shop.shop.dto.ShopDTO;
import com.agileboot.domain.shop.shop.dto.StatsDTO;
import com.agileboot.domain.shop.shop.query.SearchShopQuery;
import io.swagger.v3.oas.annotations.Operation;
import java.math.BigDecimal;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
@ -49,24 +52,48 @@ public class ShopController extends BaseController {
@Operation(summary = "首页数据")
@GetMapping("/Stats")
public ResponseDTO<StatsDTO> stats() {
// 创建统计数据DTO对象
StatsDTO statsDTO = new StatsDTO();
// 设置商店总数调用商店服务统计
statsDTO.setShopCount(shopApplicationService.countAllRecord());
// 设置商品总数调用商品服务统计
statsDTO.setGoodsCount(goodsApplicationService.countAllRecord());
// 设置商品总金额调用商品服务计算
statsDTO.setGoodsTotalAmount(goodsApplicationService.calculateTotalAmount());
// 设置订单总数调用订单服务统计
statsDTO.setOrderCount(orderApplicationService.countAllRecord());
// 设置订单总金额调用订单服务计算
statsDTO.setOrderAmountSum(orderApplicationService.sumTotalAmount());
List<ShopOrderGoodsEntity> unReturnOrderGoods = orderApplicationService.selectUnReturnOrderGoods();
// 设置未还商品数量调用订单服务统计
statsDTO.setUnReturnedGoodsCount((long) unReturnOrderGoods.size());
// 设置未还订单数量调用订单服务统计
statsDTO.setUnReturnedOrderCount(unReturnOrderGoods.stream().map(ShopOrderGoodsEntity::getOrderId).distinct().count());
// 设置未还金额调用订单服务计算
statsDTO.setUnReturnedAmount(unReturnOrderGoods.stream().map(ShopOrderGoodsEntity::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
// 设置智能柜总数调用智能柜服务统计
statsDTO.setCabinetCount(smartCabinetApplicationService.countAllRecord());
// 设置格口总数调用格口服务统计
statsDTO.setCellCount(cabinetCellApplicationService.countAllRecord());
// 设置已关联格口数调用格口服务统计
statsDTO.setLinkedCellCount(cabinetCellApplicationService.countLinkedRecord());
// 计算并设置未管理格口数总格口数-已关联格口数
statsDTO.setUnmanagedCellCount(statsDTO.getCellCount() - statsDTO.getLinkedCellCount());
// 设置网关数量从MQTT服务获取
statsDTO.setGatewayCount(mqttService.getGatewayCount());
// 设置热门商品列表调用订单服务获取
statsDTO.setTopGoods(orderApplicationService.selectTopGoodsByOccurrence());
// 获取今日最新订单商品列表
List<TodayLatestOrderGoodsDTO> todayLatestOrderGoodsDTOS = orderApplicationService.selectTodayLatestOrderGoods();
// 格式化每个订单商品的创建时间HH:mm:ss格式
todayLatestOrderGoodsDTOS.forEach(dto -> {
if (dto.getCreateTime() != null) {
dto.setCreateTimeStr(cn.hutool.core.date.DateUtil.format(dto.getCreateTime(), "HH:mm:ss"));
}
});
// 设置今日最新订单商品列表到统计DTO
statsDTO.setTodayLatestOrderGoods(todayLatestOrderGoodsDTOS);
return ResponseDTO.ok(statsDTO);
}

View File

@ -353,4 +353,8 @@ public class OrderApplicationService {
public BigDecimal sumTotalAmount() {
return orderService.sumTotalAmount();
}
public List<ShopOrderGoodsEntity> selectUnReturnOrderGoods() {
return orderGoodsService.selectUnReturnOrderGoods();
}
}

View File

@ -41,4 +41,14 @@ public interface ShopOrderGoodsMapper extends BaseMapper<ShopOrderGoodsEntity> {
"ORDER BY sog.create_time DESC " +
"LIMIT 10")
List<TodayLatestOrderGoodsDTO> selectTodayLatestOrderGoods();
@Select("SELECT og.* " +
"FROM shop_order_goods og " +
"LEFT JOIN shop_goods g ON og.goods_id = g.goods_id " +
"LEFT JOIN cabinet_cell cc ON og.cell_id = cc.cell_id " +
"WHERE og.status = 1 " +
"AND og.deleted = 0 " +
"AND g.deleted = 0 " +
"AND cc.deleted = 0 AND cc.goods_id = og.goods_id")
List<ShopOrderGoodsEntity> selectUnReturnOrderGoods();
}

View File

@ -22,4 +22,6 @@ public interface ShopOrderGoodsService extends IService<ShopOrderGoodsEntity> {
List<TopGoodsDTO> selectTopGoodsByOccurrence();
List<TodayLatestOrderGoodsDTO> selectTodayLatestOrderGoods();
List<ShopOrderGoodsEntity> selectUnReturnOrderGoods();
}

View File

@ -37,4 +37,9 @@ public class ShopOrderGoodsServiceImpl extends ServiceImpl<ShopOrderGoodsMapper,
return baseMapper.selectTodayLatestOrderGoods();
}
@Override
public List<ShopOrderGoodsEntity> selectUnReturnOrderGoods() {
return baseMapper.selectUnReturnOrderGoods();
}
}

View File

@ -31,6 +31,15 @@ public class StatsDTO {
@ExcelColumn(name = "总柜子数量")
private Long cabinetCount;
@ExcelColumn(name = "未还商品数量")
private Long unReturnedGoodsCount;
@ExcelColumn(name = "未还订单数量")
private Long unReturnedOrderCount;
@ExcelColumn(name = "未还金额")
private BigDecimal unReturnedAmount;
@ExcelColumn(name = "总格口数量")
private Long cellCount;