diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http index e4dc755..354526f 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.http @@ -1,5 +1,5 @@ -### 获得订单交易的分页(默认) -GET {{appApi}}/product/spu/page?pageNo=1&pageSize=10 +### 获得商品 SPU 分页 +GET {{appApi}}/product/spu/page?pageNo=1&pageSize=10&deviceId=869667070337387 Authorization: Bearer {{appToken}} tenant-id: {{appTenantId}} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderItemBaseVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderItemBaseVO.java index ded1fe7..bc82e44 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderItemBaseVO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderItemBaseVO.java @@ -32,6 +32,15 @@ public class TradeOrderItemBaseVO { @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Long skuId; + @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 = "货道或柜门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String cabinetChannel; + @Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png") private String picUrl; diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemCountDO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemCountDO.java index 98fe92f..ed5d594 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemCountDO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemCountDO.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.order; import lombok.Data; /** - * 商品 SPU DO + * 交易订单项 DO * * @author 芋道源码 */ diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemDO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemDO.java index ed1bef3..1ca1d47 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemDO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemDO.java @@ -70,6 +70,18 @@ public class TradeOrderItemDO extends BaseDO { * 关联 ProductSkuDO 的 id 编号 */ private Long skuId; + /** + * 设备IMEI + */ + private String deviceId; + /** + * SKU 的条形码 + */ + private String barCode; + /** + * 货道或柜门编号 + */ + private String cabinetChannel; /** * 属性数组,JSON 格式 * diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java index 6fb0b4a..c2ecca6 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java @@ -35,6 +35,8 @@ import cn.iocoder.yudao.module.promotion.api.giftvoucher.GiftVoucherApi; import cn.iocoder.yudao.module.promotion.api.giftvoucher.dto.GiftVoucherRespDTO; import cn.iocoder.yudao.module.system.api.social.SocialClientApi; import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO; +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.TradeOrderDeliveryReqVO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO; @@ -145,6 +147,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @Resource private GiftVoucherApi giftVoucherApi; + @Resource + private AdminUserApi adminUserApi; + // =================== Order =================== public List findUserSuccessOrderItem(Long payUserId, List skuIdList, ProductSkuPurchaseBizTypeEnum status) { @@ -1109,6 +1114,20 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { // sku 信息 orderItem.setPicUrl(sku.getPicUrl()).setProperties(sku.getProperties()) .setWeight(sku.getWeight()).setVolume(sku.getVolume()); + //是否有机器号 + AdminUserRespDTO adminUser = adminUserApi.getUser(Long.valueOf(spu.getCreator())); + if (null!=adminUser && null!=adminUser.getDeviceId()){ + // sku 设备信息 + orderItem.setDeviceId(adminUser.getDeviceId()); + } + if (null!=sku.getBarCode()){ + // sku 条码 + orderItem.setBarCode(sku.getBarCode()); + } + if (null!=sku.getCabinetChannel()){ + // sku 设备通道 + orderItem.setCabinetChannel(sku.getCabinetChannel()); + } // spu 信息 orderItem.setSpuName(spu.getName()).setCategoryId(spu.getCategoryId()) .setDeliveryTypes(spu.getDeliveryTypes()).setDeliveryTemplateId(spu.getDeliveryTemplateId()) diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/GiftVoucherCalculateRespBO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/GiftVoucherCalculateRespBO.java index 4b0351d..385ef8e 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/GiftVoucherCalculateRespBO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/GiftVoucherCalculateRespBO.java @@ -35,6 +35,19 @@ public class GiftVoucherCalculateRespBO extends TradeOrderDO { * SKU 编号 */ private Long skuId; + /** + * 设备IMEI + */ + private String deviceId; + /** + * SKU 的条形码 + */ + private String barCode; + + /** + * 货道或柜门编号 + */ + private String cabinetChannel; /** * 购买数量 */ diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java index 8b55ddd..6e5616c 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java @@ -29,10 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -76,9 +73,17 @@ public class TradePriceServiceImpl implements TradePriceService { // 1.2 获得商品 SPU 数组 List spuList = checkSpuList(skuList); + List creators = spuList.stream() + .map(ProductSpuRespDTO::getCreator) + .filter(Objects::nonNull) // 防止空指针 + .map(Long::valueOf) // String 转 Long + .distinct() + .collect(Collectors.toList()); + List userList = adminUserApi.getUserList(creators); + // 2.1 计算价格 TradePriceCalculateRespBO calculateRespBO = TradePriceCalculatorHelper - .buildCalculateResp(calculateReqBO, spuList, skuList); + .buildCalculateResp(calculateReqBO, spuList, skuList,userList); priceCalculators.forEach(calculator -> calculator.calculate(calculateReqBO, calculateRespBO)); // 2.2 如果最终支付金额小于等于 0,则抛出业务异常 /*if (calculateReqBO.getPointActivityId() == null // 积分订单,允许支付金额为 0 diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateRespBO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateRespBO.java index 7fed258..50d07cf 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateRespBO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateRespBO.java @@ -156,6 +156,19 @@ public class TradePriceCalculateRespBO { * SKU 编号 */ private Long skuId; + /** + * 设备IMEI + */ + private String deviceId; + /** + * SKU 的条形码 + */ + private String barCode; + + /** + * 货道或柜门编号 + */ + private String cabinetChannel; /** * 购买数量 */ diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateSummaryRespBO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateSummaryRespBO.java index aad6ea1..4305fe4 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateSummaryRespBO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateSummaryRespBO.java @@ -156,6 +156,19 @@ public class TradePriceCalculateSummaryRespBO { * SKU 编号 */ private Long skuId; + /** + * 设备IMEI + */ + private String deviceId; + /** + * SKU 的条形码 + */ + private String barCode; + + /** + * 货道或柜门编号 + */ + private String cabinetChannel; /** * 购买数量 */ diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java index b346eca..b1a3036 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java @@ -7,18 +7,21 @@ import cn.iocoder.yudao.module.product.api.device.DeviceApi; import cn.iocoder.yudao.module.product.api.device.dto.DeviceRespDto; import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateSummaryReqBO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateSummaryRespBO; +import net.sf.jsqlparser.expression.LongValue; import javax.annotation.Resource; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; @@ -40,7 +43,9 @@ public class TradePriceCalculatorHelper { private DeviceApi deviceApi; public static TradePriceCalculateRespBO buildCalculateResp(TradePriceCalculateReqBO param, - List spuList, List skuList) { + List spuList, + List skuList, + List userList) { // 创建 PriceCalculateRespDTO 对象 TradePriceCalculateRespBO result = new TradePriceCalculateRespBO(); result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>()); @@ -49,6 +54,12 @@ public class TradePriceCalculatorHelper { result.setItems(new ArrayList<>(param.getItems().size())); Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); Map skuMap = convertMap(skuList, ProductSkuRespDTO::getId); + // 构建用户ID到deviceId的映射 + Map userDeviceMap = userList.stream() + .collect(Collectors.toMap( + AdminUserRespDTO::getId, // key: 用户ID + AdminUserRespDTO::getDeviceId // value: deviceId + )); param.getItems().forEach(item -> { ProductSkuRespDTO sku = skuMap.get(item.getSkuId()); if (sku == null) { @@ -69,6 +80,22 @@ public class TradePriceCalculatorHelper { // sku 信息 orderItem.setPicUrl(sku.getPicUrl()).setProperties(sku.getProperties()) .setWeight(sku.getWeight()).setVolume(sku.getVolume()); + //是否有机器号 + String deviceId = userDeviceMap.get(Long.valueOf(spu.getCreator())); + if (null!=deviceId){ + //设备信息 + orderItem.setDeviceId(deviceId); + } + + if (null!=sku.getBarCode()){ + // sku 条码 + orderItem.setBarCode(sku.getBarCode()); + } + if (null!=sku.getCabinetChannel()){ + // sku 设备通道 + orderItem.setCabinetChannel(sku.getCabinetChannel()); + } + // spu 信息 orderItem.setSpuName(spu.getName()).setCategoryId(spu.getCategoryId()) .setDeliveryTypes(spu.getDeliveryTypes()).setDeliveryTemplateId(spu.getDeliveryTemplateId()) @@ -391,6 +418,21 @@ public class TradePriceCalculatorHelper { // sku 信息 orderItem.setPicUrl(sku.getPicUrl()).setProperties(sku.getProperties()) .setWeight(sku.getWeight()).setVolume(sku.getVolume()); + // sku 设备信息 +// orderItem.setDeviceId(device.getDeviceId()).setBarCode(sku.getBarCode()).setCabinetChannel(sku.getCabinetChannel()); + if (null!=device.getDeviceId()){ + //设备信息 + orderItem.setDeviceId(device.getDeviceId()); + } + + if (null!=sku.getBarCode()){ + // sku 条码 + orderItem.setBarCode(sku.getBarCode()); + } + if (null!=sku.getCabinetChannel()){ + // sku 设备通道 + orderItem.setCabinetChannel(sku.getCabinetChannel()); + } // spu 信息 orderItem.setSpuName(spu.getName()).setCategoryId(spu.getCategoryId()) .setDeliveryTypes(spu.getDeliveryTypes()).setDeliveryTemplateId(spu.getDeliveryTemplateId()) @@ -437,6 +479,8 @@ public class TradePriceCalculatorHelper { // sku 信息 orderItem.setPicUrl(sku.getPicUrl()).setProperties(sku.getProperties()) .setWeight(sku.getWeight()).setVolume(sku.getVolume()); + // sku 设备信息 + orderItem.setDeviceId(device.getDeviceId()).setBarCode(sku.getBarCode()).setCabinetChannel(sku.getCabinetChannel()); // spu 信息 orderItem.setSpuName(spu.getName()).setCategoryId(spu.getCategoryId()) .setDeliveryTypes(spu.getDeliveryTypes()).setDeliveryTemplateId(spu.getDeliveryTemplateId()) diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index 777c4e7..1255000 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -3,8 +3,8 @@ spring: name: yudao-server profiles: - # active: prod - active: local + active: prod +# active: local main: allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。