Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

wangming 1 viikko sitten
vanhempi
commit
01507f0add
34 muutettua tiedostoa jossa 649 lisäystä ja 158 poistoa
  1. 2 4
      yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java
  2. 47 22
      yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopCartController.java
  3. 52 26
      yami-shop-api/src/main/java/com/yami/shop/api/listener/SubmitOrderListener.java
  4. 12 5
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/OrderNumbersDto.java
  5. 2 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/ChangeShopCartParam.java
  6. 6 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/CategoryProd.java
  7. 2 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/ChannelProd.java
  8. 6 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/Order.java
  9. 71 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderRiderLocation.java
  10. 5 2
      yami-shop-common/src/main/java/com/yami/shop/common/util/HttpUtil.java
  11. 1 1
      yami-shop-groupbuy/yami-shop-groupbuy-api/src/main/java/com/yami/shop/groupbuy/api/controller/GroupOrderController.java
  12. 1 1
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ChannelProdController.java
  13. 12 1
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/GoodsController.java
  14. 34 13
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java
  15. 0 4
      yami-shop-platform/src/main/resources/application-dev.yml
  16. 5 3
      yami-shop-service/src/main/java/com/yami/shop/dao/BasketMapper.java
  17. 11 0
      yami-shop-service/src/main/java/com/yami/shop/dao/OrderRiderLocationMapper.java
  18. 2 1
      yami-shop-service/src/main/java/com/yami/shop/dao/SkuMapper.java
  19. 2 0
      yami-shop-service/src/main/java/com/yami/shop/service/BasketService.java
  20. 10 0
      yami-shop-service/src/main/java/com/yami/shop/service/SkuService.java
  21. 6 0
      yami-shop-service/src/main/java/com/yami/shop/service/hb/IHBGoodsService.java
  22. 28 0
      yami-shop-service/src/main/java/com/yami/shop/service/hb/IHBOrderService.java
  23. 24 1
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBFrontCategoryService.java
  24. 80 35
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBGoodsService.java
  25. 101 13
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBOrderService.java
  26. 3 3
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/StoreManagementService.java
  27. 21 4
      yami-shop-service/src/main/java/com/yami/shop/service/impl/BasketServiceImpl.java
  28. 23 12
      yami-shop-service/src/main/java/com/yami/shop/service/impl/ChannelProdServiceImpl.java
  29. 1 0
      yami-shop-service/src/main/java/com/yami/shop/service/impl/ShopCategoryServiceImpl.java
  30. 6 1
      yami-shop-service/src/main/java/com/yami/shop/service/impl/SkuServiceImpl.java
  31. 3 3
      yami-shop-service/src/main/java/com/yami/shop/utils/HBSignUtil.java
  32. 34 0
      yami-shop-service/src/main/resources/mapper/BasketMapper.xml
  33. 35 1
      yami-shop-service/src/main/resources/mapper/SkuMapper.xml
  34. 1 1
      yami-shop-user/yami-shop-user-api/src/main/java/com/yami/shop/user/api/controller/ScoreOrderController.java

+ 2 - 4
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java

@@ -240,16 +240,14 @@ public class OrderController {
     @PostMapping("/submit")
     @ApiOperation(value = "提交订单,返回支付流水号", notes = "根据传入的参数判断是否为购物车提交订单,同时对购物车进行删除,用户开始进行支付")
     public ResponseEntity<OrderNumbersDto> submitOrders(@Valid @RequestBody SubmitOrderParam submitOrderParam) {
-        //TODO wangjian 扣减积分
+        //TODO wangjian 扣减积分,先获取当前用户的所以积分,计算扣除之后是否还需要微信支付
         String userId = SecurityUtils.getUser().getUserId();
         ShopCartOrderMergerDto mergerOrder = orderService.getConfirmOrderCache(userId + submitOrderParam.getUuid());
 
         if (mergerOrder == null) {
             throw new GlobalException("订单已过期,请重新下单");
         }
-
         List<OrderShopParam> orderShopParams = submitOrderParam.getOrderShopParam();
-
         List<ShopCartOrderDto> shopCartOrders = mergerOrder.getShopCartOrders();
         // 设置备注
         if (CollectionUtil.isNotEmpty(orderShopParams)) {
@@ -289,7 +287,7 @@ public class OrderController {
             basketService.removeShopCartItemsCacheByUserId(userId);
         }
         orderService.removeConfirmOrderCache(userId + submitOrderParam.getUuid());
-        return ResponseEntity.ok(new OrderNumbersDto(orderNumbers.toString()));
+        return ResponseEntity.ok(new OrderNumbersDto(orderNumbers.toString(),false));
     }
 
 

+ 47 - 22
yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopCartController.java

@@ -73,12 +73,41 @@ public class ShopCartController {
         // 拿到购物车的所有item
         List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId);
         List<Long> prodIds = new ArrayList<>();
-        for (ShopCartItemDto shopCartItemDto:shopCartItems){
+        for (ShopCartItemDto shopCartItemDto : shopCartItems) {
+            prodIds.add(shopCartItemDto.getProdId());
+        }
+        Long shopId = 0L;
+        if (!shopCartParams.isEmpty()) shopId = shopCartParams.get(0).getShopId();
+        return ResponseEntity.ok(basketService.getShopCarts(shopCartItems, shopId));
+
+    }
+
+    /**
+     * 获取用户购物车信息
+     *
+     * @param shopCartParams 购物车参数对象列表
+     * @return
+     */
+    @PostMapping("/info/{platform}")
+    @ApiOperation(value = "获取用户购物车信息", notes = "获取用户购物车信息,参数为用户选中的活动项数组")
+    public ResponseEntity<List<ShopCartDto>> infoByPlatform(@RequestBody List<ShopCartParam> shopCartParams, @PathVariable("platform") Integer platform) {
+        String userId = SecurityUtils.getUser().getUserId();
+//        String userId = "5e31932043984353beb4c1a2622f5182";
+
+        // 更新购物车信息,
+        if (CollectionUtil.isNotEmpty(shopCartParams)) {
+            basketService.updateBasketByShopCartParam(userId, shopCartParams);
+        }
+
+        // 拿到购物车的所有item
+        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, platform);
+        List<Long> prodIds = new ArrayList<>();
+        for (ShopCartItemDto shopCartItemDto : shopCartItems) {
             prodIds.add(shopCartItemDto.getProdId());
         }
         Long shopId = 0L;
         if (!shopCartParams.isEmpty()) shopId = shopCartParams.get(0).getShopId();
-        return ResponseEntity.ok(basketService.getShopCarts(shopCartItems,shopId));
+        return ResponseEntity.ok(basketService.getShopCarts(shopCartItems, shopId));
 
     }
 
@@ -108,9 +137,9 @@ public class ShopCartController {
         }
 
         String userId = SecurityUtils.getUser().getUserId();
-        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId);
+        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, param.getPlatform());
         Product prodParam = productService.getProductByProdId(param.getProdId());
-        Sku skuParam = skuService.getSkuBySkuId(param.getSkuId());
+        Sku skuParam = skuService.getSkuBySkuId(param.getSkuId(), param.getPlatform(), param.getShopId());
 
         // 当商品状态不正常时,不能添加到购物车
         if (prodParam.getStatus() != 1 || skuParam.getStatus() != 1) {
@@ -123,7 +152,7 @@ public class ShopCartController {
                 basket.setUserId(userId);
                 basket.setBasketCount(param.getCount() + shopCartItemDto.getProdCount());
                 basket.setBasketId(shopCartItemDto.getBasketId());
-                if (skuParam.getStocks() < basket.getBasketCount() && param.getCount() > 0){
+                if (skuParam.getActualStocks() < basket.getBasketCount() && param.getCount() > 0) {
                     throw new GlobalException("商品库存不足");
                 }
                 // 防止购物车变成负数
@@ -132,7 +161,7 @@ public class ShopCartController {
                     return ResponseEntity.ok().build();
                 }
                 // 当sku实际库存不足时,不能添加到购物车
-                if (skuParam.getStocks() < basket.getBasketCount() && shopCartItemDto.getProdCount() > 0) {
+                if (skuParam.getActualStocks() < basket.getBasketCount() && shopCartItemDto.getProdCount() > 0) {
                     return ResponseEntity.badRequest().body("库存不足");
                 }
                 basketService.updateShopCartItem(basket);
@@ -144,15 +173,11 @@ public class ShopCartController {
         if (param.getCount() < 0) {
             return ResponseEntity.badRequest().body("商品已从购物车移除");
         }
-        // 当sku实际库存不足时,不能添加到购物车
-        if (skuParam.getStocks() < param.getCount()) {
-            return ResponseEntity.badRequest().body("库存不足");
-        }
-        if (skuParam.getStocks() <  param.getCount()){
+        if (skuParam.getActualStocks() < param.getCount()) {
             throw new GlobalException("商品库存不足");
         }
         // 所有都正常时
-        basketService.addShopCartItem(param,userId);
+        basketService.addShopCartItem(param, userId);
         return ResponseEntity.ok("添加成功");
     }
 
@@ -210,16 +235,16 @@ public class ShopCartController {
         List<ShopCartItemDto> dbShopCartItems = basketService.getShopCartItems(SecurityUtils.getUser().getUserId());
 
         List<ShopCartItemDto> chooseShopCartItems = dbShopCartItems
-                                                        .stream()
-                                                        .filter(shopCartItemDto -> {
-                                                            for (Long basketId : basketIds) {
-                                                                if (Objects.equals(basketId,shopCartItemDto.getBasketId())) {
-                                                                    return  true;
-                                                                }
-                                                            }
-                                                            return false;
-                                                        })
-                                                        .collect(Collectors.toList());
+                .stream()
+                .filter(shopCartItemDto -> {
+                    for (Long basketId : basketIds) {
+                        if (Objects.equals(basketId, shopCartItemDto.getBasketId())) {
+                            return true;
+                        }
+                    }
+                    return false;
+                })
+                .collect(Collectors.toList());
 
         // 根据店铺ID划分item
         Map<Long, List<ShopCartItemDto>> shopCartMap = chooseShopCartItems.stream().collect(Collectors.groupingBy(ShopCartItemDto::getShopId));

+ 52 - 26
yami-shop-api/src/main/java/com/yami/shop/api/listener/SubmitOrderListener.java

@@ -102,7 +102,7 @@ public class SubmitOrderListener {
         // 订单地址id
         Long addrOrderId = userAddrOrder.getAddrOrderId();
 
-        if(CollectionUtils.isNotEmpty(shopCartOrders)) {
+        if (CollectionUtils.isNotEmpty(shopCartOrders)) {
             // 每个店铺生成一个订单
             for (ShopCartOrderDto shopCartOrderDto : shopCartOrders) {
                 Double sumPlatformAmount = 0.0;
@@ -114,14 +114,12 @@ public class SubmitOrderListener {
 
                 // 订单商品名称
                 StringBuilder orderProdName = new StringBuilder(100);
-
                 List<OrderItem> orderItems = new ArrayList<>();
-
                 List<ShopCartItemDiscountDto> shopCartItemDiscounts = shopCartOrderDto.getShopCartItemDiscounts();
                 for (ShopCartItemDiscountDto shopCartItemDiscount : shopCartItemDiscounts) {
                     List<ShopCartItemDto> shopCartItems = shopCartItemDiscount.getShopCartItems();
                     for (ShopCartItemDto shopCartItem : shopCartItems) {
-                        Sku sku = checkAndGetSku(shopCartItem.getSkuId(), shopCartItem, skuStocksMap);
+                        Sku sku = checkAndGetSku(shopCartItem.getSkuId(), mergerOrder.getPlatform(), shopCartItem, skuStocksMap);
                         Product product = checkAndGetProd(shopCartItem.getProdId(), shopCartItem, prodStocksMap);
                         OrderItem orderItem = new OrderItem();
                         orderItem.setShopId(shopId);
@@ -141,6 +139,7 @@ public class SubmitOrderListener {
                         //平台的补贴优惠金额
                         orderItem.setPlatformShareReduce(shopCartItem.getPlatformShareReduce());
                         // 实际订单项支付金额
+                        //TODO wangjian 根据platform来计算是否优先扣减积分抵扣
                         orderItem.setActualTotal(shopCartItem.getActualTotal());
                         // 分摊优惠金额
                         orderItem.setShareReduce(shopCartItem.getShareReduce());
@@ -175,6 +174,7 @@ public class SubmitOrderListener {
                 // 商品总额
                 order.setTotal(shopCartOrderDto.getTotal());
                 // 实际总额
+                //TODO wangjian 根据platform来计算是否优先扣减积分抵扣
                 order.setActualTotal(shopCartOrderDto.getActualTotal());
                 order.setStatus(OrderStatus.UNPAY.value());
                 order.setChannelId(Long.valueOf(mergerOrder.getPlatform()));
@@ -205,7 +205,7 @@ public class SubmitOrderListener {
                 orderSettlement.setVersion(0);
                 orderSettlement.setPayScore(0);
                 //如果用使用积分,结算表将积分价格插入
-                if(mergerOrder.getIsScorePay() != null && mergerOrder.getIsScorePay() == 1){
+                if (mergerOrder.getIsScorePay() != null && mergerOrder.getIsScorePay() == 1) {
                     orderSettlement.setPayScore(shopCartOrderDto.getUseScore());
                 }
                 orderSettlementMapper.insert(orderSettlement);
@@ -218,24 +218,24 @@ public class SubmitOrderListener {
         }
 
 //TODO wangjia 修改本地库存
-        // 更新sku库存
-        skuStocksMap.forEach((key, sku) -> {
-
-            if (skuMapper.updateStocks(sku) == 0) {
-                skuService.removeSkuCacheBySkuId(key, sku.getProdId());
-                productService.removeProductCacheByProdId(sku.getProdId());
-                throw new GlobalException("商品:[" + sku.getProdName() + "]库存不足");
-            }
-        });
-
-//         更新商品库存
-        prodStocksMap.forEach((prodId, prod) -> {
-
-            if (productMapper.updateStocks(prod) == 0) {
-                productService.removeProductCacheByProdId(prodId);
-                throw new GlobalException("商品:[" + prod.getProdName() + "]库存不足");
-            }
-        });
+//        // 更新sku库存
+//        skuStocksMap.forEach((key, sku) -> {
+//
+//            if (skuMapper.updateStocks(sku) == 0) {
+//                skuService.removeSkuCacheBySkuId(key, sku.getProdId());
+//                productService.removeProductCacheByProdId(sku.getProdId());
+//                throw new GlobalException("商品:[" + sku.getProdName() + "]库存不足");
+//            }
+//        });
+//
+////         更新商品库存
+//        prodStocksMap.forEach((prodId, prod) -> {
+//
+//            if (productMapper.updateStocks(prod) == 0) {
+//                productService.removeProductCacheByProdId(prodId);
+//                throw new GlobalException("商品:[" + prod.getProdName() + "]库存不足");
+//            }
+//        });
 
     }
 
@@ -276,10 +276,36 @@ public class SubmitOrderListener {
 
     @SuppressWarnings({"Duplicates"})
     private Sku checkAndGetSku(Long skuId, ShopCartItemDto shopCartItem, Map<Long, Sku> skuStocksMap) {
-        //TODO wangjian 先让接口正常 shopCartItem
-        shopCartItem.setProdCount(9);
         // 获取sku信息
-        Sku sku = skuService.getSkuBySkuId(skuId,1,158L);
+        Sku sku = skuService.getSkuBySkuId(skuId);
+        if (sku == null) {
+            throw new GlobalException("购物车包含无法识别的商品");
+        }
+
+        if (sku.getStatus() != 1) {
+            throw new GlobalException("商品[" + sku.getProdName() + "]已下架");
+        }
+        // -1为无限库存
+        if (sku.getActualStocks() != -1 && shopCartItem.getProdCount() > sku.getActualStocks()) {
+            throw new GlobalException("商品:[" + sku.getProdName() + "]库存不足");
+        }
+
+        if (sku.getActualStocks() != -1) {
+            Sku mapSku = new Sku();
+            mapSku.setProdId(sku.getProdId());
+            // 这里的库存是改变的库存
+            mapSku.setStocks(shopCartItem.getProdCount());
+            mapSku.setSkuId(sku.getSkuId());
+            mapSku.setProdName(sku.getProdName());
+            skuStocksMap.put(sku.getSkuId(), mapSku);
+        }
+        return sku;
+    }
+
+    @SuppressWarnings({"Duplicates"})
+    private Sku checkAndGetSku(Long skuId, Integer platform, ShopCartItemDto shopCartItem, Map<Long, Sku> skuStocksMap) {
+        // 获取sku信息
+        Sku sku = skuService.getSkuBySkuId(skuId, platform, shopCartItem.getShopId());
         if (sku == null) {
             throw new GlobalException("购物车包含无法识别的商品");
         }

+ 12 - 5
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/OrderNumbersDto.java

@@ -11,15 +11,22 @@
 package com.yami.shop.bean.app.dto;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.checkerframework.checker.units.qual.A;
 
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class OrderNumbersDto {
 
-	@ApiModelProperty(value = "多个订单号拼接的字符串",required=true)
-	private String orderNumbers;
+    @ApiModelProperty(value = "多个订单号拼接的字符串", required = true)
+    private String orderNumbers;
+
+    @ApiModelProperty(value = "是否需要继续微信支付")
+    private Boolean nextPay;
 
-	public OrderNumbersDto(String orderNumbers) {
-		this.orderNumbers = orderNumbers;
-	}
 }

+ 2 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/ChangeShopCartParam.java

@@ -42,4 +42,6 @@ public class ChangeShopCartParam {
 
     @ApiModelProperty(value = "分销推广人卡号")
     private String distributionCardNo;
+    @ApiModelProperty(value = "渠道id")
+    private Integer platform;
 }

+ 6 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/model/CategoryProd.java

@@ -31,7 +31,12 @@ public class CategoryProd implements Serializable {
      * 商品属性id即表tz_prod_prop中的prop_id
      */
 
-    private Long propId;
+    private Long prodId;
 
+    private String code;
+
+    /**
+     * 0 正常,1 删除
+     */
     private Integer isDelete;
 }

+ 2 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/ChannelProd.java

@@ -40,6 +40,7 @@ public class ChannelProd implements Serializable {
      * 渠道ID
      */
     private Long channelId;
+
     @TableField(exist = false)
     private String channelName;
 
@@ -59,6 +60,7 @@ public class ChannelProd implements Serializable {
     /**
      * 门店名称
      */
+    @TableField(exist = false)
     private String shopName;
 
     /**

+ 6 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/Order.java

@@ -90,6 +90,12 @@ public class Order implements Serializable {
      */
     private Integer hbOrderStatus;
 
+    /**
+     * 海博物流状态
+     * 20:已抢单,30:配送员到店,40:取货完成,50:配送单取消,100:已送达
+     */
+    private Integer hbLogisticStatus;
+
     /**
      * 配送类型(1:快递 2:自提 3:及时配送)
      */

+ 71 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderRiderLocation.java

@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Hasee
+ */
+@Data
+@TableName("tz_order_rider_location")
+public class OrderRiderLocation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 骑手位置ID
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    private String orderNumber;
+
+    /**
+     * 骑手姓名
+     */
+    private String courierName;
+
+    /**
+     * 骑手电话
+     */
+    private String courierPhone;
+
+    /**
+     * 纬度
+     */
+    private Double latitude;
+
+    /**
+     * 经度
+     */
+    private Double longitude;
+
+    /**
+     * 推送时间
+     */
+    private Long pushTime;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}
+
+

+ 5 - 2
yami-shop-common/src/main/java/com/yami/shop/common/util/HttpUtil.java

@@ -2,6 +2,7 @@ package com.yami.shop.common.util;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
@@ -29,6 +30,7 @@ import java.util.Objects;
  * @author 王坚
  * @since 2021-06-10
  */
+@Slf4j
 public class HttpUtil {
 
     /**
@@ -118,6 +120,7 @@ public class HttpUtil {
      */
     public static String post(String url, Map<String, String> headers, Object params) {
         HttpPost post = new HttpPost(url);
+        log.info("请求路径{}",post);
         StringEntity entity = new StringEntity(JSON.toJSONString(params), ContentType.APPLICATION_JSON);
         post.setEntity(entity);
         return getRespString(post, headers);
@@ -317,8 +320,8 @@ public class HttpUtil {
      */
     private static String getRespString(HttpUriRequest request, Map<String, String> headers) {
 
-        System.err.println("=================请求对象=====================");
-        System.err.println(JSONObject.toJSONString(request));
+        log.info("=================请求对象=====================");
+        log.info(JSONObject.toJSONString(request));
         byte[] bytes = new byte[BYTE_ARRAY_LENGTH];
         int len = 0;
         try (InputStream in = getRespInputStream(request, headers);

+ 1 - 1
yami-shop-groupbuy/yami-shop-groupbuy-api/src/main/java/com/yami/shop/groupbuy/api/controller/GroupOrderController.java

@@ -216,7 +216,7 @@ public class GroupOrderController {
         productService.removeProductCacheByProdId(hadConfirmOrder.getProdId());
         skuService.removeSkuCacheBySkuId(hadConfirmOrder.getSkuId(), hadConfirmOrder.getProdId());
         groupOrderService.removeConfirmOrderCache(userId);
-        return ResponseEntity.ok(new OrderNumbersDto(orderNumber));
+        return ResponseEntity.ok(new OrderNumbersDto(orderNumber,false));
     }
 
 }

+ 1 - 1
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ChannelProdController.java

@@ -148,7 +148,7 @@ public class ChannelProdController {
     }
 
     @PostMapping("/import")
-    @ApiOperation(value = "导入渠道商品数据")
+    @ApiOperation(value = "导入渠道商品价格数据")
     public R<String> importChannelProds(@RequestParam("file") MultipartFile file) {
         String result = channelProdService.importChannelProds(file);
         return R.SUCCESS(result);

+ 12 - 1
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/GoodsController.java

@@ -34,7 +34,9 @@ public class GoodsController {
     @ApiOperation(value = "添加商品信息", notes = "海博新增商品信息回调接口")
     public HBR addGoods(@RequestBody JSONObject HBRequest) {
         log.info("海博新增商品{}",HBRequest);
-        return goodsService.addHBGoods(HBRequest);
+        HBR hbr = goodsService.addHBGoods(HBRequest);
+        log.info("海博新增商品返回信息:{}",hbr);
+        return hbr;
     }
     /**
      * 海博修改商品信息-回调
@@ -107,6 +109,15 @@ public class GoodsController {
     }
 
 
+    /**
+     * 海博商品信息(商品主档信息查询接口 - 对应的是海博商品里面“线上商品管理”)
+     *
+     * @return 商品响应
+     */
+    @GetMapping("/selectHBGoodsSpuInfo")
+    public HBR selectHBGoodsSpuInfo(String spuId) {
+        return HBR.success(goodsService.selectHBGoodsSpuInfo(spuId));
+    }
 
 
 }

+ 34 - 13
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java

@@ -35,8 +35,6 @@ public class HBOrderController {
         return orderService.createOrderAsync(channelOrderId);
     }
 
-
-
     /**
      * 订单配送-回调
      *
@@ -49,7 +47,6 @@ public class HBOrderController {
         return null;
     }
 
-
     /**
      * 海博订单完成-回调
      * @param HBRequest 海博订单完成请求参数
@@ -59,6 +56,7 @@ public class HBOrderController {
         log.info("海博订单完成{}",HBRequest);
         return null;
     }
+
     /**
      * 海博查询订单详情-回调
      * @param HBRequest 海博查询订单详情请求参数
@@ -82,17 +80,17 @@ public class HBOrderController {
         return null;
     }
 
-
     /**
-     * 海博修改订单状态-回调
+     * 订单状态变更接口-回调
      *
-     * @param HBRequest 海博修改订单状态请求参数
+     * @param hBRequest 订单状态变更接口请求参数
      * @return 订单响应
      */
     @PostMapping("/updateStatus")
-    public HBR updateStatus(@RequestBody JSONObject HBRequest) {
-        log.info("海博修改订单状态{}",HBRequest);
-        return null;
+    public HBR updateStatus(@RequestBody JSONObject hBRequest) {
+        log.info("海博修改订单状态{}",hBRequest);
+        orderService.orderStatusNotify(hBRequest);
+        return HBR.success();
     }
 
     /**
@@ -110,14 +108,37 @@ public class HBOrderController {
     /**
      * 海博订单物流状态-回调
      *
-     * @param HBRequest 海博订单物流状态请求参数
+     * @param hBRequest 海博订单物流状态请求参数
      * @return 订单响应
      */
     @PostMapping("/logisticsStatus")
-    public HBR logisticsStatus(@RequestBody JSONObject HBRequest) {
-        log.info("海博订单物流状态请求参数{}",HBRequest);
-        return null;
+    public HBR logisticsStatus(@RequestBody JSONObject hBRequest) {
+        log.info("海博订单物流状态通知{}",hBRequest);
+        orderService.updateLogisticStatus(hBRequest);
+        return HBR.success();
+    }
+
+    /**
+     * 订单状态变更通知(下行)
+     */
+    @PostMapping("/orderStatusNotify")
+    public HBR orderStatusNotify(@RequestBody JSONObject hBRequest) {
+        orderService.orderStatusNotify(hBRequest);
+        log.info("海博订单状态变更通知{}",hBRequest);
+        return HBR.success();
     }
 
 
+    /**
+     * 骑手经纬度接口
+     * @param hBRequest 海博骑手经纬度请求参数
+     * @return 订单响应
+     */
+    @PostMapping("/riderLocation")
+    public HBR riderLocation(@RequestBody JSONObject hBRequest) {
+        log.info("海博骑手经纬度{}",hBRequest);
+        orderService.riderLocation(hBRequest);
+        return HBR.success();
+    }
+
 }

+ 0 - 4
yami-shop-platform/src/main/resources/application-dev.yml

@@ -19,7 +19,3 @@ spring:
 logging:
   config: classpath:logback/logback-dev.xml
 
-hb:
-  host: https://p-open.hiboos.com
-  appId: 5347a7077e65428bb9a87510ca7e1ea1
-  secret: 67899367b17e4a8d8a7d10ebe8449b90

+ 5 - 3
yami-shop-service/src/main/java/com/yami/shop/dao/BasketMapper.java

@@ -28,6 +28,8 @@ public interface BasketMapper extends BaseMapper<Basket> {
 
     List<ShopCartItemDto> getShopCartItems(@Param("userId") String userId);
 
+    List<ShopCartItemDto> getShopCartItemsByPlatform(@Param("userId") String userId, @Param("platform") Integer platform);
+
     void deleteShopCartItemsByBasketIds(@Param("userId") String userId, @Param("basketIds") List<Long> basketIds);
 
     void deleteAllShopCartItems(@Param("userId") String userId);
@@ -36,10 +38,10 @@ public interface BasketMapper extends BaseMapper<Basket> {
 
     void cleanExpiryProdList(@Param("userId") String userId);
 
-    List<ShopCartItemDto> shopCartItemDtoList(@Param("basketIdList")List<Long> basketIdList);
+    List<ShopCartItemDto> shopCartItemDtoList(@Param("basketIdList") List<Long> basketIdList);
 
-    void updateDiscountItemId(@Param("userId")String userId, @Param("shopCartParams")List<ShopCartParam> shopCartParams);
+    void updateDiscountItemId(@Param("userId") String userId, @Param("shopCartParams") List<ShopCartParam> shopCartParams);
 
-    List<String> listUserIdByProdId(@Param("prodId")Long prodId);
+    List<String> listUserIdByProdId(@Param("prodId") Long prodId);
 
 }

+ 11 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/OrderRiderLocationMapper.java

@@ -0,0 +1,11 @@
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.AdvertInfo;
+import com.yami.shop.bean.model.OrderRiderLocation;
+
+/**
+ * @author fbj
+ */
+public interface OrderRiderLocationMapper extends BaseMapper<OrderRiderLocation> {
+}

+ 2 - 1
yami-shop-service/src/main/java/com/yami/shop/dao/SkuMapper.java

@@ -34,7 +34,8 @@ public interface SkuMapper extends BaseMapper<Sku> {
 
     List<Sku> listByProdIdAndPlatform(@Param("prodId") Long prodId, @Param("platform") Integer platform, @Param("shopId") Long shopId);
 
-    Sku listBySukIdAndPlatform(@Param("skuId") Long skuId, @Param("platform") Integer platform, @Param("shopId") Long shopId);
+    Sku listBySukIdAndPlatformShop(@Param("skuId") Long skuId, @Param("platform") Integer platform, @Param("shopId") Long shopId);
+    Sku listBySukIdAndPlatform(@Param("skuId") Long skuId, @Param("platform") Integer platform);
 
     int updateStocks(@Param("sku") Sku sku);
 

+ 2 - 0
yami-shop-service/src/main/java/com/yami/shop/service/BasketService.java

@@ -19,6 +19,7 @@ import com.yami.shop.bean.app.param.ChangeShopCartParam;
 import com.yami.shop.bean.app.param.OrderItemParam;
 import com.yami.shop.bean.app.param.ShopCartParam;
 import com.yami.shop.bean.model.Basket;
+import io.swagger.models.auth.In;
 
 /**
  * @author lgh on 2018/10/18.
@@ -34,6 +35,7 @@ public interface BasketService extends IService<Basket> {
     void deleteAllShopCartItems(String userId);
 
     List<ShopCartItemDto> getShopCartItems(String userId);
+    List<ShopCartItemDto> getShopCartItems(String userId, Integer platform);
 
     List<ShopCartItemDto> getShopCartExpiryItems(String userId);
 

+ 10 - 0
yami-shop-service/src/main/java/com/yami/shop/service/SkuService.java

@@ -28,6 +28,7 @@ public interface SkuService extends IService<Sku> {
      * @return sku列表
      */
     List<Sku> listByProdId(Long prodId, Integer platform, Long shopId);
+
     /**
      * 根据商品id获取商品中的sku列表(将会被缓存起来)
      *
@@ -43,6 +44,7 @@ public interface SkuService extends IService<Sku> {
      * @return
      */
     Sku getSkuBySkuId(Long skuId);
+
     /**
      * 根据skuId获取sku信息(将会被缓存起来)
      *
@@ -51,5 +53,13 @@ public interface SkuService extends IService<Sku> {
      */
     Sku getSkuBySkuId(Long skuId, Integer platform, Long shopId);
 
+    /**
+     * 根据skuId获取sku信息(将会被缓存起来)
+     *
+     * @param skuId
+     * @return
+     */
+    Sku getSkuBySkuId(Long skuId, Integer platform);
+
     void removeSkuCacheBySkuId(Long skuId, Long prodId);
 }

+ 6 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/IHBGoodsService.java

@@ -58,4 +58,10 @@ public interface IHBGoodsService {
     void deleteGoods(JSONObject hbRequest);
 
 
+    /**
+     * 获取海博商品spu信息
+     * @param spuId spuId
+     * @return spu信息
+     */
+    String selectHBGoodsSpuInfo(String spuId);
 }

+ 28 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/IHBOrderService.java

@@ -29,6 +29,15 @@ public interface IHBOrderService {
      */
     String createOrderAsync(String channelOrderId);
 
+    /**
+     * 海博订单修改状态接口-推送接口
+     *
+     * @param channelOrderId 海博订单请求参数
+     * 订单类型 (20:订单已接单 30:订单待配送 60:订单已取消 80:订单已完成)
+     * @return 订单详情响应
+     */
+    String changeOrderStatus(String channelOrderId, Integer type);
+
     /**
      * 海博订单创建接口-结果接口
      *
@@ -36,4 +45,23 @@ public interface IHBOrderService {
      * @return 订单结果响应
      */
     HBR createOrderResult(JSONObject hBRequest);
+
+    /**
+     * 海博订单创建接口-结果接口
+     *
+     * @param hBRequest 海博订单结果请求参数
+     */
+    void orderStatusNotify(JSONObject hBRequest);
+
+    /**
+     * 订单物流状态接口-结果接口
+     * @param hBRequest 海博订单结果请求参数
+     */
+    void updateLogisticStatus(JSONObject hBRequest);
+
+    /**
+     * 配送员位置接口-结果接口
+     * @param hBRequest 海博订单结果请求参数
+     */
+    void riderLocation(JSONObject hBRequest);
 }

+ 24 - 1
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBFrontCategoryService.java

@@ -12,6 +12,7 @@ import com.yami.shop.service.hb.IHBFrontCategoryService;
 import com.yami.shop.utils.HBSignUtil;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -70,8 +71,30 @@ public class HBFrontCategoryService implements IHBFrontCategoryService {
                 frontCategory.setIcon(jsonObjectInfo.getString("https://zswl-shop.oss-cn-chengdu.aliyuncs.com/2025/09/fe56414a161b498b8f263d3e6afdab92.png"));
                 frontCategory.setPic(jsonObjectInfo.getString("https://zswl-shop.oss-cn-chengdu.aliyuncs.com/2025/09/fe56414a161b498b8f263d3e6afdab92.png"));
                 log.info("添加前台类目信息{}",frontCategory);
+
+//                if (ObjectUtils.isNotEmpty(jsonObjectInfo.getString("parentCode")) && !jsonObjectInfo.getString("parentCode").equals("0")) {
+//                    frontCategoryMapper.selectOne(new LambdaQueryWrapper<FrontCategory>().
+//                            eq(FrontCategory::getParentCode, frontCategory.getParentCode())
+//                            .eq(FrontCategory::getIsDelete, 0));
+//                    if (frontCategory.getParentCode() == null) {
+//                        FrontCategory frontCategory1 = new FrontCategory();
+//                        frontCategory1.setCode(jsonObjectInfo.getString("parentCode"));
+//                        frontCategory1.setName(jsonObjectInfo.getString("parentName"));
+//                        frontCategory1.setIsDelete(0);
+//                        frontCategoryMapper.insert(frontCategory1);
+//                    }
+//                }
+                FrontCategory frontCategory1 = frontCategoryMapper.selectOne(new LambdaQueryWrapper<FrontCategory>().
+                        eq(FrontCategory::getCode, frontCategory.getCode())
+                        .eq(FrontCategory::getIsDelete, 0));
+                if (frontCategory1 == null) {
+                    frontCategoryMapper.insert(frontCategory);
+                } else {
+                    frontCategory.setId(frontCategory1.getId());
+                    frontCategoryMapper.updateById(frontCategory);
+                }
                 // 3. 保存门店信息
-                frontCategoryMapper.insert(frontCategory);
+//                frontCategoryMapper.insert(frontCategory);
             }
             log.info("前台分类成功");
             // 4. 构建响应

+ 80 - 35
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBGoodsService.java

@@ -4,17 +4,13 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yami.shop.bean.dto.hb.HBBaseReq;
-import com.yami.shop.bean.model.Product;
-import com.yami.shop.bean.model.ShopDetail;
-import com.yami.shop.bean.model.ShopSku;
-import com.yami.shop.bean.model.Sku;
+import com.yami.shop.bean.model.*;
 import com.yami.shop.common.util.hb.HBR;
-import com.yami.shop.dao.ProductMapper;
-import com.yami.shop.dao.ShopDetailMapper;
-import com.yami.shop.dao.ShopSkuMapper;
-import com.yami.shop.dao.SkuMapper;
+import com.yami.shop.dao.*;
 import com.yami.shop.service.hb.IHBGoodsService;
+import com.yami.shop.service.impl.FrontCategoryService;
 import com.yami.shop.utils.HBSignUtil;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -45,6 +41,8 @@ public class HBGoodsService implements IHBGoodsService {
     private final SkuMapper skuMapper;
     private final ShopSkuMapper shopSkuMapper;
     private final ShopDetailMapper shopDetailMapper;
+    private final FrontCategoryMapper frontCategoryMapper;
+    private final CategoryProdMapper categoryProdMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -75,25 +73,33 @@ public class HBGoodsService implements IHBGoodsService {
 
                     // 创建并填充Product对象
                     hbSpuId = productInfo.getString("spuId");
+                    Product productAdd = createProductFromProductInfo(productInfo);
+                    setSpuMapper(productInfo, productAdd);
                     Product productInfoById = productMapper.selectByHbSpuId(hbSpuId);
+
                     if (ObjectUtil.isNotEmpty(productInfoById) && productInfoById.getIsDelete() == 0) {
                         prodId = productInfoById.getProdId();
-                        log.info("商品spuID={},spuName={}已经存在无需添加", productInfo.getLong("spuId"), productInfo.getString("spuName"));
+                        log.info("商品spuID={},spuName={}已经存在,修改商品", productInfo.getLong("spuId"), productInfo.getString("spuName"));
+                        productAdd.setProdId(productInfoById.getProdId());
+                        productMapper.updateById(productAdd);
                     } else {
-                        Product productAdd = createProductFromProductInfo(productInfo);
-                        setSpuMapper(productInfo, productAdd);
                         //添加到数据库
+                        log.info("创建商品spu: {}", productAdd);
                         productMapper.insert(productAdd);
                         prodId = productAdd.getProdId();
                         log.info("SPU创建成功: prodId={}, hbSpuId={}, spuName={}", productAdd.getProdId(), productAdd.getProdId(), productAdd.getProdName());
                     }
 
+                    convertCategoryCodeToId(productInfo.getJSONArray("relationFrontCategories"), productAdd.getProdId()); // 一品多类目
+
+
                     Sku skuId = skuMapper.selectByHbSkuId(productInfo.getString("skuId"));
                     if (ObjectUtil.isNotEmpty(skuId) && skuId.getIsDelete() == 0) {
-                        log.info("商品skuId={},skuName={}已经存在无需添加", productInfo.getString("skuId"), productInfo.getString("skuName"));
+                        skuId.setSkuId(skuId.getSkuId());
+                        skuMapper.updateById(skuId);
+                        log.info("商品skuId={},skuName={}已经存在,修改数据", productInfo.getString("skuId"), productInfo.getString("skuName"));
                     } else {
                         // 创建并填充Sku对象
-
                         Sku sku = createSkuFromProductInfo(productInfo);
                         sku.setProdId(prodId);
                         sku.setHbSpuId(hbSpuId);
@@ -114,38 +120,42 @@ public class HBGoodsService implements IHBGoodsService {
                 for (Object productHostInfoDTO : productHostInfoDTOS) {
                     JSONObject productInfo = JSON.parseObject(productHostInfoDTO.toString());
                     // 创建并填充Product对象
+                    Product productAdd = createProductFromProductInfo(productInfo);
+                    setSpuSpecMapper(productInfo, productAdd);
+                    // 创建并填充Product对象
                     Product productInfoById = productMapper.selectByHbSpuId(hbSpuId);
                     if (ObjectUtil.isNotEmpty(productInfoById) && productInfoById.getIsDelete() == 0) {
-                        log.info("商品spuID={},spuName={}已经存在无需添加", productInfo.getLong("spuId"), productInfo.getString("spuName"));
                         prodId = productInfoById.getProdId();
+                        log.info("商品spuID={},spuName={}已经存在,修改商品", productInfo.getLong("spuId"), productInfo.getString("spuName"));
+                        productAdd.setProdId(productInfoById.getProdId());
+                        productMapper.updateById(productAdd);
                     } else {
-                        // 创建并填充Product对象
-                        Product productAdd = createProductFromProductInfo(productInfo);
-                        setSpuSpecMapper(productInfo, productAdd);
                         //添加到数据库
                         productMapper.insert(productAdd);
                         prodId = productAdd.getProdId();
                         log.info("生成的商品ID: {}", productAdd.getProdId());
                     }
+                    convertCategoryCodeToId(productInfo.getJSONArray("relationFrontCategories"), productAdd.getProdId()); // 一品多类目
 
                     JSONArray skuList = productInfo.getJSONArray("skuList");
                     for (Object o : skuList) {
                         JSONObject jsonObjectSku = JSON.parseObject(o.toString());
-
+                        Sku sku = createSkuFromProductInfo(jsonObjectSku);
+                        sku.setProdId(prodId);
+                        sku.setHbSpuId(hbSpuId);
                         Sku skuId = skuMapper.selectByHbSkuId(jsonObjectSku.getString("skuId"));
                         if (ObjectUtil.isNotEmpty(skuId) && skuId.getIsDelete() == 0) {
+                            skuId.setSkuId(skuId.getSkuId());
+                            skuMapper.updateById(skuId);
                             log.info("商品skuId={},skuName={}已经存在无需添加", productInfo.getLong("skuId"), productInfo.getString("skuName"));
                         } else {
-                            Sku sku = createSkuFromProductInfo(jsonObjectSku);
-                            sku.setProdId(prodId);
-                            sku.setHbSpuId(hbSpuId);
                             skuMapper.insert(sku);
                         }
                     }
                 }
             }
         }
-        return HBR.success("商品信息处理成功");
+        return HBR.success();
     }
 
     @Override
@@ -174,7 +184,8 @@ public class HBGoodsService implements IHBGoodsService {
             String stationId = bodyJson.getString("stationId");
 
             String selfSkuStatus = getSelfSkuStatus(skuId, stationId);
-
+            log.info("商品状态变更查询:{}", selfSkuStatus);
+            //处理商品状态
 
 
         } catch (Exception e) {
@@ -217,6 +228,7 @@ public class HBGoodsService implements IHBGoodsService {
                     shopSkuInfo.setShopId(shopDetail.getShopId());
                     shopSkuInfo.setShopSkuPrice(currentPrice == null ? 0.0 : currentPrice);
                     shopSkuInfo.setSkuId(sku.getSkuId());
+                    shopSkuInfo.setSpuId(sku.getProdId());
                     shopSkuInfo.setIsDelete(0);
                     shopSkuInfo.setRecTime(new Date());
                     shopSkuMapper.insert(shopSkuInfo);
@@ -225,7 +237,7 @@ public class HBGoodsService implements IHBGoodsService {
                     shopSku.setShopSkuPrice(currentPrice == null ? 0.0 : currentPrice);
                     shopSku.setUpdateTime(new Date());
                     shopSkuMapper.updateById(shopSku);
-                    log.info("库存更改成功");
+                    log.info("价格更改成功");
                 }
             }
         } catch (Exception e) {
@@ -339,6 +351,7 @@ public class HBGoodsService implements IHBGoodsService {
      *
      * @param spuId 海博多规格商品编码
      */
+    @Override
     public String selectHBGoodsSpuInfo(String spuId) {
 
         HBBaseReq<Object> build = HBBaseReq.create();
@@ -366,6 +379,7 @@ public class HBGoodsService implements IHBGoodsService {
 
     /**
      * 商品-门店品售卖状态查询接口
+     *
      * @return 门店品售卖状态信息
      */
     public String getSelfSkuStatus(String skuId, String stationId) {
@@ -391,6 +405,7 @@ public class HBGoodsService implements IHBGoodsService {
     private Product createProductFromProductInfo(JSONObject productInfo) {
         Product product = new Product();
 
+        log.info("productInfo:{}", productInfo);
         // 直接映射字段
         product.setHbSpuId(productInfo.getLong("spuId"));
         product.setProdName(productInfo.getString("spuName"));
@@ -406,19 +421,24 @@ public class HBGoodsService implements IHBGoodsService {
         product.setBrandId(productInfo.getLong("brandId"));
         //品牌名称
         product.setBrandName(productInfo.getString("brandName"));
+        product.setBrandName(productInfo.getString("brandName"));
+        String descText = productInfo.getString("descText");
+        if (StringUtils.isEmpty(descText)) {
+            product.setContent("<p>暂无商品详情</p>");
+        } else {
+            product.setContent(descText);
+        }
         // 分类转换
         product.setCategoryId(productInfo.getLong("frontCategoryCode"));
         //后台类目平台对应ID
 //        product.setHbFrontCategoryId(productInfo.getLong("frontCategoryCode"));
-        product.setPic(productInfo.getString("spuMainImage"));
-        product.setImgs(productInfo.getString("spuImages"));
+//        product.setPic(productInfo.getString("spuMainImage"));
+//        product.setImgs(productInfo.getString("spuImages"));
         // 需要转换或默认值的字段
 //        Product.setTotalStocks(productInfo.getString(""));//总库存
 //        Product.setDeliveryMode(productInfo.getString(""));//配送方式
 //        Product.setDeliveryTemplateId(productInfo.getString(""));//运费模板id
 
-        convertCategoryCodeToId(productInfo.getJSONArray("relationFrontCategories")); // 一品多类目
-
         log.info("商品数据详情{}", product);
         return product;
     }
@@ -427,18 +447,20 @@ public class HBGoodsService implements IHBGoodsService {
      * 海博(普通)商品
      */
     private void setSpuMapper(JSONObject productInfo, Product product) {
-        product.setPic(productInfo.getString("spuMainImage"));//商品主图
+        product.setPic(productInfo.getString("mainImage"));//商品主图
         product.setHbStatus(1);//海博商品类型(1-普通商品,2-多规格商品)
-        product.setImgs(productInfo.getString("spuImages"));//商品图片,以,分割
+        product.setImgs(productInfo.getString("images"));//商品图片,以,分割
     }
 
     /**
      * 海博(多规格)商品
      */
     private void setSpuSpecMapper(JSONObject productInfo, Product product) {
-        product.setPic(productInfo.getString("mainImage"));//商品主图
+
+        product.setPic(productInfo.getString("spuMainImage"));//商品主图
         product.setHbStatus(2);//海博商品类型(1-普通商品,2-多规格商品)
-        product.setImgs(productInfo.getString("images"));//商品图片,以,分割
+        product.setImgs(productInfo.getString("spuImages"));//商品图片,以,分割
+
     }
 
     /**
@@ -460,8 +482,8 @@ public class HBGoodsService implements IHBGoodsService {
         sku.setStatus(1);
         sku.setIsDelete(0);
         sku.setVersion(0);
-        String images = StringUtils.isEmpty(productInfo.getString("images")) ? productInfo.getString("skuMainImage") : productInfo.getString("images");
-        sku.setPic(images);//sku图片
+//        String images = StringUtils.isEmpty(productInfo.getString("images")) ? productInfo.getString("skuMainImage") : productInfo.getString("images");
+        sku.setPic(productInfo.getString("mainImage"));//sku图片
         sku.setWeightUnit(productInfo.getString("unit"));//单位
         // 商品原价
         sku.setOriPrice(productInfo.getDouble("basicPrice") != null ?
@@ -487,10 +509,33 @@ public class HBGoodsService implements IHBGoodsService {
     /**
      * 分类处理
      */
-    private void convertCategoryCodeToId(JSONArray categoryCode) {
+    private void convertCategoryCodeToId(JSONArray categoryCode, Long spuId) {
+        log.info("新增商品分类处理{}", categoryCode);
         for (Object o : categoryCode) {
             JSONObject jsonObject = JSON.parseObject(o.toString());
 
+            String ztFrontCategoryCodeLevel = jsonObject.getString("ztFrontCategoryCodeLevel2");
+            if (StringUtils.isEmpty(ztFrontCategoryCodeLevel)) {
+                ztFrontCategoryCodeLevel = jsonObject.getString("ztFrontCategoryCode");
+            }
+//            FrontCategory frontCategory = frontCategoryMapper.selectOne(new LambdaQueryWrapper<FrontCategory>()
+//                    .eq(FrontCategory::getCode, ztFrontCategoryCodeLevel));
+
+            CategoryProd categoryProd = new CategoryProd();
+            categoryProd.setCode(ztFrontCategoryCodeLevel);
+            categoryProd.setProdId(spuId);
+            categoryProd.setIsDelete(0);
+            CategoryProd integer = categoryProdMapper.selectOne(new LambdaQueryWrapper<CategoryProd>()
+                    .eq(CategoryProd::getProdId, spuId)
+                    .eq(CategoryProd::getIsDelete, 0)
+                    .eq(CategoryProd::getCode, ztFrontCategoryCodeLevel));
+            if (integer != null) {
+                categoryProd.setId(integer.getId());
+                categoryProdMapper.updateById(categoryProd);
+                log.info("商品对应分类已存在{}", categoryProd);
+            } else {
+                categoryProdMapper.insert(categoryProd);
+            }
 
         }
     }

+ 101 - 13
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBOrderService.java

@@ -3,6 +3,7 @@ package com.yami.shop.service.hb.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yami.shop.bean.dto.hb.*;
 import com.yami.shop.bean.enums.DvyType;
 import com.yami.shop.bean.model.*;
@@ -36,7 +37,6 @@ import static com.yami.shop.common.util.HttpUtil.post;
 @Slf4j
 @Service
 @AllArgsConstructor
-@Transactional(readOnly = true)
 public class HBOrderService implements IHBOrderService {
     private final HBSignUtil hbSignUtil;
     private final OrderMapper orderMapper;
@@ -47,6 +47,7 @@ public class HBOrderService implements IHBOrderService {
     private final UserAddrService userAddrService;
     private final ProductMapper productMapper;
     private final SkuMapper skuMapper;
+    private final OrderRiderLocationMapper orderRiderLocationMapper;
 
     public HBR addHBGoods(JSONObject hbRequest) {
         try {
@@ -131,12 +132,95 @@ public class HBOrderService implements IHBOrderService {
     }
 
     @Override
-    public HBR createOrderResult(JSONObject hBRequest) {
-        log.info("海博订单创建完成结果通知请求参数{}",hBRequest);
+    public String changeOrderStatus(String channelOrderId, Integer type) {
+
+        HBBaseReq<Object> build = HBBaseReq.create();
+        build.setAppId(hbSignUtil.getAppId());
+
+        // 3. 构建外层请求体
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("channelOrderId", channelOrderId);
+        requestBody.put("operator", channelOrderId);
+        // 订单操作时间戳毫秒数
+        requestBody.put("operatorTime", System.currentTimeMillis());
+        //操作类型 (20:订单已接单 30:订单待配送 60:订单已取消 80:订单已完成)
+        requestBody.put("operatorType", type);
+        // 4. 将整个JSON对象序列化为字符串并设置
+        build.setBody(JSON.toJSONString(requestBody));
 
+        build.setSign(hbSignUtil.signMd5(build));
+        log.info("post 订单推送单号参数:{}", JSON.toJSONString(build));
+        String post = post(hbSignUtil.getHBHost() + "/api/order/changeOrderStatus", build);
+        log.info("post 订单推送结果:{}", post);
+        return post;
+    }
+
+    @Override
+    public HBR createOrderResult(JSONObject hBRequest) {
+        log.info("海博订单创建完成结果通知请求参数{}", hBRequest);
+        JSONObject body = hBRequest.getJSONObject("body");
+        String code = body.getString("code");
+        if (!"0".equals(code)) {
+            log.error("海博订单创建失败:{}", body.getString("message"));
+        }
         return HBR.success();
     }
 
+    @Override
+    public void orderStatusNotify(JSONObject hBRequest) {
+        log.info("海博订单状态变更通知请求参数{}", hBRequest);
+        String bodyStr = hBRequest.getString("body");
+        log.info("订单信息,body:{}", bodyStr);
+        JSONObject bodyJson = JSON.parseObject(bodyStr);
+        Order order = orderMapper.getOrderAndOrderItemByOrderNumber(bodyJson.getString("channelOrderId"));
+        order.setHbOrderStatus(bodyJson.getInteger("operatorType"));
+        orderMapper.updateById(order);
+    }
+
+    @Override
+    public void updateLogisticStatus(JSONObject hBRequest) {
+        log.info("海博订单更新通知请求参数{}", hBRequest);
+        JSONObject body = hBRequest.getJSONObject("body");
+        String channelOrderId = body.getString("channelOrderId");
+        Long changeTime = body.getLong("changeTime");
+        Integer logisticStatus = body.getInteger("logisticStatus");
+        String operator = body.getString("operator");
+        Order order = orderMapper.getOrderAndOrderItemByOrderNumber(channelOrderId);
+        order.setHbLogisticStatus(logisticStatus);
+        order.setUpdateTime(new Date(changeTime));
+        orderMapper.updateById(order);
+    }
+
+    @Override
+    public void riderLocation(JSONObject hBRequest) {
+        String bodyStr = hBRequest.getString("body");
+        log.info("订单信息,body:{}", bodyStr);
+        JSONObject bodyJson = JSON.parseObject(bodyStr);
+//        Order order = orderMapper.getOrderAndOrderItemByOrderNumber(bodyJson.getString("channelOrderId"));
+        String channelOrderId = bodyJson.getString("channelOrderId");
+        String courierName = bodyJson.getString("courierName");
+        String courierPhone = bodyJson.getString("courierPhone");
+        Double latitude = bodyJson.getDouble("latitude");
+        Double longitude = bodyJson.getDouble("longitude");
+        Long pushTime = bodyJson.getLong("pushTime");
+        OrderRiderLocation orderRiderLocation = new OrderRiderLocation();
+        orderRiderLocation.setOrderNumber(channelOrderId);
+        orderRiderLocation.setCourierName(courierName);
+        orderRiderLocation.setCourierPhone(courierPhone);
+        orderRiderLocation.setLatitude(latitude);
+        orderRiderLocation.setLongitude(longitude);
+        orderRiderLocation.setPushTime(pushTime);
+        orderRiderLocation.setCreateTime(new Date());
+
+        OrderRiderLocation orderRiderLocation1 = orderRiderLocationMapper.selectOne(new LambdaQueryWrapper<OrderRiderLocation>().eq(OrderRiderLocation::getOrderNumber, channelOrderId));
+        if (orderRiderLocation1 != null) {
+            orderRiderLocation.setId(orderRiderLocation1.getId());
+            orderRiderLocationMapper.updateById(orderRiderLocation);
+        } else {
+            orderRiderLocationMapper.insert(orderRiderLocation);
+        }
+    }
+
 
     @Override
     public HBR details(JSONObject hbRequest) {
@@ -179,19 +263,24 @@ public class HBOrderService implements IHBOrderService {
         }
 
         int dvyType = 80;
-        if (order.getDvyType() == 2) {
+        if (order.getDvyType() == 1) {
+            dvyType = 10;
+        } else if (order.getDvyType() == 2) {
             dvyType = 40;
         }
 
         createOrderRequest.setLogisticsType(dvyType);
-//        createOrderRequest.setCarrierNo(Order.getCarrierNo());运单号,快递单号
-//        createOrderRequest.setLogisticsDispatcherName(Order.getLogisticsDispatcherName()); 骑士姓名
-//        createOrderRequest.setLogisticsDispatcherMobile(Order.getLogisticsDispatcherMobile());骑士电话
-        createOrderRequest.setOrderAgingType(0);
+
+        OrderRiderLocation orderRiderLocation = orderRiderLocationMapper.selectOne(new LambdaQueryWrapper<OrderRiderLocation>().eq(OrderRiderLocation::getOrderNumber, order.getOrderNumber()));
+        if (orderRiderLocation != null) {
+            createOrderRequest.setCarrierNo(orderRiderLocation.getOrderNumber());//运单号,快递单号
+            createOrderRequest.setLogisticsDispatcherName(orderRiderLocation.getCourierName());// 骑士姓名
+            createOrderRequest.setLogisticsDispatcherMobile(orderRiderLocation.getCourierPhone());//骑士电话
 //        createOrderRequest.setLogisticsStationTips(Order.getLogisticsStationTips());配送小费
+        }
+        createOrderRequest.setOrderAgingType(0);
         createOrderRequest.setOrderConfirmTime(order.getCreateTime().getTime());
 
-//        createOrderRequest.setLogisticsPreEndTime(Order.getLogisticsPreEndTime());//配送预计送达时间
         if (order.getPayTime() != null) {
             createOrderRequest.setOrderPayTime(order.getPayTime().getTime());
             //配送预计开始时间
@@ -200,7 +289,7 @@ public class HBOrderService implements IHBOrderService {
             time += 60 * 60 * 1000;
             createOrderRequest.setLogisticsPreEndTime(time);
         }
-//        createOrderRequest.setOrderPickTime(order.getOrderPickTime());实际拣货完成时间
+//        createOrderRequest.setOrderPickTime(order.getUpdateTime().getTime());//实际拣货完成时间
 //        createOrderRequest.setOrderPickPreEndTime(order.getOrderPickPreEndTime());
         if (order.getDvyTime() != null) {
             createOrderRequest.setOrderOutStockTime(order.getDvyTime().getTime());
@@ -219,7 +308,6 @@ public class HBOrderService implements IHBOrderService {
 //        createOrderRequest.setExtra(order.getExtra());
 
         //订单费用信息
-
         OrderFee orderFee = new OrderFee();
         long totalPrice = (long) (order.getTotal() * 100);
         orderFee.setOriginalPrice(totalPrice);
@@ -264,8 +352,8 @@ public class HBOrderService implements IHBOrderService {
             orderProduct.setSkuWeight(sku.getWeight());
             orderProduct.setUnit(sku.getWeightUnit());
             orderProduct.setCount((long) orderItem.getProdCount());
-            orderProduct.setOriginSkuPrice((long)(orderItem.getPrice()*100));
-            orderProduct.setActivitySkuPrice((long)(orderItem.getPrice()*100));
+            orderProduct.setOriginSkuPrice((long) (orderItem.getPrice() * 100));
+            orderProduct.setActivitySkuPrice((long) (orderItem.getPrice() * 100));
             orderProduct.setSkuBasicSpec(sku.getSpec());
 //            orderProduct.setSkuImg(sku.getPic());
             orderProduct.setBusinessSingleProductSubsidy(0L);

+ 3 - 3
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/StoreManagementService.java

@@ -169,13 +169,13 @@ public class StoreManagementService implements IStoreManagementService {
 
             ShopDetail shopDetail = shopDetailMapper.selectByHbStationId(resultData.getString("stationId"));
             if (shopDetail != null) {
-                log.info("存在门店不需要新增直接修改{}", outStationNo);
+                log.info("存在门店不需要新增直接修改{}", outStationNo);
                 shopDetailInfo.setShopId(shopDetail.getShopId());
                 shopDetailMapper.updateById(shopDetailInfo);
+                log.info("门店变更成功{}", shopDetailInfo);
             }else {
                 shopDetailMapper.insert(shopDetailInfo);
-                log.info("门店变更成功{}", shopDetailInfo);
-
+                log.info("门店新增成功{}", shopDetailInfo);
                 //添加默认配送模板
                 Transport2 transport2 = new Transport2();
                 //所有数据设置默认值

+ 21 - 4
yami-shop-service/src/main/java/com/yami/shop/service/impl/BasketServiceImpl.java

@@ -97,7 +97,7 @@ public class BasketServiceImpl extends ServiceImpl<BasketMapper, Basket> impleme
     public List<ShopCartItemDto> getShopCartItems(String userId) {
         // 在这个类里面要调用这里的缓存信息,并没有使用aop,所以不使用注解
         List<ShopCartItemDto> shopCartItemDtoList = cacheManagerUtil.getCache("ShopCartItems", userId);
-        if(ObjectUtils.isNotEmpty(shopCartItemDtoList)){
+        if (ObjectUtils.isNotEmpty(shopCartItemDtoList)) {
             return shopCartItemDtoList;
         }
         shopCartItemDtoList = basketMapper.getShopCartItems(userId);
@@ -110,6 +110,23 @@ public class BasketServiceImpl extends ServiceImpl<BasketMapper, Basket> impleme
         return shopCartItemDtoList;
     }
 
+    @Override
+    public List<ShopCartItemDto> getShopCartItems(String userId, Integer platform) {
+        // 在这个类里面要调用这里的缓存信息,并没有使用aop,所以不使用注解
+        List<ShopCartItemDto> shopCartItemDtoList = cacheManagerUtil.getCache("ShopCartItems", userId);
+        if (ObjectUtils.isNotEmpty(shopCartItemDtoList)) {
+            return shopCartItemDtoList;
+        }
+        shopCartItemDtoList = basketMapper.getShopCartItemsByPlatform(userId, platform);
+        for (ShopCartItemDto shopCartItemDto : shopCartItemDtoList) {
+            shopCartItemDto.setProductTotalAmount(Arith.mul(shopCartItemDto.getProdCount(), shopCartItemDto.getPrice()));
+            shopCartItemDto.setWeight(shopCartItemDto.getWeight());
+            shopCartItemDto.setWeightUnit(shopCartItemDto.getWeightUnit());
+        }
+        cacheManagerUtil.putCache("ShopCartItems", userId, shopCartItemDtoList);
+        return shopCartItemDtoList;
+    }
+
     @Override
     public List<ShopCartItemDto> getShopCartExpiryItems(String userId) {
         return basketMapper.getShopCartExpiryItems(userId);
@@ -142,11 +159,11 @@ public class BasketServiceImpl extends ServiceImpl<BasketMapper, Basket> impleme
     public List<ShopCartDto> getShopCarts(List<ShopCartItemDto> shopCartItems, Long shopId1) {
         // 根据店铺ID划分item
         Map<Long, List<ShopCartItemDto>> shopCartMap = shopCartItems.stream().collect(Collectors.groupingBy(ShopCartItemDto::getShopId));
-        if(shopId1 != null && shopId1 > 0){
+        if (shopId1 != null && shopId1 > 0) {
             List<ShopCartDto> shopCartDtos2 = Lists.newArrayList();
             //获取店铺的所有商品项
             List<ShopCartItemDto> shopCartItemDtoList2 = shopCartMap.get(shopId1);
-            if(shopCartItemDtoList2 != null){
+            if (shopCartItemDtoList2 != null) {
                 // 构建每个店铺的购物车信息
                 ShopCartDto shopCart2 = new ShopCartDto();
                 //店铺信息
@@ -207,7 +224,7 @@ public class BasketServiceImpl extends ServiceImpl<BasketMapper, Basket> impleme
     @Override
     public ShopCartItemDto getShopCartItem(OrderItemParam orderItem) {
         //Integer platform, Long shopId
-        Sku sku = skuService.getSkuBySkuId(orderItem.getSkuId(),orderItem.getPlatform(),orderItem.getShopId());
+        Sku sku = skuService.getSkuBySkuId(orderItem.getSkuId(), orderItem.getPlatform(), orderItem.getShopId());
         if (sku == null) {
             throw new RuntimeException("订单包含无法识别的商品");
         }

+ 23 - 12
yami-shop-service/src/main/java/com/yami/shop/service/impl/ChannelProdServiceImpl.java

@@ -272,14 +272,14 @@ public class ChannelProdServiceImpl extends ServiceImpl<ChannelProdMapper, Chann
                 channelProd.setChannelProdPrice(importVO.getChannelProdPrice());
                 channelProd.setRecTime(new Date());
 
-                // 检查是否已存在
-                int count = channelProdMapper.selectCount(
-                        new LambdaQueryWrapper<ChannelProd>().eq(ChannelProd::getChannelId, channel.getId())
-                                .eq(ChannelProd::getSkuId, sku.getSkuId()));
-                if (count > 0) {
-                    log.error("渠道:{},在系统中已存在商品ID:{}", importVO.getChannelName(), importVO.getSkuId());
-                    throw new GlobalException(String.format("第%d行数据导入失败! 失败原因: 渠道=%s,在系统中已存在 商品ID=%s", i + 1, importVO.getChannelName(), importVO.getSkuId()));
-                }
+//                // 检查是否已存在
+//                int count = channelProdMapper.selectCount(
+//                        new LambdaQueryWrapper<ChannelProd>().eq(ChannelProd::getChannelId, channel.getId())
+//                                .eq(ChannelProd::getSkuId, sku.getSkuId()));
+//                if (count > 0) {
+//                    log.error("渠道:{},在系统中已存在商品ID:{}", importVO.getChannelName(), importVO.getSkuId());
+//                    throw new GlobalException(String.format("第%d行数据导入失败! 失败原因: 渠道=%s,在系统中已存在 商品ID=%s", i + 1, importVO.getChannelName(), importVO.getSkuId()));
+//                }
 
                 //检查门店是否存在
                 ShopDetail shopDetail = shopDetailMapper.selectOne(new LambdaQueryWrapper<ShopDetail>().eq(ShopDetail::getShopName, importVO.getShopName()));
@@ -287,10 +287,21 @@ public class ChannelProdServiceImpl extends ServiceImpl<ChannelProdMapper, Chann
                     log.error("门店:{},在系统中不存在", importVO.getShopName());
                     throw new GlobalException(String.format("第%d行数据导入失败! 失败原因: 门店=%s,在系统中不存在", i + 1, importVO.getShopName()));
                 }
+                channelProd.setShopId(shopDetail.getShopId());
 
                 // 新增操作
-                channelProdMapper.insert(channelProd);
-                log.info("添加渠道门店商品数据成功");
+                ChannelProd channelProdCount = channelProdMapper.selectOne(new LambdaQueryWrapper<ChannelProd>()
+                        .eq(ChannelProd::getShopId, shopDetail.getShopId())
+                        .eq(ChannelProd::getIsDelete, 0)
+                        .eq(ChannelProd::getSkuId, channelProd.getSkuId())
+                        .eq(ChannelProd::getChannelId, channelProd.getChannelId()));
+                if (channelProdCount == null) {
+                    channelProdMapper.insert(channelProd);
+                    log.info("添加渠道门店商品数据成功");
+                }else {
+                    channelProd.setId(channelProdCount.getId());
+                    channelProdMapper.updateById(channelProd);
+                }
                 //添加渠道门店关联数据
                 //检查门店是否已存在
                 int channelShopCount = channelShopMapper.selectCount(new LambdaQueryWrapper<ChannelShop>()
@@ -300,7 +311,7 @@ public class ChannelProdServiceImpl extends ServiceImpl<ChannelProdMapper, Chann
                 if (channelShopCount == 0) {
                     ChannelShop channelShop = new ChannelShop();
                     channelShop.setIsDelete(0);
-                    channelShop.setChannelId(channelProd.getId());
+                    channelShop.setChannelId(channel.getId());
                     channelShop.setShopId(shopDetail.getShopId());
                     channelShopMapper.insert(channelShop);
                     log.info("添加渠道门店关联数据成功");
@@ -308,7 +319,7 @@ public class ChannelProdServiceImpl extends ServiceImpl<ChannelProdMapper, Chann
                 successCount++;
             } catch (Exception e) {
                 log.error("导入数据失败,行号:{},错误:{}", i + 1, e.getMessage());
-                throw new GlobalException(String.format("第%s行数据导入失败!", i + 1));
+                throw new GlobalException(String.format("第%s行数据导入失败:%s", i + 1,e.getMessage()));
             }
         }
         return String.format("导入完成,成功:%d条", successCount);

+ 1 - 0
yami-shop-service/src/main/java/com/yami/shop/service/impl/ShopCategoryServiceImpl.java

@@ -183,6 +183,7 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
         shopCategory.setIsDelete(0);
         shopCategory.setOperateUser("admin");
         shopCategory.setIsLeaves(1);
+        shopCategory.setIcon("https://zswl-shop.oss-cn-chengdu.aliyuncs.com/2025/09/eae85a85269045f6ba484bd1edf5f975.jpg");
 
         shopCategory.setHbShopId(hbShopId);
         shopCategory.setShopId(shopId);

+ 6 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/SkuServiceImpl.java

@@ -50,7 +50,12 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuSe
 
     @Override
     public Sku getSkuBySkuId(Long skuId, Integer platform, Long shopId) {
-        return skuMapper.listBySukIdAndPlatform(skuId, platform, shopId);
+        return skuMapper.listBySukIdAndPlatformShop(skuId, platform, shopId);
+    }
+
+    @Override
+    public Sku getSkuBySkuId(Long skuId, Integer platform) {
+        return skuMapper.listBySukIdAndPlatform(skuId, platform);
     }
 
     @Override

+ 3 - 3
yami-shop-service/src/main/java/com/yami/shop/utils/HBSignUtil.java

@@ -20,12 +20,12 @@ import static cn.hutool.crypto.SecureUtil.md5;
 @Configuration
 public class HBSignUtil {
     @Getter
-    @Value("${hb.host:def}")
+    @Value("${hb.host}")
     private String hBHost;
     @Getter
-    @Value("${hb.appId:def}")
+    @Value("${hb.appId}")
     private String appId;
-    @Value("${hb.secret:def}")
+    @Value("${hb.secret}")
     private String secret;
 
     /**

+ 34 - 0
yami-shop-service/src/main/resources/mapper/BasketMapper.xml

@@ -25,6 +25,40 @@
         LEFT JOIN tz_user_collection uc ON uc.prod_id = tp.prod_id AND tb.user_id = uc.user_id
         WHERE tp.status = 1 AND ts.status =1 AND tb.user_id = #{userId}
         ORDER BY tb.`basket_id` DESC
+
+  </select>
+    <select id="getShopCartItemsByPlatform" resultType="com.yami.shop.bean.app.dto.ShopCartItemDto">
+        SELECT
+            tb.*,
+            tb.basket_count AS prod_count,
+            tsd.shop_name,
+            tp.category_id,
+            IFNULL( ts.pic, tp.pic ) AS pic,
+            tcp.channel_prod_price AS price,
+            ts.ori_price,
+            tp.brief,
+            ts.properties,
+            ts.prod_name,
+            ts.sku_name,
+            ts.weight,
+            ts.weight_unit,
+            IF
+            ( uc.id, TRUE, FALSE ) AS is_collection
+        FROM
+            tz_basket tb
+                LEFT JOIN tz_shop_detail tsd ON tb.shop_id = tsd.shop_id
+                LEFT JOIN tz_prod tp ON tb.prod_id = tp.prod_id
+                LEFT JOIN tz_sku ts ON tb.sku_id = ts.sku_id
+                LEFT JOIN tz_user_collection uc ON (uc.prod_id = tp.prod_id AND tb.user_id = uc.user_id )
+                LEFT JOIN tz_channel_prod tcp ON (tb.sku_id=tcp.sku_id AND tb.shop_id=tcp.shop_id)
+        WHERE
+            tp.STATUS = 1
+          AND ts.STATUS = 1
+          AND tb.user_id = #{userId}
+          AND tcp.channel_id=#{platform}
+          AND tcp.is_delete=0
+        ORDER BY
+            tb.`basket_id` DESC
   </select>
 
 

+ 35 - 1
yami-shop-service/src/main/resources/mapper/SkuMapper.xml

@@ -81,7 +81,7 @@
           AND tcp.channel_id = #{platform}
     </select>
 
-    <select id="listBySukIdAndPlatform" resultType="com.yami.shop.bean.model.Sku">
+    <select id="listBySukIdAndPlatformShop" resultType="com.yami.shop.bean.model.Sku">
         SELECT ts.sku_id,
                ts.prod_id,
                ts.sku_name,
@@ -117,6 +117,40 @@
           AND tcp.channel_id = #{platform}
         LIMIT 1
     </select>
+    <select id="listBySukIdAndPlatform" resultType="com.yami.shop.bean.model.Sku">
+        SELECT ts.sku_id,
+               ts.prod_id,
+               ts.sku_name,
+               ts.prod_name,
+               ts.ori_price,
+               tcp.channel_prod_price AS price,
+               ts.sku_score,
+               ts.properties,
+               ts.stocks,
+               tss.shop_sku_stocks    AS actual_stocks,
+               ts.update_time,
+               ts.rec_time,
+               ts.party_code,
+               ts.model_id,
+               ts.pic,
+               ts.version,
+               ts.weight,
+               ts.volume,
+               ts.`status`,
+               ts.is_delete,
+               ts.weight_unit,
+               ts.sku_code,
+               ts.hb_spu_id,
+               ts.hb_sku_id
+        FROM tz_sku AS ts
+                 LEFT JOIN tz_shop_sku AS tss ON ts.sku_id = tss.sku_id
+                 LEFT JOIN tz_channel_prod AS tcp ON ts.sku_id = tcp.sku_id
+        WHERE ts.sku_id = #{skuId}
+          AND ts.is_delete = 0
+          AND tcp.is_delete = 0
+          AND ts.`status` = 1
+          AND tcp.channel_id = #{platform} LIMIT 1
+    </select>
     <select id="selectByHbSkuId" resultType="com.yami.shop.bean.model.Sku">
         select *
         from tz_sku

+ 1 - 1
yami-shop-user/yami-shop-user-api/src/main/java/com/yami/shop/user/api/controller/ScoreOrderController.java

@@ -140,7 +140,7 @@ public class ScoreOrderController {
         skuService.removeSkuCacheBySkuId(mergerOrder.getProductItemDto().getSkuId(),mergerOrder.getProductItemDto().getProdId());
         productService.removeProductCacheByProdId(mergerOrder.getProductItemDto().getProdId());
         scoreOrderService.removeConfirmScoreOrderCache(userId);
-        return ResponseEntity.ok(new OrderNumbersDto(orderNumbers.toString()));
+        return ResponseEntity.ok(new OrderNumbersDto(orderNumbers.toString(),false));
     }
 
 //    /**