查询订单销售统计详情,导出
This commit is contained in:
1 parent
45aa7b72c3
commit
74cff7122e
14 files changed
+244
-11
No files matched your search
+4
@@ -0,0 +1,4 @@
|
||||
### 获得商品 SPU 明细
|
||||
GET {{baseUrl}}/product/device/refresh-wechat-code?id=25232
|
||||
Authorization: Bearer {{token}}
|
||||
tenant-id: {{adminTenantId}}
|
||||
+5
@@ -16,4 +16,9 @@ tenant-id: {{adminTenantId}}
|
||||
### 获取订单销售统计数据 => 成功
|
||||
GET {{baseUrl}}/trade/order/sales-statistics?pageNo=1&pageSize=100&createTime[0]=2025-01-01 00:00:00&createTime[1]=2025-08-15 23:59:59
|
||||
Authorization: Bearer {{token}}
|
||||
tenant-id: {{adminTenantId}}
|
||||
|
||||
### 获取订单销售统计详情 => 成功
|
||||
GET {{baseUrl}}/trade/order/statistics-detail?pageNo=1&pageSize=100&createTime[0]=2025-01-01 00:00:00&createTime[1]=2025-08-30 23:59:59&barCode=T20250711
|
||||
Authorization: Bearer {{token}}
|
||||
tenant-id: {{adminTenantId}}
|
||||
+61
-2
@@ -1,8 +1,12 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||
import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
|
||||
@@ -29,6 +33,9 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -36,6 +43,7 @@ import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
@@ -84,6 +92,32 @@ public class TradeOrderController {
|
||||
return success(TradeOrderConvert.INSTANCE.convertPage(pageResult, orderItems, userMap));
|
||||
}
|
||||
|
||||
/* @GetMapping("/export-excel")
|
||||
@Operation(summary = "导出交易订单 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('trade:order:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportOrderExcel(@Valid TradeOrderPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// 查询订单
|
||||
PageResult<TradeOrderDO> pageResult = tradeOrderQueryService.getOrderPage(pageReqVO);
|
||||
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 查询用户信息
|
||||
Set<Long> userIds = CollUtil.unionDistinct(convertList(pageResult.getList(), TradeOrderDO::getUserId),
|
||||
convertList(pageResult.getList(), TradeOrderDO::getBrokerageUserId, Objects::nonNull));
|
||||
Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
|
||||
// 查询订单项
|
||||
List<TradeOrderItemDO> orderItems = tradeOrderQueryService.getOrderItemListByOrderId(
|
||||
convertSet(pageResult.getList(), TradeOrderDO::getId));
|
||||
// 最终组合
|
||||
List<TradeOrderPageItemRespVO> list = TradeOrderConvert.INSTANCE.convertPage(pageResult, orderItems, userMap).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "交易订单.xls", "数据", TradeOrderPageItemRespVO.class, list);
|
||||
}*/
|
||||
|
||||
@GetMapping("/summary")
|
||||
@Operation(summary = "获得交易订单统计")
|
||||
@PreAuthorize("@ss.hasPermission('trade:order:query')")
|
||||
@@ -185,8 +219,10 @@ public class TradeOrderController {
|
||||
@PreAuthorize("@ss.hasPermission('trade:order:query')")
|
||||
public CommonResult<PageResult<TradeOrderSalesStatisticsRespVO>> getSalesStatistics(TradeOrderSalesStatisticsReqVO salesStatisticsReqVO) {
|
||||
PageResult<TradeOrderItemStatisticsRespVO> orderItemStatisticsRespVOList = tradeOrderQueryService.getSalesStatistics(salesStatisticsReqVO);
|
||||
|
||||
return success(TradeOrderConvert.INSTANCE.convertStatistics(orderItemStatisticsRespVOList));
|
||||
//获取机器号
|
||||
List<Long> spuIds = orderItemStatisticsRespVOList.getList().stream().map(TradeOrderItemStatisticsRespVO::getSpuId).distinct()
|
||||
/* List<Long> spuIds = orderItemStatisticsRespVOList.getList().stream().map(TradeOrderItemStatisticsRespVO::getSpuId).distinct()
|
||||
.collect(Collectors.toList());//去重Creator
|
||||
List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(spuIds);
|
||||
List<Long> creators = spuList.stream()
|
||||
@@ -226,6 +262,29 @@ public class TradeOrderController {
|
||||
List<ProductSkuRespDTO> skuList = productSkuApi.getSkuList(skuIds);
|
||||
Map<Long, String> skuMap = convertMap(skuList, ProductSkuRespDTO::getId, ProductSkuRespDTO::getBarCode);
|
||||
|
||||
return success(TradeOrderConvert.INSTANCE.convertStatistics(orderItemStatisticsRespVOList, spuDeviceMap,skuMap));
|
||||
return success(TradeOrderConvert.INSTANCE.convertStatistics(orderItemStatisticsRespVOList, spuDeviceMap,skuMap));*/
|
||||
}
|
||||
|
||||
@GetMapping("/statistics-detail")
|
||||
@Operation(summary = "获取订单销售统计详情")
|
||||
@PreAuthorize("@ss.hasPermission('trade:order:query')")
|
||||
public CommonResult<PageResult<TradeOrderItemStatisticsDetailRespVO>> getStatisticsDetail(TradeOrderStatisticsDetailReqVO salesStatisticsReqVO) {
|
||||
return success(tradeOrderQueryService.getOrderItemListByBarCode(salesStatisticsReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出订单销售统计详情 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('trade:order:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportStatisticsDetailExcel(@Valid TradeOrderStatisticsDetailReqVO salesStatisticsReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
salesStatisticsReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
// 查询订单
|
||||
PageResult<TradeOrderItemStatisticsDetailRespVO> pageResult = tradeOrderQueryService.getOrderItemListByBarCode(salesStatisticsReqVO);
|
||||
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||
return;
|
||||
}
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "交易订单.xls", "数据", TradeOrderItemStatisticsDetailRespVO.class, pageResult.getList());
|
||||
}
|
||||
}
|
||||
+41
@@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -15,134 +16,174 @@ public class TradeOrderBaseVO {
|
||||
// ========== 订单基本信息 ==========
|
||||
|
||||
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@ExcelProperty("订单编号")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1146347329394184195")
|
||||
@ExcelProperty("订单流水号")
|
||||
private String no;
|
||||
|
||||
@Schema(description = "下单时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("下单时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "订单类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("订单类型")
|
||||
private Integer type;
|
||||
|
||||
@Schema(description = "订单来源", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("订单来源")
|
||||
private Integer terminal;
|
||||
|
||||
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
|
||||
@ExcelProperty("用户编号")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
|
||||
private String userIp;
|
||||
|
||||
@Schema(description = "用户备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
|
||||
@ExcelProperty("用户备注")
|
||||
private String userRemark;
|
||||
|
||||
@Schema(description = "订单状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("订单状态")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "购买的商品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
@ExcelProperty("购买的商品数量")
|
||||
private Integer productCount;
|
||||
|
||||
@Schema(description = "订单完成时间")
|
||||
@ExcelProperty("订单完成时间")
|
||||
private LocalDateTime finishTime;
|
||||
|
||||
@Schema(description = "订单取消时间")
|
||||
@ExcelProperty("订单取消时间")
|
||||
private LocalDateTime cancelTime;
|
||||
|
||||
@Schema(description = "取消类型", example = "10")
|
||||
@ExcelProperty("取消类型")
|
||||
private Integer cancelType;
|
||||
|
||||
@Schema(description = "商家备注", example = "你猜一下")
|
||||
@ExcelProperty("商家备注")
|
||||
private String remark;
|
||||
|
||||
// ========== 价格 + 支付基本信息 ==========
|
||||
|
||||
@Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@ExcelProperty("支付订单编号")
|
||||
private Long payOrderId;
|
||||
|
||||
@Schema(description = "是否已支付", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
|
||||
@ExcelProperty("是否已支付")
|
||||
private Boolean payStatus;
|
||||
|
||||
@Schema(description = "付款时间")
|
||||
@ExcelProperty("付款时间")
|
||||
private LocalDateTime payTime;
|
||||
|
||||
@Schema(description = "支付渠道", requiredMode = Schema.RequiredMode.REQUIRED, example = "wx_lite")
|
||||
@ExcelProperty("支付渠道")
|
||||
private String payChannelCode;
|
||||
|
||||
@Schema(description = "商品原价(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
|
||||
@ExcelProperty("商品原价(总)")
|
||||
private Integer totalPrice;
|
||||
|
||||
@Schema(description = "订单优惠(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("订单优惠(总)")
|
||||
private Integer discountPrice;
|
||||
|
||||
@Schema(description = "运费金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("运费金额")
|
||||
private Integer deliveryPrice;
|
||||
|
||||
@Schema(description = "订单调价(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("订单调价(总)")
|
||||
private Integer adjustPrice;
|
||||
|
||||
@Schema(description = "应付金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
|
||||
@ExcelProperty("应付金额(总)")
|
||||
private Integer payPrice;
|
||||
|
||||
// ========== 收件 + 物流基本信息 ==========
|
||||
|
||||
@Schema(description = "配送方式", example = "10")
|
||||
@ExcelProperty("配送方式")
|
||||
private Integer deliveryType;
|
||||
|
||||
@Schema(description = "自提门店", example = "10")
|
||||
@ExcelProperty("自提门店")
|
||||
private Long pickUpStoreId;
|
||||
|
||||
@Schema(description = "自提核销码", example = "10")
|
||||
@ExcelProperty("自提核销码")
|
||||
private Long pickUpVerifyCode;
|
||||
|
||||
@Schema(description = "配送模板编号", example = "1024")
|
||||
@ExcelProperty("配送模板编号")
|
||||
private Long deliveryTemplateId;
|
||||
|
||||
@Schema(description = "发货物流公司编号", example = "1024")
|
||||
@ExcelProperty("发货物流公司编号")
|
||||
private Long logisticsId;
|
||||
|
||||
@Schema(description = "发货物流单号", example = "1024")
|
||||
@ExcelProperty("发货物流单号")
|
||||
private String logisticsNo;
|
||||
|
||||
@Schema(description = "发货时间")
|
||||
@ExcelProperty("发货时间")
|
||||
private LocalDateTime deliveryTime;
|
||||
|
||||
@Schema(description = "收货时间")
|
||||
@ExcelProperty("收货时间")
|
||||
private LocalDateTime receiveTime;
|
||||
|
||||
@Schema(description = "收件人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
|
||||
@ExcelProperty("收件人名称")
|
||||
private String receiverName;
|
||||
|
||||
@Schema(description = "收件人手机", requiredMode = Schema.RequiredMode.REQUIRED, example = "13800138000")
|
||||
@ExcelProperty("收件人手机")
|
||||
private String receiverMobile;
|
||||
|
||||
@Schema(description = "收件人地区编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "110000")
|
||||
@ExcelProperty("收件人地区编号")
|
||||
private Integer receiverAreaId;
|
||||
|
||||
@Schema(description = "收件人详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "中关村大街 1 号")
|
||||
@ExcelProperty("收件人详细地址")
|
||||
private String receiverDetailAddress;
|
||||
|
||||
// ========== 售后基本信息 ==========
|
||||
|
||||
@Schema(description = "售后状态", example = "1")
|
||||
@ExcelProperty("售后状态")
|
||||
private Integer afterSaleStatus;
|
||||
|
||||
@Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("退款金额")
|
||||
private Integer refundPrice;
|
||||
|
||||
// ========== 营销基本信息 ==========
|
||||
|
||||
@Schema(description = "优惠劵编号", example = "1024")
|
||||
@ExcelProperty("优惠劵编号")
|
||||
private Long couponId;
|
||||
|
||||
@Schema(description = "优惠劵减免金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("优惠劵减免金额")
|
||||
private Integer couponPrice;
|
||||
|
||||
@Schema(description = "积分抵扣的金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("积分抵扣的金额")
|
||||
private Integer pointPrice;
|
||||
|
||||
@Schema(description = "VIP 减免金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "888")
|
||||
@ExcelProperty("VIP 减免金额")
|
||||
private Integer vipPrice;
|
||||
|
||||
@Schema(description = "推广人编号", example = "1")
|
||||
|
||||
+15
@@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -13,6 +14,7 @@ public class TradeOrderItemBaseVO {
|
||||
// ========== 订单项基本信息 ==========
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@@ -24,44 +26,56 @@ public class TradeOrderItemBaseVO {
|
||||
// ========== 商品基本信息 ==========
|
||||
|
||||
@Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("商品 SPU 编号")
|
||||
private Long spuId;
|
||||
|
||||
@Schema(description = "商品 SPU 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
|
||||
@ExcelProperty("商品 SPU 名称")
|
||||
private String spuName;
|
||||
|
||||
@Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("商品 SKU 编号")
|
||||
private Long skuId;
|
||||
|
||||
@Schema(description = "设备IMEI", requiredMode = Schema.RequiredMode.REQUIRED, example = "12345678")
|
||||
@ExcelProperty("设备IMEI")
|
||||
private String deviceId;
|
||||
|
||||
@Schema(description = "SKU 的条形码", requiredMode = Schema.RequiredMode.REQUIRED, example = "T123456")
|
||||
@ExcelProperty("SKU 的条形码")
|
||||
private String barCode;
|
||||
|
||||
@Schema(description = "货道或柜门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("货道或柜门编号")
|
||||
private String cabinetChannel;
|
||||
|
||||
@Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
|
||||
private String picUrl;
|
||||
|
||||
@Schema(description = "购买数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("购买数量")
|
||||
private Integer count;
|
||||
|
||||
// ========== 价格 + 支付基本信息 ==========
|
||||
|
||||
@Schema(description = "商品原价(单)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("商品原价(单)")
|
||||
private Integer price;
|
||||
|
||||
@Schema(description = "商品优惠(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("商品优惠(总)")
|
||||
private Integer discountPrice;
|
||||
|
||||
@Schema(description = "商品实付金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("商品实付金额(总)")
|
||||
private Integer payPrice;
|
||||
|
||||
@Schema(description = "子订单分摊金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("子订单分摊金额(总)")
|
||||
private Integer orderPartPrice;
|
||||
|
||||
@Schema(description = "分摊后子订单实付金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("分摊后子订单实付金额(总)")
|
||||
private Integer orderDividePrice;
|
||||
|
||||
// ========== 营销基本信息 ==========
|
||||
@@ -71,6 +85,7 @@ public class TradeOrderItemBaseVO {
|
||||
// ========== 售后基本信息 ==========
|
||||
|
||||
@Schema(description = "售后状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("售后状态")
|
||||
private Integer afterSaleStatus;
|
||||
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 交易订单的详情 Response VO")
|
||||
@Data
|
||||
public class TradeOrderItemStatisticsDetailRespVO extends TradeOrderItemBaseVO {
|
||||
|
||||
@Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1146347329394184195")
|
||||
private String no;
|
||||
|
||||
|
||||
}
|
||||
+2
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -12,6 +13,7 @@ import java.util.List;
|
||||
public class TradeOrderPageItemRespVO extends TradeOrderBaseVO {
|
||||
|
||||
@Schema(description = "收件人地区名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "上海 上海市 普陀区")
|
||||
@ExcelProperty("")
|
||||
private String receiverAreaName;
|
||||
|
||||
@Schema(description = "订单项列表", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
|
||||
+10
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.validation.InEnum;
|
||||
import cn.iocoder.yudao.framework.common.validation.Mobile;
|
||||
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
@@ -25,6 +26,15 @@ public class TradeOrderSalesStatisticsReqVO extends PageParam {
|
||||
// @InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}")
|
||||
// private Integer status;
|
||||
|
||||
@Schema(description = "商品 SPU 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
|
||||
private String spuName;
|
||||
|
||||
@Schema(description = "设备IMEI", requiredMode = Schema.RequiredMode.REQUIRED, example = "12345678")
|
||||
private String deviceId;
|
||||
|
||||
@Schema(description = "SKU 的条形码", requiredMode = Schema.RequiredMode.REQUIRED, example = "T123456")
|
||||
private String barCode;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 获取订单销售统计数据 Request VO")
|
||||
@Data
|
||||
public class TradeOrderStatisticsDetailReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "商品 SPU 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
|
||||
private String spuName;
|
||||
|
||||
@Schema(description = "设备IMEI", requiredMode = Schema.RequiredMode.REQUIRED, example = "12345678")
|
||||
private String deviceId;
|
||||
|
||||
@Schema(description = "SKU 的条形码", requiredMode = Schema.RequiredMode.REQUIRED, example = "T123456")
|
||||
private String barCode;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
}
|
||||
+14
@@ -362,4 +362,18 @@ public interface TradeOrderConvert {
|
||||
});
|
||||
return new PageResult<>(orderVOs, orderItemStatisticsRespVOList.getTotal());
|
||||
}
|
||||
|
||||
default PageResult<TradeOrderSalesStatisticsRespVO> convertStatistics(PageResult<TradeOrderItemStatisticsRespVO> orderItemStatisticsRespVOList){
|
||||
// 转化 List
|
||||
List<TradeOrderSalesStatisticsRespVO> orderVOs = CollectionUtils.convertList(orderItemStatisticsRespVOList.getList(), order -> {
|
||||
|
||||
TradeOrderSalesStatisticsRespVO orderVO = new TradeOrderSalesStatisticsRespVO();
|
||||
orderVO.setDeviceId(order.getDeviceId());
|
||||
orderVO.setBarCode(order.getBarCode());
|
||||
orderVO.setSpuName(order.getSpuName());
|
||||
orderVO.setOrderCount(order.getOrderCount());
|
||||
return orderVO;
|
||||
});
|
||||
return new PageResult<>(orderVOs, orderItemStatisticsRespVOList.getTotal());
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package cn.iocoder.yudao.module.trade.dal.dataobject.order;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 交易订单项 DO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Data
|
||||
public class TradeOrderItemOrderNoDO extends TradeOrderItemDO {
|
||||
/**
|
||||
* 订单流水号
|
||||
*
|
||||
* 例如说,1146347329394184195
|
||||
*/
|
||||
private String no;
|
||||
}
|
||||
+20
-1
@@ -8,9 +8,11 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderItemStatisticsRespVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSalesStatisticsReqVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderStatisticsDetailReqVO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemCountDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemOrderNoDO;
|
||||
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@@ -67,10 +69,27 @@ public interface TradeOrderItemMapper extends BaseMapperX<TradeOrderItemDO> {
|
||||
MPJLambdaWrapper<TradeOrderItemDO> query = new MPJLambdaWrapperX<TradeOrderItemDO>()
|
||||
.selectAll(TradeOrderItemDO.class)
|
||||
.selectSum(TradeOrderItemDO::getCount, TradeOrderItemCountDO::getOrderCount)
|
||||
.eqIfPresent(TradeOrderItemDO::getDeviceId, reqVO.getDeviceId())
|
||||
.eqIfPresent(TradeOrderItemDO::getBarCode, reqVO.getBarCode())
|
||||
.likeIfPresent(TradeOrderItemDO::getSpuName, reqVO.getSpuName())
|
||||
.betweenIfPresent(TradeOrderItemDO::getCreateTime, reqVO.getCreateTime())
|
||||
.groupBy(TradeOrderItemDO::getSpuId);
|
||||
.groupBy(TradeOrderItemDO::getBarCode);
|
||||
query.leftJoin(TradeOrderDO.class,TradeOrderDO::getId, TradeOrderItemDO::getOrderId)
|
||||
.eq(TradeOrderDO::getStatus, TradeOrderStatusEnum.COMPLETED.getStatus());
|
||||
return selectJoinPage(reqVO,TradeOrderItemCountDO.class,query);
|
||||
}
|
||||
|
||||
default PageResult<TradeOrderItemOrderNoDO> getOrderItemListByBarCode(TradeOrderStatisticsDetailReqVO salesStatisticsReqVO){
|
||||
MPJLambdaWrapperX<TradeOrderItemDO> query = new MPJLambdaWrapperX<TradeOrderItemDO>()
|
||||
.selectAll(TradeOrderItemDO.class)
|
||||
.selectAs(TradeOrderDO::getNo, TradeOrderItemOrderNoDO::getNo)
|
||||
.eqIfPresent(TradeOrderItemDO::getDeviceId, salesStatisticsReqVO.getDeviceId())
|
||||
.eqIfPresent(TradeOrderItemDO::getBarCode, salesStatisticsReqVO.getBarCode())
|
||||
.likeIfPresent(TradeOrderItemDO::getSpuName, salesStatisticsReqVO.getSpuName())
|
||||
.betweenIfPresent(TradeOrderItemDO::getCreateTime, salesStatisticsReqVO.getCreateTime());
|
||||
query.leftJoin(TradeOrderDO.class,TradeOrderDO::getId, TradeOrderItemDO::getOrderId);
|
||||
// return selectPage(salesStatisticsReqVO,new MPJLambdaWrapperX<TradeOrderItemDO>()
|
||||
// .eq(TradeOrderItemDO::getBarCode, salesStatisticsReqVO.getBarCode()));
|
||||
return selectJoinPage(salesStatisticsReqVO,TradeOrderItemOrderNoDO.class, query);
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -1,10 +1,7 @@
|
||||
package cn.iocoder.yudao.module.trade.service.order;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderItemStatisticsRespVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSalesStatisticsReqVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSummaryRespVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.*;
|
||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
|
||||
@@ -160,4 +157,6 @@ public interface TradeOrderQueryService {
|
||||
List<TradeOrderItemDO> getOrderItemListByOrderId(Collection<Long> orderIds);
|
||||
|
||||
PageResult<TradeOrderItemStatisticsRespVO> getSalesStatistics(TradeOrderSalesStatisticsReqVO salesStatisticsReqVO);
|
||||
|
||||
PageResult<TradeOrderItemStatisticsDetailRespVO> getOrderItemListByBarCode(TradeOrderStatisticsDetailReqVO salesStatisticsReqVO);
|
||||
}
|
||||
+8
-4
@@ -10,15 +10,13 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderItemStatisticsRespVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSalesStatisticsReqVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSummaryRespVO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.*;
|
||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemCountDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemOrderNoDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper;
|
||||
import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper;
|
||||
import cn.iocoder.yudao.module.trade.dal.redis.RedisKeyConstants;
|
||||
@@ -259,6 +257,12 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
|
||||
return BeanUtils.toBean(tradeOrderItemDOS, TradeOrderItemStatisticsRespVO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<TradeOrderItemStatisticsDetailRespVO> getOrderItemListByBarCode(TradeOrderStatisticsDetailReqVO salesStatisticsReqVO) {
|
||||
PageResult<TradeOrderItemOrderNoDO> tradeOrderItemDOS = tradeOrderItemMapper.getOrderItemListByBarCode(salesStatisticsReqVO);
|
||||
return BeanUtils.toBean(tradeOrderItemDOS, TradeOrderItemStatisticsDetailRespVO.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得自身的代理对象,解决 AOP 生效问题
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user