订单销量统计
This commit is contained in:
1 parent
cd0c2aff92
commit
ef962891dc
26 files changed
+267
-23
No files matched your search
+3
-4
@@ -4,10 +4,7 @@ import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
|
||||
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuStockReqDTO;
|
||||
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 商品 SKU API 接口
|
||||
@@ -51,4 +48,6 @@ public interface ProductSkuApi {
|
||||
List<ProductSkuStockReqDTO> getSkuStockSum(List<String> barCodes);
|
||||
|
||||
List<ProductSkuRespDTO> getSkuListByBarCode(Collection<String> barCodes);
|
||||
|
||||
List<ProductSkuRespDTO> getSkuListByCreator(Long creator);
|
||||
}
|
||||
+1
@@ -59,5 +59,6 @@ public interface ErrorCodeConstants {
|
||||
|
||||
// ========== 商品汇总 1-008-010-000 ==========
|
||||
ErrorCode SUMMARY_NOT_EXISTS = new ErrorCode(1_008_010_000, "商品汇总不存在");
|
||||
ErrorCode SUMMARY_NOT_DUPLICATE = new ErrorCode(1_008_010_001, "订单明细中涉及多台贩卖机");
|
||||
|
||||
}
|
||||
+5
@@ -60,4 +60,9 @@ public class ProductSkuApiImpl implements ProductSkuApi {
|
||||
return productSkuService.getSkuListByBarCode(barCodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProductSkuRespDTO> getSkuListByCreator(Long creator) {
|
||||
return productSkuService.getSkuListByCreator(creator);
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -62,7 +62,7 @@ public class AppProductSpuController {
|
||||
@PermitAll
|
||||
public String getUrl(String deviceId) {
|
||||
//查询用户表
|
||||
AdminUserRespDTO user = adminUserApi.getUserByDeviceid(Long.valueOf(deviceId));
|
||||
AdminUserRespDTO user = adminUserApi.getUserByDeviceid(deviceId);
|
||||
return "/app-api/product/spu/list-all?"+user.getId();
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -81,4 +81,8 @@ public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> {
|
||||
default List<ProductSkuDO> getSkuListByBarCode(Collection<String> barCodes){
|
||||
return selectList(ProductSkuDO::getBarCode, barCodes);
|
||||
}
|
||||
|
||||
default List<ProductSkuDO> getSkuListByCreator(Long creator){
|
||||
return selectList(ProductSkuDO::getCreator, creator);
|
||||
}
|
||||
}
|
||||
+7
-5
@@ -156,11 +156,13 @@ public class DeviceServiceImpl implements DeviceService {
|
||||
|
||||
@Override
|
||||
public String refreshWechantCode(Long id) {
|
||||
// 校验存在
|
||||
validateDeviceExists(id);
|
||||
DeviceDO deviceDO = deviceMapper.selectById(id);
|
||||
if ( deviceDO== null|| deviceDO.getDeviceId()==null) {
|
||||
throw exception(DEVICE_NOT_EXISTS);
|
||||
}
|
||||
|
||||
String wechatPagePath = wechatProductPath;
|
||||
String wechatPathParams = String.format("deviceId=%s", id);
|
||||
String wechatPathParams = String.format("deviceId=%s", deviceDO.getDeviceId());
|
||||
String wechatFullPath = String.format("%s?%s", wechatPagePath, wechatPathParams);
|
||||
|
||||
SocialWxQrcodeReqDTO codeObj = new SocialWxQrcodeReqDTO();
|
||||
@@ -174,11 +176,11 @@ public class DeviceServiceImpl implements DeviceService {
|
||||
// 保存二维码
|
||||
String file = fileApi.createFile(imageByte);
|
||||
if (ObjectUtil.isEmpty(file)) {
|
||||
log.error("设备--{}:[微信二维码保存失败]", id);
|
||||
log.error("设备--{}:[微信二维码保存失败]", deviceDO.getDeviceId());
|
||||
return null;
|
||||
}
|
||||
// 更新一下
|
||||
DeviceDO updateObj = DeviceDO.builder().id(id).productUrl(wechatFullPath).fileUrl(file).build();
|
||||
DeviceDO updateObj = DeviceDO.builder().id(id).productUrl(file).build();
|
||||
deviceMapper.updateById(updateObj);
|
||||
// 刷新一下硬件设备
|
||||
updateDevice(BeanUtil.toBean(deviceMapper.selectById(id), DeviceSaveReqVO.class));
|
||||
|
||||
+2
@@ -115,4 +115,6 @@ public interface ProductSkuService {
|
||||
List<ProductSkuStockReqDTO> getSkuStockSum(List<String> barCodes);
|
||||
|
||||
List<ProductSkuRespDTO> getSkuListByBarCode(Collection<String> barCodes);
|
||||
|
||||
List<ProductSkuRespDTO> getSkuListByCreator(Long creator);
|
||||
}
|
||||
+6
@@ -222,6 +222,12 @@ public class ProductSkuServiceImpl implements ProductSkuService {
|
||||
return BeanUtils.toBean(productSkuDOS, ProductSkuRespDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProductSkuRespDTO> getSkuListByCreator(Long creator) {
|
||||
List<ProductSkuDO> productSkus = productSkuMapper.getSkuListByCreator(creator);
|
||||
return BeanUtils.toBean(productSkus, ProductSkuRespDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateSkuList(Long spuId, List<ProductSkuSaveReqVO> skus) {
|
||||
|
||||
+1
-1
@@ -243,7 +243,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
|
||||
}
|
||||
if (null!=pageReqVO.getDeviceId()){
|
||||
//查询用户
|
||||
AdminUserRespDTO user = adminUserApi.getUserByDeviceid(Long.valueOf(pageReqVO.getDeviceId()));
|
||||
AdminUserRespDTO user = adminUserApi.getUserByDeviceid(pageReqVO.getDeviceId());
|
||||
pageReqVO.setCreator(user.getId().toString());
|
||||
}
|
||||
// 分页查询
|
||||
|
||||
+5
@@ -11,4 +11,9 @@ tenant-id: {{adminTenantId}}
|
||||
### 获得交易订单的物流轨迹 => 成功
|
||||
GET {{baseUrl}}/trade/order/get-express-track-list?id=21
|
||||
Authorization: Bearer {{token}}
|
||||
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}}
|
||||
+64
-2
@@ -5,6 +5,12 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
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;
|
||||
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
|
||||
import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
|
||||
import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.*;
|
||||
import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
@@ -13,6 +19,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO;
|
||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderLogService;
|
||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
|
||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;
|
||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateSummaryReqBO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -26,10 +33,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
|
||||
@Tag(name = "管理后台 - 交易订单")
|
||||
@@ -45,6 +53,12 @@ public class TradeOrderController {
|
||||
private TradeOrderQueryService tradeOrderQueryService;
|
||||
@Resource
|
||||
private TradeOrderLogService tradeOrderLogService;
|
||||
@Resource
|
||||
private ProductSkuApi productSkuApi;
|
||||
@Resource
|
||||
private ProductSpuApi productSpuApi;
|
||||
@Resource
|
||||
private AdminUserApi adminUserApi;
|
||||
|
||||
@Resource
|
||||
private MemberUserApi memberUserApi;
|
||||
@@ -166,4 +180,52 @@ public class TradeOrderController {
|
||||
return success(TradeOrderConvert.INSTANCE.convert2(tradeOrder, null));
|
||||
}
|
||||
|
||||
@GetMapping("/sales-statistics")
|
||||
@Operation(summary = "获取订单销售统计数据")
|
||||
@PreAuthorize("@ss.hasPermission('trade:order:query')")
|
||||
public CommonResult<PageResult<TradeOrderSalesStatisticsRespVO>> getSalesStatistics(TradeOrderSalesStatisticsReqVO salesStatisticsReqVO) {
|
||||
PageResult<TradeOrderItemStatisticsRespVO> orderItemStatisticsRespVOList = tradeOrderQueryService.getSalesStatistics(salesStatisticsReqVO);
|
||||
//获取机器号
|
||||
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()
|
||||
.map(ProductSpuRespDTO::getCreator)
|
||||
.filter(Objects::nonNull) // 防止空指针
|
||||
.map(Long::valueOf) // String 转 Long
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<AdminUserRespDTO> userList = adminUserApi.getUserList(creators);
|
||||
// 构建用户ID到deviceId的映射
|
||||
Map<Long, String> userDeviceMap = userList.stream()
|
||||
.collect(Collectors.toMap(
|
||||
AdminUserRespDTO::getId, // key: 用户ID
|
||||
AdminUserRespDTO::getDeviceId // value: deviceId
|
||||
));
|
||||
// 构建spuId到deviceId的映射
|
||||
Map<Long, String> spuDeviceMap = spuList.stream()
|
||||
.filter(spu -> {
|
||||
try {
|
||||
return userDeviceMap.containsKey(Long.valueOf(spu.getCreator()));
|
||||
} catch (NumberFormatException e) {
|
||||
return false; // 如果转换失败,则过滤掉该元素
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toMap(
|
||||
ProductSpuRespDTO::getId, // key: spuId
|
||||
spu -> {
|
||||
Long creatorId = Long.valueOf(spu.getCreator());
|
||||
return userDeviceMap.get(creatorId); // value: 对应的deviceId
|
||||
}
|
||||
));
|
||||
//获取条码
|
||||
List<Long> skuIds = orderItemStatisticsRespVOList.getList().stream()
|
||||
.map(TradeOrderItemStatisticsRespVO::getSkuId) //获取每个商品的Creator
|
||||
.distinct()
|
||||
.collect(Collectors.toList());//去重Creator
|
||||
List<ProductSkuRespDTO> skuList = productSkuApi.getSkuList(skuIds);
|
||||
Map<Long, String> skuMap = convertMap(skuList, ProductSkuRespDTO::getId, ProductSkuRespDTO::getBarCode);
|
||||
|
||||
return success(TradeOrderConvert.INSTANCE.convertStatistics(orderItemStatisticsRespVOList, spuDeviceMap,skuMap));
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 交易订单的详情 Response VO")
|
||||
@Data
|
||||
public class TradeOrderItemStatisticsRespVO extends TradeOrderItemBaseVO {
|
||||
|
||||
@Schema(description = "销售数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Integer orderCount;
|
||||
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
|
||||
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 io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 获取订单销售统计数据 Request VO")
|
||||
@Data
|
||||
public class TradeOrderSalesStatisticsReqVO extends PageParam {
|
||||
|
||||
// @Schema(description = "订单类型", example = "1")
|
||||
// private Integer type;
|
||||
//
|
||||
// @Schema(description = "订单状态", example = "1")
|
||||
// @InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}")
|
||||
// private Integer status;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package cn.iocoder.yudao.module.trade.controller.admin.order.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 交易订单统计 Response VO")
|
||||
@Data
|
||||
public class TradeOrderSalesStatisticsRespVO {
|
||||
|
||||
|
||||
|
||||
@Schema(description = "设备IMEI", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private String deviceId;
|
||||
|
||||
@Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private String barCode;
|
||||
|
||||
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private String spuName;
|
||||
|
||||
@Schema(description = "销售数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Integer orderCount;
|
||||
|
||||
}
|
||||
+13
@@ -349,4 +349,17 @@ public interface TradeOrderConvert {
|
||||
|
||||
TradeOrderDO convert(Long userId, GiftVoucherCalculateRespBO calculateRespBO);
|
||||
|
||||
default PageResult<TradeOrderSalesStatisticsRespVO> convertStatistics(PageResult<TradeOrderItemStatisticsRespVO> orderItemStatisticsRespVOList, Map<Long, String> spuDeviceMap, Map<Long, String> skuMap){
|
||||
// 转化 List
|
||||
List<TradeOrderSalesStatisticsRespVO> orderVOs = CollectionUtils.convertList(orderItemStatisticsRespVOList.getList(), order -> {
|
||||
|
||||
TradeOrderSalesStatisticsRespVO orderVO = new TradeOrderSalesStatisticsRespVO();
|
||||
orderVO.setDeviceId(spuDeviceMap.get(order.getSpuId()));
|
||||
orderVO.setBarCode(skuMap.get(order.getSkuId()));
|
||||
orderVO.setSpuName(order.getSpuName());
|
||||
orderVO.setOrderCount(order.getOrderCount());
|
||||
return orderVO;
|
||||
});
|
||||
return new PageResult<>(orderVOs, orderItemStatisticsRespVOList.getTotal());
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package cn.iocoder.yudao.module.trade.dal.dataobject.order;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 商品 SPU DO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Data
|
||||
public class TradeOrderItemCountDO extends TradeOrderItemDO {
|
||||
/**
|
||||
* 销售数量
|
||||
*/
|
||||
private Integer orderCount;
|
||||
}
|
||||
+24
@@ -2,11 +2,19 @@ package cn.iocoder.yudao.module.trade.dal.mysql.order;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
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.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.enums.order.TradeOrderStatusEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@@ -49,4 +57,20 @@ public interface TradeOrderItemMapper extends BaseMapperX<TradeOrderItemDO> {
|
||||
// 获得数量
|
||||
return CollUtil.getFirst(result) != null ? MapUtil.getInt(result.get(0), "sumCount") : 0;
|
||||
}
|
||||
|
||||
default PageResult<TradeOrderItemCountDO> selectSalesStatistics(TradeOrderSalesStatisticsReqVO reqVO){
|
||||
// return selectList(new MPJLambdaWrapperX<TradeOrderItemDO>()
|
||||
// .selectSum(TradeOrderItemDO::getCount) // 售后状态对应的数量
|
||||
// .eq(TradeOrderItemDO::getAfterSaleStatus, reqVO.getAfterSaleStatus)
|
||||
// .betweenIfPresent(TradeOrderDO::getCreateTime, reqVO.getCreateTime())
|
||||
// .groupBy(TradeOrderItemDO::getSpuId));// 按售后状态分组
|
||||
MPJLambdaWrapper<TradeOrderItemDO> query = new MPJLambdaWrapperX<TradeOrderItemDO>()
|
||||
.selectAll(TradeOrderItemDO.class)
|
||||
.selectSum(TradeOrderItemDO::getCount, TradeOrderItemCountDO::getOrderCount)
|
||||
.betweenIfPresent(TradeOrderItemDO::getCreateTime, reqVO.getCreateTime())
|
||||
.groupBy(TradeOrderItemDO::getSpuId);
|
||||
query.leftJoin(TradeOrderDO.class,TradeOrderDO::getId, TradeOrderItemDO::getOrderId)
|
||||
.eq(TradeOrderDO::getStatus, TradeOrderStatusEnum.COMPLETED.getStatus());
|
||||
return selectJoinPage(reqVO,TradeOrderItemCountDO.class,query);
|
||||
}
|
||||
}
|
||||
+3
@@ -1,7 +1,9 @@
|
||||
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.app.order.vo.AppTradeOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
|
||||
@@ -157,4 +159,5 @@ public interface TradeOrderQueryService {
|
||||
*/
|
||||
List<TradeOrderItemDO> getOrderItemListByOrderId(Collection<Long> orderIds);
|
||||
|
||||
PageResult<TradeOrderItemStatisticsRespVO> getSalesStatistics(TradeOrderSalesStatisticsReqVO salesStatisticsReqVO);
|
||||
}
|
||||
+11
@@ -6,13 +6,18 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
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.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.mysql.order.TradeOrderItemMapper;
|
||||
import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper;
|
||||
@@ -248,6 +253,12 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
|
||||
return tradeOrderItemMapper.selectListByOrderId(orderIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<TradeOrderItemStatisticsRespVO> getSalesStatistics(TradeOrderSalesStatisticsReqVO salesStatisticsReqVO) {
|
||||
PageResult<TradeOrderItemCountDO> tradeOrderItemDOS = tradeOrderItemMapper.selectSalesStatistics(salesStatisticsReqVO);
|
||||
return BeanUtils.toBean(tradeOrderItemDOS, TradeOrderItemStatisticsRespVO.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得自身的代理对象,解决 AOP 生效问题
|
||||
*
|
||||
|
||||
+24
-3
@@ -14,6 +14,8 @@ import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO
|
||||
import cn.iocoder.yudao.module.promotion.api.reward.RewardActivityApi;
|
||||
import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO;
|
||||
import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeProductSettlementRespVO;
|
||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;
|
||||
import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
|
||||
@@ -58,6 +60,9 @@ public class TradePriceServiceImpl implements TradePriceService {
|
||||
@Resource
|
||||
private DeviceApi deviceApi;
|
||||
|
||||
@Resource
|
||||
private AdminUserApi adminUserApi;
|
||||
|
||||
@Resource
|
||||
private List<TradePriceCalculator> priceCalculators;
|
||||
|
||||
@@ -187,9 +192,25 @@ public class TradePriceServiceImpl implements TradePriceService {
|
||||
}
|
||||
|
||||
private List<ProductSkuRespDTO> checkSummarySkuList(TradePriceCalculateSummaryReqBO calculateReqBO) {
|
||||
// 获得商品 SKU 数组
|
||||
//根据商品码获取sku列表
|
||||
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListByBarCode(convertSet(calculateReqBO.getItems(), TradePriceCalculateSummaryReqBO.Item::getBarCode))
|
||||
|
||||
//判断是不是有不同机器的订单(一个创建人是一台机器)
|
||||
boolean isSingleCreator = calculateReqBO.getItems().stream()
|
||||
.map(TradePriceCalculateSummaryReqBO.Item::getDeviceId) //获取每个商品的Creator
|
||||
.distinct() //去重Creator
|
||||
.count() == 1; // 判断是否只有一个唯一的创建人
|
||||
if (!isSingleCreator) {
|
||||
System.out.println("订单明细中涉及多台贩卖机");
|
||||
throw exception(SUMMARY_NOT_DUPLICATE);
|
||||
}
|
||||
// 只有一个Creator的逻辑处理
|
||||
System.out.println("订单明细中只有一台贩卖机");
|
||||
//查询商品创建人的设备IMEI
|
||||
AdminUserRespDTO user = adminUserApi.getUserByDeviceid(calculateReqBO.getItems().get(0).getDeviceId());
|
||||
if (user == null|| user.getDeviceId() == null){
|
||||
throw exception(DEVICE_NOT_EXISTS);
|
||||
}
|
||||
// 获得商品 SKU 数组
|
||||
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListByCreator(user.getId())
|
||||
.stream()
|
||||
.filter(sku -> sku.getStock() > 0)
|
||||
.sorted(Comparator.comparing(sku -> {
|
||||
|
||||
+1
-1
@@ -86,5 +86,5 @@ public interface AdminUserApi {
|
||||
*/
|
||||
void validateUserList(Collection<Long> ids);
|
||||
|
||||
AdminUserRespDTO getUserByDeviceid(Long deviceid);
|
||||
AdminUserRespDTO getUserByDeviceid(String deviceid);
|
||||
}
|
||||
+1
-1
@@ -84,7 +84,7 @@ public class AdminUserApiImpl implements AdminUserApi {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdminUserRespDTO getUserByDeviceid(Long deviceid) {
|
||||
public AdminUserRespDTO getUserByDeviceid(String deviceid) {
|
||||
AdminUserDO user = userService.getUserByDeviceid(deviceid);
|
||||
return BeanUtils.toBean(user, AdminUserRespDTO.class);
|
||||
}
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
|
||||
return selectList(AdminUserDO::getDeptId, deptIds);
|
||||
}
|
||||
|
||||
default AdminUserDO getUserByDeviceid(Long deviceid){
|
||||
default AdminUserDO getUserByDeviceid(String deviceid){
|
||||
return selectOne(AdminUserDO::getDeviceId, deviceid);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -216,5 +216,5 @@ public interface AdminUserService {
|
||||
*/
|
||||
boolean isPasswordMatch(String rawPassword, String encodedPassword);
|
||||
|
||||
AdminUserDO getUserByDeviceid(Long deviceid);
|
||||
AdminUserDO getUserByDeviceid(String deviceid);
|
||||
}
|
||||
+1
-1
@@ -519,7 +519,7 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdminUserDO getUserByDeviceid(Long deviceid) {
|
||||
public AdminUserDO getUserByDeviceid(String deviceid) {
|
||||
return userMapper.getUserByDeviceid(deviceid);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ spring:
|
||||
primary: master
|
||||
datasource:
|
||||
master:
|
||||
url: jdbc:mysql://127.0.0.1:11294/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
|
||||
url: jdbc:mysql://192.168.0.7:37897/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
|
||||
# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例
|
||||
# url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例
|
||||
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
|
||||
@@ -63,7 +63,7 @@ spring:
|
||||
# password: Yudao@2024 # OpenGauss 连接的示例
|
||||
slave: # 模拟从库,可根据自己需要修改
|
||||
lazy: true # 开启懒加载,保证启动速度
|
||||
url: jdbc:mysql://127.0.0.1:11294/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
|
||||
url: jdbc:mysql://192.168.0.7:37897/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
|
||||
username: xr
|
||||
password: zd5ecNxeXHZxkWs8
|
||||
|
||||
|
||||
Reference in new issue
Block a user