Эх сурвалжийг харах

Merge branch 'dev'

# Conflicts:
#	yami-shop-api/src/main/java/com/yami/shop/api/controller/UserRegisterController.java
wangming 4 өдөр өмнө
parent
commit
3f8a99dd51
100 өөрчлөгдсөн 3476 нэмэгдсэн , 435 устгасан
  1. 7 1
      yami-shop-api/src/main/java/com/yami/shop/api/controller/AddrController.java
  2. 3 4
      yami-shop-api/src/main/java/com/yami/shop/api/controller/CategoryController.java
  3. 25 44
      yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java
  4. 1 8
      yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderRefundController.java
  5. 19 1
      yami-shop-api/src/main/java/com/yami/shop/api/controller/PayNoticeController.java
  6. 21 13
      yami-shop-api/src/main/java/com/yami/shop/api/controller/ProdController.java
  7. 1 1
      yami-shop-api/src/main/java/com/yami/shop/api/controller/SearchController.java
  8. 36 39
      yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopCartController.java
  9. 5 5
      yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopDetailController.java
  10. 151 10
      yami-shop-api/src/main/java/com/yami/shop/api/controller/UserController.java
  11. 2 7
      yami-shop-api/src/main/java/com/yami/shop/api/controller/UserRegisterController.java
  12. 14 40
      yami-shop-api/src/main/java/com/yami/shop/api/listener/ConfirmOrderListener.java
  13. 9 16
      yami-shop-api/src/main/java/com/yami/shop/api/listener/SubmitOrderListener.java
  14. 1 1
      yami-shop-api/src/main/resources/application-dev.yml
  15. 3 0
      yami-shop-api/src/main/resources/application-prod.yml
  16. 5 4
      yami-shop-api/src/main/resources/application.yml
  17. 2 2
      yami-shop-api/src/main/resources/redisson/redisson-dev.yml
  18. 6 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopCartItemDto.java
  19. 1 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopCartOrderMergerDto.java
  20. 7 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopHeadInfoDto.java
  21. 2 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/UserDto.java
  22. 1 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/ChangeShopCartParam.java
  23. 1 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/OrderItemParam.java
  24. 1 6
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/OrderParam.java
  25. 2 2
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/SearchParam.java
  26. 1 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/SubmitOrderParam.java
  27. 1 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/UserRegisterParam.java
  28. 3 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/dto/SearchProdDto.java
  29. 50 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/enums/ChannelType.java
  30. 0 3
      yami-shop-bean/src/main/java/com/yami/shop/bean/event/SubmitOrderEvent.java
  31. 5 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/Basket.java
  32. 31 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/Channel.java
  33. 85 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/ExportTask.java
  34. 52 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/Order.java
  35. 9 2
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderItem.java
  36. 6 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderRefund.java
  37. 16 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/PointsRecharge.java
  38. 4 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/ProdComm.java
  39. 7 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/ShopDetail.java
  40. 1 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/SysDictData.java
  41. 1 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/SysDictType.java
  42. 6 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/SysUser.java
  43. 6 4
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/User.java
  44. 3 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/UserShopBehavior.java
  45. 41 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/param/BackendOrderParam.java
  46. 58 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/param/CategoryProductParam.java
  47. 37 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/param/ConfirmSplitOrderParam.java
  48. 59 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/param/ManualSplitOrderParam.java
  49. 4 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/param/OrderParam.java
  50. 16 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/param/OrderRefundStaisticsParam.java
  51. 10 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/po/EnterpriseUserExcelInfo.java
  52. 25 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/po/EnterpriseUserPo.java
  53. 45 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/po/FreightStatisticsPo.java
  54. 31 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/po/PointsRecordPo.java
  55. 73 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/po/SMOrderItemPo.java
  56. 69 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/po/SMOrderPo.java
  57. 36 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/po/SkuStatisticsPo.java
  58. 4 4
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ChannelProdExportVO.java
  59. 4 4
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ChannelProdImportVO.java
  60. 6 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/EnterpriseUserVo.java
  61. 16 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ExportContext.java
  62. 66 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ExportTaskVo.java
  63. 62 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/FreightStatisticsVo.java
  64. 17 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/IdNameVo.java
  65. 75 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderCountVo.java
  66. 4 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderRefundVo.java
  67. 49 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/PointsRecordVo.java
  68. 31 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatistics.java
  69. 55 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatisticsExcel.java
  70. 55 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatisticsVo.java
  71. 170 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/XSBProductVO.java
  72. 145 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/XSBSkuVO.java
  73. 45 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/xsb/OmsOrderRefundSkuVo.java
  74. 37 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/xsb/RefundOrderPushStatusVo.java
  75. 197 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/xsb/RefundOrderPushVo.java
  76. 21 0
      yami-shop-common/src/main/java/com/yami/shop/common/bean/smqjh/OrderRefundCancelVo.java
  77. 51 0
      yami-shop-common/src/main/java/com/yami/shop/common/bean/smqjh/OrderRefundExpressParamVo.java
  78. 27 0
      yami-shop-common/src/main/java/com/yami/shop/common/bean/smqjh/Result.java
  79. 107 0
      yami-shop-common/src/main/java/com/yami/shop/common/enums/SMQJHResultCode.java
  80. 30 0
      yami-shop-common/src/main/java/com/yami/shop/common/util/Arith.java
  81. 3 1
      yami-shop-common/src/main/java/com/yami/shop/common/util/HttpUtil.java
  82. 16 1
      yami-shop-common/src/main/java/com/yami/shop/common/util/RedisUtil.java
  83. 1 1
      yami-shop-groupbuy/yami-shop-groupbuy-comment/src/main/java/com/yami/shop/groupbuy/comment/service/impl/GroupOrderServiceImpl.java
  84. 86 12
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ChannelController.java
  85. 133 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ExportTaskController.java
  86. 201 27
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderController.java
  87. 66 4
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderRefundController.java
  88. 52 6
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/PointsRechargeController.java
  89. 20 2
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/PointsRecordController.java
  90. 7 6
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ProdCommController.java
  91. 35 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/SMOrderController.java
  92. 15 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopCategoryController.java
  93. 87 102
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopDetailController.java
  94. 88 18
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/SkuController.java
  95. 48 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/UserEnterpriseController.java
  96. 20 4
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java
  97. 90 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/smqjh/XSBController.java
  98. 67 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/smqjh/XSBRefundOrderController.java
  99. 44 21
      yami-shop-platform/src/main/java/com/yami/shop/platform/task/OrderTask.java
  100. 6 0
      yami-shop-platform/src/main/resources/application-dev.yml

+ 7 - 1
yami-shop-api/src/main/java/com/yami/shop/api/controller/AddrController.java

@@ -18,6 +18,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import ma.glasnost.orika.MapperFacade;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -70,6 +71,9 @@ public class AddrController {
         if (addrParam.getAddrId() != null && addrParam.getAddrId() != 0) {
             return ResponseEntity.badRequest().body("该地址已存在");
         }
+        if (StringUtils.isEmpty(addrParam.getAddress())){
+            return ResponseEntity.badRequest().body("腾讯address不能为空");
+        }
         int addrCount = userAddrService.count(new LambdaQueryWrapper<UserAddr>().eq(UserAddr::getUserId, userId));
         UserAddr userAddr = new UserAddr();
         BeanUtils.copyProperties(addrParam, userAddr);
@@ -105,7 +109,9 @@ public class AddrController {
         if (dbUserAddr == null) {
             return ResponseEntity.badRequest().body("该地址已被删除");
         }
-
+        if (StringUtils.isEmpty(addrParam.getAddress())){
+            return ResponseEntity.badRequest().body("腾讯address不能为空");
+        }
         UserAddr userAddr = mapperFacade.map(addrParam, UserAddr.class);
         userAddr.setUserId(userId);
         userAddr.setUpdateTime(new Date());

+ 3 - 4
yami-shop-api/src/main/java/com/yami/shop/api/controller/CategoryController.java

@@ -58,7 +58,6 @@ public class CategoryController {
                                                            @RequestParam(value = "current", defaultValue = "1") Integer current,
                                                            @RequestParam(value = "size", defaultValue = "10") Integer size) {
         IPage<Category> categories = shopCategoryService.listByParentIdAndShopId(parentId,shopId, current, size);
-//        List<CategoryDto> categoryDtos = mapperFacade.mapAsList(categories, CategoryDto.class);
         List<Category> records = categories.getRecords();
         List<CategoryDto> categoryDtos = new ArrayList<>(records.size());
         for (Category category : records) {
@@ -75,10 +74,10 @@ public class CategoryController {
     /**
      * 用户端根据商户ID查询所有分类信息
      * */
-    @GetMapping("/listCategoryForUser/{shopId}")
+    @GetMapping("/listCategoryForUser")
     @ApiOperation(value = "用户端根据商户ID查询所有分类信息")
-    public ResponseEntity<List<ListCategoryForUserVO>> listCategoryForUser(@PathVariable Long shopId){
-        return ResponseEntity.ok(categoryService.listCategoryForUser(shopId));
+    public ResponseEntity<List<ListCategoryForUserVO>> listCategoryForUser(@RequestParam Long channelId,@RequestParam Long shopId ){
+        return ResponseEntity.ok(categoryService.listCategoryForUser(channelId,shopId));
     }
 
 }

+ 25 - 44
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java

@@ -77,9 +77,9 @@ public class OrderController {
     @PostMapping("/confirm")
     @ApiOperation(value = "结算,生成订单信息", notes = "传入下单所需要的参数进行下单")
     public ResponseEntity<ShopCartOrderMergerDto> confirm(@Valid @RequestBody OrderParam orderParam) {
-        if (orderParam.getShopId() == null){
-            orderParam.setShopId(1L);
-//            throw new GlobalException("请选择店铺!");
+        if (orderParam.getShopId() == null) {
+//            orderParam.setShopId(1L);
+            throw new GlobalException("请选择店铺!");
         }
         String userId = SecurityUtils.getUser().getUserId();
 
@@ -88,42 +88,22 @@ public class OrderController {
                 Basket byId = basketService.getById(basketId);
                 Sku byIdss = skuService.getById(byId);
                 ShopSku shopSku = shopSkuMapper.selectByShopAndSku(byIdss.getSkuId(), orderParam.getShopId());
-                if (shopSku.getShopSkuStocks()==null || shopSku.getShopSkuStocks()==0){
-                    throw new GlobalException("当前选择的商品["+byIdss.getSkuName()+"]库存为空!请重新选择商品!");
+                if (shopSku.getShopSkuStocks() == null || shopSku.getShopSkuStocks() == 0) {
+                    throw new GlobalException("当前选择的商品[" + byIdss.getSkuName() + "]库存为空!请重新选择商品!");
                 }
-                if (shopSku.getShopSkuStocks() <  byId.getBasketCount()) {
-                    throw new GlobalException("当前选择的商品["+byIdss.getSkuName()+"]库存不足!");
+                if (shopSku.getShopSkuStocks() < byId.getBasketCount()) {
+                    throw new GlobalException("当前选择的商品[" + byIdss.getSkuName() + "]库存不足!");
                 }
 
-//                boolean skuStock = qnhService.getSkuStock(byIdss.getSkuCode(), byId.getProdId(), orderParam.getPlatform());
-//                Product byId1 = productService.getById(byId.getProdId(), orderParam.getPlatform());
-//
-//                if(byId1.getIsDelete() == 1 || byId1.getStatus() != 1){
-//                    throw new GlobalException("当前选择的商品"+byId1.getProdName() + "已下架!请重新选择商品!");
-//                }
-//
-//                productService.updateById(byId1);
-//                if (skuStock && byId1.getTotalStocks() < byId.getBasketCount()) {
-//                    throw new GlobalException("当前选择的规格库存不足!");
-//                }
             });
-        }  else {
-
+        } else {
             ShopSku shopSku = shopSkuMapper.selectByShopAndSku(orderParam.getOrderItem().getSkuId(), orderParam.getShopId());
-            if (shopSku.getShopSkuStocks()==null || shopSku.getShopSkuStocks()==0){
-                throw new GlobalException("商品:["+shopSku.getSkuName()+"]库存为空!请重新选择商品!");
+            if (shopSku.getShopSkuStocks() == null || shopSku.getShopSkuStocks() == 0) {
+                throw new GlobalException("商品:[" + shopSku.getSkuName() + "]库存为空!请重新选择商品!");
             }
             if (shopSku.getShopSkuStocks() < orderParam.getOrderItem().getProdCount()) {
-                throw new GlobalException("商品:["+shopSku.getSkuName()+"]库存不足!");
+                throw new GlobalException("商品:[" + shopSku.getSkuName() + "]库存不足!");
             }
-
-//            Sku byId = skuService.getById(orderParam.getOrderItem().getSkuId());
-//            boolean skuStock = qnhService.getSkuStock(byId.getSkuCode(), orderParam.getOrderItem().getProdId(), orderParam.getPlatform());
-//            Product byId1 = productService.getById(byId.getProdId(), orderParam.getPlatform());
-//            productService.updateById(byId1);
-//            if (skuStock && byId1.getTotalStocks() < orderParam.getOrderItem().getProdCount()) {
-//                throw new GlobalException("当前选择的规格库存不足!");
-//            }
         }
 
         // 订单的地址信息
@@ -132,20 +112,20 @@ public class OrderController {
         // 组装获取用户提交的购物车商品项
         OrderItemParam orderItem = orderParam.getOrderItem();
         if (null != orderItem) {
-            orderItem.setPlatform(orderParam.getPlatform());
+            orderItem.setChannelId(orderParam.getChannelId());
         }
 
-        System.out.println("orderParam.getBasketIds()"+orderParam.getBasketIds());
-        System.out.println("orderItem"+orderItem);
-        System.out.println("userId"+userId);
-        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItemsByOrderItems(orderParam.getBasketIds(), orderItem, userId);
+        System.out.println("orderParam.getBasketIds()" + orderParam.getBasketIds());
+        System.out.println("orderItem" + orderItem);
+        System.out.println("userId" + userId);
+        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItemsByOrderItems(orderParam.getBasketIds(), orderItem, userId, orderParam.getChannelId());
         if (CollectionUtil.isEmpty(shopCartItems)) {
             throw new GlobalException("请选择您需要的商品加入购物车");
         }
         // 根据店铺组装购车中的商品信息,返回每个店铺中的购物车商品信息
         List<ShopCartDto> shopCarts = basketService.getShopCarts(shopCartItems, 0L);
 
-        Long point = pointsRecordMapper.statisticsPoint(userId, orderParam.getPlatform());
+        Long point = pointsRecordMapper.statisticsPoint(userId, orderParam.getChannelId());
         double v = 0.0;
         // 将要返回给前端的完整的订单信息
         ShopCartOrderMergerDto shopCartOrderMergerDto = new ShopCartOrderMergerDto();
@@ -229,7 +209,7 @@ public class OrderController {
         shopCartOrderMergerDto.setTotalUsableScore(Arith.sub(actualTotal, v) < 0 ? actualTotal : v);//总共消耗的积分
 //        shopCartOrderMergerDto.setTotalAvailableScore(point);
 
-        shopCartOrderMergerDto.setTotalAvailableScore((long)Arith.mul(shopCartOrderMergerDto.getTotalUsableScore(),100));//总共消耗的积分
+        shopCartOrderMergerDto.setTotalAvailableScore((long) Arith.mul(shopCartOrderMergerDto.getTotalUsableScore(), 100));//总共消耗的积分
         shopCartOrderMergerDto.setTotal(total);
         shopCartOrderMergerDto.setTotalCount(totalCount);
         shopCartOrderMergerDto.setOrderReduce(allOrderReduce);
@@ -278,7 +258,7 @@ public class OrderController {
         }
         shopCartOrderMergerDto.setActualTotal(Arith.sub(actualTotal, v) < 0 ? 0 : Arith.sub(actualTotal, v));
         shopCartOrderMergerDto.setTotalUsableScore(Arith.sub(actualTotal, v) < 0 ? actualTotal : v);//总共消耗的积分
-        shopCartOrderMergerDto.setTotalAvailableScore((long)Arith.mul(shopCartOrderMergerDto.getTotalUsableScore(),100));
+        shopCartOrderMergerDto.setTotalAvailableScore((long) Arith.mul(shopCartOrderMergerDto.getTotalUsableScore(), 100));
         shopCartOrderMergerDto.setTotalTransfee(totalTransfee);
         shopCartOrderMergerDto.setOrderReduce(allOrderReduce);
 
@@ -316,7 +296,7 @@ public class OrderController {
                 }
             }
         }
-        mergerOrder.setPlatform(submitOrderParam.getPlatform());
+        mergerOrder.setChannelId(submitOrderParam.getChannelId());
         List<Order> orders = orderService.submit(userId, mergerOrder);
 
         StringBuilder orderNumbers = new StringBuilder();
@@ -344,12 +324,13 @@ public class OrderController {
             basketService.removeShopCartItemsCacheByUserId(userId);
         }
         orderService.removeConfirmOrderCache(userId + submitOrderParam.getUuid());
-
-
         for (Order order : orders) {
-            //推送海博订单
             if (!order.getNextPay()) {
-                hbOrderService.createOrderAsync(order.getOrderNumber());
+                //不拆单和已拆单推到海博
+//                if (order.getSplitStatus() == 1 || order.getOrderLevel() == 1) {
+                    //推送海博订单
+                    hbOrderService.createOrderAsync(order.getOrderNumber());
+//                }
             }
         }
 

+ 1 - 8
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderRefundController.java

@@ -381,14 +381,7 @@ public class OrderRefundController {
         newOrderRefund.setReturnMoneySts(ReturnMoneyStsType.APPLY.value());
         newOrderRefund.setApplyTime(new Date());
         newOrderRefund.setUpdateTime(new Date());
-        //剩余的
-        Integer remainGoodsNumber = orderRefundService.queryRemainGoodsNumber(orderRefundParam.getOrderNumber());
-        Integer refundGoodsNumber = orderRefundSkuList.stream().map(OrderRefundSku::getProductCount).reduce(0, Integer::sum);
-        if (remainGoodsNumber>refundGoodsNumber){
-            newOrderRefund.setFreightAmount(0.0);
-        }else {
-            newOrderRefund.setFreightAmount(orderRefundParam.getFreightAmount());
-        }
+        newOrderRefund.setFreightAmount(orderRefundParam.getFreightAmount());
 
         long orderPoints = order.getOffsetPoints() == null ? 0 : order.getOffsetPoints();
         if (orderPoints == 0) {

+ 19 - 1
yami-shop-api/src/main/java/com/yami/shop/api/controller/PayNoticeController.java

@@ -12,6 +12,7 @@ package com.yami.shop.api.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yami.shop.bean.bo.PayInfoBo;
+import com.yami.shop.bean.model.Channel;
 import com.yami.shop.bean.model.Order;
 import com.yami.shop.bean.model.OrderItem;
 import com.yami.shop.bean.model.RefundDelivery;
@@ -30,6 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.List;
 
 //@ApiIgnore
@@ -40,6 +42,8 @@ public class PayNoticeController {
 
     private final PayService payService;
 
+    private final OrderService orderService;
+
     private final ProductService productService;
 
     private final SkuService skuService;
@@ -51,6 +55,7 @@ public class PayNoticeController {
     private final WxProviderService wxProviderService;
 
     private final IHBOrderService hbOrderService;
+    private final ChannelService channelService;
 
     @ApiOperation(value = "回调")
     @SneakyThrows
@@ -71,6 +76,20 @@ public class PayNoticeController {
             // 根据内部订单号更新order settlement
             List<Order> orders = payService.paySuccess(payInfoBo.getPayNo(), payInfoBo.getBizPayNo(), 1);
 
+            //进行拆单处理
+//            List<Order> objects = new ArrayList<>();
+//            for (Order order : orders) {
+//                Channel byId = channelService.getById(order.getChannelId());
+//                orderService.cd(order, byId, objects);
+//            }
+//
+//            for (Order order : objects) {
+//                //创建子订单
+//                orderService.save(order);
+//                //推送海博订单
+//                hbOrderService.createOrderAsync(order.getOrderNumber());
+//            }
+
             // 移除缓存
             for (Order order : orders) {
                 List<OrderItem> orderItems = order.getOrderItems();
@@ -85,7 +104,6 @@ public class PayNoticeController {
                 hbOrderService.createOrderAsync(order.getOrderNumber());
             }
         }
-
         return ResponseEntity.ok(payInfoBo.getSuccessString());
     }
 

+ 21 - 13
yami-shop-api/src/main/java/com/yami/shop/api/controller/ProdController.java

@@ -21,6 +21,7 @@ import com.yami.shop.bean.dto.SearchProdDto;
 import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.Product;
 import com.yami.shop.bean.model.Sku;
+import com.yami.shop.bean.param.CategoryProductParam;
 import com.yami.shop.bean.vo.SimilarProdListVo;
 import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
 import com.yami.shop.bean.model.UserShopBehavior;
@@ -81,7 +82,7 @@ public class ProdController {
     @GetMapping("/prodInfo")
     @ApiOperation(value = "商品详情信息", notes = "根据商品ID(prodId)获取商品信息")
     @ApiImplicitParam(name = "prodId", value = "商品ID", required = true, dataType = "Long")
-    public ResponseEntity<ProductDto> prodInfo(@RequestParam("prodId") Long prodId, @RequestParam("platform") Long platform, @RequestParam("shopId") Long shopId) {
+    public ResponseEntity<ProductDto> prodInfo(@RequestParam("prodId") Long prodId, @RequestParam("channelId") Long channelId, @RequestParam("shopId") Long shopId) {
 
         YamiUser user = null;
         try {
@@ -92,27 +93,31 @@ public class ProdController {
         }
         if (user != null) {
             String userId = user.getUserId();
+            if (channelId == null){
+                channelId = 3L;
+            }
             if (StringUtils.isNotEmpty(userId)) {
                 UserShopBehavior userShopBehavior = null;
-                userShopBehavior = userShopBehaviorService.findByUserIdAndProd(userId, prodId);
+                userShopBehavior = userShopBehaviorService.findByUserIdAndProd(userId,shopId, prodId,channelId);
                 if (userShopBehavior == null) {
                     int num = userShopBehaviorService.findByUserIdCount(userId);
                     if (num < 6) {
                         userShopBehavior = new UserShopBehavior();
-//                        userShopBehavior.setId(UUID.randomUUID().toString());
                         userShopBehavior.setUserId(userId);
                         userShopBehavior.setShopId(shopId);
+                        userShopBehavior.setChannelId(channelId);
                         userShopBehavior.setProdId(prodId);
                         userShopBehavior.setCreateTime(new Date());
                         userShopBehaviorService.save(userShopBehavior);
                     } else {
-                        List<UserShopBehavior> userShopBehaviors = userShopBehaviorService.findByUserId(userId, 1);
+                        List<UserShopBehavior> userShopBehaviors = userShopBehaviorService.findByUserId(userId, 1, shopId,channelId);
                         if (userShopBehaviors != null && !userShopBehaviors.isEmpty()) {
                             userShopBehavior = userShopBehaviors.get(0);
                         }
                         if (userShopBehavior != null) {
                             userShopBehavior.setProdId(prodId);
                             userShopBehavior.setShopId(shopId);
+                            userShopBehavior.setChannelId(channelId);
                             userShopBehavior.setCreateTime(new Date());
                             userShopBehaviorService.updateById(userShopBehavior);
                         }
@@ -125,12 +130,12 @@ public class ProdController {
             }
         }
 
-        Product product = prodService.getProductByProdId(prodId, platform, shopId);
+        Product product = prodService.getProductByProdId(prodId, channelId, shopId);
         if (product == null || product.getStatus() != 1) {
             throw new GlobalException("商品已下线");
         }
 
-        List<Sku> skuList = skuService.listByProdId(prodId, platform, shopId);
+        List<Sku> skuList = skuService.listByProdId(prodId, channelId, shopId);
         if (ObjectUtils.isNotEmpty(skuList)) {
             // 启用的sku列表
             List<Sku> useSkuList = skuList.stream().sorted(Comparator.comparing(
@@ -211,13 +216,13 @@ public class ProdController {
 
     @PostMapping("/listProdByCategoryIdAndShopId")
     @ApiOperation(value = "根据分类ID、商户ID查询归属的所有商品")
-    public ResponseEntity<IPage<Product>> listProdByCategoryIdAndShopId(@RequestBody ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO) {
+    public ResponseEntity<IPage<CategoryProductParam>> listProdByCategoryIdAndShopId(@RequestBody ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO) {
         return ResponseEntity.ok(prodService.listProdByCategoryIdAndShopId(prodByCategoryIdAndShopIdDTO));
     }
 
     @GetMapping("/prodRecommended")
     @ApiOperation(value = "为你推荐", notes = "为你推荐")
-    public ResponseEntity<IPage<SearchProdDto>> getProdRecommended(PageParam<SearchProdDto> page) {
+    public ResponseEntity<IPage<SearchProdDto>> getProdRecommended(PageParam<SearchProdDto> page,@RequestParam("shopId") Long shopId,@RequestParam("channelId") Long channelId) {
         IPage<SearchProdDto>   searchProdDtos = page;
         List<ProductDto> productDtos = new ArrayList<>();
         YamiUser user = null;
@@ -230,9 +235,12 @@ public class ProdController {
         if (user != null) {
             String userId = user.getUserId();
             if (StringUtils.isNotEmpty(userId)) {
-                List<UserShopBehavior> byUserId = userShopBehaviorService.findByUserId(userId, 5);
+                if (channelId == null){
+                    channelId = 3L;
+                }
+                List<UserShopBehavior> byUserId = userShopBehaviorService.findByUserId(userId, 5,shopId,channelId);
                 for (UserShopBehavior userShopBehavior : byUserId) {
-                    ChannelProd channelProd = userShopBehaviorService.findByProdId(userShopBehavior.getProdId(), userShopBehavior.getShopId());
+                    ChannelProd channelProd = userShopBehaviorService.findByProdId(userShopBehavior.getProdId(), userShopBehavior.getShopId(),channelId);
                     if (channelProd != null) {
                         BigDecimal channelProdPrice = channelProd.getChannelProdPrice();
                         if (channelProdPrice != null) {
@@ -240,7 +248,7 @@ public class ProdController {
                                     .setScale(2, RoundingMode.HALF_UP);
                             BigDecimal decreased = channelProdPrice.multiply(new BigDecimal("0.90"))
                                     .setScale(2, RoundingMode.HALF_UP);
-                            List<ProductDto> productDtoList = userShopBehaviorService.findByProdIdAndShopIdAndPrice(userShopBehavior.getProdId(), userShopBehavior.getShopId(), increased, decreased);
+                            List<ProductDto> productDtoList = userShopBehaviorService.findByProdIdAndShopIdAndPrice(userShopBehavior.getProdId(), userShopBehavior.getShopId(),channelId, increased, decreased);
                             if (productDtoList != null && !productDtoList.isEmpty()) {
                                 productDtos.addAll(productDtoList);
                             }
@@ -250,7 +258,7 @@ public class ProdController {
                 }
             }
             if (!productDtos.isEmpty()){
-                searchProdDtos =   userShopBehaviorService.findByProdAndShop(page,productDtos);
+                searchProdDtos =   userShopBehaviorService.findByProdAndShop(page,productDtos,userId);
             }
         }
 
@@ -263,7 +271,7 @@ public class ProdController {
     @ApiOperation(value = "相似商品", notes = "传入商品id")
     public R<IPage<SimilarProdListVo>> similarProdList(PageParam<Product> page, Long prodId, Long shopId, Long channelId,String userId) {
         if (channelId == null){
-            channelId = 1L;
+            channelId = 3L;
         }
         return R.SUCCESS(prodService.similarProdList(page, prodId , shopId, channelId, userId));
     }

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

@@ -81,7 +81,7 @@ public class SearchController {
 
     @GetMapping("/searchProdPage")
     @ApiOperation(value = "搜索商品(首页商品列表)")
-    public ResponseEntity<IPage<SearchProdDto>> searchProdPage(PageParam page, SearchParam searchParam) {
+    public ResponseEntity<IPage<SearchProdDto>> searchProdPage(PageParam<SearchProdDto> page, SearchParam searchParam) {
         searchParam.setProdType(0);
         IPage<SearchProdDto> searchProdDtoPageByProdName = productService.getSearchProdDtoPageByProdName(page, searchParam);
         return ResponseEntity.ok(searchProdDtoPageByProdName);

+ 36 - 39
yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopCartController.java

@@ -53,34 +53,33 @@ public class ShopCartController {
 
     private UserCollectionService userCollectionService;
 
-    /**
-     * 获取用户购物车信息
-     *
-     * @param shopCartParams 购物车参数对象列表
-     * @return
-     */
-    @PostMapping("/info")
-    @ApiOperation(value = "获取用户购物车信息", notes = "获取用户购物车信息,参数为用户选中的活动项数组")
-    public ResponseEntity<List<ShopCartDto>> info(@RequestBody List<ShopCartParam> shopCartParams) {
-        String userId = SecurityUtils.getUser().getUserId();
-//        String userId = "5e31932043984353beb4c1a2622f5182";
-
-        // 更新购物车信息,
-        if (CollectionUtil.isNotEmpty(shopCartParams)) {
-            basketService.updateBasketByShopCartParam(userId, shopCartParams);
-        }
-
-        // 拿到购物车的所有item
-        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId);
-        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));
-
-    }
+//    /**
+//     * 获取用户购物车信息
+//     *
+//     * @param shopCartParams 购物车参数对象列表
+//     * @return
+//     */
+//    @PostMapping("/info")
+//    @ApiOperation(value = "获取用户购物车信息", notes = "获取用户购物车信息,参数为用户选中的活动项数组")
+//    public ResponseEntity<List<ShopCartDto>> info(@RequestParam("channelId") Long channelId,@RequestBody List<ShopCartParam> shopCartParams) {
+//        String userId = SecurityUtils.getUser().getUserId();
+//
+//        // 更新购物车信息,
+//        if (CollectionUtil.isNotEmpty(shopCartParams)) {
+//            basketService.updateBasketByShopCartParam(userId, shopCartParams);
+//        }
+//
+//        // 拿到购物车的所有item
+//        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, channelId);
+//        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));
+//
+//    }
 
     /**
      * 获取用户购物车信息
@@ -88,9 +87,9 @@ public class ShopCartController {
      * @param shopCartParams 购物车参数对象列表
      * @return
      */
-    @PostMapping("/info/{platform}")
+    @PostMapping("/info/{channelId}")
     @ApiOperation(value = "获取用户购物车信息", notes = "获取用户购物车信息,参数为用户选中的活动项数组")
-    public ResponseEntity<List<ShopCartDto>> infoByPlatform(@RequestBody List<ShopCartParam> shopCartParams, @PathVariable("platform") Long platform) {
+    public ResponseEntity<List<ShopCartDto>> infoByChannelId(@RequestBody List<ShopCartParam> shopCartParams, @PathVariable("channelId") Long channelId) {
         String userId = SecurityUtils.getUser().getUserId();
 //        String userId = "5e31932043984353beb4c1a2622f5182";
 
@@ -100,7 +99,7 @@ public class ShopCartController {
         }
 
         // 拿到购物车的所有item
-        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, platform);
+        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, channelId);
         List<Long> prodIds = new ArrayList<>();
         for (ShopCartItemDto shopCartItemDto : shopCartItems) {
             prodIds.add(shopCartItemDto.getProdId());
@@ -137,9 +136,9 @@ public class ShopCartController {
         }
 
         String userId = SecurityUtils.getUser().getUserId();
-        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, param.getPlatform());
+        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, param.getChannelId());
         Product prodParam = productService.getProductByProdId(param.getProdId());
-        Sku skuParam = skuService.getSkuBySkuId(param.getSkuId(), param.getPlatform(), param.getShopId());
+        Sku skuParam = skuService.getSkuBySkuId(param.getSkuId(), param.getChannelId(), param.getShopId());
 
         // 当商品状态不正常时,不能添加到购物车
         if (prodParam.getStatus() != 1 || skuParam.getStatus() != 1) {
@@ -183,9 +182,9 @@ public class ShopCartController {
 
     @GetMapping("/prodCount")
     @ApiOperation(value = "获取购物车商品数量", notes = "获取所有购物车商品数量")
-    public ResponseEntity<Integer> prodCount(@RequestParam("platform") Long platform) {
+    public ResponseEntity<Integer> prodCount(@RequestParam("channelId") Long channelId) {
         String userId = SecurityUtils.getUser().getUserId();
-        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, platform);
+        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId, channelId);
         if (CollectionUtil.isEmpty(shopCartItems)) {
             return ResponseEntity.ok(0);
         }
@@ -229,12 +228,10 @@ public class ShopCartController {
 
     @PostMapping("/totalPay")
     @ApiOperation(value = "获取选中购物项总计、选中的商品数量", notes = "获取选中购物项总计、选中的商品数量,参数为购物车id数组")
-    public ResponseEntity<ShopCartAmountDto> getTotalPay(@RequestBody List<Long> basketIds) {
+    public ResponseEntity<ShopCartAmountDto> getTotalPay(@RequestParam("channelId") Long channelId, @RequestBody List<Long> basketIds) {
 
         // 拿到购物车的所有item
-        //List<ShopCartItemDto> dbShopCartItems = basketService.getShopCartItems(SecurityUtils.getUser().getUserId());
-        List<ShopCartItemDto> dbShopCartItems = basketService.getShopCartItems(SecurityUtils.getUser().getUserId());
-
+        List<ShopCartItemDto> dbShopCartItems = basketService.getShopCartItems(SecurityUtils.getUser().getUserId(), channelId);
         List<ShopCartItemDto> chooseShopCartItems = dbShopCartItems
                 .stream()
                 .filter(shopCartItemDto -> {

+ 5 - 5
yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopDetailController.java

@@ -88,21 +88,21 @@ public class ShopDetailController {
     @GetMapping("/neighborShop")
     @ApiOperation("根据经纬度获取最近店铺")
     public ResponseEntity<ShopHeadInfoDto> neighborShop(@RequestParam("lat") String lat,
-                                                        @RequestParam("lon") String lon, @RequestParam("platform") Integer platform) {
-        return shopDetailService.neighborShop(lat, lon, platform);
+                                                        @RequestParam("lon") String lon, @RequestParam("channelId") Long channelId) {
+        return shopDetailService.neighborShop(lat, lon, channelId);
     }
 
     @GetMapping("/addrShop")
     @ApiOperation("根据地址获取最近店铺")
-    public ResponseEntity<List<ShopHeadInfoDto>> neighborShopByAddr(@RequestParam("platform") Integer platform,
+    public ResponseEntity<List<ShopHeadInfoDto>> neighborShopByAddr(@RequestParam("channelId") Long channelId,
                                                                     @RequestParam(value = "addrId", required = false) Long addrId,
                                                                     @RequestParam(value = "lat", required = false) String lat,
                                                                     @RequestParam(value = "lon", required = false) String lon) {
         if (null == addrId) {
             if (null == lat || null == lon) throw new GlobalException("当地址id为空时,经纬度不能为空");
-            return shopDetailService.neighborShopList(lat, lon, platform);
+            return shopDetailService.neighborShopList(lat, lon, channelId);
         }
-        return shopDetailService.neighborShopByAddr(addrId, platform);
+        return shopDetailService.neighborShopByAddr(addrId, channelId);
     }
 
 }

+ 151 - 10
yami-shop-api/src/main/java/com/yami/shop/api/controller/UserController.java

@@ -1,19 +1,10 @@
-/*
- * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
- *
- * https://www.gz-yami.com/
- *
- * 未经允许,不可做商业用途!
- *
- * 版权所有,侵权必究!
- */
 
 package com.yami.shop.api.controller;
 
 
 import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import com.yami.shop.bean.app.dto.UserCenterInfoDto;
 import com.yami.shop.bean.app.dto.UserDto;
 import com.yami.shop.bean.app.param.UserInfoParam;
@@ -21,21 +12,38 @@ import com.yami.shop.bean.model.*;
 import com.yami.shop.bean.param.UserParam;
 import com.yami.shop.config.WxConfig;
 import com.yami.shop.dao.ChannelMapper;
+import com.yami.shop.security.api.model.YamiUser;
+import com.yami.shop.security.api.service.YamiUserDetailsService;
 import com.yami.shop.security.api.util.SecurityUtils;
+import com.yami.shop.security.comment.enums.App;
+import com.yami.shop.security.comment.exception.WxErrorException;
+import com.yami.shop.security.comment.model.AppConnect;
+import com.yami.shop.security.comment.service.AppConnectService;
 import com.yami.shop.service.*;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
 import ma.glasnost.orika.MapperFacade;
 import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.oauth2.common.OAuth2AccessToken;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.security.oauth2.provider.OAuth2Request;
+import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+
 /**
  * 用户信息
  *
  * @author LGH
  */
+@Slf4j
 @RestController
 @RequestMapping("/p/user")
 @Api(tags = "用户接口")
@@ -57,6 +65,14 @@ public class UserController {
     private final ChannelMapper channelMapper;
 
 
+    private final AppConnectService appConnectService;
+
+    private final YamiUserDetailsService yamiUserDetailsService;
+
+    @Lazy
+    private final AuthorizationServerTokenServices yamiTokenServices;
+
+
     /**
      * 查看用户接口
      */
@@ -73,6 +89,7 @@ public class UserController {
         if (userDto.getUserMobile() != null) {
             userDto.setMobile(userDto.getUserMobile().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
         }
+        userDto.setUserId(userId);
 
         return ResponseEntity.ok(userDto);
     }
@@ -134,4 +151,128 @@ public class UserController {
         return ResponseEntity.ok(userParam);
     }
 
+    /**
+     * 小程序登录接口 - 使用实体类方式
+     */
+    @GetMapping("/miniAppLogin")
+    @ApiOperation(value = "小程序登录", notes = "通过微信小程序code登录,返回token信息")
+    public ResponseEntity<MiniAppLoginResponse> miniAppLogin(@RequestParam(value = "code") String code) {
+        try {
+            // 通过微信code获取session信息
+            WxMaJscode2SessionResult session = wxConfig.getWxMaService().getUserService().getSessionInfo(code);
+
+            // 查找或创建AppConnect
+            AppConnect appConnect = appConnectService.getByBizUserId(session.getOpenid(), App.MINI.value());
+            if (appConnect == null) {
+                appConnect = new AppConnect();
+                appConnect.setAppId(App.MINI.value());
+                appConnect.setBizUserId(session.getOpenid());
+                appConnect.setBizUnionid(session.getUnionid());
+                appConnectService.save(appConnect);
+
+            }
+
+            // 加载用户信息
+            YamiUser yamiUser = yamiUserDetailsService.loadUserByAppConnect(appConnect);
+            yamiUser.setSessionKey(session.getSessionKey());
+
+            // 生成OAuth2 Token
+            String clientId = String.valueOf(App.MINI.value());
+            OAuth2Request oAuth2Request = new OAuth2Request(null, clientId, null, true, null,
+                    null, null, null, null);
+
+            // 手动设置用户详情
+            com.yami.shop.security.comment.token.AuthenticationToken authToken =
+                    new com.yami.shop.security.comment.token.AuthenticationToken();
+            authToken.setDetails(yamiUser);
+            authToken.setPrincipal(yamiUser.getUserId());
+            authToken.setAppType(App.MINI.value());
+            authToken.setAuthenticated(true);
+
+            OAuth2Authentication oAuth2Authentication = new OAuth2Authentication(oAuth2Request, authToken);
+
+            // 生成token
+            OAuth2AccessToken oAuth2AccessToken = yamiTokenServices.createAccessToken(oAuth2Authentication);
+
+            // 构造返回对象
+            MiniAppLoginResponse response = new MiniAppLoginResponse();
+            response.setAccess_token(oAuth2AccessToken.getValue());
+            response.setToken_type(oAuth2AccessToken.getTokenType());
+            response.setRefresh_token(oAuth2AccessToken.getRefreshToken() != null ?
+                    oAuth2AccessToken.getRefreshToken().getValue() : null);
+            response.setExpires_in(oAuth2AccessToken.getExpiresIn());
+            response.setScope(oAuth2AccessToken.getScope() != null ?
+                    String.join(",", oAuth2AccessToken.getScope()) : null);
+
+            // 设置用户信息(直接从yamiUser获取,确保有值)
+            response.setUserId(yamiUser.getUserId());
+            response.setNickName(yamiUser.getName());
+            response.setPic(yamiUser.getPic());
+            response.setEnabled(yamiUser.isEnabled());
+
+            // 如果token中也有额外信息,作为备用
+            if (oAuth2AccessToken.getAdditionalInformation() != null && !oAuth2AccessToken.getAdditionalInformation().isEmpty()) {
+                // Token增强器添加的信息作为备用
+                if (response.getUserId() == null) {
+                    response.setUserId((String) oAuth2AccessToken.getAdditionalInformation().get("userId"));
+                }
+//                if (response.getUserId() == null) {
+//                    response.setUserId(appConnect.getUserId());
+//                }
+                if (response.getNickName() == null) {
+                    response.setNickName((String) oAuth2AccessToken.getAdditionalInformation().get("nickName"));
+                }
+                if (response.getNickName() == null) {
+                    response.setNickName(appConnect.getNickName());
+                }
+
+                if (response.getPic() == null) {
+                    response.setPic((String) oAuth2AccessToken.getAdditionalInformation().get("pic"));
+                }
+                if (response.getEnabled() == null) {
+                    response.setEnabled((Boolean) oAuth2AccessToken.getAdditionalInformation().get("enabled"));
+                }
+            }
+            log.info("小程序登录成功,返回response:{}", response);
+            return ResponseEntity.ok(response);
+
+        } catch (me.chanjar.weixin.common.error.WxErrorException e) {
+            throw new WxErrorException("微信登录失败: " + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 小程序登录响应实体
+     */
+    @Data
+    public static class MiniAppLoginResponse {
+        @ApiModelProperty(value = "访问令牌")
+        private String access_token;
+
+        @ApiModelProperty(value = "令牌类型")
+        private String token_type;
+
+        @ApiModelProperty(value = "刷新令牌")
+        private String refresh_token;
+
+        @ApiModelProperty(value = "过期时间(秒)")
+        private Integer expires_in;
+
+        @ApiModelProperty(value = "授权范围")
+        private String scope;
+
+        @ApiModelProperty(value = "用户ID")
+        private String userId;
+
+        @ApiModelProperty(value = "用户昵称")
+        private String nickName;
+
+        @ApiModelProperty(value = "用户头像")
+        private String pic;
+
+        @ApiModelProperty(value = "是否启用")
+        private Boolean enabled;
+    }
+
 }

+ 2 - 7
yami-shop-api/src/main/java/com/yami/shop/api/controller/UserRegisterController.java

@@ -177,7 +177,7 @@ public class UserRegisterController {
 
         Date now = new Date();
         if (user == null && StrUtil.isNotBlank(mobile)) {
-            user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUserMobile, mobile).eq(User::getPlatform, userRegisterParam.getPlatform()));
+            user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUserMobile, mobile).eq(User::getChannelId, userRegisterParam.getChannelId()));
         }
 
         // 新建用户
@@ -196,7 +196,7 @@ public class UserRegisterController {
             user.setUserRegtime(now);
             user.setUserRegip(IPHelper.getIpAddr());
             user.setStatus(1);
-			user.setPlatform(userRegisterParam.getPlatform());
+			user.setChannelId(userRegisterParam.getChannelId());
             user.setPic(userRegisterParam.getImg());
             user.setUserMobile(mobile);
             user.setUserName(userRegisterParam.getUserName());
@@ -219,7 +219,6 @@ public class UserRegisterController {
         authenticationToken.setPrincipal(userDetails.getUsername());
         authenticationToken.setDetails(userDetails);
         authenticationToken.setAuthenticated(true);
-//        authenticationToken.setPlatform(user.getPlatform());
         loginAuthSuccessHandler.onAuthenticationSuccess(request, response, authenticationToken);
 
         return ResponseEntity.ok().build();
@@ -261,8 +260,4 @@ public class UserRegisterController {
         userService.updateById(user);
         return ResponseEntity.ok().build();
     }
-
-    public static void main(String[] args) {
-
-    }
 }

+ 14 - 40
yami-shop-api/src/main/java/com/yami/shop/api/listener/ConfirmOrderListener.java

@@ -65,7 +65,6 @@ public class ConfirmOrderListener {
         ShopCartOrderDto shopCartOrderDto = event.getShopCartOrderDto();
         OrderParam orderParam = event.getOrderParam();
         String userId = SecurityUtils.getUser().getUserId();
-        //String userId = "36726893042d492aba446439c5f00584";
         UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
         double total = 0.0;
         int totalCount = 0;
@@ -93,52 +92,27 @@ public class ConfirmOrderListener {
             shopCartOrderDto.setTotalWeight(Arith.add(shopCartOrderDto.getTotalWeight(), Arith.mul(shopCartItem.getWeight(), shopCartItem.getProdCount())));
         }
         //默认走即使配送
-
-//        if (userAddr != null && !Objects.equals(orderParam.getDvyType(), DvyType.FETCH.value())) {
         if (userAddr != null) {
             // 根据配送范围计算配送费,没超出就
-            TzTransportDto transport2 = transportManagerService.calculateTransfeeSecondTransport2(shopCartItems.get(0).getShopId(), userAddr, orderParam.getPlatform());
+            TzTransportDto transport2 = transportManagerService.calculateTransfeeSecondTransport2(shopCartItems.get(0).getShopId(), userAddr, orderParam.getChannelId());
             if (ObjectUtils.isEmpty(transport2)) throw new GlobalException("该渠道下的门店尚未配置可用运费模板");
-            switch (orderParam.getPlatform().byteValue()) {
-                case 1://企业用户,计算分单规则
-                    if (transport2.getTargetDistance() > transport2.getDistance()) {
-                        //超出配送范围使用快递
-                        orderParam.setDvyType(DvyType.DELIVERY.value());
-                    } else {
-                        //即时配送
-                        orderParam.setDvyType(DvyType.NOT_DELIVERY.value());
-                    }
-                    //费用按重量计算,数据是g,现在要按kg计算,20是kg单位
-                    Double totalWeight = shopCartOrderDto.getTotalWeight();
-                    Double deliveryWeight = Arith.mul(transport2.getWeight(), 1000);
-                    transfee = calcDeliveryFee(totalWeight, deliveryWeight, new BigDecimal(transport2.getFreightFee().doubleValue())).doubleValue();
-                    break;
-                case 2: //夫妻店,B端只走物流
-                    orderParam.setDvyType(DvyType.DELIVERY.value());
-                    //TODO 费用待定
-                    break;
-                case 3: // 市民请集合,C端。只走配送
-                    orderParam.setDvyType(DvyType.NOT_DELIVERY.value());
-                    //TODO 费用待定
-                    break;
+            //企业用户,计算分单规则
+            if (transport2.getTargetDistance() > transport2.getDistance()) {
+                //超出配送范围使用快递
+                orderParam.setDvyType(1);
+            } else {
+                //即时配送
+                orderParam.setDvyType(3);
             }
+            //费用按重量计算,数据是g,现在要按kg计算,20是kg单位
+            Double totalWeight = shopCartOrderDto.getTotalWeight();
+            Double deliveryWeight = Arith.mul(transport2.getWeight(), 1000);
+            transfee = calcDeliveryFee(totalWeight, deliveryWeight, new BigDecimal(transport2.getFreightFee().doubleValue())).doubleValue();
+
         }
 
 
         Double freeTransfee = 0.0;
-//        List<FreightFeeReduction> feeReductions = freightFeeReductionService.list(new LambdaQueryWrapper<FreightFeeReduction>()
-//                        .eq(FreightFeeReduction::getStatus, 1)
-//                        .ge(FreightFeeReduction::getEndTime, LocalDateTime.now())
-////                .orderByAsc(FreightFeeReduction::getEndTime)
-//        );
-//        if (!feeReductions.isEmpty()) {
-//            for (FreightFeeReduction feeReduction : feeReductions) {
-//                freeTransfee += Arith.add(feeReduction.getMoney().doubleValue(), freeTransfee);
-//            }
-//        }
-//        double sub = Arith.sub(transfee, freeTransfee);
-//        transfee = Math.signum(sub) < 0 ? 0 : sub;
-
         shopCartOrderDto.setTotal(total);
         shopCartOrderDto.setTotalCount(totalCount);
         shopCartOrderDto.setActualTotal(Arith.add(total, transfee));
@@ -155,6 +129,6 @@ public class ConfirmOrderListener {
     }
 
     public static void main(String[] args) {
-        System.out.println(calcDeliveryFee(80000.0,20000.0 , BigDecimal.valueOf(5.5)));
+        System.out.println(calcDeliveryFee(80000.0, 20000.0, BigDecimal.valueOf(5.5)));
     }
 }

+ 9 - 16
yami-shop-api/src/main/java/com/yami/shop/api/listener/SubmitOrderListener.java

@@ -53,7 +53,6 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class SubmitOrderListener {
 
-
     private final MapperFacade mapperFacade;
 
     private final UserAddrOrderService userAddrOrderService;
@@ -65,13 +64,6 @@ public class SubmitOrderListener {
     private final Snowflake snowflake;
 
     private final PointsRecordMapper pointsRecordMapper;
-    private final OrderItemMapper orderItemMapper;
-
-    private final SkuMapper skuMapper;
-
-    private final ProductMapper productMapper;
-
-    private final OrderMapper orderMapper;
 
     private final OrderSettlementMapper orderSettlementMapper;
 
@@ -109,7 +101,7 @@ public class SubmitOrderListener {
         //所有当前用户可用的积分记录
         List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
                         .eq(PointsRecord::getUserId, userId)
-                        .eq(PointsRecord::getChannelId, mergerOrder.getPlatform())
+                        .eq(PointsRecord::getChannelId, mergerOrder.getChannelId())
                         .in(PointsRecord::getPointsType, Arrays.asList(1, 3))
                         .in(PointsRecord::getPointsAudit, Arrays.asList(1, 2)).and(wrapper -> wrapper
                                 .gt(PointsRecord::getExpiryDate, LocalDateTime.now())
@@ -131,9 +123,9 @@ public class SubmitOrderListener {
             // 每个店铺生成一个订单
             for (ShopCartOrderDto shopCartOrderDto : shopCartOrders) {
                 //兑换人民币是分,必须要实时统计计算
-                Long point = pointsRecordMapper.statisticsPoint(userId, mergerOrder.getPlatform());
+                Long point = pointsRecordMapper.statisticsPoint(userId, mergerOrder.getChannelId());
                 // 使用雪花算法生成的订单号
-                String orderNumber = String.valueOf(snowflake.nextId());
+                String orderNumber = "FD" + snowflake.nextId();
                 shopCartOrderDto.setOrderNumber(orderNumber);
 
                 Long shopId = shopCartOrderDto.getShopId();
@@ -145,7 +137,7 @@ public class SubmitOrderListener {
                 //这个运费是已经算过的了
                 double actualTotal = shopCartOrderDto.getActualTotal();
                 //企业用户才进这个判断,并且该用户的积分必须大于0
-                if (1 == mergerOrder.getPlatform() && null != point && point > 0) {
+                if (null != point && point > 0) {
                     order.setOrderType(OrderType.SCORE.value());
                     // 计算商品金额和积分
                     Double mul = Arith.mul(actualTotal, 100);
@@ -178,7 +170,7 @@ public class SubmitOrderListener {
                 for (ShopCartItemDiscountDto shopCartItemDiscount : shopCartItemDiscounts) {
                     List<ShopCartItemDto> shopCartItems = shopCartItemDiscount.getShopCartItems();
                     for (ShopCartItemDto shopCartItem : shopCartItems) {
-                        Sku sku = checkAndGetSku(shopCartItem.getSkuId(), mergerOrder.getPlatform(), shopCartItem, skuStocksMap);
+                        Sku sku = checkAndGetSku(shopCartItem.getSkuId(), mergerOrder.getChannelId(), shopCartItem, skuStocksMap);
                         Product product = checkAndGetProd(shopCartItem.getProdId(), shopCartItem, prodStocksMap,shopId);
                         OrderItem orderItem = new OrderItem();
                         orderItem.setShopId(shopId);
@@ -199,7 +191,7 @@ public class SubmitOrderListener {
                         orderItem.setPlatformShareReduce(shopCartItem.getPlatformShareReduce());
                         Double actualItem = shopCartItem.getActualTotal();
                         //后台充值的积分
-                        if (1 == mergerOrder.getPlatform() && null != point && point > 0) {
+                        if (null != point && point > 0) {
                             Double useActualItem = actualItem;
                             if (!isUseTransfee) {//每个订单增加运费,都只扣一次
                                 Double transfee = shopCartOrderDto.getTransfee();
@@ -207,7 +199,7 @@ public class SubmitOrderListener {
                                 isUseTransfee = Boolean.TRUE;
                             }
                             //把钱换算成积分
-                            actualItem = this.doGetOrderItemPoints(Arith.mul(useActualItem, 100), expiryQueue, orderNumber, userId, mergerOrder.getPlatform());
+                            actualItem = this.doGetOrderItemPoints(Arith.mul(useActualItem, 100), expiryQueue, orderNumber, userId, mergerOrder.getChannelId());
                             //把积分换算成钱
                             if (actualItem > 0) {
                                 actualItem = Arith.div(actualItem, 100);
@@ -223,6 +215,7 @@ public class SubmitOrderListener {
                         orderProdName.append(orderItem.getProdName()).append(",");
                         //推广员卡号
                         orderItem.setDistributionCardNo(shopCartItem.getDistributionCardNo());
+                        orderItem.setWeight( shopCartItem.getWeight());
                         //使用积分价格
                         orderItem.setUseScore((int) Arith.mul(Arith.sub(shopCartItem.getActualTotal(), actualItem), 100));
                         orderItems.add(orderItem);
@@ -250,7 +243,7 @@ public class SubmitOrderListener {
                 // 实际总额
                 order.setActualTotal(actualTotal);
                 order.setNextPay(sumItemA > 0);//true是需要微信支付
-                order.setChannelId(Long.valueOf(mergerOrder.getPlatform()));
+                order.setChannelId(Long.valueOf(mergerOrder.getChannelId()));
                 order.setUpdateTime(now);
                 order.setCreateTime(now);
                 order.setDeleteStatus(0);

+ 1 - 1
yami-shop-api/src/main/resources/application-dev.yml

@@ -3,7 +3,7 @@ server:
 spring:
   datasource:
     url: jdbc:mysql://47.109.84.152:3306/xinshanbao?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
-    username: root
+    username: user
     password: Lxy$?9032
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.zaxxer.hikari.HikariDataSource

+ 3 - 0
yami-shop-api/src/main/resources/application-prod.yml

@@ -25,3 +25,6 @@ hb:
   appId: 71ad2626c0124ca1a5c07cf5ca818c43
   secret: f655f69f962f427db1f0436fd34cd998
 
+smqjh:
+  pms-url: https://smqjh.api.zswlgz.com/smqjh-pms/api/v1/sync
+  omsBaseUrl: https://smqjh.api.zswlgz.com/smqjh-oms

+ 5 - 4
yami-shop-api/src/main/resources/application.yml

@@ -2,8 +2,8 @@
 spring:
   # 环境 dev|prod|docker
   profiles:
-#    active: dev
-    active: prod
+    active: dev
+#    active: prod
   #文件上传设置
   servlet:
     multipart:
@@ -56,16 +56,17 @@ management:
     add-application-context-header: false
 server:
   tomcat:
-    basedir: /temp
+    basedir:   /temp
 # 用于雪花算法生成id
 application:
+
   datacenterId: 1
   workerId: 1
 
 #服务商
 services:
   #服务商AppId
-  spAppId: wx43b5b906cc30ed0b
+  spAppId: wxa5fe8d860623737d
   #服务商商户号
   spMchId: 1725845681
   #商户AppId

+ 2 - 2
yami-shop-api/src/main/resources/redisson/redisson-dev.yml

@@ -1,8 +1,8 @@
 # 单节点设置
 singleServerConfig:
-  address: redis://47.109.23.229:6379
+  address: redis://47.109.84.152:6379
   database: 5
-  password: zswladmin
+  password:
   idleConnectionTimeout: 10000
   pingTimeout: 1000
   connectTimeout: 10000

+ 6 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopCartItemDto.java

@@ -65,5 +65,11 @@ public class ShopCartItemDto extends ProductItemDto implements Serializable {
     @ApiModelProperty(value = "逻辑删除标记 0 正常 1 已被删除")
     private Integer isDelete;
 
+    /**
+     * 商品重量
+     */
+    @ApiModelProperty(value = "商品重量")
+    private Double weight;
+
 
 }

+ 1 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopCartOrderMergerDto.java

@@ -80,7 +80,7 @@ public class ShopCartOrderMergerDto implements Serializable {
     @ApiModelProperty(value = "配送类型 1:快递 2:自提 3:无需快递")
     private Integer dvyType;
 
-    private Long platform;
+    private Long channelId;
 
     private Double weight;
 

+ 7 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopHeadInfoDto.java

@@ -10,6 +10,7 @@
 
 package com.yami.shop.bean.app.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.yami.shop.common.serializer.json.ImgJsonSerializer;
 import io.swagger.annotations.ApiModelProperty;
@@ -64,4 +65,10 @@ public class ShopHeadInfoDto {
     @ApiModelProperty(value = "店铺纬度")
     private String lon;
 
+    /**
+     * 门店是否存在商品
+     */
+    @ApiModelProperty(value = "门店是否存在商品")
+    private Boolean hasProduct;
+
 }

+ 2 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/UserDto.java

@@ -28,6 +28,8 @@ public class UserDto {
 
     @ApiModelProperty(value = "用户状态:0禁用 1正常", required = true)
     private Integer status;
+    @ApiModelProperty(value = "用户ID", required = true)
+    private String userId;
 
     @ApiModelProperty(value = "用户昵称")
     private String nickName;

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

@@ -44,5 +44,5 @@ public class ChangeShopCartParam {
     private String distributionCardNo;
 
     @ApiModelProperty(value = "渠道id")
-    private Long platform;
+    private Long channelId;
 }

+ 1 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/OrderItemParam.java

@@ -41,5 +41,5 @@ public class OrderItemParam {
 	@ApiModelProperty(value = "推广员使用的推销卡号")
 	private String distributionCardNo;
 
-	private Long platform;
+	private Long channelId;
 }

+ 1 - 6
yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/OrderParam.java

@@ -52,16 +52,11 @@ public class OrderParam {
 	private Integer userUseScore;
 
 	@ApiModelProperty(value = "渠道标识")
-	private Long platform;
+	private Long channelId;
 
     @ApiModelProperty(value = "门店ID")
     private Long shopId;
 
-//	@ApiModelProperty(value = "每次订单提交时的uuid")
-//	private String uuid;
-//	@ApiModelProperty(value = "订单入口 SHOP_CART购物车,BUY_NOW立即购买")
-//	private OrderEntry orderEntry;
-
 
 
 }

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

@@ -62,7 +62,7 @@ public class SearchParam {
     @ApiModelProperty("距离")
     private String distance;
 
-    @ApiModelProperty("平台")
-    private Integer platform;
+//    @ApiModelProperty("平台")
+//    private Integer platform;
 
 }

+ 1 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/SubmitOrderParam.java

@@ -24,7 +24,7 @@ public class SubmitOrderParam {
     @ApiModelProperty(value = "每次订单提交时的uuid")
     private String uuid;
     @ApiModelProperty(value = "渠道id")
-    private Long platform;
+    private Long channelId;
     @ApiModelProperty(value = "门店id")
     private Long shopId;
 

+ 1 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/UserRegisterParam.java

@@ -59,6 +59,6 @@ public class UserRegisterParam {
     private Integer registerOrBind;
 
     @ApiModelProperty(value = "平台 1即使零售企业用户 2夫妻店 3 市民请集合C端 ")
-    private Integer platform;
+    private Long channelId;
 
 }

+ 3 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/SearchProdDto.java

@@ -79,6 +79,9 @@ public class SearchProdDto {
     @ApiModelProperty("热卖榜标签")
     private String hotLabel;
 
+    @ApiModelProperty("购物车数量")
+    private Long basketTotal;
+
     @ApiModelProperty(value = "sku列表")
     private List<SkuDto> skuList;
 

+ 50 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/enums/ChannelType.java

@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.enums;
+
+
+/**
+ * 优惠券类型 1:代金券 2:折扣券 3:兑换券
+ * @author LGH
+ */
+public enum ChannelType {
+
+    /**
+     * 本渠道数据
+     */
+    CURRENT_CHANNEL(0),
+
+    /**
+     * 市民请集合
+     */
+    SMQJH(1),
+    ;
+
+    private Integer num;
+
+    public Integer value() {
+        return num;
+    }
+
+    ChannelType(Integer num){
+        this.num = num;
+    }
+
+    public static ChannelType instance(Integer value) {
+        ChannelType[] enums = values();
+        for (ChannelType statusEnum : enums) {
+            if (statusEnum.value().equals(value)) {
+                return statusEnum;
+            }
+        }
+        return null;
+    }
+}

+ 0 - 3
yami-shop-bean/src/main/java/com/yami/shop/bean/event/SubmitOrderEvent.java

@@ -10,10 +10,7 @@
 
 package com.yami.shop.bean.event;
 
-import com.yami.shop.bean.app.dto.ShopCartItemDto;
-import com.yami.shop.bean.app.dto.ShopCartOrderDto;
 import com.yami.shop.bean.app.dto.ShopCartOrderMergerDto;
-import com.yami.shop.bean.app.param.OrderParam;
 import com.yami.shop.bean.model.Order;
 import lombok.AllArgsConstructor;
 import lombok.Data;

+ 5 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/model/Basket.java

@@ -22,7 +22,6 @@ public class Basket implements Serializable {
      * 主键
      */
     @TableId
-
     private Long basketId;
 
     /**
@@ -31,6 +30,11 @@ public class Basket implements Serializable {
 
     private Long shopId;
 
+    /**
+     * 渠道 ID
+     */
+    private Long channelId;
+
     /**
      * 产品ID
      */

+ 31 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/model/Channel.java

@@ -10,6 +10,7 @@
 
 package com.yami.shop.bean.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -17,6 +18,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 渠道管理
@@ -37,7 +39,7 @@ public class Channel implements Serializable {
     /**
      * 企业编号
      */
-        private String channelNo;
+    private String channelNo;
     /**
      * 渠道名称
      */
@@ -52,10 +54,38 @@ public class Channel implements Serializable {
      * 企业状态(0-正常,1-停用)
      */
     private Integer status;
+
+    /**
+     * 拆单规则(0-未配置规则,1-默认规则,2-招商规则)
+     */
+    private Integer splitRule;
+    /**
+     * 是否自动拆单(0-手动拆单,1-自动拆单)
+     */
+    private Integer autoSplit;
+
+    /**
+     * 拆单重量(N kg拆单)
+     */
+    private Double splitWeight;
+
     /**
      * 创建日期
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
+    /**
+     * 企业ID列表
+     */
+    @TableField(exist = false)
+    private List<Long> channelIdList;
+
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    @TableField(exist = false)
+    private String userAttrType;
+
 }

+ 85 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/ExportTask.java

@@ -0,0 +1,85 @@
+
+
+package com.yami.shop.bean.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 导出任务实体
+ */
+@Data
+@TableName("tz_export_task")
+public class ExportTask implements Serializable {
+
+
+    private static final long serialVersionUID = 6222259729062826852L;
+    /**
+     * ID
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id",required=true)
+    private String id;
+    /**
+     * 用户编号
+     */
+    private Long userId;
+    /**
+     * 导出类型1-正常订单 2-售后订单
+     */
+    private Integer exportType;
+
+    /**
+     * 导出信息
+     */
+    private String exportMsg;
+    /**
+     * 导出状态 0-进行中,1-已生成文件,2-生成文件失败,3-已下载
+     */
+    private Integer exportStatus;
+    /**
+     * 任务名称
+     */
+    private String taskName;
+    /**
+     * 创建时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+    /**
+     * 文件路径
+     */
+    private String fileUrl;
+
+    /**
+     * 文件报错路径
+     */
+    private String fullPath;
+    /**
+     * 文件名称
+     */
+    private String fileName;
+    /**
+     * 线程编号
+     */
+    private String taskId;
+
+
+}

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

@@ -53,6 +53,10 @@ public class Order implements Serializable {
      * 订购用户ID
      */
     private String userId;
+    /**
+     * 父订单编号
+     */
+    private String parentOrderNumber;
 
     /**
      * 订购流水号
@@ -122,6 +126,46 @@ public class Order implements Serializable {
      */
     private Long addrOrderId;
 
+    /**
+     * 是否为超重订单(0-未超重,1-超重 )
+     */
+    private Integer orderSplitStatus;
+    /**
+     * 子订单数量命名
+     */
+    private Integer orderSplitNumber;
+    /**
+     * 是否自动拆单(0-手动拆单,1-自动拆单)
+     */
+    private Integer autoSplit;
+    /**
+     * 是否需要拆单(0-拆单临时保存,1-不拆单,2-待拆单,3-拆单中,4-已拆单)
+     */
+    private Integer splitStatus;
+    /**
+     * 订单等级(0-父订单,1-子订单)
+     */
+    private Integer orderLevel;
+    /**
+     * 拆单操作人ID
+     */
+    private Long splitUserId;
+
+    private String consigneeName;
+
+    private String consigneeMobile;
+
+    private String consigneeAddress;
+
+    private Double latitude;
+
+    private Double longitude;
+
+    @TableField(exist = false)
+    @ApiModelProperty("拆单操作人名称")
+    private String splitUserName;
+
+
     /**
      * 订单商品总数
      */
@@ -275,6 +319,9 @@ public class Order implements Serializable {
     @TableField(exist = false)
     private Integer payScore;
 
+    /**
+     * 是否需要支付
+     */
     @TableField(exist = false)
     private Boolean nextPay = Boolean.FALSE;
 
@@ -285,6 +332,11 @@ public class Order implements Serializable {
     private Integer goodsTotalCount;
 
 
+    /**
+     * 子订单信息
+     */
+    @TableField(exist = false)
+    private List<Order> subOrders;
 
 
 }

+ 9 - 2
yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderItem.java

@@ -51,13 +51,20 @@ public class OrderItem implements Serializable {
     /**
      * 购物车产品个数
      */
-
     private Integer prodCount;
 
     /**
-     * 产品名称
+     * 商品重量(g)
+     */
+    private Double weight;
+    /**
+     * 已拆单数量
      */
+    private Integer splitCount;
 
+    /**
+     * 产品名称
+     */
     private String prodName;
 
     /**

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

@@ -190,5 +190,11 @@ public class OrderRefund implements Serializable{
     @ApiModelProperty(value = "退款商品详情")
     private List<OrderRefundSku> orderRefundSkuList;
 
+    /**
+     * 渠道类型  0-本渠道 1-市民请集合
+     */
+    @ApiModelProperty(value = "渠道类型  0-本渠道 1-市民请集合")
+    private Integer channelType;
+
 
 }

+ 16 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/PointsRecharge.java

@@ -1,5 +1,6 @@
 package com.yami.shop.bean.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -9,6 +10,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 积分充值实体类
@@ -103,4 +105,18 @@ public class PointsRecharge implements Serializable {
      * 备注
      */
     private String remark;
+
+    /**
+     * 额外字段 用于查询条件
+     * 企业ID列表
+     */
+    @TableField(exist = false)
+    private List<Long> channelIdList;
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    @TableField(exist = false)
+    private String userAttrType;
+
 }

+ 4 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/ProdComm.java

@@ -138,6 +138,10 @@ public class ProdComm implements Serializable{
 
     @TableField(exist = false)
     private String nickName;
+    @TableField(exist = false)
+    private String userMobile;
+    @TableField(exist = false)
+    private String channelName;
 
     @TableField(exist = false)
     private String avatar;

+ 7 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/ShopDetail.java

@@ -10,6 +10,7 @@
 
 package com.yami.shop.bean.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -125,6 +126,7 @@ public class ShopDetail implements Serializable {
     private Long areaId;
 
 
+
     /**
      * 店铺logo(可修改)
      */
@@ -208,4 +210,9 @@ public class ShopDetail implements Serializable {
      */
     private String thirdPartyCode;
 
+    /**
+     * 是否存在商品
+     */
+    @TableField(exist = false)
+    private Boolean hasProduct;
 }

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

@@ -42,7 +42,7 @@ public class SysDictData{
     private String isDefault;
 
     /** 状态(0正常 1停用) */
-    private String status;
+    private Integer status;
 
     /** 搜索值 */
     @JsonIgnore

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

@@ -33,7 +33,7 @@ public class SysDictType{
     private String dictType;
 
     /** 状态(0正常 1停用) */
-    private String status;
+    private Integer status;
 
     /** 搜索值 */
     @JsonIgnore

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

@@ -81,6 +81,12 @@ public class SysUser implements Serializable {
 	@TableField(exist=false)
 	private List<Long> roleIdList;
 
+
+	/**
+	 * 企业ID列表
+	 */
+	@TableField(exist=false)
+	private List<Long> channelIdList;
 	/**
 	 * 部门列表
 	 */

+ 6 - 4
yami-shop-bean/src/main/java/com/yami/shop/bean/model/User.java

@@ -151,13 +151,15 @@ public class User implements Serializable {
     @TableField(exist = false)
     private String levelName;
 
-    /**
-     * 1铜仁移动(企业用户) 2夫妻店(B端) 3 市民请集合(C端)
-     */
-    private Integer platform;
 
     /**
      * 渠道ID
      */
     private Long channelId;
+
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    private String userAttrType;
 }

+ 3 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/UserShopBehavior.java

@@ -40,6 +40,9 @@ public class UserShopBehavior implements Serializable {
     @ApiModelProperty(value = "店铺id",required=true)
     private Long shopId;
 
+    @ApiModelProperty(value = "渠道id",required=true)
+    private Long channelId;
+
     @ApiModelProperty(value = "创建时间",required=true)
     private Date createTime;
 }

+ 41 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/param/BackendOrderParam.java

@@ -10,11 +10,14 @@
 
 package com.yami.shop.bean.param;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.print.DocFlavor;
 import java.util.Date;
+import java.util.List;
 
 @Data
 public class BackendOrderParam {
@@ -36,6 +39,11 @@ public class BackendOrderParam {
      */
     private Long shopId;
 
+    /**
+     * 父订单编号
+     */
+    private String parentOrderNumber;
+
     /**
      * 订购流水号
      */
@@ -75,4 +83,37 @@ public class BackendOrderParam {
      */
     private Integer refundStatus;
 
+    /**
+     * 订单退款状态参考refundStatus(配送类型 1:快递 2:自提 3:及时配送)
+     */
+    private String dvyType;
+
+    /**
+     * 企业ID列表
+     */
+    private List<Long> channelIdList;
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    private String userAttrType;
+
+
+
+    /**
+     * 是否为超重订单(0-未超重,1-超重 )
+     */
+    private Integer orderSplitStatus;
+    /**
+     * 是否自动拆单(0-手动拆单,1-自动拆单)
+     */
+    private Integer autoSplit;
+    /**
+     * 是否需要拆单(0-拆单临时保存,1-不拆单,2-待拆单,3-拆单中,4-已拆单)
+     */
+    private Integer splitStatus;
+    /**
+     * 订单等级(0-父订单,1-子订单)
+     */
+    private Integer orderLevel;
 }

+ 58 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/param/CategoryProductParam.java

@@ -0,0 +1,58 @@
+
+package com.yami.shop.bean.param;
+
+import com.yami.shop.bean.model.Sku;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 商品参数
+ * @author LGH
+ */
+@Data
+public class CategoryProductParam {
+
+    /**
+     * 产品ID
+     */
+    private Long prodId;
+
+    /**
+     * 店铺id
+     */
+    private Long shopId;
+
+
+    /**
+     * 商品名称
+     */
+
+    private String prodName;
+
+    /**
+     * 商品价格
+     */
+    private Double price;
+
+    /**
+     * 库存量
+     */
+    private Integer totalStocks;
+    /**
+     * 库存量
+     */
+    private Integer salesVolume;
+
+    /**
+     * 图片
+     */
+    private String pic;
+
+    /**
+     * sku列表字符串
+     */
+    private List<Sku> skuList;
+
+
+}

+ 37 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/param/ConfirmSplitOrderParam.java

@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * 确认拆单请求参数
+ *
+ * @author
+ */
+@Data
+@ApiModel("确认拆单请求参数")
+public class ConfirmSplitOrderParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "父订单号", required = true)
+    @NotBlank(message = "订单号不能为空")
+    private String orderNumber;
+    @ApiModelProperty(value = "拆单操作用户", required = true)
+    @NotBlank(message = "拆单操作用户不能为空")
+    private Long splitUserId;
+}

+ 59 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/param/ManualSplitOrderParam.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 手动拆单请求参数
+ *
+ * @author
+ */
+@Data
+@ApiModel("手动拆单请求参数")
+public class ManualSplitOrderParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "父订单号", required = true)
+    @NotBlank(message = "订单号不能为空")
+    private String orderNumber;
+
+    @ApiModelProperty(value = "子订单项列表", required = true)
+    @NotEmpty(message = "子订单项列表不能为空")
+    private List<ManualSplitOrderItemParam> orderItems;
+
+    @ApiModelProperty(value = "拆单操作用户", required = true)
+    @NotBlank(message = "拆单操作用户不能为空")
+    private Long splitUserId;
+    /**
+     * 手动拆单订单项参数
+     */
+    @Data
+    @ApiModel("手动拆单订单项参数")
+    public static class ManualSplitOrderItemParam implements Serializable {
+
+        private static final long serialVersionUID = 1L;
+
+        @ApiModelProperty(value = "商品SKU ID", required = true)
+        private Long skuId;
+
+        @ApiModelProperty(value = "商品数量", required = true)
+        private Integer prodCount;
+    }
+}

+ 4 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/param/OrderParam.java

@@ -83,6 +83,10 @@ public class OrderParam {
      * 订购流水号
      */
     private String orderNumber;
+    /**
+     * 订购流水号
+     */
+    private String parentOrderNumber;
 
     /**
      * 店铺名称

+ 16 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/param/OrderRefundStaisticsParam.java

@@ -15,6 +15,7 @@ import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
+import java.util.List;
 
 @Data
 public class OrderRefundStaisticsParam {
@@ -58,5 +59,20 @@ public class OrderRefundStaisticsParam {
     @ApiModelProperty("退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成")
     private Integer returnMoneySts;
 
+    /**
+     * 订单退款状态参考refundStatus(配送类型 1:快递 2:自提 3:及时配送)
+     */
+    private String dvyType;
+
+    /**
+     * 企业ID列表
+     */
+    private List<Long> channelIdList;
+
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    private String userAttrType;
 
 }

+ 10 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/po/EnterpriseUserExcelInfo.java

@@ -17,8 +17,18 @@ public class EnterpriseUserExcelInfo {
     @ExcelProperty("员工姓名")
     private String realName;
 
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    @ApiModelProperty(value = "人员属性")
+    @ExcelProperty("人员属性")
+    private String userAttrName;
+
     @ApiModelProperty(value = "员工手机号")
     @ExcelProperty("员工手机号")
     private String phone;
 
+
+
 }

+ 25 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/po/EnterpriseUserPo.java

@@ -5,6 +5,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
@@ -16,4 +18,27 @@ public class EnterpriseUserPo {
 
     private String userMobile;
 
+    /**
+     * 企业ID列表
+     */
+    private List<Long> channelIdList;
+
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    private String userAttrType;
+
+    public EnterpriseUserPo(Long channelId, String realName, String userMobile) {
+        this.channelId = channelId;
+        this.realName = realName;
+        this.userMobile = userMobile;
+    }
+
+    public EnterpriseUserPo(Long channelId, String realName, String userMobile, String userAttrType) {
+        this.channelId = channelId;
+        this.realName = realName;
+        this.userMobile = userMobile;
+        this.userAttrType = userAttrType;
+    }
 }

+ 45 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/po/FreightStatisticsPo.java

@@ -0,0 +1,45 @@
+
+package com.yami.shop.bean.po;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class FreightStatisticsPo {
+
+    @ApiModelProperty("企业ids")
+    private List<Long> channelIds;
+
+    @ApiModelProperty("收货人")
+    private String receiver;
+
+    @ApiModelProperty("收货人手机号")
+    private String mobile;
+
+    @ApiModelProperty("运输公司")
+    private String delivery;
+
+    @ApiModelProperty("运单号")
+    private String deliveryNo;
+
+    @ApiModelProperty("到件地址")
+    private String toAddress;
+
+    @ApiModelProperty("订/退单号")
+    private String orderNo;
+
+    @ApiModelProperty("人员属性")
+    private String userAttrType;
+
+    @ApiModelProperty("开始时间")
+    private String startTime;
+
+    @ApiModelProperty("结束时间")
+    private String endTime;
+}

+ 31 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/po/PointsRecordPo.java

@@ -0,0 +1,31 @@
+
+package com.yami.shop.bean.po;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PointsRecordPo {
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("业务类型 CZ-充值 XD-下单 TK-退款 GQ-过期")
+    private String businessType;
+
+    @ApiModelProperty("开始时间")
+    private String startTime;
+
+    @ApiModelProperty("结束时间")
+    private String endTime;
+
+    @ApiModelProperty("页码")
+    private int current;
+
+    @ApiModelProperty("每页记录数")
+    private int size;
+}

+ 73 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/po/SMOrderItemPo.java

@@ -0,0 +1,73 @@
+package com.yami.shop.bean.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class SMOrderItemPo implements Serializable {
+
+    private static final long serialVersionUID = 7307405761190788407L;
+
+    /**
+     * 订单orderNumber
+     */
+    private String orderNumber;
+
+    /**
+     * 产品ID
+     */
+    private Long prodId;
+
+    /**
+     * 产品SkuID
+     */
+    private Long skuId;
+
+    /**
+     * 购物车产品个数
+     */
+    private Integer prodCount;
+
+    /**
+     * 产品名称
+     */
+    private String prodName;
+
+    /**
+     * sku名称
+     */
+    private String skuName;
+
+    /**
+     * 产品主图片路径
+     */
+    private String pic;
+
+    /**
+     * 产品价格
+     */
+    private Double price;
+
+    /**
+     * 商品总金额
+     */
+    private Double productTotalAmount;
+
+    /**
+     * 购物时间
+     */
+    private Date recTime;
+
+    /**
+     * 使用积分
+     */
+    private Integer useScore;
+
+    /**
+     * 订单确认收货获取的积分
+     */
+    private Integer gainScore;
+
+}

+ 69 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/po/SMOrderPo.java

@@ -0,0 +1,69 @@
+package com.yami.shop.bean.po;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class SMOrderPo implements Serializable {
+
+    private static final long serialVersionUID = 6222259729062826852L;
+
+    private Long shopId;
+
+    /**
+     * 订购流水号
+     */
+    private String orderNumber;
+
+    /**
+     * 总值
+     */
+    private Double total;
+
+    /**
+     * 实际总值
+     */
+    private Double actualTotal;
+
+    private Integer payType;
+
+    /**
+     * 用户备注
+     */
+    private String remarks;
+
+    /**
+     * 配送类型(1:快递 2:自提 3:及时配送)
+     */
+    private Integer dvyType;
+
+    /**
+     * 订单运费
+     */
+    private Double freightAmount;
+
+    /**
+     * 付款时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date payTime;
+
+    private Long offsetPoints;
+
+    private String consigneeName;
+
+    private String consigneeMobile;
+
+    private String consigneeAddress;
+
+    private Double latitude;
+
+    private Double longitude;
+
+    private List<SMOrderItemPo> orderItems;
+
+}

+ 36 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/po/SkuStatisticsPo.java

@@ -0,0 +1,36 @@
+
+package com.yami.shop.bean.po;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SkuStatisticsPo {
+
+    @ApiModelProperty("企业ids")
+    private List<Long> channelIds;
+
+    @ApiModelProperty("skuId")
+    private Long skuId;
+
+    @ApiModelProperty("skuName")
+    private String skuName;
+
+    @ApiModelProperty("规格")
+    private String spec;
+
+    @ApiModelProperty("人员属性")
+    private String userAttrType;
+
+    @ApiModelProperty("开始时间")
+    private String startTime;
+
+    @ApiModelProperty("结束时间")
+    private String endTime;
+}

+ 4 - 4
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ChannelProdExportVO.java

@@ -13,7 +13,7 @@ import java.math.BigDecimal;
 @Data
 public class ChannelProdExportVO {
 
-    @ExcelProperty(value = "海博商品ID", index = 0)
+    @ExcelProperty(value = "海博商品ID*", index = 0)
     @ColumnWidth(20)
     private Long skuId;
 
@@ -21,11 +21,11 @@ public class ChannelProdExportVO {
     @ColumnWidth(40)
     private String skuName;
 
-    @ExcelProperty(value = "门店名称", index = 3)
+    @ExcelProperty(value = "门店名称*", index = 3)
     @ColumnWidth(20)
     private String shopName;
 
-    @ExcelProperty(value = "销售渠道", index = 2)
+    @ExcelProperty(value = "销售渠道*", index = 2)
     @ColumnWidth(20)
     private String channelName;
 
@@ -37,7 +37,7 @@ public class ChannelProdExportVO {
     @ColumnWidth(20)
     private BigDecimal deliveryPrice;
 
-    @ExcelProperty(value = "渠道售价(元)", index = 6)
+    @ExcelProperty(value = "渠道售价(元)*", index = 6)
     @ColumnWidth(20)
     private BigDecimal channelProdPrice;
 

+ 4 - 4
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ChannelProdImportVO.java

@@ -17,7 +17,7 @@ import java.math.BigDecimal;
 @ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 9) // 内容背景色(9=淡黄色)
 public class ChannelProdImportVO {
 
-    @ExcelProperty(value = "海博商品ID", index = 0)
+    @ExcelProperty(value = "海博商品ID*", index = 0)
     @ColumnWidth(20) // 列宽
     @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER) // 居中对齐
     private String skuId;
@@ -27,12 +27,12 @@ public class ChannelProdImportVO {
     @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT)
     private String skuName;
 
-    @ExcelProperty(value = "销售渠道", index = 2)
+    @ExcelProperty(value = "销售渠道*", index = 2)
     @ColumnWidth(20)
     @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT)
     private String channelName;
 
-    @ExcelProperty(value = "门店名称", index = 3)
+    @ExcelProperty(value = "门店名称*", index = 3)
     @ColumnWidth(20)
     @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT)
     private String shopName;
@@ -45,7 +45,7 @@ public class ChannelProdImportVO {
     @ColumnWidth(20)
     private BigDecimal deliveryPrice;
 
-    @ExcelProperty(value = "渠道售价(元)", index = 6)
+    @ExcelProperty(value = "渠道售价(元)*", index = 6)
     @ColumnWidth(20)
     private BigDecimal channelProdPrice;
 

+ 6 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/EnterpriseUserVo.java

@@ -34,4 +34,10 @@ public class EnterpriseUserVo {
     private Double expired;
 
     private Double used;
+
+    /**
+     * 20251203 v1.1.3
+     * 人员属性 0-全部 1-正常人员 2-测试人员
+     */
+    private String userAttrType;
 }

+ 16 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ExportContext.java

@@ -0,0 +1,16 @@
+package com.yami.shop.bean.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.util.concurrent.CompletableFuture;
+
+
+@Data
+@AllArgsConstructor
+public class ExportContext {
+    private CompletableFuture<Void> future;
+    private Thread executionThread;
+    private volatile boolean isCancelled = false;
+    private volatile int processedRows = 0;
+}

+ 66 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/ExportTaskVo.java

@@ -0,0 +1,66 @@
+
+
+package com.yami.shop.bean.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 导出任务实体
+ */
+@Data
+public class ExportTaskVo{
+
+
+    /**
+     * ID
+     */
+    private String id;
+    /**
+     * 用户编号
+     */
+    private Long userId;
+    /**
+     * 导出类型1-正常订单 2-售后订单
+     */
+    private Integer exportType;
+
+    /**
+     * 导出信息
+     */
+    private String exportMsg;
+    /**
+     * 导出状态 0-进行中,1-已生成文件,2-生成文件失败,3-已下载
+     */
+    private Integer exportStatus;
+    /**
+     * 任务名称
+     */
+    private String taskName;
+    /**
+     * 操作人
+     */
+    private String operator;
+    /**
+     * 创建时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+
+}

+ 62 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/FreightStatisticsVo.java

@@ -0,0 +1,62 @@
+
+package com.yami.shop.bean.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class FreightStatisticsVo {
+
+    @ApiModelProperty("排序")
+    @ExcelProperty("序号")
+    private Integer sort;
+
+    @ApiModelProperty("日期")
+    @ExcelProperty("日期")
+    @JsonFormat(pattern = "yyyy/MM/dd")
+    private String payTime;
+
+    @ApiModelProperty("寄方")
+    @ExcelProperty("寄方")
+    private String sendSize = "中数未来(贵州)商业服务有限公司";
+
+    @ApiModelProperty("收方")
+    @ExcelProperty("收方")
+    private String receiver;
+
+    @ApiModelProperty("运输公司")
+    @ExcelProperty("运输公司")
+    private String delivery;
+
+    @ApiModelProperty("运单号")
+    @ExcelProperty("运单号")
+    private String deliveryNo;
+
+    @ApiModelProperty("寄件地区")
+    @ExcelProperty("寄件地区")
+    private String sendArea = "铜仁市";
+
+    @ApiModelProperty("到件地址")
+    @ExcelProperty("到件地址")
+    private String toAddress;
+
+    @ApiModelProperty("经手人")
+    @ExcelProperty("经手人")
+    private String handler = "谭靖";
+
+    @ApiModelProperty("费用")
+    @ExcelProperty("费用(元)")
+    private String money;
+
+    @ApiModelProperty("订/退单号")
+    @ExcelProperty("订/退单号")
+    private String orderNo;
+
+
+}

+ 17 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/IdNameVo.java

@@ -0,0 +1,17 @@
+
+package com.yami.shop.bean.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class IdNameVo {
+
+    private Long id;
+
+    private String name;
+
+}

+ 75 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderCountVo.java

@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ */
+
+package com.yami.shop.bean.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.yami.shop.bean.model.OrderRefundRecord;
+import com.yami.shop.bean.model.RefundAppointment;
+import com.yami.shop.bean.model.RefundDelivery;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Digits;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/***
+ * 订单统计信息
+ */
+@Data
+public class OrderCountVo implements Serializable{
+
+    @ApiModelProperty(value = "订单总数")
+    private long orderTotal =0L;
+
+    @ApiModelProperty(value = "订单总金额")
+    @Digits(integer = 10, fraction = 2, message = "运费总金额最多保留2位小数")
+    private BigDecimal orderMoneyTotal= BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品总金额")
+    @Digits(integer = 10, fraction = 2, message = "运费总金额最多保留2位小数")
+    private BigDecimal shopMoneyTotal= BigDecimal.ZERO;
+
+    /**
+     * 运费总金额
+     */
+    @ApiModelProperty(value = "运费总金额")
+    @Digits(integer = 10, fraction = 2, message = "运费总金额最多保留2位小数")
+    private BigDecimal carriageMoneyTotal= BigDecimal.ZERO;
+    /**
+     * 支付总金额
+     */
+    @ApiModelProperty(value = "支付总金额")
+    @Digits(integer = 10, fraction = 2, message = "运费总金额最多保留2位小数")
+    private BigDecimal payMoneyTotal= BigDecimal.ZERO;
+
+    /**
+     * 积分总金额
+     */
+    @ApiModelProperty(value = "积分总金额")
+    @Digits(integer = 10, fraction = 2, message = "运费总金额最多保留2位小数")
+    private BigDecimal pointsMoneyTotal= BigDecimal.ZERO;
+
+    /**
+     * 现金总金额
+     */
+    @ApiModelProperty(value = "现金总金额")
+    @Digits(integer = 10, fraction = 2, message = "运费总金额最多保留2位小数")
+    private BigDecimal moneyTotal= BigDecimal.ZERO;
+
+    /**
+     * 客单价
+     */
+    @ApiModelProperty(value = "客单价")
+    @Digits(integer = 10, fraction = 2, message = "运费总金额最多保留2位小数")
+    private BigDecimal averageOrderValueMoney = BigDecimal.ZERO;
+
+
+}

+ 4 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderRefundVo.java

@@ -35,6 +35,10 @@ public class OrderRefundVo implements Serializable{
      * 退款编号
      */
     private String refundSn;
+    /**
+     * 所属企业
+     */
+    private String channelName;
     /**
      * 店铺ID
      */

+ 49 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/PointsRecordVo.java

@@ -0,0 +1,49 @@
+
+package com.yami.shop.bean.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PointsRecordVo {
+
+    @ApiModelProperty("订单编号")
+    @ExcelProperty("订单编号")
+    private String orderNumber;
+
+    @ApiModelProperty("姓名")
+    @ExcelProperty("姓名")
+    private String realName;
+
+    @ApiModelProperty("手机号")
+    @ExcelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("变动积分")
+    @ExcelProperty("变动积分")
+    private String variablePoints;
+
+    @ApiModelProperty("变动后积分")
+    @ExcelProperty("变动后积分")
+    private String currentlyAvailablePoints;
+
+    @ApiModelProperty("创建时间")
+    @ExcelProperty("创建时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime creationDate;
+
+    @ApiModelProperty("业务类型 CZ-充值 XD-下单 TK-退款 GQ-过期")
+    @ExcelProperty("业务类型")
+    private String businessType;
+
+}

+ 31 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatistics.java

@@ -0,0 +1,31 @@
+
+package com.yami.shop.bean.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SkuStatistics {
+
+    @ApiModelProperty("商品总额")
+    private Double goodsTotalPrice;
+
+    @ApiModelProperty("积分抵扣")
+    private Double totalPoints;
+
+    @ApiModelProperty("现金抵扣")
+    private Double totalCash;
+
+    @ApiModelProperty("运费")
+    private Double totalFreight;
+
+    @ApiModelProperty("sku")
+    private List<SkuStatisticsVo> skuStatisticsList;
+
+}

+ 55 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatisticsExcel.java

@@ -0,0 +1,55 @@
+
+package com.yami.shop.bean.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SkuStatisticsExcel {
+
+    @ExcelProperty("商品ID")
+    @ApiModelProperty("skuId")
+    private Long skuId;
+
+    @ApiModelProperty("skuName")
+    @ExcelProperty("商品名称")
+    private String skuName;
+
+    @ApiModelProperty("规格")
+    @ExcelProperty("规格")
+    private String spec;
+
+    @ApiModelProperty("单价")
+    @ExcelProperty("单价(元)")
+    private Double price;
+
+    @ApiModelProperty("商品总数量")
+    @ExcelProperty("商品总数量")
+    private Integer prodCount;
+
+    @ApiModelProperty("小计")
+    @ExcelProperty("小计(元)")
+    private Double total;
+
+    @ApiModelProperty("商品总额")
+    @ExcelProperty("商品总额(元)")
+    private Double goodsTotalPrice;
+
+    @ApiModelProperty("积分抵扣")
+    @ExcelProperty("总积分抵扣(元)")
+    private Double totalPoints;
+
+    @ApiModelProperty("现金抵扣")
+    @ExcelProperty("总现金抵扣(元)")
+    private Double totalCash;
+
+    @ApiModelProperty("运费")
+    @ExcelProperty("总运费(元)")
+    private Double totalFreight;
+
+}

+ 55 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SkuStatisticsVo.java

@@ -0,0 +1,55 @@
+
+package com.yami.shop.bean.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SkuStatisticsVo {
+
+    @ExcelProperty("商品ID")
+    @ApiModelProperty("skuId")
+    private Long skuId;
+
+    @ApiModelProperty("skuName")
+    @ExcelProperty("商品名称")
+    private String skuName;
+
+    @ApiModelProperty("规格")
+    @ExcelProperty("规格")
+    private String spec;
+
+    @ApiModelProperty("单价")
+    @ExcelProperty("单价(元)")
+    private Double price;
+
+    @ApiModelProperty("商品总数量")
+    @ExcelProperty("商品总数量")
+    private Integer prodCount;
+
+    @ApiModelProperty("小计")
+    @ExcelProperty("小计(元)")
+    private Double total;
+
+    @ApiModelProperty(value = "商品总额",hidden = true)
+    @ExcelProperty("商品总额(元)")
+    private Double goodsTotalPrice;
+
+    @ApiModelProperty(value = "积分抵扣",hidden = true)
+    @ExcelProperty("总积分抵扣(元)")
+    private Double totalPoints;
+
+    @ApiModelProperty(value = "现金抵扣",hidden = true)
+    @ExcelProperty("总现金抵扣(元)")
+    private Double totalCash;
+
+    @ApiModelProperty(value = "运费",hidden = true)
+    @ExcelProperty("总运费(元)")
+    private Double totalFreight;
+
+}

+ 170 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/XSBProductVO.java

@@ -0,0 +1,170 @@
+package com.yami.shop.bean.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 商品表
+ */
+@Data
+public class XSBProductVO {
+
+    /**
+     * 商品编码(海博)
+     */
+    private Long hbSpuId;
+    /**
+     * 第三方SpuID
+     */
+    private String  thirdSpuId;
+    /**
+     * 业务类型
+     */
+    private String businessType;
+
+    /**
+     * 海博渠道编码
+     */
+    private String channelCode;
+
+    /**
+     * 店铺id
+     */
+    private Long shopId;
+
+    /**
+     * 在平台当中的分类id
+     */
+    private Long categoryId;
+
+    /**
+     * 在海博平台中的前台分类id
+     */
+    private String hbFrontCategoryId;
+
+    /**
+     * 在店铺当中的分类id
+     */
+    private Long shopCategoryId;
+
+    /**
+     * 商品名称
+     */
+    private String prodName;
+
+    /**
+     * 原价
+     */
+    private Double oriPrice;
+
+    /**
+     * 现价
+     */
+    private Double price;
+
+    /**
+     * 简要描述,卖点等
+     */
+    private String brief;
+
+    /**
+     * 商品视频
+     */
+    private String video;
+
+    /**
+     * 商品主图
+     */
+    private String pic;
+
+    /**
+     * 商品图片
+     */
+    private String imgs;
+
+    /**
+     * 默认是1,表示正常状态, -1表示删除, 0下架
+     */
+    private Integer status;
+    /**
+     * 逻辑删除标记 0 正常 1 已被删除
+     */
+    private Integer isDelete;
+    /**
+     * 海博商品类型(1-普通商品,2-多规格商品)
+     */
+    private Integer hbStatus;
+
+    /**
+     * 品牌Id
+     */
+    private Long brandId;
+    /**
+     * 品牌名称
+     */
+    private String brandName;
+    /**
+     * 商品副标题
+     */
+    private String halfTitle;
+
+    /**
+     * 已经销售数量
+     */
+    private Integer soldNum;
+
+    /**
+     * 库存量
+     */
+    private Integer totalStocks;
+
+    /**
+     * 配送方式json
+     */
+    private String deliveryMode;
+
+    /**
+     * 运费模板id
+     */
+    private Long deliveryTemplateId;
+
+    /**
+     * 录入时间
+     */
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    /**
+     * 详细描述
+     */
+    @TableField("`content`")
+    private String content;
+
+    /**
+     * 上架时间
+     */
+    private Date putawayTime;
+
+    /**
+     * 商品类型(0普通商品 1拼团 2秒杀 3积分)
+     */
+    private Integer prodType;
+
+    /**
+     * 商品积分价格
+     */
+    private Integer scorePrice;
+
+    /**
+     * 活动id(对应prod_type)
+     */
+    private Long activityId;
+
+
+}

+ 145 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/XSBSkuVO.java

@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.vo;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class XSBSkuVO implements Serializable {
+
+
+    /**
+     * 第三方SkuID
+     */
+    private String  thirdSkuId;
+    /**
+     * 业务类型
+     */
+    private String businessType;
+
+    /**
+     * 商品ID
+     */
+    private Long prodId;
+
+    /**
+     * 商品编码(海博)
+     */
+    private String hbSpuId;
+    /**
+     * 单品编码(海博)
+     */
+    private String hbSkuId;
+
+    /**
+     * 销售属性组合字符串,格式是p1:v1;p2:v2
+     */
+    private String properties;
+
+    /**
+     *  外部编码
+     */
+    private String skuCode;
+    /**
+     * 规格
+     */
+    private String spec;
+
+    /**
+     * 原价
+     */
+    private Double oriPrice;
+
+    /**
+     * 价格
+     */
+    private Double price;
+    /**
+     * 积分价格
+     */
+    private Integer skuScore;
+
+    /**
+     * 库存
+     */
+    private Integer stocks;
+
+    /**
+     * 实际库存
+     */
+    private Integer actualStocks;
+
+    /**
+     * 修改时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 记录时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date recTime;
+
+    /**
+     * 商家编码
+     */
+    private String partyCode;
+
+    /**
+     * 商品条形码
+     */
+    private String modelId;
+
+    /**
+     * sku图片
+     */
+    private String pic;
+
+    /**
+     * sku名称
+     */
+    private String skuName;
+
+    /**
+     * 商品名称
+     */
+    private String prodName;
+
+    private Integer version;
+
+    /**
+     * 重量
+     */
+    private Double weight;
+
+    /**
+     * 体积
+     */
+    private Double volume;
+
+    /**
+     * 状态:0禁用 1 启用
+     */
+    private Integer status;
+
+    /**
+     * 0 正常 1 已被删除
+     */
+    private Integer isDelete;
+
+    private String weightUnit;
+
+}

+ 45 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/xsb/OmsOrderRefundSkuVo.java

@@ -0,0 +1,45 @@
+package com.yami.shop.bean.vo.xsb;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 推送到星闪豹退款订单请求参数
+ * @author kaur
+ */
+@Data
+public class OmsOrderRefundSkuVo {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+    /**
+     * 商品id
+     */
+    private Long skuId;
+    /**
+     * 第三方商品id
+     */
+    private Long thirdSkuId;
+    /**
+     * 退款商品数量
+     */
+    private Integer productCount;
+    /**
+     * 退款单ID
+     */
+    private Long orderRefundId;
+    /**
+     * 商品单价
+     */
+    private BigDecimal skuPrice;
+    /**
+     * 订单项id
+     */
+    private Long orderItemId;
+
+
+}

+ 37 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/xsb/RefundOrderPushStatusVo.java

@@ -0,0 +1,37 @@
+package com.yami.shop.bean.vo.xsb;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * 推送到星闪豹退款订单状态
+ * @author kaur
+ */
+@Data
+public class RefundOrderPushStatusVo {
+
+    /**
+     * 市民请集合退款编号
+     */
+    private String refundNumber;
+
+    /**
+     * 市民请集合退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成
+     */
+    private Integer returnMoneySts;
+    /**
+     * 申请类型:1,仅退款,2退款退货,5差价退款
+     */
+    private Integer applyType;
+    /**
+     * 拒绝原因
+     */
+    private String rejectMessage;
+
+
+
+}

+ 197 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/xsb/RefundOrderPushVo.java

@@ -0,0 +1,197 @@
+package com.yami.shop.bean.vo.xsb;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * 推送到星闪豹退款订单请求参数
+ * @author kaur
+ */
+@Data
+public class RefundOrderPushVo {
+
+    /**
+     * 市民请集合退款编号
+     */
+    private String refundNumber;
+    /**
+     * 店铺ID
+     */
+    private Long shopId;
+    /**
+     * 第三方店铺ID
+     */
+    private Long thirdShopId;
+
+    /**
+     * 市民请集合买家ID
+     */
+    private Long memberId;
+    /**
+     * 市民请集合订单单号
+     */
+    private String orderNumber;
+    /**
+     * 市民请集合退款单类型(1:整单退款,2:单个物品退款)
+     */
+    private Integer refundType;
+    /**
+     * 市民请集合退款单状态 10:待审核 20:处理中 30:驳回退款 40:撤销退款 60:待退货(一审同意) 65:待确认收货(二审待审核) 70:退款完成
+     */
+    private Integer returnMoneySts;
+    /**
+     * 市民请集合退款金额
+     */
+    private BigDecimal refundAmount;
+    /**
+     * 市民请集合退款编号市民请集合申请类型:1,仅退款,2退款退货,5差价退款
+     */
+    private Integer applyType;
+    /**
+     * 市民请集合是否接收到商品(1:已收到,0:未收到)
+     */
+    private Integer isReceiver;
+    /**
+     * 市民请集合申请原因
+     */
+    private String buyerReason;
+    /**
+     * 市民请集合申请说明
+     */
+    private String buyerDesc;
+    /**
+     * 市民请集合联系方式(退款时留下的手机号码)
+     */
+    private String buyerMobile;
+    /**
+     * 市民请集合拒绝原因
+     */
+    private String rejectMessage;
+    /**
+     * 市民请集合卖家备注
+     */
+    private String sellerMsg;
+    /**
+     * 市民请集合申请时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JSONField(format  = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime applyTime;
+    /**
+     * 市民请集合发货时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JSONField(format  = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime shipTime;
+    /**
+     * 市民请集合收货时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JSONField(format  = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime receiveTime;
+    /**
+     * 市民请集合撤销时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JSONField(format  = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime cancelTime;
+    /**
+     * 市民请集合订单运费
+     */
+    private BigDecimal freightAmount;
+    /**
+     * 该退款单是否处理完成
+     */
+    private Integer handler;
+    /**
+     * 是否填写了退货物流信息(1:已填写,0:未填写)
+     */
+    private Integer isReturnLogistics;
+    /**
+     * 退款总金额
+     */
+    private BigDecimal refundTotalMoney;
+    /**
+     * 收货人姓名
+     */
+    private String consigneeName;
+    /**
+     * 收货人电话
+     */
+    private String consigneeMobile;
+    /**
+     * 收货人地址
+     */
+    private String consigneeAddress;
+    /**
+     * 商品信息
+     */
+    private List<OmsOrderRefundSkuVo> orderRefundSkuList;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+    /**
+     * 文件凭证json
+     */
+    private String photoFiles;
+
+    /**
+     * 退款数量
+     */
+    private Integer  GoodsNum;
+
+    /**
+     * 渠道类型 1-市民请集合
+     */
+    private Integer channelType;
+
+    @Override
+    public String toString() {
+        return "RefundOrderPushVo{" +
+                "refundNumber='" + refundNumber + '\'' +
+                ", shopId=" + shopId +
+                ", thirdShopId=" + thirdShopId +
+                ", memberId=" + memberId +
+                ", orderNumber='" + orderNumber + '\'' +
+                ", refundType=" + refundType +
+                ", returnMoneySts=" + returnMoneySts +
+                ", refundAmount=" + refundAmount +
+                ", applyType=" + applyType +
+                ", isReceiver=" + isReceiver +
+                ", buyerReason='" + buyerReason + '\'' +
+                ", buyerDesc='" + buyerDesc + '\'' +
+                ", buyerMobile='" + buyerMobile + '\'' +
+                ", rejectMessage='" + rejectMessage + '\'' +
+                ", sellerMsg='" + sellerMsg + '\'' +
+                ", applyTime=" + applyTime +
+                ", shipTime=" + shipTime +
+                ", receiveTime=" + receiveTime +
+                ", cancelTime=" + cancelTime +
+                ", freightAmount=" + freightAmount +
+                ", handler=" + handler +
+                ", isReturnLogistics=" + isReturnLogistics +
+                ", refundTotalMoney=" + refundTotalMoney +
+                ", consigneeName='" + consigneeName + '\'' +
+                ", consigneeMobile='" + consigneeMobile + '\'' +
+                ", consigneeAddress='" + consigneeAddress + '\'' +
+                ", orderRefundSkuList=" + orderRefundSkuList +
+                ", orderId=" + orderId +
+                ", photoFiles='" + photoFiles + '\'' +
+                ", GoodsNum=" + GoodsNum +
+                ", channelType=" + channelType +
+                '}';
+    }
+}

+ 21 - 0
yami-shop-common/src/main/java/com/yami/shop/common/bean/smqjh/OrderRefundCancelVo.java

@@ -0,0 +1,21 @@
+package com.yami.shop.common.bean.smqjh;
+
+import lombok.Data;
+
+@Data
+public class OrderRefundCancelVo {
+
+    /**
+     * 退款编号名称
+     */
+
+    private String refundSn;
+
+    /**
+     * 用户编号
+     */
+
+    private Long userId;
+
+
+}

+ 51 - 0
yami-shop-common/src/main/java/com/yami/shop/common/bean/smqjh/OrderRefundExpressParamVo.java

@@ -0,0 +1,51 @@
+package com.yami.shop.common.bean.smqjh;
+
+import lombok.Data;
+
+@Data
+public class OrderRefundExpressParamVo {
+
+    /**
+     * 退款编号名称
+     */
+
+    private String refundSn;
+
+    /**
+     * 物流公司id
+     */
+
+    private Long expressId;
+
+    /**
+     * 物流公司名称
+     */
+    private String expressName;
+
+    /**
+     * 物流单号
+     */
+    private String expressNo;
+
+    /**
+     * 手机号码
+     */
+    private String mobile;
+
+    /**
+     * 备注信息
+     */
+    private String senderRemarks;
+
+    /**
+     * 图片举证
+     */
+    private String imgs;
+    /**
+     * 用户编号
+     */
+    private Long memberId;
+
+
+
+}

+ 27 - 0
yami-shop-common/src/main/java/com/yami/shop/common/bean/smqjh/Result.java

@@ -0,0 +1,27 @@
+package com.yami.shop.common.bean.smqjh;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 统一响应结构体
+ * 市民请集合的返回实体
+ * @author haoxr
+ * @since 2022/1/30
+ **/
+
+
+@Data
+public class Result<T> implements Serializable {
+    /**
+     * 返回状态码
+     */
+    private String code;
+    /**
+     * 返回数据对象
+     */
+    private T data;
+
+    private String msg;
+}

+ 107 - 0
yami-shop-common/src/main/java/com/yami/shop/common/enums/SMQJHResultCode.java

@@ -0,0 +1,107 @@
+package com.yami.shop.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 自定义响应码
+ *
+ * @author haoxr
+ * @since 2020-06-23
+ **/
+@AllArgsConstructor
+@NoArgsConstructor
+public enum SMQJHResultCode implements   Serializable {
+
+    SUCCESS("00000", "success"),
+
+    USER_ERROR("A0001", "用户端错误"),
+    USER_LOGIN_ERROR("A0200", "用户登录异常"),
+
+    USER_NOT_EXIST("A0201", "用户不存在"),
+    USER_ACCOUNT_LOCKED("A0202", "用户账户被冻结"),
+    USER_ACCOUNT_INVALID("A0203", "用户账户已作废"),
+
+    USERNAME_OR_PASSWORD_ERROR("A0210", "用户名或密码错误"),
+    PASSWORD_ENTER_EXCEED_LIMIT("A0211", "用户输入密码次数超限"),
+    CLIENT_AUTHENTICATION_FAILED("A0212", "客户端认证失败"),
+    TOKEN_INVALID("A0230", "token无效或已过期"),
+    TOKEN_ACCESS_FORBIDDEN("A0231", "token已被禁止访问"),
+
+    AUTHORIZED_ERROR("A0300", "访问权限异常"),
+    ACCESS_UNAUTHORIZED("A0301", "访问未授权"),
+    FORBIDDEN_OPERATION("A0302", "演示环境禁止新增、修改和删除重要数据,请本地部署后测试"),
+    REPEAT_SUBMIT_ERROR("A0303", "您的请求已提交,请不要重复提交或等待片刻再尝试。"),
+
+    PARAM_ERROR("A0400", "用户请求参数错误"),
+    RESOURCE_NOT_FOUND("A0401", "请求资源不存在"),
+    PARAM_IS_NULL("A0410", "请求必填参数为空"),
+
+    USER_UPLOAD_FILE_ERROR("A0700", "用户上传文件异常"),
+    USER_UPLOAD_FILE_TYPE_NOT_MATCH("A0701", "用户上传文件类型不匹配"),
+    USER_UPLOAD_FILE_SIZE_EXCEEDS("A0702", "用户上传文件太大"),
+    USER_UPLOAD_IMAGE_SIZE_EXCEEDS("A0703", "用户上传图片太大"),
+
+    SYSTEM_EXECUTION_ERROR("B0001", "系统执行出错"),
+    SYSTEM_EXECUTION_TIMEOUT("B0100", "系统执行超时"),
+    SYSTEM_ORDER_PROCESSING_TIMEOUT("B0100", "系统订单处理超时"),
+
+    SYSTEM_DISASTER_RECOVERY_TRIGGER("B0200", "系统容灾功能被触发"),
+    FLOW_LIMITING("B0210", "系统限流"),
+    DEGRADATION("B0220", "系统功能降级"),
+
+    SYSTEM_RESOURCE_ERROR("B0300", "系统资源异常"),
+    SYSTEM_RESOURCE_EXHAUSTION("B0310", "系统资源耗尽"),
+    SYSTEM_RESOURCE_ACCESS_ERROR("B0320", "系统资源访问异常"),
+    SYSTEM_READ_DISK_FILE_ERROR("B0321", "系统读取磁盘文件失败"),
+
+    CALL_THIRD_PARTY_SERVICE_ERROR("C0001", "调用第三方服务出错"),
+    MIDDLEWARE_SERVICE_ERROR("C0100", "中间件服务出错"),
+    INTERFACE_NOT_EXIST("C0113", "接口不存在"),
+
+    MESSAGE_SERVICE_ERROR("C0120", "消息服务出错"),
+    MESSAGE_DELIVERY_ERROR("C0121", "消息投递出错"),
+    MESSAGE_CONSUMPTION_ERROR("C0122", "消息消费出错"),
+    MESSAGE_SUBSCRIPTION_ERROR("C0123", "消息订阅出错"),
+    MESSAGE_GROUP_NOT_FOUND("C0124", "消息分组未查到"),
+
+    DATABASE_ERROR("C0300", "数据库服务出错"),
+    DATABASE_TABLE_NOT_EXIST("C0311", "表不存在"),
+    DATABASE_COLUMN_NOT_EXIST("C0312", "列不存在"),
+    DATABASE_DUPLICATE_COLUMN_NAME("C0321", "多表关联中存在多个相同名称的列"),
+    DATABASE_DEADLOCK("C0331", "数据库死锁"),
+    DATABASE_PRIMARY_KEY_CONFLICT("C0341", "主键冲突");
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    private String code;
+
+    private String msg;
+
+    @Override
+    public String toString() {
+        return "{" +
+                "\"code\":\"" + code + '\"' +
+                ", \"msg\":\"" + msg + '\"' +
+                '}';
+    }
+
+
+    public static SMQJHResultCode getValue(String code){
+        for (SMQJHResultCode value : values()) {
+            if (value.getCode().equals(code)) {
+                return value;
+            }
+        }
+        return SYSTEM_EXECUTION_ERROR; // 默认系统执行错误
+    }
+}

+ 30 - 0
yami-shop-common/src/main/java/com/yami/shop/common/util/Arith.java

@@ -11,12 +11,15 @@
 package com.yami.shop.common.util;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Objects;
 
 public class Arith {
     /**
      * 默认除法运算精度
      */
+
+    private static final BigDecimal ONE_HUNDRED = new BigDecimal("100");
     private static final int DEF_DIV_SCALE = 10;
 
     /**
@@ -93,6 +96,22 @@ public class Arith {
         return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
 
+    /**
+     * 提供精度获取int类型*double类型
+     * @param v1
+     * @param v2
+     * @param scale
+     * @return
+     */
+    public static double multiply(int v1, double v2, int scale) {
+        if (scale < 0) {
+            throw new IllegalArgumentException("The scale must be a positive integer or zero");
+        }
+        BigDecimal b1 = new BigDecimal(Double.toString(v1));
+        BigDecimal b2 = new BigDecimal(Double.toString(v2));
+        return b1.multiply(b2).setScale(scale, RoundingMode.HALF_UP).doubleValue();
+    }
+
     /**
      * 提供精确的小数位四舍五入处理。.
      *
@@ -140,4 +159,15 @@ public class Arith {
         BigDecimal b2 = new BigDecimal(Double.toString(v2));
         return Objects.equals(b1,b2);
     }
+    /**
+     * 分转元(指定小数位数)
+     */
+    public static BigDecimal fenToYuan(Long fen, int scale) {
+        if (fen == null) {
+            return BigDecimal.ZERO.setScale(scale, RoundingMode.HALF_UP);
+        }
+        return new BigDecimal(fen)
+                .divide(ONE_HUNDRED, scale, RoundingMode.HALF_UP);
+    }
+
 }

+ 3 - 1
yami-shop-common/src/main/java/com/yami/shop/common/util/HttpUtil.java

@@ -106,7 +106,9 @@ public class HttpUtil {
      */
     public static String post(String url, Map<String, String> headers, Map<String, String> params) {
         HttpPost post = new HttpPost(url);
-        post.setEntity(getHttpEntity(params));
+        if (Objects.nonNull(params) && !params.isEmpty()) {
+            post.setEntity(getHttpEntity(params));
+        }
         return getRespString(post, headers);
     }
 

+ 16 - 1
yami-shop-common/src/main/java/com/yami/shop/common/util/RedisUtil.java

@@ -29,7 +29,6 @@ public class RedisUtil {
 
     private static StringRedisTemplate stringRedisTemplate = SpringContextUtils.getBean("stringRedisTemplate",StringRedisTemplate.class);
 
-
     //=============================common============================
     /**
      * 指定缓存失效时间
@@ -118,6 +117,22 @@ public class RedisUtil {
             return false;
         }
     }
+    /**
+     * 快速获取锁(不重试)
+     */
+    public static boolean tryLockFast(String key,Object value,long time) {
+        try {
+            Boolean result = redisTemplate.opsForValue().setIfAbsent(
+                    key,
+                    value,
+                    time,
+                    TimeUnit.SECONDS
+            );
+            return Boolean.TRUE.equals(result);
+        } catch (Exception e) {
+            return false;
+        }
+    }
 
     /**
      * 递增 此时value值必须为int类型 否则报错

+ 1 - 1
yami-shop-groupbuy/yami-shop-groupbuy-comment/src/main/java/com/yami/shop/groupbuy/comment/service/impl/GroupOrderServiceImpl.java

@@ -96,7 +96,7 @@ public class GroupOrderServiceImpl extends ServiceImpl<GroupOrderMapper, GroupOr
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String submit(String userId, ApiGroupUserOrderDto hadConfirmOrder, String remark) {
-        String orderNumber = String.valueOf(snowflake.nextId());
+        String orderNumber = "FD" + snowflake.nextId();
         Date now = new Date();
         // 获取订单地址
         UserAddrOrder userAddrOrder = mapperFacade.map(hadConfirmOrder.getUserAddrDto(), UserAddrOrder.class);

+ 86 - 12
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ChannelController.java

@@ -2,18 +2,27 @@
 package com.yami.shop.platform.controller;
 
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.model.Channel;
+import com.yami.shop.bean.param.OrderRefundStaisticsParam;
 import com.yami.shop.bean.vo.ChannelVO;
+import com.yami.shop.common.config.Constant;
+import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
+import com.yami.shop.security.platform.util.SecurityUtils;
 import com.yami.shop.service.ChannelService;
 import com.yami.shop.service.UserService;
+import com.yami.shop.sys.service.SysUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -30,6 +39,9 @@ public class ChannelController {
     private final ChannelService channelService;
     private final UserService userService;
 
+    @Autowired
+    private SysUserService sysUserService;
+
     /**
      * 查询全部
      */
@@ -39,6 +51,15 @@ public class ChannelController {
         List<Channel> channels = channelService.list();
         return R.SUCCESS(channels);
     }
+    /**
+     * 根据规则类型查询全部
+     */
+    @GetMapping("/listAllSplitRule")
+    @ApiOperation(value = "根据规则类型查询全部")
+    public R<List<Channel>> listAllSplitRule(@RequestParam(value = "splitRule") Integer splitRule) {
+        List<Channel> channels = channelService.list(new LambdaQueryWrapper<Channel>().eq(Channel::getSplitRule, splitRule));
+        return R.SUCCESS(channels);
+    }
 
     /**
      * 根据渠道ID获取商品列表
@@ -49,18 +70,6 @@ public class ChannelController {
         Channel channel = channelService.getById(id);
         return R.SUCCESS(channel);
     }
-//    /**
-//     * 分页获取
-//     */
-//    @GetMapping("/page")
-//    @ApiOperation(value = "分页获取")
-//    public R<IPage<Channel>> page(@ModelAttribute PageParam pageParam,
-//                                 @ModelAttribute Channel channel ) {
-//        IPage<Channel> page = channelService.page(pageParam,new LambdaQueryWrapper<Channel>()
-//                .eq(ObjectUtils.isNotEmpty(channel.getChannelName()),Channel::getChannelName, channel.getChannelName())
-//                .eq(ObjectUtils.isNotEmpty(channel.getStatus()), Channel::getStatus, channel.getStatus()));
-//        return R.SUCCESS(page);
-//    }
 
     /**
      * 分页获取政企列表统计
@@ -68,6 +77,7 @@ public class ChannelController {
     @GetMapping("/statisticsPage")
     @ApiOperation(value = "分页获取政企列表统计")
     public R<IPage<ChannelVO>> statisticsPage(PageParam pageParam, Channel channel ) {
+        getChannel(channel);
         IPage<ChannelVO> page = channelService.statisticsPage(pageParam,channel);
         return R.SUCCESS(page);
     }
@@ -92,4 +102,68 @@ public class ChannelController {
         channelService.updateById(channel);
         return R.SUCCESS();
     }
+
+    /**
+     * 批量修改
+     */
+    @PutMapping("/batch")
+    @ApiOperation(value = "批量修改")
+    public R batchUpdate(@RequestParam(value = "splitRule") Integer splitRule, @RequestBody List<Channel> channels) {
+        if (splitRule == null){
+            R.FAIL( "请传入拆单规则 splitRule" );
+        }
+        channelService.updateSplitRule(splitRule);
+        channelService.updateBatchById(channels);
+        return R.SUCCESS();
+    }
+
+
+    @GetMapping("/list")
+    @ApiOperation(value = "查询全部")
+    public R<List<Channel>> listByUserId() {
+        Long userId = null;
+        try {
+            userId = SecurityUtils.getSysUser().getUserId();
+        } catch (Exception e) {
+            throw new GlobalException("获取当前登录用户失败");
+        }
+        List<Channel> channels = null;
+        if(userId == Constant.SUPER_ADMIN_ID){
+            channels = channelService.list();
+        }else {
+            channels = sysUserService.findByUserId(userId);
+        }
+        Channel channel = new Channel();
+        channel.setId(0L);
+        channel.setChannelName("全部");
+        if (channels==null){
+            channels =new ArrayList<Channel>();
+        }
+        channels.add(0,channel);
+        return R.SUCCESS(channels);
+    }
+
+    private void getChannel(Channel channel){
+        if (channel.getChannelIdList()==null||channel.getChannelIdList().isEmpty()){
+            throw new GlobalException("请求参数-所属企业不允许为空");
+        }
+        if (ObjectUtil.isEmpty(channel.getUserAttrType())){
+            channel.setUserAttrType("1");//默认查询正常人员属性
+        }
+        if (channel.getChannelIdList().contains(0L)){
+            Long userId = null;
+            try {
+                userId = SecurityUtils.getSysUser().getUserId();
+            } catch (Exception e) {
+                throw new GlobalException("获取当前登录用户失败");
+            }
+            List<Long> channelIdList =  sysUserService.findByUserIdListId(userId);
+            channel.setChannelIdList(channelIdList);
+            if (userId != Constant.SUPER_ADMIN_ID&&(channel.getChannelIdList()==null||channel.getChannelIdList().isEmpty())){
+                List<Long> longs = new ArrayList<>();
+                longs.add(0L);
+                channel.setChannelIdList(longs);
+            }
+        }
+    }
 }

+ 133 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ExportTaskController.java

@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.platform.controller;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yami.shop.bean.enums.DvyType;
+import com.yami.shop.bean.enums.OrderStatus;
+import com.yami.shop.bean.model.*;
+import com.yami.shop.bean.param.*;
+import com.yami.shop.bean.vo.ExportTaskVo;
+import com.yami.shop.bean.vo.OrderCountVo;
+import com.yami.shop.common.config.Constant;
+import com.yami.shop.common.exception.GlobalException;
+import com.yami.shop.common.util.PageParam;
+import com.yami.shop.common.util.R;
+import com.yami.shop.security.comment.dao.AppConnectMapper;
+import com.yami.shop.security.comment.model.AppConnect;
+import com.yami.shop.security.platform.util.SecurityUtils;
+import com.yami.shop.service.*;
+import com.yami.shop.sys.service.SysUserService;
+import com.yami.shop.utils.CullenUtils;
+import com.yami.shop.wx.service.impl.WxProviderServiceImpl;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotBlank;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+
+/**
+ * 导出任务controller
+ */
+
+@RestController
+@RequestMapping("/platform/exportTask")
+@AllArgsConstructor
+public class ExportTaskController {
+
+    @Autowired
+    private ExportTaskService exportTaskService;
+
+    /**
+     * 直接下载文件
+     */
+    @GetMapping("/download")
+    @ApiOperation("下载文件")
+    public void downloadFile(
+            @RequestParam("fileId")  String fileId,
+            HttpServletRequest request,
+            HttpServletResponse response) throws IOException {
+        if (StringUtils.isEmpty(fileId)){
+            throw new GlobalException("文件id不能为空");
+        }
+        Long userId = getUserId();
+        // 记录开始时间
+        try {
+            exportTaskService.downloadFile(request, response, fileId,userId);
+        } catch (Exception e) {
+            throw new GlobalException(e.getMessage());
+        }
+    }
+
+    /**
+     * 中断导出
+     */
+    @GetMapping("/cancel/{fileId}")
+    public R<String> cancelExport(@PathVariable String fileId) {
+        if (StringUtils.isEmpty(fileId)){
+            throw new GlobalException("文件id不能为空");
+        }
+        Long userId = getUserId();
+        return exportTaskService.cancelExport(fileId,userId);
+    }
+
+    /**
+     * 查询导出任务列表
+     */
+    @GetMapping("/page")
+    public R<IPage<ExportTaskVo>> page(PageParam<ExportTaskVo> page,@RequestParam Integer exportType) {
+        if (ObjectUtil.isEmpty(exportType)){
+            throw new GlobalException("导出文件类型不能为空");
+        }
+        Long userId = getUserId();
+        IPage<ExportTaskVo> exportTaskIPage = exportTaskService.findPage(page,userId,exportType);
+        return R.SUCCESS(exportTaskIPage);
+    }
+
+    /**
+     * 获取当前用户信息
+     * @return
+     */
+    private Long getUserId(){
+        Long userId = null;
+        try {
+            userId = SecurityUtils.getSysUser().getUserId();
+        } catch (Exception e) {
+            throw new GlobalException("导出获取当前登录用户失败");
+        }
+        if (ObjectUtil.isEmpty(userId)){
+            throw new GlobalException("导出获取当前登录用户信息失败,请登录");
+        }
+        if (userId == Constant.SUPER_ADMIN_ID){
+            userId =null;
+        }
+        return userId;
+    }
+
+
+
+}

+ 201 - 27
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderController.java

@@ -10,33 +10,42 @@
 
 package com.yami.shop.platform.controller;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.gson.internal.LinkedTreeMap;
 import com.yami.shop.bean.enums.DvyType;
 import com.yami.shop.bean.enums.OrderStatus;
 import com.yami.shop.bean.model.*;
 import com.yami.shop.bean.param.*;
+import com.yami.shop.bean.vo.OrderCountVo;
+import com.yami.shop.common.config.Constant;
 import com.yami.shop.common.exception.GlobalException;
+import com.yami.shop.common.util.HttpUtil;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
 import com.yami.shop.security.comment.dao.AppConnectMapper;
 import com.yami.shop.security.comment.model.AppConnect;
+import com.yami.shop.security.platform.util.SecurityUtils;
 import com.yami.shop.service.*;
+import com.yami.shop.sys.service.SysUserService;
 import com.yami.shop.utils.CullenUtils;
+import com.yami.shop.utils.SmqjhUtil;
 import com.yami.shop.wx.service.impl.WxProviderServiceImpl;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -49,6 +58,7 @@ import java.util.stream.Collectors;
 @RestController
 @RequestMapping("/platform/order")
 @AllArgsConstructor
+@Log4j2
 public class OrderController {
 
     private final OrderService orderService;
@@ -60,6 +70,12 @@ public class OrderController {
     private final DeliveryService deliveryService;
     private final OrderSettlementService orderSettlementService;
     private final AppConnectMapper appConnectMapper;
+    private final SmqjhUtil smqjhUtil;
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private ExportTaskService exportTaskService;
 
 
     /**
@@ -75,14 +91,16 @@ public class OrderController {
     @GetMapping("/deliverList")
     @ApiOperation("后管端-快递订单列表")
     public R<IPage<Order>> deliverList(BackendOrderParam orderParam, PageParam<Order> page) {
+        getBackendOrderParam(orderParam);
         IPage<Order> orderIPage = orderService.deliverList(page, orderParam);
         return R.SUCCESS(orderIPage);
     }
 
     @GetMapping("/deliverListStatusNum")
     @ApiOperation("后管端-快递订单列表-订单状态数量")
-    public R<Map<String, Integer>> deliverListStatusNum() {
-        return R.SUCCESS(orderService.deliverListStatusNum());
+    public R<Map<String, Integer>> deliverListStatusNum(BackendOrderParam orderParam) {
+        getBackendOrderParam(orderParam);
+        return R.SUCCESS(orderService.deliverListStatusNum(orderParam));
     }
 
     /**
@@ -97,7 +115,7 @@ public class OrderController {
     }
 
     /**
-     * 获取信息
+     * 获取订单信息
      */
     @GetMapping("/orderInfo/{orderNumber}")
 //    @PreAuthorize("@pms.hasPermission('platform:order:info')")
@@ -106,8 +124,17 @@ public class OrderController {
         if (order == null) {
             throw new GlobalException("未找到所在的订单");
         }
-        UserAddrOrder userAddrOrder = userAddrOrderService.getById(order.getAddrOrderId());
-        order.setUserAddrOrder(userAddrOrder);
+        if (order.getOrderType().equals(4)){
+            UserAddrOrder addrOrder = new UserAddrOrder();
+            addrOrder.setReceiver(order.getConsigneeName());
+            addrOrder.setMobile(order.getConsigneeMobile());
+            addrOrder.setAddress(order.getConsigneeAddress());
+            order.setUserAddrOrder(addrOrder);
+        }else {
+            UserAddrOrder userAddrOrder = userAddrOrderService.getById(order.getAddrOrderId());
+            order.setUserAddrOrder(userAddrOrder);
+        }
+
         List<OrderItem> orderItems = orderItemService.getOrderItemsByOrderNumber(orderNumber);
         if (!orderItems.isEmpty()) {
             orderItems.forEach(c -> {
@@ -115,12 +142,36 @@ public class OrderController {
                 c.setRefundSuccessCount(orderItemService.refundSuccessCount(c.getOrderItemId()));
             });
         }
+        //操作人
+        if (order.getSplitUserId() != null) {
+            order.setSplitUserName(sysUserService.getById(order.getSplitUserId()).getUsername());
+        }
         order.setOrderItems(orderItems);
         User user = userService.getById(order.getUserId());
         if (user != null) {
             order.setNickName(user.getNickName());
             order.setUserMobile(user.getUserMobile());
         }
+
+        //子订单数据处理
+        List<Order> list = orderService.list(new LambdaUpdateWrapper<Order>().eq(Order::getParentOrderNumber, orderNumber)
+                .eq(Order::getDeleteStatus, 0));
+
+        if (ObjectUtil.isNotEmpty(list)) {
+            for (Order order1 : list) {
+
+                List<OrderItem> orderItems2 = orderItemService.getOrderItemsByOrderNumber(orderNumber);
+                if (!orderItems2.isEmpty()) {
+                    orderItems2.forEach(c -> {
+                        c.setRefundIngCount(orderItemService.refundIngCount(c.getOrderItemId()));
+                        c.setRefundSuccessCount(orderItemService.refundSuccessCount(c.getOrderItemId()));
+                    });
+                }
+                order1.setOrderItems(orderItems2);
+            }
+            order.setSubOrders(list);
+        }
+
         return R.SUCCESS(order);
     }
 
@@ -170,31 +221,50 @@ public class OrderController {
         orderParam.setUpdateTime(new Date());
         //orderParam.setHbOrderStatus(OrderStatus.CONSIGNMENT.value());
         orderParam.setUserId(order.getUserId());
-
+        orderParam.setOrderNumber(order.getOrderNumber());
+        orderParam.setOrderType(order.getOrderType());
         orderService.delivery(orderParam);
+        pushDeliveryInfo(orderParam);
 
         for (OrderItem orderItem : orderItems) {
             productService.removeProductCacheByProdId(orderItem.getProdId());
             skuService.removeSkuCacheBySkuId(orderItem.getSkuId(), orderItem.getProdId());
         }
-
-        OrderSettlement settlement = orderSettlementService.getOne(new LambdaQueryWrapper<OrderSettlement>().eq(OrderSettlement::getOrderNumber, deliveryOrderParam.getOrderNumber()));
-        UserAddrOrder userAddrOrder = userAddrOrderService.getById(order.getAddrOrderId());
-        AppConnect connect = appConnectMapper.getByUserId(order.getUserId(), 1);
-        Delivery delivery = deliveryService.getById(deliveryOrderParam.getDvyId());
-        CullenUtils.validateDataThrowException(connect==null,"openid不存在..."+order.getUserId());
-        CullenUtils.validateDataThrowException(connect.getBizUserId()==null,"openid不存在..."+order.getUserId());
-        WxProviderServiceImpl.uploadShippingInfo(
-                deliveryOrderParam.getDvyFlowId(),
-                settlement.getBizPayNo(),
-                toOrderStr(orderItems),
-                userAddrOrder.getMobile(),
-                connect.getBizUserId(),
-                delivery.getDvyNo(), 1
-        );
+        if (!order.getOrderType().equals(4)){
+            OrderSettlement settlement = orderSettlementService.getOne(new LambdaQueryWrapper<OrderSettlement>().eq(OrderSettlement::getOrderNumber, deliveryOrderParam.getOrderNumber()));
+            UserAddrOrder userAddrOrder = userAddrOrderService.getById(order.getAddrOrderId());
+            AppConnect connect = appConnectMapper.getByUserId(order.getUserId(), 1);
+            Delivery delivery = deliveryService.getById(deliveryOrderParam.getDvyId());
+            CullenUtils.validateDataThrowException(connect == null, "openid不存在..." + order.getUserId());
+            CullenUtils.validateDataThrowException(connect.getBizUserId() == null, "openid不存在..." + order.getUserId());
+            WxProviderServiceImpl.uploadShippingInfo(
+                    deliveryOrderParam.getDvyFlowId(),
+                    settlement.getBizPayNo(),
+                    toOrderStr(orderItems),
+                    userAddrOrder.getMobile(),
+                    connect.getBizUserId(),
+                    delivery.getDvyNo(), 1
+            );
+        }
         return R.SUCCESS();
     }
 
+    private void pushDeliveryInfo(Order order) {
+        if (order.getOrderType().equals(4)) {
+            Map<Object, Object> map = new LinkedTreeMap<>();
+            map.put("orderNumber", order.getOrderNumber());
+            map.put("dvyId", order.getDvyId());
+            map.put("dvyFlowId", order.getDvyFlowId());
+            map.put("dvyTime", LocalDateTime.ofInstant(order.getDvyTime().toInstant(), ZoneId.systemDefault()));
+            Delivery delivery = deliveryService.getById(order.getDvyId());
+            if (delivery!=null){
+                map.put("dvyNo", delivery.getDvyNo());
+                map.put("dvyName", delivery.getDvyName());
+            }
+            System.out.println(HttpUtil.post(smqjhUtil.getOmsBaseUrl() + "/api/v1/xsb/order/updateDeliveryStatus", map));
+        }
+    }
+
     /**
      * 配送订单模块
      */
@@ -205,8 +275,9 @@ public class OrderController {
         IPage<Order> orderIPage = orderService.deliveryOrder(page, orderParam);
         return R.SUCCESS(orderIPage);
     }
+
     /**
-     *配送订单模块(数据统计)
+     * 配送订单模块(数据统计)
      */
     @GetMapping("/selectOrderCount")
     @ApiOperation("配送订单模块(数据统计)")
@@ -221,7 +292,110 @@ public class OrderController {
         }
         return items.stream()
                 .map(item -> item.getProdName() + "*" + item.getProdCount())
-                .collect(Collectors.joining(" "));
+                .collect(Collectors.joining(";"));
+    }
+
+    /**
+     * 导出
+     *
+     * @param orderParam
+     */
+    @GetMapping("/export")
+    @ApiOperation("后管端-快递订单列表导出")
+    public R<String> export(BackendOrderParam orderParam) {
+        getBackendOrderParam(orderParam);
+        Long userId = null;
+        try {
+            userId = SecurityUtils.getSysUser().getUserId();
+        } catch (Exception e) {
+            throw new GlobalException("导出获取当前登录用户失败");
+        }
+        if (ObjectUtil.isEmpty(userId)) {
+            throw new GlobalException("导出获取当前登录用户信息失败,请登录");
+        }
+        ExportTask exportTaskOne = exportTaskService.findByUserIdAndStatusAndType(userId, 0, 1);//查询导出任务为正常订单并且在进行中的数据
+        // 异步执行
+        if (exportTaskOne != null) {
+            return R.FAIL("正常订单有导出任务正在执行中,请中断或者等待完成");
+        }
+
+        return orderService.export(orderParam, userId);
     }
 
+
+    /**
+     * 订单订单统计数
+     *
+     * @param orderParam
+     */
+    @GetMapping("/orderCount")
+    @ApiOperation("后管端-订单列表统计")
+    public R<OrderCountVo> orderCount(BackendOrderParam orderParam) {
+        getBackendOrderParam(orderParam);
+        return R.SUCCESS(orderService.orderCount(orderParam));
+    }
+
+
+    private void getBackendOrderParam(BackendOrderParam orderParam) {
+        if (orderParam.getChannelIdList() == null || orderParam.getChannelIdList().isEmpty()) {
+            throw new GlobalException("请求参数-所属企业不允许为空");
+        }
+        if (ObjectUtil.isEmpty(orderParam.getUserAttrType())) {
+            orderParam.setUserAttrType("1");//默认查询正常人员属性
+        }
+        if (orderParam.getChannelIdList().contains(0L)) {
+            //当渠道为全部的时候,人员属性传0-全部
+            orderParam.setUserAttrType("0");
+            Long userId = null;
+            try {
+                userId = SecurityUtils.getSysUser().getUserId();
+            } catch (Exception e) {
+                throw new GlobalException("获取当前登录用户失败");
+            }
+            List<Long> channelIdList = sysUserService.findByUserIdListId(userId);
+            orderParam.setChannelIdList(channelIdList);
+            if (userId != Constant.SUPER_ADMIN_ID && (orderParam.getChannelIdList() == null || orderParam.getChannelIdList().isEmpty())) {
+                List<Long> longs = new ArrayList<>();
+                longs.add(0L);
+                orderParam.setChannelIdList(longs);
+            }
+        }
+    }
+
+    /**
+     * 手动拆单处理
+     * 订单会处于拆单中
+     * 会传订单单号和订单项列表信息
+     * 会加上父订单项里面的已拆单数量
+     * 生成子订单数据 并且子订单会处于临时保存
+     */
+    @PostMapping("/manualSplit")
+    @ApiOperation("手动拆单处理")
+    public R<Order> manualSplitOrder(@RequestBody ManualSplitOrderParam param) {
+        Order subOrder = orderService.manualSplitOrder(param);
+        return R.SUCCESS(subOrder);
+    }
+
+    /**
+     * 确定拆单
+     * 会改变订单拆单状态为拆单完成
+     * 会改变子订单拆单状态为不拆单
+     */
+    @PostMapping("/confirmSplit")
+    @ApiOperation("确定拆单")
+    public R<Void> confirmSplitOrder(@RequestBody ConfirmSplitOrderParam param) {
+        orderService.confirmSplitOrder(param);
+        return R.SUCCESS();
+    }
+
+    /**
+     * 删除对应的临时子订单
+     * 加回对应的父订单项已拆单数量数量
+     */
+    @DeleteMapping("/deleteTempSubOrder")
+    @ApiOperation("删除临时子订单")
+    public R<Void> deleteTempSubOrder(@RequestParam String subOrderNumber) {
+        orderService.deleteTempSubOrder(subOrderNumber);
+        return R.SUCCESS();
+    }
 }

+ 66 - 4
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderRefundController.java

@@ -1,27 +1,34 @@
 package com.yami.shop.platform.controller;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.dto.OrderRefundDto;
-import com.yami.shop.bean.model.OrderRefund;
-import com.yami.shop.bean.model.OrderRefundRecord;
-import com.yami.shop.bean.model.RefundAppointment;
-import com.yami.shop.bean.model.RefundDelivery;
+import com.yami.shop.bean.model.*;
+import com.yami.shop.bean.param.BackendOrderParam;
 import com.yami.shop.bean.param.OrderRefundCountParam;
 import com.yami.shop.bean.param.OrderRefundStaisticsParam;
 import com.yami.shop.bean.vo.OrderRefundSkuVo;
 import com.yami.shop.bean.vo.OrderRefundVo;
+import com.yami.shop.common.config.Constant;
+import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
 import com.yami.shop.dao.*;
+import com.yami.shop.security.platform.util.SecurityUtils;
+import com.yami.shop.service.ExportTaskService;
 import com.yami.shop.service.OrderRefundService;
+import com.yami.shop.sys.service.SysUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -44,7 +51,11 @@ public class OrderRefundController {
 
     private final RefundAppointmentMapper refundAppointmentMapper;
     private final RefundDeliveryMapper refundDeliveryMapper;
+    @Autowired
+    private SysUserService sysUserService;
 
+    @Autowired
+    private ExportTaskService exportTaskService;
     /**
      * 分页查询
      *
@@ -110,6 +121,7 @@ public class OrderRefundController {
     @ApiOperation("后台分页获取退款订单列表")
     @GetMapping("/orderRefundPage")
     public R<IPage<OrderRefundVo>> orderRefundPage(PageParam<OrderRefund> page, OrderRefundStaisticsParam orderRefund) {
+        getOrderRefundStaisticsParam(orderRefund);
         IPage<OrderRefundVo> page1 = orderRefundService.orderRefundPage(page, orderRefund);
         for (OrderRefundVo record : page1.getRecords()) {
             record.setOrderRefundSkuList(orderRefundskuMapper.selectByRefundId(record.getRefundId()));
@@ -123,7 +135,57 @@ public class OrderRefundController {
     @ApiOperation("统计退款订单数量")
     @GetMapping("/orderRefundCount")
     public R<OrderRefundCountParam> orderRefundCount(OrderRefundStaisticsParam orderRefund) {
+        getOrderRefundStaisticsParam(orderRefund);
         return R.SUCCESS(orderRefundService.orderRefundCount(orderRefund));
     }
 
+    /**
+     * 导出
+     * @param orderRefund
+     * @param response
+     */
+    @GetMapping("/export")
+    @ApiOperation("后管端-退款订单列表导出")
+    public R<String> export(OrderRefundStaisticsParam orderRefund, HttpServletResponse response) {
+        getOrderRefundStaisticsParam(orderRefund);
+        Long userId = null;
+        try {
+            userId = SecurityUtils.getSysUser().getUserId();
+        } catch (Exception e) {
+            throw new GlobalException("导出获取当前登录用户失败");
+        }
+        if (ObjectUtil.isEmpty(userId)){
+            throw new GlobalException("导出获取当前登录用户信息失败,请登录");
+        }
+        ExportTask exportTaskOne =  exportTaskService.findByUserIdAndStatusAndType(userId,0,2);//查询导出任务为退款订单并且在进行中的数据
+        // 异步执行
+        if (exportTaskOne!=null){
+            return R.FAIL("售后订单有导出任务正在执行中,请中断或者等待完成");
+        }
+        return orderRefundService.export(orderRefund,userId);
+    }
+
+    private void getOrderRefundStaisticsParam(OrderRefundStaisticsParam orderRefund){
+        if (orderRefund.getChannelIdList()==null||orderRefund.getChannelIdList().isEmpty()){
+            throw new GlobalException("请求参数-所属企业不允许为空");
+        }
+        if (ObjectUtil.isEmpty(orderRefund.getUserAttrType())){
+            orderRefund.setUserAttrType("1");//默认查询正常人员属性
+        }
+        if (orderRefund.getChannelIdList().contains(0L)){
+            Long userId = null;
+            try {
+                userId = SecurityUtils.getSysUser().getUserId();
+            } catch (Exception e) {
+                throw new GlobalException("获取当前登录用户失败");
+            }
+            List<Long> channelIdList =  sysUserService.findByUserIdListId(userId);
+            orderRefund.setChannelIdList(channelIdList);
+            if (userId != Constant.SUPER_ADMIN_ID&&(orderRefund.getChannelIdList()==null||orderRefund.getChannelIdList().isEmpty())){
+                List<Long> longs = new ArrayList<>();
+                longs.add(0L);
+                orderRefund.setChannelIdList(longs);
+            }
+        }
+    }
 }

+ 52 - 6
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/PointsRechargeController.java

@@ -1,27 +1,34 @@
 // PointsRechargeController.java
 package com.yami.shop.platform.controller;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yami.shop.bean.model.PointsRecharge;
+import com.yami.shop.bean.po.EnterpriseUserPo;
 import com.yami.shop.bean.vo.PointsRechargeVO;
+import com.yami.shop.common.config.Constant;
+import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
 import com.yami.shop.security.platform.model.YamiSysUser;
 import com.yami.shop.security.platform.util.SecurityUtils;
 import com.yami.shop.service.PointsRechargeService;
 import com.yami.shop.service.UserService;
+import com.yami.shop.sys.service.SysUserService;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -38,18 +45,21 @@ import java.util.List;
 public class PointsRechargeController {
 
     private final PointsRechargeService pointsRechargeService;
+    @Autowired
+    private SysUserService sysUserService;
 
     /**
      * 分页获取积分充值列表
      */
     @GetMapping("/page")
     public R<IPage<PointsRecharge>> page(PageParam<PointsRecharge> pageParam, PointsRecharge pointsRecharge) {
-        IPage<PointsRecharge> page = pointsRechargeService.page(pageParam,new LambdaQueryWrapper<PointsRecharge>()
-                .eq(ObjectUtils.isNotEmpty(pointsRecharge.getChannelId()),PointsRecharge::getChannelId,pointsRecharge.getChannelId())
-                .eq(ObjectUtils.isNotEmpty(pointsRecharge.getUserPhone()),PointsRecharge::getUserPhone,pointsRecharge.getUserPhone())
-                .orderByDesc(PointsRecharge::getCreateTime)
-        );
-        return R.SUCCESS(page);
+        getPointsRecharge(pointsRecharge);
+//        IPage<PointsRecharge> page = pointsRechargeService.page(pageParam,new LambdaQueryWrapper<PointsRecharge>()
+//                .in(ObjectUtils.isNotEmpty(pointsRecharge.getChannelIdList()),PointsRecharge::getChannelId,pointsRecharge.getChannelIdList())
+//                .eq(ObjectUtils.isNotEmpty(pointsRecharge.getUserPhone()),PointsRecharge::getUserPhone,pointsRecharge.getUserPhone())
+//                .orderByDesc(PointsRecharge::getCreateTime)
+//        );
+        return R.SUCCESS(pointsRechargeService.findPage(pageParam,pointsRecharge));
     }
 
 
@@ -58,6 +68,7 @@ public class PointsRechargeController {
      */
     @GetMapping("/statisticsList")
     public R<IPage<PointsRechargeVO>> statisticsList(PageParam<PointsRecharge> pageParam, PointsRecharge pointsRecharge) {
+        getPointsRecharge(pointsRecharge);
         IPage<PointsRechargeVO> page = pointsRechargeService.statisticsList(pointsRecharge);
         return R.SUCCESS(page);
     }
@@ -129,5 +140,40 @@ public class PointsRechargeController {
             return R.FAIL("导入失败:" + e.getMessage());
         }
     }
+    /**
+     * 导出积分
+     * @param pointsRecharge
+     * @param response
+     */
+    @GetMapping("/export")
+    @ApiOperation("后管端-积分列表导出")
+    public void export(PointsRecharge pointsRecharge, HttpServletResponse response) {
+        getPointsRecharge(pointsRecharge);
+        pointsRechargeService.export(pointsRecharge,response);
+    }
+    private void getPointsRecharge(PointsRecharge pointsRecharge){
+        if (pointsRecharge.getChannelIdList()==null||pointsRecharge.getChannelIdList().isEmpty()){
+            throw new GlobalException("请求参数-所属企业不允许为空");
+        }
+        if (ObjectUtil.isEmpty(pointsRecharge.getUserAttrType())){
+            pointsRecharge.setUserAttrType("1");//默认查询正常人员属性
+        }
+        if (pointsRecharge.getChannelIdList().contains(0L)){
+            Long userId = null;
+            try {
+                userId = SecurityUtils.getSysUser().getUserId();
+            } catch (Exception e) {
+                throw new GlobalException("获取当前登录用户失败");
+            }
+            List<Long> channelIdList =  sysUserService.findByUserIdListId(userId);
+            pointsRecharge.setChannelIdList(channelIdList);
+            if (userId != Constant.SUPER_ADMIN_ID&&(pointsRecharge.getChannelIdList()==null||pointsRecharge.getChannelIdList().isEmpty())){
+                List<Long> longs = new ArrayList<>();
+                longs.add(0L);
+                pointsRecharge.setChannelIdList(longs);
+            }
+        }
+    }
+
 
 }

+ 20 - 2
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/PointsRecordController.java

@@ -3,15 +3,18 @@ package com.yami.shop.platform.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yami.shop.bean.model.PointsRecharge;
 import com.yami.shop.bean.model.PointsRecord;
+import com.yami.shop.bean.po.PointsRecordPo;
+import com.yami.shop.bean.vo.PointsRecordVo;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
 import com.yami.shop.service.PointsRecordService;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.Arrays;
 
@@ -34,7 +37,7 @@ public class PointsRecordController {
      */
     @GetMapping("/page")
     public R<IPage<PointsRecord>> page(PageParam<PointsRecord> pageParam) {
-        IPage<PointsRecord> page = pointsRecordService.page(pageParam,new QueryWrapper<PointsRecord>().orderByDesc("creationDate"));
+        IPage<PointsRecord> page = pointsRecordService.page(pageParam, new QueryWrapper<PointsRecord>().orderByDesc("creationDate"));
         return R.SUCCESS(page);
     }
 
@@ -73,4 +76,19 @@ public class PointsRecordController {
         pointsRecordService.removeByIds(Arrays.asList(ids));
         return R.SUCCESS();
     }
+
+    @GetMapping("/backendPointsRecordList")
+    @ApiOperation("后台-积分使用记录")
+    public R<IPage<PointsRecordVo>> backendOrderList(PointsRecordPo po) {
+        return R.SUCCESS(pointsRecordService.backendPointsRecordList(po));
+    }
+
+    @GetMapping("/backendPointsRecordListExport")
+    @ApiOperation("后台-积分使用记录-导出")
+    public R<?> backendPointsRecordListExport(HttpServletResponse response, PointsRecordPo po) {
+        pointsRecordService.backendPointsRecordListExport(response,po);
+        return R.SUCCESS();
+    }
+
+
 }

+ 7 - 6
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ProdCommController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.model.ProdComm;
 import com.yami.shop.bean.po.CommPo;
 import com.yami.shop.common.util.PageParam;
+import com.yami.shop.common.util.R;
 import com.yami.shop.service.ProdCommService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -24,22 +25,22 @@ public class ProdCommController {
 
     @GetMapping("/backendCommList")
     @ApiOperation(value = "后台管理-用户评价")
-    public ResponseEntity<IPage<ProdComm>> backendCommList(PageParam<ProdComm> page, CommPo po) {
-        return ResponseEntity.ok(prodCommService.backendCommList(page,po));
+    public R<IPage<ProdComm>> backendCommList(PageParam<ProdComm> page, CommPo po) {
+        return R.SUCCESS(prodCommService.backendCommList(page,po));
     }
 
     @GetMapping("/backendCommAudit")
     @ApiOperation(value = "后台管理-用户评价-(审核,1:通过,0:待审核, -1:不通过审核)")
-    public ResponseEntity<Void> backendCommAudit(Long prodCommId, Integer status) {
+    public R<Void> backendCommAudit(Long prodCommId, Integer status) {
         prodCommService.backendCommAudit(prodCommId,status);
-        return ResponseEntity.ok().build();
+        return R.SUCCESS();
     }
 
     @GetMapping("/reply")
     @ApiOperation(value = "后台-商家回复")
-    public ResponseEntity<Void> reply(Long prodCommId, String replyContent) {
+    public R<Void> reply(Long prodCommId, String replyContent) {
         prodCommService.reply(prodCommId,replyContent);
-        return ResponseEntity.ok().build();
+        return R.SUCCESS();
     }
 
 

+ 35 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/SMOrderController.java

@@ -0,0 +1,35 @@
+package com.yami.shop.platform.controller;
+
+import com.yami.shop.bean.po.SMOrderPo;
+import com.yami.shop.common.exception.GlobalException;
+import com.yami.shop.common.util.R;
+import com.yami.shop.service.OrderService;
+import com.yami.shop.service.hb.IHBOrderService;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/sm/order")
+@AllArgsConstructor
+@Log4j2
+public class SMOrderController {
+
+    private final OrderService orderService;
+    private final IHBOrderService hbOrderService;
+
+    @PostMapping("/addSMOrder")
+    @ApiOperation(value = "addSMOrder")
+    public R<?> addSMOrder(@RequestBody SMOrderPo orderPo) {
+        if (orderPo.getOrderItems() == null){
+            throw new GlobalException("订单项不能为空");
+        }
+        String orderNumber = orderService.addSMOrder(orderPo);
+        hbOrderService.createOrderAsync(orderNumber);
+        return R.SUCCESS();
+    }
+}

+ 15 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopCategoryController.java

@@ -11,6 +11,7 @@ import com.yami.shop.security.platform.model.YamiSysUser;
 import com.yami.shop.security.platform.util.SecurityUtils;
 import com.yami.shop.service.IShopCategoryService;
 import com.yami.shop.service.ShopDetailService;
+import com.yami.shop.utils.SmqjhUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -40,6 +41,7 @@ public class ShopCategoryController {
 
     private final IShopCategoryService shopCategoryService;
     private final ShopDetailService shopDetailService;
+    private final SmqjhUtil smqjhUtil;
 
     /**
      * 分页查询门店前台类目列表
@@ -163,6 +165,19 @@ public class ShopCategoryController {
             return R.FAIL("门店前台类目不存在");
         }
         shopCategoryService.updateById(shopCategory);
+
+
+        ShopCategory dbShopCategory1 = shopCategoryService.getById(shopCategory.getId());
+        try {
+            String syncUrl = smqjhUtil.getSmqjhPmsUrl() + "/syncShopCategoryData";
+            log.info("推送url: {}",syncUrl);
+            // 将frontCategory对象作为JSON放入请求体
+            String response = com.yami.shop.common.util.HttpUtil.post(syncUrl, dbShopCategory1);
+            log.info("推送frontCategory到同步服务器结果: {}", response);
+        } catch (Exception e) {
+            log.error("推送frontCategory到同步服务器失败: {}", e.getMessage(), e);
+        }
+
         return R.SUCCESS();
     }
 

+ 87 - 102
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopDetailController.java

@@ -1,47 +1,16 @@
-/*
- * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
- *
- * https://www.gz-yami.com/
- *
- */
 
 package com.yami.shop.platform.controller;
 
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yami.shop.bean.enums.OfflineHandleEventType;
-import com.yami.shop.bean.enums.ShopStatus;
-import com.yami.shop.bean.model.OfflineHandleEvent;
 import com.yami.shop.bean.model.ShopDetail;
-import com.yami.shop.bean.model.User;
-import com.yami.shop.bean.param.OfflineHandleEventAuditParam;
 import com.yami.shop.common.exception.GlobalException;
-import com.yami.shop.common.exception.YamiShopBindException;
 import com.yami.shop.common.util.PageParam;
-import com.yami.shop.common.util.RedisUtil;
-import com.yami.shop.security.comment.constants.SecurityConstants;
-import com.yami.shop.security.comment.model.AppConnect;
-import com.yami.shop.security.comment.service.AppConnectService;
-import com.yami.shop.security.platform.util.SecurityUtils;
-import com.yami.shop.service.OfflineHandleEventService;
 import com.yami.shop.service.ShopDetailService;
-import com.yami.shop.service.UserService;
 import lombok.AllArgsConstructor;
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.oauth2.common.OAuth2AccessToken;
-import org.springframework.security.oauth2.provider.token.TokenStore;
 import org.springframework.web.bind.annotation.*;
 
-import java.math.BigInteger;
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import com.yami.shop.common.util.R;
 
@@ -58,11 +27,6 @@ import com.yami.shop.common.util.R;
 public class ShopDetailController {
 
     private final ShopDetailService shopDetailService;
-    private final OfflineHandleEventService offlineHandleEventService;
-    private final AppConnectService appConnectService;
-    private final TokenStore tokenStore;
-    private final UserService userService;
-
 
     /**
      * 分页获取门店详细列表
@@ -76,83 +40,104 @@ public class ShopDetailController {
         return R.SUCCESS(page);
     }
 
-
-
     /**
-     * 通过活动id获取下线信息
+     * 获取所有的门店
      */
-    @GetMapping("/getOfflineHandleEventByShopId/{shopId}")
-    @PreAuthorize("@pms.hasPermission('shop:shopAuditing:info')")
-    public R<OfflineHandleEvent> getOfflineHandleEventByShopId(@PathVariable("shopId") Long shopId) {
-        OfflineHandleEvent offlineHandleEvent = offlineHandleEventService.getProcessingEventByHandleTypeAndHandleId(OfflineHandleEventType.SHOP.getValue(), shopId);
-        return R.SUCCESS(offlineHandleEvent);
+    @GetMapping("/list")
+    public R<List<ShopDetail>> list() {
+        List<ShopDetail> list = shopDetailService.list();
+        return R.SUCCESS(list);
     }
 
     /**
-     * 下线活动
+     * 修改门店拆单信息
      */
-    @PostMapping("/offline")
-    @PreAuthorize("@pms.hasPermission('shop:shopAuditing:audit')")
-    public R offline(@RequestBody OfflineHandleEvent offlineHandleEvent) {
-        Long sysUserId = SecurityUtils.getSysUser().getUserId();
-        ShopDetail shopDetail = shopDetailService.getShopDetailByShopId(offlineHandleEvent.getHandleId());
-        if (shopDetail == null) {
-            throw new GlobalException("未找到该店铺信息");
-        }
-        if (!Objects.equals(shopDetail.getShopStatus(), ShopStatus.OPEN.value())) {
-            throw new GlobalException("店铺不处于营业状态,不能进行下线");
-        }
-        shopDetailService.offline(shopDetail, offlineHandleEvent.getOfflineReason(), sysUserId);
-
-        // 清除用户登陆token
-        User user = userService.getUserByUserId(shopDetail.getUserId());
-        if (!Objects.isNull(user)) {
-            List<AppConnect> appConnects = appConnectService.list(new LambdaQueryWrapper<AppConnect>().eq(AppConnect::getUserId, user.getUserId()));
-            if (CollectionUtils.isNotEmpty(appConnects)) {
-                for (AppConnect appConnect : appConnects) {
-                    // 移除登录成功的验证缓存
-                    Map<String, String> values = new LinkedHashMap<>();
-                    values.put("username", appConnect.getAppId() + StrUtil.COLON + appConnect.getBizUserId());
-                    values.put("client_id", "null");
-                    values.put("scope", "");
-                    String key = SecurityConstants.YAMI_OAUTH_PREFIX + "auth_to_access:" + generateKey(values);
-                    RedisUtil.del(key);
-                    // 移除token校验的缓存
-                    Collection<OAuth2AccessToken> tokens = tokenStore.findTokensByClientIdAndUserName(StrUtil.NULL, appConnect.getAppId() + StrUtil.COLON + appConnect.getBizUserId());
-                    for (OAuth2AccessToken token : tokens) {
-                        RedisUtil.del(SecurityConstants.YAMI_OAUTH_PREFIX + "access:" + token.getValue());
-                    }
-                }
-            }
+    @PutMapping("/updateShopDetail")
+    public R updateShopDetail(@RequestBody ShopDetail shopDetail) {
+        if (shopDetail.getShopId()==null){
+            throw new GlobalException("店铺id不能为空");
         }
+        shopDetailService.updateById(shopDetail);
         return R.SUCCESS();
     }
 
-    /**
-     * 店铺审核重新开店
-     */
-    @PostMapping("/auditShop")
-    @PreAuthorize("@pms.hasPermission('shop:shopAuditing:audit')")
-    public R auditOfflineShop(@RequestBody OfflineHandleEventAuditParam offlineHandleEventAuditParam) {
-        Long sysUserId = SecurityUtils.getSysUser().getUserId();
-        ShopDetail shopDetail = shopDetailService.getShopDetailByShopId(offlineHandleEventAuditParam.getHandleId());
-        if (shopDetail == null) {
-            throw new GlobalException("未找到店铺信息");
-        }
-        shopDetailService.auditOfflineShop(offlineHandleEventAuditParam, sysUserId);
 
-        return R.SUCCESS();
-    }
 
-    private String generateKey(Map<String, String> values) {
-        MessageDigest digest;
-        try {
-            digest = MessageDigest.getInstance("MD5");
-            byte[] bytes = digest.digest(values.toString().getBytes(StandardCharsets.UTF_8));
-            return String.format("%032x", new BigInteger(1, bytes));
-        } catch (NoSuchAlgorithmException nsae) {
-            throw new IllegalStateException("MD5 algorithm not available.  Fatal (should be in the JDK).", nsae);
-        }
-    }
+//    /**
+//     * 通过活动id获取下线信息
+//     */
+//    @GetMapping("/getOfflineHandleEventByShopId/{shopId}")
+//    @PreAuthorize("@pms.hasPermission('shop:shopAuditing:info')")
+//    public R<OfflineHandleEvent> getOfflineHandleEventByShopId(@PathVariable("shopId") Long shopId) {
+//        OfflineHandleEvent offlineHandleEvent = offlineHandleEventService.getProcessingEventByHandleTypeAndHandleId(OfflineHandleEventType.SHOP.getValue(), shopId);
+//        return R.SUCCESS(offlineHandleEvent);
+//    }
+
+//    /**
+//     * 下线活动
+//     */
+//    @PostMapping("/offline")
+//    @PreAuthorize("@pms.hasPermission('shop:shopAuditing:audit')")
+//    public R offline(@RequestBody OfflineHandleEvent offlineHandleEvent) {
+//        Long sysUserId = SecurityUtils.getSysUser().getUserId();
+//        ShopDetail shopDetail = shopDetailService.getShopDetailByShopId(offlineHandleEvent.getHandleId());
+//        if (shopDetail == null) {
+//            throw new GlobalException("未找到该店铺信息");
+//        }
+//        if (!Objects.equals(shopDetail.getShopStatus(), ShopStatus.OPEN.value())) {
+//            throw new GlobalException("店铺不处于营业状态,不能进行下线");
+//        }
+//        shopDetailService.offline(shopDetail, offlineHandleEvent.getOfflineReason(), sysUserId);
+//
+//        // 清除用户登陆token
+//        User user = userService.getUserByUserId(shopDetail.getUserId());
+//        if (!Objects.isNull(user)) {
+//            List<AppConnect> appConnects = appConnectService.list(new LambdaQueryWrapper<AppConnect>().eq(AppConnect::getUserId, user.getUserId()));
+//            if (CollectionUtils.isNotEmpty(appConnects)) {
+//                for (AppConnect appConnect : appConnects) {
+//                    // 移除登录成功的验证缓存
+//                    Map<String, String> values = new LinkedHashMap<>();
+//                    values.put("username", appConnect.getAppId() + StrUtil.COLON + appConnect.getBizUserId());
+//                    values.put("client_id", "null");
+//                    values.put("scope", "");
+//                    String key = SecurityConstants.YAMI_OAUTH_PREFIX + "auth_to_access:" + generateKey(values);
+//                    RedisUtil.del(key);
+//                    // 移除token校验的缓存
+//                    Collection<OAuth2AccessToken> tokens = tokenStore.findTokensByClientIdAndUserName(StrUtil.NULL, appConnect.getAppId() + StrUtil.COLON + appConnect.getBizUserId());
+//                    for (OAuth2AccessToken token : tokens) {
+//                        RedisUtil.del(SecurityConstants.YAMI_OAUTH_PREFIX + "access:" + token.getValue());
+//                    }
+//                }
+//            }
+//        }
+//        return R.SUCCESS();
+//    }
+//
+//    /**
+//     * 店铺审核重新开店
+//     */
+//    @PostMapping("/auditShop")
+//    @PreAuthorize("@pms.hasPermission('shop:shopAuditing:audit')")
+//    public R auditOfflineShop(@RequestBody OfflineHandleEventAuditParam offlineHandleEventAuditParam) {
+//        Long sysUserId = SecurityUtils.getSysUser().getUserId();
+//        ShopDetail shopDetail = shopDetailService.getShopDetailByShopId(offlineHandleEventAuditParam.getHandleId());
+//        if (shopDetail == null) {
+//            throw new GlobalException("未找到店铺信息");
+//        }
+//        shopDetailService.auditOfflineShop(offlineHandleEventAuditParam, sysUserId);
+//
+//        return R.SUCCESS();
+//    }
+//
+//    private String generateKey(Map<String, String> values) {
+//        MessageDigest digest;
+//        try {
+//            digest = MessageDigest.getInstance("MD5");
+//            byte[] bytes = digest.digest(values.toString().getBytes(StandardCharsets.UTF_8));
+//            return String.format("%032x", new BigInteger(1, bytes));
+//        } catch (NoSuchAlgorithmException nsae) {
+//            throw new IllegalStateException("MD5 algorithm not available.  Fatal (should be in the JDK).", nsae);
+//        }
+//    }
 
 }

+ 88 - 18
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/SkuController.java

@@ -1,35 +1,31 @@
-/*
- * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
- *
- * https://www.gz-yami.com/
- *
- * 未经允许,不可做商业用途!
- *
- * 版权所有,侵权必究!
- */
-
 package com.yami.shop.platform.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.model.Sku;
+import com.yami.shop.bean.po.FreightStatisticsPo;
+import com.yami.shop.bean.po.SkuStatisticsPo;
+import com.yami.shop.bean.vo.FreightStatisticsVo;
+import com.yami.shop.bean.vo.IdNameVo;
+import com.yami.shop.bean.vo.SkuStatisticsVo;
+import com.yami.shop.common.util.PageParam;
+import com.yami.shop.common.util.R;
+import com.yami.shop.security.platform.util.SecurityUtils;
+import com.yami.shop.service.ChannelService;
 import com.yami.shop.service.SkuService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
-import com.yami.shop.common.util.R;
+import java.util.stream.Collectors;
+
 /**
  * 商品SKU管理实现
- *
- * @author lgh
- * @version 1.0.0
- * @since 2018-11-26
  */
 @RestController
 @RequestMapping("/platform/sku")
@@ -37,6 +33,7 @@ import com.yami.shop.common.util.R;
 public class SkuController {
 
     private final SkuService skuService;
+    private final ChannelService channelService;
 
     @GetMapping("/getAllSkuList")
     @PreAuthorize("@pms.hasPermission('plateform:sku:list')")
@@ -44,4 +41,77 @@ public class SkuController {
         List<Sku> skus = skuService.listByProdId(prodId);
         return R.SUCCESS(skus);
     }
+
+    @GetMapping("/skuStatisticsList")
+    @ApiOperation(value = "对账单汇总表(商品)-列表")
+    public R<IPage<SkuStatisticsVo>> skuStatisticsList(PageParam<SkuStatisticsPo> page, SkuStatisticsPo po) {
+        if (po.getChannelIds().contains(0L)) {
+            List<IdNameVo> idNameVos = channelService.queryMyChannel(SecurityUtils.getSysUser().getUserId());
+            if (!idNameVos.isEmpty()) {
+                List<Long> ids = idNameVos.stream().map(IdNameVo::getId).collect(Collectors.toList());
+                po.setChannelIds(ids);
+            }
+        }
+        if (po.getUserAttrType() == null) {
+            po.setUserAttrType("1");
+        }
+        return R.SUCCESS(skuService.skuStatisticsList(page, po));
+    }
+
+    @GetMapping(value = "/skuStatisticsExcel", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
+    @ApiOperation("对账单汇总表(商品)-导出")
+    public void skuStatisticsExcel(HttpServletResponse response, SkuStatisticsPo po) {
+        if (po.getChannelIds().contains(0L)) {
+            List<IdNameVo> idNameVos = channelService.queryMyChannel(SecurityUtils.getSysUser().getUserId());
+            if (!idNameVos.isEmpty()) {
+                List<Long> ids = idNameVos.stream().map(IdNameVo::getId).collect(Collectors.toList());
+                po.setChannelIds(ids);
+            }
+        }
+        if (po.getUserAttrType() == null) {
+            po.setUserAttrType("1");
+        }
+        skuService.skuStatisticsExcel(response, po);
+    }
+
+    @GetMapping("/freightStatisticsList")
+    @ApiOperation(value = "运费明细表-列表")
+    public R<IPage<FreightStatisticsVo>> freightStatisticsList(PageParam<FreightStatisticsPo> page, FreightStatisticsPo po) {
+        if (po.getChannelIds().contains(0L)) {
+            List<IdNameVo> idNameVos = channelService.queryMyChannel(SecurityUtils.getSysUser().getUserId());
+            if (!idNameVos.isEmpty()) {
+                List<Long> ids = idNameVos.stream().map(IdNameVo::getId).collect(Collectors.toList());
+                po.setChannelIds(ids);
+            }
+        }
+        if (po.getUserAttrType() == null) {
+            po.setUserAttrType("1");
+        }
+        return R.SUCCESS(skuService.freightStatisticsList(page, po));
+    }
+
+    @GetMapping("/freightStatisticsExcel")
+    @ApiOperation("运费明细表-导出")
+    public R<Void> freightStatisticsExcel(HttpServletResponse response, FreightStatisticsPo po) {
+        if (po.getChannelIds().contains(0L)) {
+            List<IdNameVo> idNameVos = channelService.queryMyChannel(SecurityUtils.getSysUser().getUserId());
+            if (!idNameVos.isEmpty()) {
+                List<Long> ids = idNameVos.stream().map(IdNameVo::getId).collect(Collectors.toList());
+                po.setChannelIds(ids);
+            }
+        }
+        if (po.getUserAttrType() == null) {
+            po.setUserAttrType("1");
+        }
+        skuService.freightStatisticsExcel(response, po);
+        return R.SUCCESS();
+    }
+
+    @GetMapping("/test")
+    @ApiOperation("导出测试")
+    public R<Void> test(HttpServletResponse response) {
+        skuService.test(response);
+        return R.SUCCESS();
+    }
+
 }

+ 48 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/UserEnterpriseController.java

@@ -1,14 +1,19 @@
 package com.yami.shop.platform.controller;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.model.User;
+import com.yami.shop.bean.param.OrderRefundStaisticsParam;
 import com.yami.shop.bean.po.EnterpriseUserLogPo;
 import com.yami.shop.bean.po.EnterpriseUserPo;
 import com.yami.shop.bean.vo.EnterpriseUserVo;
+import com.yami.shop.common.config.Constant;
+import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
 import com.yami.shop.security.platform.util.SecurityUtils;
 import com.yami.shop.service.UserService;
+import com.yami.shop.sys.service.SysUserService;
 import io.swagger.annotations.ApiOperation;
 import lombok.SneakyThrows;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +21,9 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 @RestController
 @RequestMapping("/admin/enterprise")
@@ -24,6 +31,8 @@ public class UserEnterpriseController {
 
     @Autowired
     private UserService userService;
+    @Autowired
+    private SysUserService sysUserService;
 
     @GetMapping("/downloadErrorExcel")
     @ApiOperation("导出失败记录")
@@ -58,6 +67,7 @@ public class UserEnterpriseController {
     @ApiOperation("员工列表")
     @GetMapping("/enterpriseUserList")
     public R<IPage<EnterpriseUserVo>> enterpriseUserList(EnterpriseUserPo po, PageParam<EnterpriseUserPo> page) {
+        getEnterpriseUserPo(po);
         IPage<EnterpriseUserVo> userPage =  userService.enterpriseUserList(page,po);
         return R.SUCCESS(userPage);
     }
@@ -98,7 +108,45 @@ public class UserEnterpriseController {
         updateUser.setChannelId(user.getChannelId());
         updateUser.setUserId(user.getUserId());
         updateUser.setStatus(user.getStatus());
+        updateUser.setUserAttrType(user.getUserAttrType());
         userService.updateById(updateUser);
         return R.SUCCESS();
     }
+
+
+    /**
+     * 导出
+     * @param po
+     * @param response
+     */
+    @GetMapping("/export")
+    @ApiOperation("后管端-用户列表导出")
+    public void export(EnterpriseUserPo po, HttpServletResponse response) {
+        getEnterpriseUserPo(po);
+        userService.export(po,response);
+    }
+
+    private void getEnterpriseUserPo(EnterpriseUserPo po){
+        if (po.getChannelIdList()==null||po.getChannelIdList().isEmpty()){
+            throw new GlobalException("请求参数-所属企业不允许为空");
+        }
+        if (ObjectUtil.isEmpty(po.getUserAttrType())){
+            po.setUserAttrType("1");//默认查询正常人员属性
+        }
+        if (po.getChannelIdList().contains(0L)){
+            Long userId = null;
+            try {
+                userId = SecurityUtils.getSysUser().getUserId();
+            } catch (Exception e) {
+                throw new GlobalException("获取当前登录用户失败");
+            }
+            List<Long> channelIdList =  sysUserService.findByUserIdListId(userId);
+            po.setChannelIdList(channelIdList);
+            if (userId != Constant.SUPER_ADMIN_ID&&(po.getChannelIdList()==null||po.getChannelIdList().isEmpty())){
+                List<Long> longs = new ArrayList<>();
+                longs.add(0L);
+                po.setChannelIdList(longs);
+            }
+        }
+    }
 }

+ 20 - 4
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java

@@ -1,13 +1,18 @@
 package com.yami.shop.platform.controller.hb;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.shop.bean.model.Order;
 import com.yami.shop.common.util.hb.HBR;
+import com.yami.shop.service.OrderService;
 import com.yami.shop.service.hb.IHBOrderService;
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * 海博-订单信息管理
  *
@@ -23,17 +28,28 @@ import org.springframework.web.bind.annotation.*;
 public class HBOrderController {
 
     private final IHBOrderService orderService;
+    private final OrderService orderServicel;
 
     /**
      * 海博订单创建接口-推送接口
      *
-     * @param channelOrderId 海博订单单号
+     * @param orderNumber 订单单号
      * @return 前台类目响应
      */
     @PostMapping("/createOrderAsync")
-    public String addGoods(String channelOrderId) {
-        log.info("海博新增订单{}", channelOrderId);
-        return orderService.createOrderAsync(channelOrderId);
+    public String addGoods(String orderNumber) {
+        log.info("海博新增订单{}", orderNumber);
+//        //查询订单 ID>1354的
+//        List<Order> orders = orderServicel.list(new LambdaQueryWrapper<Order>()
+//                .eq(Order::getIsPayed, 1)
+//                .gt(Order::getOrderId, 1354)
+//                .ne(Order::getActualTotal, 0.00)
+//        );
+//        for (Order order : orders) {
+//            orderService.createOrderAsync(order.getOrderNumber());
+//        }
+
+        return orderService.createOrderAsync(orderNumber);
     }
 
     /**

+ 90 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/smqjh/XSBController.java

@@ -0,0 +1,90 @@
+
+package com.yami.shop.platform.controller.smqjh;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.shop.bean.model.Product;
+import com.yami.shop.bean.model.Sku;
+import com.yami.shop.bean.vo.XSBProductVO;
+import com.yami.shop.bean.vo.XSBSkuVO;
+import com.yami.shop.service.ProductService;
+import com.yami.shop.service.SkuService;
+import com.yami.shop.utils.SmqjhUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 星闪豹数据同步问题
+ *
+ * @author FBJ
+ * @version 1.0.0
+ * @since 2025-12-15
+ */
+@RestController
+@RequestMapping("/platform/xsb")
+@AllArgsConstructor
+@Log4j2
+public class XSBController {
+    private final ProductService productService;
+    private final SkuService skuService;
+    private final SmqjhUtil smqjhUtil;
+
+    /**
+     * 同步商品
+     */
+    @PostMapping("/syncProd")
+    public String syncProd() {
+        List<Product> list = productService.list(new LambdaQueryWrapper<Product>()
+                .eq(Product::getIsDelete, 0)
+                .eq(Product::getStatus, 1));
+        try {
+            List<XSBProductVO> shopSkuList = new ArrayList<>();
+            for (Product productAdd : list) {
+                XSBProductVO xsbProductVO = new XSBProductVO();
+                BeanUtils.copyProperties(productAdd, xsbProductVO);
+                xsbProductVO.setThirdSpuId(String.valueOf(productAdd.getProdId()));
+                xsbProductVO.setBusinessType("XSB");
+                shopSkuList.add(xsbProductVO);
+            }
+            String syncUrl = smqjhUtil.getSmqjhPmsUrl() + "/syncProductData";
+            log.info("推送url: {}",syncUrl);
+            // 将frontCategory对象作为JSON放入请求体
+            String response = com.yami.shop.common.util.HttpUtil.post(syncUrl, shopSkuList);
+            log.info("推送frontCategory到同步服务器结果: {}", response);
+        } catch (Exception e) {
+            log.error("推送frontCategory到同步服务器失败: {}", e.getMessage(), e);
+        }
+        return "success";
+    }
+
+    /**
+     * 同步商品SKUcc
+     */
+    @PostMapping("/syncSku")
+    public String syncSku() {
+        try {
+            List<XSBSkuVO> shopSkuList = new ArrayList<>();
+            List<Sku> list = skuService.list(new LambdaQueryWrapper<Sku>().eq(Sku::getIsDelete, 0));
+            for (Sku sku : list) {
+                XSBSkuVO xsbSkuVO = new XSBSkuVO();
+                BeanUtils.copyProperties(sku, xsbSkuVO);
+                xsbSkuVO.setThirdSkuId(String.valueOf(sku.getSkuId()));
+                xsbSkuVO.setBusinessType("XSB");
+                shopSkuList.add(xsbSkuVO);
+            }
+            String syncUrl = smqjhUtil.getSmqjhPmsUrl() + "/syncSkuData";
+            log.info("推送url: {}",syncUrl);
+            // 将frontCategory对象作为JSON放入请求体
+            String response = com.yami.shop.common.util.HttpUtil.post(syncUrl, shopSkuList);
+            log.info("推送frontCategory到同步服务器结果: {}", response);
+        } catch (Exception e) {
+            log.error("推送frontCategory到同步服务器失败: {}", e.getMessage(), e);
+        }
+
+        return "";
+    }
+}

+ 67 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/smqjh/XSBRefundOrderController.java

@@ -0,0 +1,67 @@
+
+package com.yami.shop.platform.controller.smqjh;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.yami.shop.bean.vo.xsb.RefundOrderPushVo;
+import com.yami.shop.common.bean.smqjh.OrderRefundCancelVo;
+import com.yami.shop.common.bean.smqjh.OrderRefundExpressParamVo;
+import com.yami.shop.common.util.R;
+import com.yami.shop.service.xsb.XSBRefundOrderService;
+import lombok.AllArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.UUID;
+
+/**
+ * 星闪豹数据同步问题
+ *
+ * @author FBJ
+ * @version 1.0.0
+ * @since 2025-12-15
+ */
+@RestController
+@RequestMapping("/platform/xsb/refund")
+@AllArgsConstructor
+@Log4j2
+public class XSBRefundOrderController {
+
+
+    private final XSBRefundOrderService xsbRefundOrderService;
+
+
+    /**
+     * 同步退款订单数据
+     */
+    @PostMapping("/applyAfterSales")
+    public R<String> applyAfterSales(@RequestBody RefundOrderPushVo refundOrderPushVo) {
+        String string = UUID.randomUUID().toString();
+        log.info("【"+string+"】"+"接收第三方退款订单推送{}",refundOrderPushVo);
+        return  xsbRefundOrderService.applyAfterSales(refundOrderPushVo,string);
+    }
+
+    /**
+     * 修改物流信息
+     */
+    @PostMapping("/updateExpress")
+    public R<String> updateExpress(@RequestBody OrderRefundExpressParamVo orderRefundExpressParamVo) {
+        String string = UUID.randomUUID().toString();
+        log.info("【"+string+"】"+"接收第三方退款订单修改物流信息推送{}", JSONObject.toJSONString(orderRefundExpressParamVo));
+        return  xsbRefundOrderService.updateExpress(orderRefundExpressParamVo);
+    }
+
+    /**
+     * 取消退款订单申请
+     */
+    @PostMapping("/cancel")
+    public R<String> cancel(@RequestBody OrderRefundCancelVo orderRefundCancelVo) {
+        String string = UUID.randomUUID().toString();
+        log.info("【"+string+"】"+"接收第三方取消退款订单申请推送{}", JSONObject.toJSONString(orderRefundCancelVo));
+        return  xsbRefundOrderService.cancel(orderRefundCancelVo,string);
+    }
+
+
+}

+ 44 - 21
yami-shop-platform/src/main/java/com/yami/shop/platform/task/OrderTask.java

@@ -23,6 +23,7 @@ import com.yami.shop.bean.model.*;
 import com.yami.shop.bean.param.OrderDto;
 import com.yami.shop.common.enums.PayType;
 import com.yami.shop.common.exception.YamiShopBindException;
+import com.yami.shop.common.util.RedisUtil;
 import com.yami.shop.dao.DeviceFeyMapper;
 import com.yami.shop.delivery.comment.api.paotui.PaoTuiApi;
 import com.yami.shop.delivery.comment.param.DeliveryOrderItemParam;
@@ -32,15 +33,19 @@ import com.yami.shop.service.hb.IHBOrderService;
 import com.yami.shop.service.impl.FeiEYunApi;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.core.util.JsonUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -65,35 +70,52 @@ public class OrderTask {
     @Autowired
     private IHBOrderService ihbOrderService;
 
+    @Autowired
+    RedissonClient redissonClient;
+    private String lockKey = "cancel_timeout_orders_lock";
 
-    public void cancelOrder(){
+    public void cancelOrder() {
         Date now = new Date();
+        RLock lock = redissonClient.getLock(lockKey);
         logger.info("取消超时未支付订单。。。");
-        // 获取15分钟之前未支付的订单
-        List<Order> orders = orderService.selectCancelOrders(OrderStatus.UNPAY.value(),DateUtil.offsetMinute(now, -15));
-        if (CollectionUtil.isEmpty(orders)) {
-            return;
-        }
-
-//        List<Order>  cancelOrderList = this.chackOrders(orders);
+        // 使用分布式锁或数据库行锁
+        try {
+            boolean locked = lock.tryLock(0, 30, TimeUnit.SECONDS);
+            if (!locked) {
+                logger.info("任务正在执行中,跳过本次执行");
+                return;
+            }
+            // 获取15分钟之前未支付的订单
 
+            List<Order> orders = orderService.selectCancelOrders(OrderStatus.UNPAY.value(), DateUtil.offsetMinute(now, -15));
+            if (CollectionUtil.isEmpty(orders)) {
+                return;
+            }
+            //TODO zx定时任务加回积分待完善
+            orderService.cancelOrders(orders, "未按时支付");
 
-        //TODO zx定时任务加回积分待完善
-        orderService.cancelOrders(orders,"未按时支付");
+            // 移除缓存
+            this.removeCache(orders);
 
-        // 移除缓存
-        this.removeCache(orders);
+        } catch (Exception e) {
+            // 释放锁
+            Thread.currentThread().interrupt();
+        }finally {
+            if (lock.isHeldByCurrentThread()) {
+                lock.unlock();
+            }
+        }
 
     }
 
     /**
      * 确认收货
      */
-    public void confirmOrder(){
+    public void confirmOrder() {
         Date now = new Date();
         logger.info("系统自动确认收货订单。。。");
         // 获取10天之前等待确认收货的订单
-        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.RECEIVED.value(),DateUtil.offsetDay(now, -10));
+        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.RECEIVED.value(), DateUtil.offsetDay(now, -10));
         if (CollectionUtil.isEmpty(orders)) {
             return;
         }
@@ -181,10 +203,11 @@ public class OrderTask {
 
     /**
      * 查询订单,去除已支付的订单
+     *
      * @param orders
      */
-    private List<Order> chackOrders(List<Order> orders){
-        List<String> orderNumbers=orders.stream().map(Order::getOrderNumber).collect(Collectors.toList());
+    private List<Order> chackOrders(List<Order> orders) {
+        List<String> orderNumbers = orders.stream().map(Order::getOrderNumber).collect(Collectors.toList());
         // 收集未支付的订单
         List<Order> orderList = new ArrayList<>();
         //获取订单对应的订单结算数据
@@ -194,17 +217,17 @@ public class OrderTask {
                 .collect(Collectors.toMap(OrderSettlement::getOrderNumber, orderSettlement -> orderSettlement));
         for (Order order : orders) {
             OrderSettlement orderSettlement = orderSettlementMap.get(order.getOrderNumber());
-            if (Objects.isNull(orderSettlement) || Objects.isNull(orderSettlement.getPayType()) || Objects.isNull(orderSettlement.getPayNo())){
+            if (Objects.isNull(orderSettlement) || Objects.isNull(orderSettlement.getPayType()) || Objects.isNull(orderSettlement.getPayNo())) {
                 orderList.add(order);
                 continue;
             }
             PayInfoBo payInfo = payManagerService.getPayInfo(PayType.instance(orderSettlement.getPayType()), orderSettlement.getPayNo());
-            if(payInfo.getIsPaySuccess()){
+            if (payInfo.getIsPaySuccess()) {
                 // 根据内部订单号更新order settlement
-                List<Order> successOrderList = payService.paySuccess(payInfo.getPayNo(), payInfo.getBizPayNo(),order.getPayType());
+                List<Order> successOrderList = payService.paySuccess(payInfo.getPayNo(), payInfo.getBizPayNo(), order.getPayType());
                 // 移除缓存
                 this.removeCache(successOrderList);
-            }else {
+            } else {
                 orderList.add(order);
             }
         }
@@ -214,7 +237,7 @@ public class OrderTask {
     /**
      * 移除缓存
      */
-    private void removeCache(List<Order> orders){
+    private void removeCache(List<Order> orders) {
         for (Order order : orders) {
             List<OrderItem> orderItems = order.getOrderItems();
             for (OrderItem orderItem : orderItems) {

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

@@ -24,3 +24,9 @@ hb:
   appId: 5347a7077e65428bb9a87510ca7e1ea1
   secret: 67899367b17e4a8d8a7d10ebe8449b90
 
+smqjh:
+#    pms-url: http://192.168.1.253:8802/api/v1/sync
+    pms-url: http://192.168.1.242:8080/smqjh-pms/api/v1/sync
+    omsBaseUrl: http://47.109.84.152:8081/smqjh-oms
+
+

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно