订单销量统计

This commit is contained in:
zhangji committed 2025-08-15 14:41:29 +08:00
1 parent cd0c2aff92
commit ef962891dc
26 files changed
+267 -23

No files matched your search

@@ -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);
}
@@ -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, "订单明细中涉及多台贩卖机");
}
@@ -60,4 +60,9 @@ public class ProductSkuApiImpl implements ProductSkuApi {
return productSkuService.getSkuListByBarCode(barCodes);
}
@Override
public List<ProductSkuRespDTO> getSkuListByCreator(Long creator) {
return productSkuService.getSkuListByCreator(creator);
}
}
@@ -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();
}
@@ -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);
}
}
@@ -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));
@@ -115,4 +115,6 @@ public interface ProductSkuService {
List<ProductSkuStockReqDTO> getSkuStockSum(List<String> barCodes);
List<ProductSkuRespDTO> getSkuListByBarCode(Collection<String> barCodes);
List<ProductSkuRespDTO> getSkuListByCreator(Long creator);
}
@@ -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) {
@@ -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());
}
// 分页查询
@@ -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}}
@@ -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));
}
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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());
}
}
@@ -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;
}
@@ -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);
}
}
@@ -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);
}
@@ -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 生效问题
*
@@ -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 -> {
@@ -86,5 +86,5 @@ public interface AdminUserApi {
*/
void validateUserList(Collection<Long> ids);
AdminUserRespDTO getUserByDeviceid(Long deviceid);
AdminUserRespDTO getUserByDeviceid(String deviceid);
}
@@ -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);
}
@@ -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);
}
}
@@ -216,5 +216,5 @@ public interface AdminUserService {
*/
boolean isPasswordMatch(String rawPassword, String encodedPassword);
AdminUserDO getUserByDeviceid(Long deviceid);
AdminUserDO getUserByDeviceid(String deviceid);
}
@@ -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