Browse Source

Merge remote-tracking branch 'origin/master'

Ben 10 months ago
parent
commit
ca318e8f03
34 changed files with 671 additions and 80 deletions
  1. 3 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/constant/DistriConstants.java
  2. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentagePageReqVO.java
  3. 18 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageRedisVO.java
  4. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageRespVO.java
  5. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageSaveReqVO.java
  6. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/orderpercentage/OrderPercentageDO.java
  7. 16 5
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/orderpercentage/OrderPercentageServiceImpl.java
  8. 1 5
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatus/SocialStatusServiceImpl.java
  9. 2 2
      feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/ProductSpuController.java
  10. 4 0
      feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java
  11. 24 3
      feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/dal/mysql/spu/ProductSpuMapper.java
  12. 2 2
      feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/service/spu/ProductSpuService.java
  13. 6 6
      feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/service/spu/ProductSpuServiceImpl.java
  14. 2 0
      feifan-module-mall/feifan-module-trade-api/src/main/java/cn/newfeifan/mall/module/trade/enums/ErrorCodeConstants.java
  15. 6 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/aftersale/AfterSaleController.java
  16. 36 24
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java
  17. 3 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/vo/TradeOrderPageReqVO.java
  18. 94 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/OrderCallbackLogsController.java
  19. 33 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/vo/OrderCallbackLogsPageReqVO.java
  20. 37 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/vo/OrderCallbackLogsRespVO.java
  21. 30 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/vo/OrderCallbackLogsSaveReqVO.java
  22. 44 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/ordercallbacklogs/OrderCallbackLogsDO.java
  23. 28 3
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/aftersale/AfterSaleMapper.java
  24. 15 4
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/order/TradeOrderMapper.java
  25. 29 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/ordercallbacklogs/OrderCallbackLogsMapper.java
  26. 5 2
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/aftersale/AfterSaleService.java
  27. 27 2
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/aftersale/AfterSaleServiceImpl.java
  28. 11 13
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderQueryService.java
  29. 3 3
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderQueryServiceImpl.java
  30. 3 2
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java
  31. 63 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordercallbacklogs/OrderCallbackLogsService.java
  32. 77 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordercallbacklogs/OrderCallbackLogsServiceImpl.java
  33. 12 0
      feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/ordercallbacklogs/OrderCallbackLogsMapper.xml
  34. 6 4
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/shop/ShopController.java

+ 3 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/constant/DistriConstants.java

@@ -11,4 +11,7 @@ public class DistriConstants {
     public static final Boolean IS_EFFECTIVE  = true;
 
     public static final double GROSS_PROFIT_BONUS_QUOTA_PERC = 0.2;
+
+    //将身价参数存在redis中的前缀
+    public static final String DISTRI_ORDER_PERCENTAGE  = "distri:orderPercentage";
 }

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentagePageReqVO.java

@@ -55,4 +55,11 @@ public class OrderPercentagePageReqVO extends PageParam {
 
     @Schema(description = "收藏商品获取身价值,同一SPU商品收藏多次无效", example = "1")
     private String collectSocialStatus;
+
+    @Schema(description = "用户签到可获取的最大身价值")
+    private String signInSocialStatusMax;
+
+    @Schema(description = "签到获取身价", example = "1")
+    private String signInSocialStatus;
+
 }

+ 18 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageRedisVO.java

@@ -0,0 +1,18 @@
+package cn.newfeifan.mall.module.distri.controller.admin.orderpercentage.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 服务启动时存放在redis中的数据 VO")
+@Data
+@ToString(callSuper = true)
+@Builder
+public class OrderPercentageRedisVO {
+    @Schema(description = "用户签到可获取的最大身价值")
+    private String signInSocialStatusMax;
+
+    @Schema(description = "签到获取身价")
+    private String signInSocialStatus;
+}

+ 9 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageRespVO.java

@@ -64,5 +64,14 @@ public class OrderPercentageRespVO {
     private String baseMaxQuota;
 
     @Schema(description = "收藏商品获取身价值,同一SPU商品收藏多次无效", example = "1")
+    @ExcelProperty("收藏商品获取身价值,同一SPU商品收藏多次无效")
     private String collectSocialStatus;
+
+    @Schema(description = "用户签到可获取的最大身价值")
+    @ExcelProperty("用户签到可获取的最大身价值")
+    private String signInSocialStatusMax;
+
+    @Schema(description = "签到获取身价", example = "1")
+    @ExcelProperty("签到获取身价")
+    private String signInSocialStatus;
 }

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/orderpercentage/vo/OrderPercentageSaveReqVO.java

@@ -49,5 +49,11 @@ public class OrderPercentageSaveReqVO {
     @Schema(description = "收藏商品获取身价值,同一SPU商品收藏多次无效", example = "1")
     private String collectSocialStatus;
 
+    @Schema(description = "用户签到可获取的最大身价值")
+    private String signInSocialStatusMax;
+
+    @Schema(description = "签到获取身价", example = "1")
+    private String signInSocialStatus;
+
 
 }

+ 9 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/orderpercentage/OrderPercentageDO.java

@@ -82,6 +82,15 @@ public class OrderPercentageDO extends BaseDO {
      */
     private String collectSocialStatus;
 
+    /**
+     * 用户签到可获取的最大身价值
+     */
+    private String signInSocialStatusMax;
+    /**
+     * 签到获取身价
+     */
+    private String signInSocialStatus;
+
     public String getGrossProfitBonusQuotaPerc() {
         double grossProfitBonusQuotaPerc = Double.parseDouble(this.grossProfitBonusQuotaPerc);
         if(grossProfitBonusQuotaPerc > GROSS_PROFIT_BONUS_QUOTA_PERC){

+ 16 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/orderpercentage/OrderPercentageServiceImpl.java

@@ -1,27 +1,26 @@
 package cn.newfeifan.mall.module.distri.service.orderpercentage;
 
+import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
 import cn.newfeifan.mall.module.distri.controller.admin.orderpercentage.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.orderpercentage.OrderPercentageMapper;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.newfeifan.mall.module.distri.constant.DistriConstants.ONE_HUNDRED;
-import static cn.newfeifan.mall.module.distri.constant.DistriConstants.PERCENT;
+import static cn.newfeifan.mall.module.distri.constant.DistriConstants.*;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
 
 /**
@@ -31,11 +30,15 @@ import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
  */
 @Service
 @Validated
+@Slf4j
 public class OrderPercentageServiceImpl implements OrderPercentageService {
 
     @Resource
     private OrderPercentageMapper orderPercentageMapper;
 
+    @Resource
+    private StringRedisTemplate stringRedisTemplate;
+
     @Override
     public Long createOrderPercentage(OrderPercentageSaveReqVO createReqVO) {
        /* OrderPercentageSaveReqVO orderPercentageSaveReqVO = new OrderPercentageSaveReqVO();
@@ -70,6 +73,14 @@ public class OrderPercentageServiceImpl implements OrderPercentageService {
         // 更新
         OrderPercentageDO updateObj = BeanUtils.toBean(updateReqVO, OrderPercentageDO.class);
         orderPercentageMapper.updateById(updateObj);
+
+        OrderPercentageRedisVO build = OrderPercentageRedisVO
+                .builder()
+                .signInSocialStatus(updateReqVO.getSignInSocialStatus())
+                .signInSocialStatusMax(updateReqVO.getSignInSocialStatusMax())
+                .build();
+        stringRedisTemplate.opsForValue().set(DISTRI_ORDER_PERCENTAGE, JsonUtils.toJsonString(build));
+        log.info("======更新身价配置======");
     }
 
     @Override

+ 1 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatus/SocialStatusServiceImpl.java

@@ -84,11 +84,7 @@ public class SocialStatusServiceImpl implements SocialStatusService {
         for (int i = 0; i < socialStatusDOS.size(); i++) {
             if (point < socialStatusDOS.get(i).getPoint()) {
                 socialStatusBO.setId(socialStatusDOS.get(i - 1).getId());
-                if (i + 1 >= socialStatusDOS.size()) {
-                    socialStatusBO.setSocialUpNeed(0L);
-                } else {
-                    socialStatusBO.setSocialUpNeed(socialStatusDOS.get(i).getPoint() - point);
-                }
+                socialStatusBO.setSocialUpNeed(socialStatusDOS.get(i).getPoint() - point);
                 break;
             }
         }

+ 2 - 2
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/ProductSpuController.java

@@ -128,8 +128,8 @@ public class ProductSpuController {
     @GetMapping("/get-count")
     @Operation(summary = "获得商品 SPU 分页 tab count")
     @PreAuthorize("@ss.hasPermission('product:spu:query')")
-    public CommonResult<Map<Integer, Long>> getSpuCount() {
-        return success(productSpuService.getTabsCount());
+    public CommonResult<Map<Integer, Long>> getSpuCount(@Valid ProductSpuPageReqVO pageVO) {
+        return success(productSpuService.getTabsCount(pageVO));
     }
 
     @GetMapping("/get-count-by-mer")

+ 4 - 0
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java

@@ -8,6 +8,7 @@ import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -78,4 +79,7 @@ public class ProductSpuPageReqVO extends PageParam {
 
     @Schema(description = "用户Id")
     private Long userId;
+
+    @Schema(description = "店铺编号集")
+    private List<Long> shopIds;
 }

+ 24 - 3
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/dal/mysql/spu/ProductSpuMapper.java

@@ -33,6 +33,7 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
                 .eqIfPresent(ProductSpuDO::getShopId, reqVO.getShopId())
                 .eqIfPresent(ProductSpuDO::getCategoryId, reqVO.getCategoryId())
                 .eqIfPresent(ProductSpuDO::getMerchantId, reqVO.getMerchantId())
+                .inIfPresent(ProductSpuDO::getShopId, reqVO.getShopIds())
                 .betweenIfPresent(ProductSpuDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(ProductSpuDO::getSort);
         appendTabQuery(tabType, queryWrapper);
@@ -50,15 +51,35 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
      *
      * @return 触发警戒库存的 SPU 数量
      */
-    default Long selectCount() {
+    default Long selectCount(ProductSpuPageReqVO pageVO) {
         LambdaQueryWrapperX<ProductSpuDO> queryWrapper = new LambdaQueryWrapperX<>();
         // 库存小于等于警戒库存
-        queryWrapper.le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK)
+        queryWrapper
+                .likeIfPresent(ProductSpuDO::getName, pageVO.getName())
+                .eqIfPresent(ProductSpuDO::getShopId, pageVO.getShopId())
+                .eqIfPresent(ProductSpuDO::getCategoryId, pageVO.getCategoryId())
+                .eqIfPresent(ProductSpuDO::getMerchantId, pageVO.getMerchantId())
+                .inIfPresent(ProductSpuDO::getShopId, pageVO.getShopIds())
+                .betweenIfPresent(ProductSpuDO::getCreateTime, pageVO.getCreateTime())
+                .le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK)
                 // 如果库存触发警戒库存且状态为回收站的话则不计入触发警戒库存的个数
-                .notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus());
+                .notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus())
+        ;
         return selectCount(queryWrapper);
     }
 
+    default Long selectCount(SFunction<ProductSpuDO, ?> field, Object value,ProductSpuPageReqVO pageVO) {
+        return selectCount(new LambdaQueryWrapperX<ProductSpuDO>()
+                .eq(field, value)
+                .likeIfPresent(ProductSpuDO::getName, pageVO.getName())
+                .eqIfPresent(ProductSpuDO::getShopId, pageVO.getShopId())
+                .eqIfPresent(ProductSpuDO::getCategoryId, pageVO.getCategoryId())
+                .eqIfPresent(ProductSpuDO::getMerchantId, pageVO.getMerchantId())
+                .inIfPresent(ProductSpuDO::getShopId, pageVO.getShopIds())
+                .betweenIfPresent(ProductSpuDO::getCreateTime, pageVO.getCreateTime())
+        );
+    }
+
 
     default Long selectCountByMerId(Long merId) {
         LambdaQueryWrapperX<ProductSpuDO> queryWrapper = new LambdaQueryWrapperX<>();

+ 2 - 2
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/service/spu/ProductSpuService.java

@@ -99,10 +99,10 @@ public interface ProductSpuService {
 
     /**
      * 获取 SPU 列表标签对应的 Count 数量
-     *
+     * @param pageVO 条件查询
      * @return Count 数量
      */
-    Map<Integer, Long> getTabsCount();
+    Map<Integer, Long> getTabsCount(ProductSpuPageReqVO pageVO);
 
 
     /**

+ 6 - 6
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/service/spu/ProductSpuServiceImpl.java

@@ -265,23 +265,23 @@ public class ProductSpuServiceImpl implements ProductSpuService {
     }
 
     @Override
-    public Map<Integer, Long> getTabsCount() {
+    public Map<Integer, Long> getTabsCount(ProductSpuPageReqVO pageVO) {
         Map<Integer, Long> counts = Maps.newLinkedHashMapWithExpectedSize(5);
         // 查询销售中的商品数量
         counts.put(ProductSpuPageReqVO.FOR_SALE,
-                productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()));
+                productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus(),pageVO));
         // 查询仓库中的商品数量
         counts.put(ProductSpuPageReqVO.IN_WAREHOUSE,
-                productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus()));
+                productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus(),pageVO));
         // 查询售空的商品数量
         counts.put(ProductSpuPageReqVO.SOLD_OUT,
-                productSpuMapper.selectCount(ProductSpuDO::getStock, 0));
+                productSpuMapper.selectCount(ProductSpuDO::getStock, 0,pageVO));
         // 查询触发警戒库存的商品数量
         counts.put(ProductSpuPageReqVO.ALERT_STOCK,
-                productSpuMapper.selectCount());
+                productSpuMapper.selectCount(pageVO));
         // 查询回收站中的商品数量
         counts.put(ProductSpuPageReqVO.RECYCLE_BIN,
-                productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()));
+                productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus(),pageVO));
         return counts;
     }
 

+ 2 - 0
feifan-module-mall/feifan-module-trade-api/src/main/java/cn/newfeifan/mall/module/trade/enums/ErrorCodeConstants.java

@@ -95,5 +95,7 @@ public interface ErrorCodeConstants {
     ErrorCode NOT_SUFFICIENT_FUNDS = new ErrorCode(1_011_008_004, "账号无可用单量,需要充值");
     ErrorCode CALLBACK_PARAMETER_ERROR = new ErrorCode(1_011_008_005, "第三方回调参数为Null");
     ErrorCode SUBSCRIBER_ERROR = new ErrorCode(1_011_008_006, "订阅异常");
+    ErrorCode ORDER_CALLBACK_LOGS_NOT_EXISTS = new ErrorCode(1_011_008_007, "回调日志不存在");
+    ErrorCode CREATE_TRADE_ORDER_LOGS_ERROR = new ErrorCode(1_011_008_008, "创建第三方日志异常");
 
 }

+ 6 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/aftersale/AfterSaleController.java

@@ -67,6 +67,12 @@ public class AfterSaleController {
         return success(AfterSaleConvert.INSTANCE.convertPage(pageResult, memberUsers));
     }
 
+    @GetMapping("/get-count")
+    @Operation(summary = "获得售后交易订单数量")
+    public CommonResult<Map<Integer, Long>> getAfterSaleCount(@Valid AfterSalePageReqVO pageVO) {
+        return success(afterSaleService.getTabsCount(pageVO));
+    }
+
     @GetMapping("/get-detail")
     @Operation(summary = "获得售后订单详情")
     @Parameter(name = "id", description = "售后编号", required = true, example = "1")

+ 36 - 24
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java

@@ -29,6 +29,9 @@ import cn.newfeifan.mall.module.trade.service.aftersale.AfterSaleService;
 import cn.newfeifan.mall.module.trade.service.order.TradeOrderLogService;
 import cn.newfeifan.mall.module.trade.service.order.TradeOrderQueryService;
 import cn.newfeifan.mall.module.trade.service.order.TradeOrderUpdateService;
+import cn.newfeifan.mall.module.trade.service.ordercallbacklogs.OrderCallbackLogsService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.Maps;
 import com.google.gson.Gson;
 import com.kuaidi100.sdk.response.SubscribeResp;
@@ -55,6 +58,7 @@ import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils
 import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.CALLBACK_PARAMETER_ERROR;
+import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.CREATE_TRADE_ORDER_LOGS_ERROR;
 
 @Tag(name = "管理后台 - 交易订单")
 @RestController
@@ -81,6 +85,9 @@ public class TradeOrderController {
     @Resource
     private PayAppService appService;
 
+    @Resource
+    private OrderCallbackLogsService orderCallbackLogsService;
+
     @GetMapping("/page")
     @Operation(summary = "获得交易订单分页")
     @PreAuthorize("@ss.hasPermission('trade:order:query')")
@@ -160,7 +167,7 @@ public class TradeOrderController {
     @Operation(summary = "订单订阅回调")
     public SubscribeResp callBackUrl(HttpServletRequest request) {
         String param = request.getParameter("param");
-        if(param == null){
+        if (param == null) {
             throw exception(CALLBACK_PARAMETER_ERROR);
         }
         String sign = request.getParameter("sign");
@@ -170,24 +177,12 @@ public class TradeOrderController {
         Map<String, Object> map = gson.fromJson(param, Map.class);
         Map<String, Object> lastResult = (Map<String, Object>) map.get("lastResult");
         String state = (String) lastResult.get("state");
-
-        //判断订单状态是否是已签收
-        if (state.equals(TradeOrderStateEnum.RECEIVED.getState())) {
-            TradeOrderDO order = tradeOrderQueryService.getOrderById(Long.valueOf(orderId));
-            if (order != null) {
-                List<Map<String, Object>> dataList = (List<Map<String, Object>>) lastResult.get("data");
-                Map<String, Object> firstData = dataList.get(0);
-                //保存签收时间
-                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
-                order.setReceivingTime(LocalDateTime.parse(firstData.get("time").toString(), formatter));
-                tradeOrderUpdateService.updateOrderById(order);
-            }
-        }
+        TradeOrderDO order = tradeOrderQueryService.getOrderById(Long.valueOf(orderId));
 
         //建议记录一下这个回调的内容,方便出问题后双方排查问题
         log.debug("快递100订阅推送回调结果|{}|{}", param, sign);
         //订阅时传的salt,没有可以忽略
-        String salt = "";
+        String salt = order.getLogisticsNo();
         String ourSign = SignUtils.sign(param + salt);
         log.info("订单:{},回调param:{}", orderId, param);
         SubscribeResp subscribeResp = new SubscribeResp();
@@ -196,9 +191,26 @@ public class TradeOrderController {
         subscribeResp.setMessage("成功");
         //加密如果相等,属于快递100推送;否则可以忽略掉当前请求
         if (ourSign.equals(sign)) {
-            //TODO 业务处理
+            //判断订单状态是否是已签收
+            if (state.equals(TradeOrderStateEnum.RECEIVED.getState())) {
+                List<Map<String, Object>> dataList = (List<Map<String, Object>>) lastResult.get("data");
+                Map<String, Object> firstData = dataList.get(0);
+                //保存签收时间
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
+                order.setReceivingTime(LocalDateTime.parse(firstData.get("time").toString(), formatter));
+                tradeOrderUpdateService.updateOrderById(order);
+            }
+
+            //添加到日志
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                orderCallbackLogsService.create(orderId, param, mapper.writeValueAsString(lastResult), lastResult.get("status").toString());
+            } catch (JsonProcessingException e) {
+                throw exception(CREATE_TRADE_ORDER_LOGS_ERROR);
+            }
             return subscribeResp;
         }
+        orderCallbackLogsService.create(orderId, param, null, lastResult.get("status").toString());
         return null;
     }
 
@@ -256,16 +268,16 @@ public class TradeOrderController {
 
     @GetMapping("/get-count")
     @Operation(summary = "获得交易订单数量")
-    public CommonResult<Map<Integer, Long>> getOrderCount(@RequestParam(value = "merId", required = false) Long merId) {
+    public CommonResult<Map<Integer, Long>> getOrderCount(TradeOrderPageReqVO reqVO) {
         Map<Integer, Long> orderCount = Maps.newLinkedHashMapWithExpectedSize(6);
 
-        orderCount.put(-1, tradeOrderQueryService.getOrderCount(null, null, merId));
-        orderCount.put(TradeOrderStatusEnum.AFTER_SALE.getStatus(), afterSaleService.getApplyingAfterSaleCount(null, merId));
-        orderCount.put(TradeOrderStatusEnum.UNPAID.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.UNPAID.getStatus(), null, merId));
-        orderCount.put(TradeOrderStatusEnum.UNDELIVERED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.UNDELIVERED.getStatus(), null, merId));
-        orderCount.put(TradeOrderStatusEnum.DELIVERED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.DELIVERED.getStatus(), null, merId));
-        orderCount.put(TradeOrderStatusEnum.COMPLETED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.COMPLETED.getStatus(), null, merId));
-        orderCount.put(TradeOrderStatusEnum.CANCELED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.CANCELED.getStatus(), null, merId));
+        orderCount.put(-1, tradeOrderQueryService.getOrderCount(null, reqVO));
+        orderCount.put(TradeOrderStatusEnum.AFTER_SALE.getStatus(), afterSaleService.getApplyingAfterSaleCount(null, reqVO));
+        orderCount.put(TradeOrderStatusEnum.UNPAID.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.UNPAID.getStatus(), reqVO));
+        orderCount.put(TradeOrderStatusEnum.UNDELIVERED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.UNDELIVERED.getStatus(), reqVO));
+        orderCount.put(TradeOrderStatusEnum.DELIVERED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.DELIVERED.getStatus(), reqVO));
+        orderCount.put(TradeOrderStatusEnum.COMPLETED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.COMPLETED.getStatus(), reqVO));
+        orderCount.put(TradeOrderStatusEnum.CANCELED.getStatus(), tradeOrderQueryService.getOrderCount(TradeOrderStatusEnum.CANCELED.getStatus(), reqVO));
         return success(orderCount);
     }
 

+ 3 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/vo/TradeOrderPageReqVO.java

@@ -71,4 +71,7 @@ public class TradeOrderPageReqVO extends PageParam {
     @Schema(description = "商户ID", example = "1")
     private Long  merchantId;
 
+    @Schema(description = "店铺编号集")
+    private List<Long> shopIds;
+
 }

+ 94 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/OrderCallbackLogsController.java

@@ -0,0 +1,94 @@
+package cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
+
+import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordercallbacklogs.OrderCallbackLogsDO;
+import cn.newfeifan.mall.module.trade.service.ordercallbacklogs.OrderCallbackLogsService;
+
+@Tag(name = "管理后台 - 第三方回调日志")
+@RestController
+@RequestMapping("/trade/order-callback-logs")
+@Validated
+public class OrderCallbackLogsController {
+
+    @Resource
+    private OrderCallbackLogsService orderCallbackLogsService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建第三方回调日志")
+    @PreAuthorize("@ss.hasPermission('trade:order-callback-logs:create')")
+    public CommonResult<Integer> createOrderCallbackLogs(@Valid @RequestBody OrderCallbackLogsSaveReqVO createReqVO) {
+        return success(orderCallbackLogsService.createOrderCallbackLogs(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新第三方回调日志")
+    @PreAuthorize("@ss.hasPermission('trade:order-callback-logs:update')")
+    public CommonResult<Boolean> updateOrderCallbackLogs(@Valid @RequestBody OrderCallbackLogsSaveReqVO updateReqVO) {
+        orderCallbackLogsService.updateOrderCallbackLogs(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除第三方回调日志")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('trade:order-callback-logs:delete')")
+    public CommonResult<Boolean> deleteOrderCallbackLogs(@RequestParam("id") Integer id) {
+        orderCallbackLogsService.deleteOrderCallbackLogs(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得第三方回调日志")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('trade:order-callback-logs:query')")
+    public CommonResult<OrderCallbackLogsRespVO> getOrderCallbackLogs(@RequestParam("id") Integer id) {
+        OrderCallbackLogsDO orderCallbackLogs = orderCallbackLogsService.getOrderCallbackLogs(id);
+        return success(BeanUtils.toBean(orderCallbackLogs, OrderCallbackLogsRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得第三方回调日志分页")
+    @PreAuthorize("@ss.hasPermission('trade:order-callback-logs:query')")
+    public CommonResult<PageResult<OrderCallbackLogsRespVO>> getOrderCallbackLogsPage(@Valid OrderCallbackLogsPageReqVO pageReqVO) {
+        PageResult<OrderCallbackLogsDO> pageResult = orderCallbackLogsService.getOrderCallbackLogsPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, OrderCallbackLogsRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出第三方回调日志 Excel")
+    @PreAuthorize("@ss.hasPermission('trade:order-callback-logs:export')")
+    @OperateLog(type = EXPORT)
+    public void exportOrderCallbackLogsExcel(@Valid OrderCallbackLogsPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<OrderCallbackLogsDO> list = orderCallbackLogsService.getOrderCallbackLogsPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "第三方回调日志.xls", "数据", OrderCallbackLogsRespVO.class,
+                        BeanUtils.toBean(list, OrderCallbackLogsRespVO.class));
+    }
+
+}

+ 33 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/vo/OrderCallbackLogsPageReqVO.java

@@ -0,0 +1,33 @@
+package cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs.vo;
+
+import lombok.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 第三方回调日志分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class OrderCallbackLogsPageReqVO extends PageParam {
+
+    @Schema(description = "订单ID", example = "27271")
+    private String orderId;
+
+    @Schema(description = "回调推送参数体")
+    private String requestParam;
+
+    @Schema(description = "回调响应体")
+    private String responseBody;
+
+    @Schema(description = "回调状态,失败是0,成功是1", example = "1")
+    private Boolean status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 37 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/vo/OrderCallbackLogsRespVO.java

@@ -0,0 +1,37 @@
+package cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 第三方回调日志 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class OrderCallbackLogsRespVO {
+
+    @Schema(description = "回调编号	", requiredMode = Schema.RequiredMode.REQUIRED, example = "6902")
+    @ExcelProperty("回调编号	")
+    private Integer id;
+
+    @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27271")
+    @ExcelProperty("订单ID")
+    private String orderId;
+
+    @Schema(description = "回调推送参数体", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("回调推送参数体")
+    private String requestParam;
+
+    @Schema(description = "回调响应体", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("回调响应体")
+    private String responseBody;
+
+    @Schema(description = "回调状态,失败是0,成功是1", example = "1")
+    @ExcelProperty("回调状态")
+    private Boolean status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 30 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/ordercallbacklogs/vo/OrderCallbackLogsSaveReqVO.java

@@ -0,0 +1,30 @@
+package cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 第三方回调日志新增/修改 Request VO")
+@Data
+public class OrderCallbackLogsSaveReqVO {
+
+    @Schema(description = "回调编号	", requiredMode = Schema.RequiredMode.REQUIRED, example = "6902")
+    private Integer id;
+
+    @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27271")
+    @NotEmpty(message = "订单ID不能为空")
+    private String orderId;
+
+    @Schema(description = "回调推送参数体", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "回调推送参数体不能为空")
+    private String requestParam;
+
+    @Schema(description = "回调响应体", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "回调响应体不能为空")
+    private String responseBody;
+
+    @Schema(description = "回调状态,失败是0,成功是1", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "回调状态,失败是0,成功是1不能为空")
+    private Boolean status;
+
+}

+ 44 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/ordercallbacklogs/OrderCallbackLogsDO.java

@@ -0,0 +1,44 @@
+package cn.newfeifan.mall.module.trade.dal.dataobject.ordercallbacklogs;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 第三方回调日志 DO
+ *
+ * @author 非繁人
+ */
+@TableName("trade_order_callback_logs")
+@KeySequence("trade_order_callback_logs_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrderCallbackLogsDO extends BaseDO {
+
+    /**
+     * 回调编号	
+     */
+    @TableId
+    private Integer id;
+    /**
+     * 订单ID
+     */
+    private String orderId;
+    /**
+     * 回调推送参数体
+     */
+    private String requestParam;
+    /**
+     * 回调响应体
+     */
+    private String responseBody;
+    /**
+     * 回调状态,失败是0,成功是1
+     */
+    private Boolean status;
+
+}

+ 28 - 3
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/aftersale/AfterSaleMapper.java

@@ -5,6 +5,7 @@ import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO;
+import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.aftersale.AfterSaleDO;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -53,11 +54,35 @@ public interface AfterSaleMapper extends BaseMapperX<AfterSaleDO> {
                 .in(AfterSaleDO::getStatus, statuses));
     }
 
-    default Long selectCountByUserIdAndStatus(Long userId, Long merId, Collection<Integer> statuses) {
+    default Long selectCountByUserIdAndStatus(Long userId, Collection<Integer> statuses, TradeOrderPageReqVO reqVO) {
         return selectCount(new LambdaQueryWrapperX<AfterSaleDO>()
                 .eqIfPresent(AfterSaleDO::getUserId, userId)
-                .eqIfPresent(AfterSaleDO::getMerchantId, merId)
-                .in(AfterSaleDO::getStatus, statuses));
+                .in(AfterSaleDO::getStatus, statuses)
+                .likeIfPresent(AfterSaleDO::getNo, reqVO.getNo())
+                .eqIfPresent(AfterSaleDO::getType, reqVO.getType())
+                .eqIfPresent(AfterSaleDO::getShopId,reqVO.getShopId())
+                .eqIfPresent(AfterSaleDO::getMerchantId,reqVO.getMerchantId())
+                .eqIfPresent(AfterSaleDO::getUserId, reqVO.getUserId())
+                .inIfPresent(AfterSaleDO::getShopId, reqVO.getShopIds())
+                .betweenIfPresent(AfterSaleDO::getCreateTime, reqVO.getCreateTime())
+        );
+    }
+
+    default Long selectCount(Integer status,AfterSalePageReqVO reqVO){
+        return selectCount(new LambdaQueryWrapperX<AfterSaleDO>()
+                .eq(AfterSaleDO::getStatus, status)
+                .likeIfPresent(AfterSaleDO::getNo, reqVO.getNo())
+                .eqIfPresent(AfterSaleDO::getSpuId, reqVO.getSpuId())
+                .eqIfPresent(AfterSaleDO::getType, reqVO.getType())
+                .eqIfPresent(AfterSaleDO::getShopId,reqVO.getShopId())
+                .eqIfPresent(AfterSaleDO::getMerchantId,reqVO.getMerchantId())
+                .eqIfPresent(AfterSaleDO::getWay, reqVO.getWay())
+                .eqIfPresent(AfterSaleDO::getUserId, reqVO.getUserId())
+                .inIfPresent(AfterSaleDO::getShopId, reqVO.getShopIds())
+                .likeIfPresent(AfterSaleDO::getOrderNo, reqVO.getOrderNo())
+                .likeIfPresent(AfterSaleDO::getSpuName, reqVO.getSpuName())
+                .betweenIfPresent(AfterSaleDO::getCreateTime, reqVO.getCreateTime())
+        );
     }
 
 }

+ 15 - 4
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/order/TradeOrderMapper.java

@@ -41,7 +41,7 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
                 .eqIfPresent(TradeOrderDO::getTerminal, reqVO.getTerminal())
                 .eqIfPresent(TradeOrderDO::getLogisticsId, reqVO.getLogisticsId())
                 .eqIfPresent(TradeOrderDO::getMerchantId, reqVO.getMerchantId())
-
+                .inIfPresent(TradeOrderDO::getShopId, reqVO.getShopIds())
                 .inIfPresent(TradeOrderDO::getPickUpStoreId, reqVO.getPickUpStoreIds())
                 .likeIfPresent(TradeOrderDO::getPickUpVerifyCode, reqVO.getPickUpVerifyCode())
                 .betweenIfPresent(TradeOrderDO::getCreateTime, reqVO.getCreateTime())
@@ -89,11 +89,22 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
                 .eqIfPresent(TradeOrderDO::getStatus, status));
     }
 
-    default Long selectCountByStatus(Integer status, Long shopId, Long merId) {
+    default Long selectCountByStatus(Integer status, TradeOrderPageReqVO reqVO) {
         return selectCount(new LambdaQueryWrapperX<TradeOrderDO>()
                 .eqIfPresent(TradeOrderDO::getStatus, status)
-                .eqIfPresent(TradeOrderDO::getShopId, shopId)
-                .eqIfPresent(TradeOrderDO::getMerchantId, merId));
+                .likeIfPresent(TradeOrderDO::getNo, reqVO.getNo())
+                .eqIfPresent(TradeOrderDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(TradeOrderDO::getDeliveryType, reqVO.getDeliveryType())
+                .eqIfPresent(TradeOrderDO::getType, reqVO.getType())
+                .eqIfPresent(TradeOrderDO::getPayChannelCode, reqVO.getPayChannelCode())
+                .eqIfPresent(TradeOrderDO::getTerminal, reqVO.getTerminal())
+                .eqIfPresent(TradeOrderDO::getLogisticsId, reqVO.getLogisticsId())
+                .eqIfPresent(TradeOrderDO::getMerchantId, reqVO.getMerchantId())
+                .inIfPresent(TradeOrderDO::getShopId, reqVO.getShopIds())
+                .inIfPresent(TradeOrderDO::getPickUpStoreId, reqVO.getPickUpStoreIds())
+                .likeIfPresent(TradeOrderDO::getPickUpVerifyCode, reqVO.getPickUpVerifyCode())
+                .betweenIfPresent(TradeOrderDO::getCreateTime, reqVO.getCreateTime())
+        );
     }
     default Long selectCountByStatus(Integer status, Long userId) {
         return selectCount(new LambdaQueryWrapperX<TradeOrderDO>()

+ 29 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/ordercallbacklogs/OrderCallbackLogsMapper.java

@@ -0,0 +1,29 @@
+package cn.newfeifan.mall.module.trade.dal.mysql.ordercallbacklogs;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordercallbacklogs.OrderCallbackLogsDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs.vo.*;
+
+/**
+ * 第三方回调日志 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface OrderCallbackLogsMapper extends BaseMapperX<OrderCallbackLogsDO> {
+
+    default PageResult<OrderCallbackLogsDO> selectPage(OrderCallbackLogsPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<OrderCallbackLogsDO>()
+                .eqIfPresent(OrderCallbackLogsDO::getOrderId, reqVO.getOrderId())
+                .eqIfPresent(OrderCallbackLogsDO::getRequestParam, reqVO.getRequestParam())
+                .eqIfPresent(OrderCallbackLogsDO::getResponseBody, reqVO.getResponseBody())
+                .eqIfPresent(OrderCallbackLogsDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(OrderCallbackLogsDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(OrderCallbackLogsDO::getId));
+    }
+
+}

+ 5 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/aftersale/AfterSaleService.java

@@ -5,11 +5,13 @@ import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.module.trade.controller.admin.aftersale.vo.AfterSaleDisagreeReqVO;
 import cn.newfeifan.mall.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO;
 import cn.newfeifan.mall.module.trade.controller.admin.aftersale.vo.AfterSaleRefuseReqVO;
+import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
 import cn.newfeifan.mall.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO;
 import cn.newfeifan.mall.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.aftersale.AfterSaleDO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 售后订单 Service 接口
@@ -137,10 +139,11 @@ public interface AfterSaleService {
      * 【会员】获得正在进行中的售后订单数量
      *
      * @param userId 用户编号
-     * @param merId  商户编号
+     * @param reqVO  条件
      * @return 数量
      */
-    Long getApplyingAfterSaleCount(Long userId, Long merId);
+    Long getApplyingAfterSaleCount(Long userId, TradeOrderPageReqVO reqVO);
 
 
+    Map<Integer, Long> getTabsCount(AfterSalePageReqVO pageVO);
 }

+ 27 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/aftersale/AfterSaleServiceImpl.java

@@ -11,6 +11,7 @@ import cn.newfeifan.mall.module.pay.api.refund.dto.PayRefundCreateReqDTO;
 import cn.newfeifan.mall.module.trade.controller.admin.aftersale.vo.AfterSaleDisagreeReqVO;
 import cn.newfeifan.mall.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO;
 import cn.newfeifan.mall.module.trade.controller.admin.aftersale.vo.AfterSaleRefuseReqVO;
+import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
 import cn.newfeifan.mall.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO;
 import cn.newfeifan.mall.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO;
 import cn.newfeifan.mall.module.trade.convert.aftersale.AfterSaleConvert;
@@ -33,6 +34,7 @@ import cn.newfeifan.mall.module.trade.service.delivery.DeliveryExpressService;
 import cn.newfeifan.mall.module.trade.service.order.TradeOrderQueryService;
 import cn.newfeifan.mall.module.trade.service.order.TradeOrderUpdateService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -43,6 +45,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
@@ -423,8 +426,30 @@ public class AfterSaleServiceImpl implements AfterSaleService {
     }
 
     @Override
-    public Long getApplyingAfterSaleCount(Long userId, Long merId) {
-        return tradeAfterSaleMapper.selectCountByUserIdAndStatus(userId, merId, AfterSaleStatusEnum.APPLYING_STATUSES);
+    public Long getApplyingAfterSaleCount(Long userId, TradeOrderPageReqVO reqVO) {
+        return tradeAfterSaleMapper.selectCountByUserIdAndStatus(userId, AfterSaleStatusEnum.APPLYING_STATUSES,reqVO);
+    }
+
+    @Override
+    public Map<Integer, Long> getTabsCount(AfterSalePageReqVO pageVO) {
+        Map<Integer, Long> counts = Maps.newLinkedHashMapWithExpectedSize(8);
+        // 查询申请售后的售后订单
+        counts.put(AfterSaleStatusEnum.APPLY.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.APPLY.getStatus(),pageVO));
+        // 查询商品待退货的售后订单
+        counts.put(AfterSaleStatusEnum.SELLER_AGREE.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.SELLER_AGREE.getStatus(),pageVO));
+        // 查询商家待收货的售后订单
+        counts.put(AfterSaleStatusEnum.BUYER_DELIVERY.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.BUYER_DELIVERY.getStatus(),pageVO));
+        // 查询等待退款的售后订单
+        counts.put(AfterSaleStatusEnum.WAIT_REFUND.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.WAIT_REFUND.getStatus(),pageVO));
+        // 查询退款成功的售后订单
+        counts.put(AfterSaleStatusEnum.COMPLETE.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.COMPLETE.getStatus(),pageVO));
+        // 查询买家取消的售后订单
+        counts.put(AfterSaleStatusEnum.BUYER_CANCEL.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.BUYER_CANCEL.getStatus(),pageVO));
+        // 查询商家拒绝的售后订单
+        counts.put(AfterSaleStatusEnum.SELLER_DISAGREE.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.SELLER_DISAGREE.getStatus(),pageVO));
+        // 查询商家拒收货的售后订单
+        counts.put(AfterSaleStatusEnum.SELLER_REFUSE.getStatus(),tradeAfterSaleMapper.selectCount(AfterSaleStatusEnum.SELLER_REFUSE.getStatus(),pageVO));
+        return counts;
     }
 
 }

+ 11 - 13
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderQueryService.java

@@ -161,20 +161,18 @@ public interface TradeOrderQueryService {
 
     /**
      * 根据状态获取订单数量, 不通过用户ID信息
-     * @param status
-     * @return
+     * @param status 订单状态
+     * @return 数量
      */
     Long getOrderCount(Integer status);
 
-
     /**
-     * 根据状态获取订单数量, 不通过用户ID信息
+     * 根据条件获取订单数量
+     * @param reqVO 条件
      * @param status 订单状态
-     * @param shopId 店铺ID
-     * @param merId 商户ID
      * @return 数量
      */
-    Long getOrderCount(Integer status,Long shopId, Long merId);
+    Long getOrderCount(Integer status, TradeOrderPageReqVO reqVO);
 
     /**
      * 根据状态获取订单数量, 不通过用户ID信息
@@ -187,29 +185,29 @@ public interface TradeOrderQueryService {
 
     /**
      * 补充订单编号以及商品图片
-     * @param list
-     * @return
+     * @param list 集合
+     * @return 集合
      */
     List<PayOrderPageItemRespVO> getOrderNoAndPicUrl(List<PayOrderPageItemRespVO> list);
 
 
     /**
      * 获取商户订单总数
-     * @param key
-     * @return
+     * @param key key值
+     * @return 数量
      */
     Integer getShopSalesVolume(Long key);
 
     /**
      * 获取所有订单信息, 已经完成的(已经经过收款7天之后的订单)
-     * @return
+     * @return 集合
      */
     List<AppTradeOrderDetailRespVO> cancelOrderBySystem();
 
 
     /**
      * 查询当前系统的所有订单
-     * @return
+     * @return 集合
      */
     List<DistriOrderMessage> queryAllOrder();
 

+ 3 - 3
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderQueryServiceImpl.java

@@ -190,8 +190,8 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
     }
 
     @Override
-    public Long getOrderCount(Integer status, Long shopId, Long merId) {
-        return tradeOrderMapper.selectCountByStatus(status, shopId, merId);
+    public Long getOrderCount(Integer status, TradeOrderPageReqVO reqVO) {
+        return tradeOrderMapper.selectCountByStatus(status, reqVO);
     }
 
     @Override
@@ -284,7 +284,7 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
     @Override
     public TradeOrderDO getOrderById(Long orderId) {
         return tradeOrderMapper.selectOne(new LambdaQueryWrapper<TradeOrderDO>()
-                .eq(TradeOrderDO::getId,orderId)
+                .eq(TradeOrderDO::getId, orderId)
                 .isNull(TradeOrderDO::getReceivingTime)
         );
     }

+ 3 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -379,7 +379,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         // 执行更新
         updateOrderObj.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()).setDeliveryTime(LocalDateTime.now());
         int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(), updateOrderObj);
-        TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(order.getId());
         if (updateCount == 0) {
             throw exception(ORDER_DELIVERY_FAIL_STATUS_NOT_UNDELIVERED);
         }
@@ -406,8 +405,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
         // 设置订阅参数,包括回调URL和手机号
         SubscribeParameters subscribeParameters = new SubscribeParameters();
-        subscribeParameters.setCallbackurl("https://47.107.28.221:8002/admin-api/trade/order/callBackUrl?orderId="+order.getId());
+        subscribeParameters.setCallbackurl("http://47.107.28.221:8002/admin-api/trade/order/callBackUrl?orderId="+order.getId());
         subscribeParameters.setPhone(order.getReceiverMobile());
+        //添加盐
+        subscribeParameters.setSalt(order.getLogisticsNo());
 
         // 创建订阅参数实例,并设置相关公司代码、物流单号和密钥
         SubscribeParam subscribeParam = new SubscribeParam();

+ 63 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordercallbacklogs/OrderCallbackLogsService.java

@@ -0,0 +1,63 @@
+package cn.newfeifan.mall.module.trade.service.ordercallbacklogs;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordercallbacklogs.OrderCallbackLogsDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 第三方回调日志 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface OrderCallbackLogsService {
+
+    /**
+     * 创建第三方回调日志
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Integer createOrderCallbackLogs(@Valid OrderCallbackLogsSaveReqVO createReqVO);
+
+    /**
+     * 更新第三方回调日志
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateOrderCallbackLogs(@Valid OrderCallbackLogsSaveReqVO updateReqVO);
+
+    /**
+     * 删除第三方回调日志
+     *
+     * @param id 编号
+     */
+    void deleteOrderCallbackLogs(Integer id);
+
+    /**
+     * 获得第三方回调日志
+     *
+     * @param id 编号
+     * @return 第三方回调日志
+     */
+    OrderCallbackLogsDO getOrderCallbackLogs(Integer id);
+
+    /**
+     * 获得第三方回调日志分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 第三方回调日志分页
+     */
+    PageResult<OrderCallbackLogsDO> getOrderCallbackLogsPage(OrderCallbackLogsPageReqVO pageReqVO);
+
+    /**
+     * 创建第三方回调日志
+     *
+     * @param orderId 订单编号
+     * @param param 推送参数
+     * @param responseBody 响应体
+     * @param status 状态
+     */
+    void create(String orderId,String param,String responseBody,String status);
+
+}

+ 77 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordercallbacklogs/OrderCallbackLogsServiceImpl.java

@@ -0,0 +1,77 @@
+package cn.newfeifan.mall.module.trade.service.ordercallbacklogs;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import cn.newfeifan.mall.module.trade.controller.admin.ordercallbacklogs.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordercallbacklogs.OrderCallbackLogsDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.trade.dal.mysql.ordercallbacklogs.OrderCallbackLogsMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
+
+/**
+ * 第三方回调日志 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class OrderCallbackLogsServiceImpl implements OrderCallbackLogsService {
+
+    @Resource
+    private OrderCallbackLogsMapper orderCallbackLogsMapper;
+
+    @Override
+    public Integer createOrderCallbackLogs(OrderCallbackLogsSaveReqVO createReqVO) {
+        // 插入
+        OrderCallbackLogsDO orderCallbackLogs = BeanUtils.toBean(createReqVO, OrderCallbackLogsDO.class);
+        orderCallbackLogsMapper.insert(orderCallbackLogs);
+        // 返回
+        return orderCallbackLogs.getId();
+    }
+
+    @Override
+    public void updateOrderCallbackLogs(OrderCallbackLogsSaveReqVO updateReqVO) {
+        // 校验存在
+        validateOrderCallbackLogsExists(updateReqVO.getId());
+        // 更新
+        OrderCallbackLogsDO updateObj = BeanUtils.toBean(updateReqVO, OrderCallbackLogsDO.class);
+        orderCallbackLogsMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteOrderCallbackLogs(Integer id) {
+        // 校验存在
+        validateOrderCallbackLogsExists(id);
+        // 删除
+        orderCallbackLogsMapper.deleteById(id);
+    }
+
+    private void validateOrderCallbackLogsExists(Integer id) {
+        if (orderCallbackLogsMapper.selectById(id) == null) {
+            throw exception(ORDER_CALLBACK_LOGS_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public OrderCallbackLogsDO getOrderCallbackLogs(Integer id) {
+        return orderCallbackLogsMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<OrderCallbackLogsDO> getOrderCallbackLogsPage(OrderCallbackLogsPageReqVO pageReqVO) {
+        return orderCallbackLogsMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public void create(String orderId, String param, String responseBody, String status) {
+        boolean flag = status.equals("200");
+        OrderCallbackLogsDO build = OrderCallbackLogsDO.builder().orderId(orderId).requestParam(param).responseBody(responseBody).status(flag).build();
+        orderCallbackLogsMapper.insert(build);
+    }
+
+}

+ 12 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/ordercallbacklogs/OrderCallbackLogsMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.trade.dal.mysql.ordercallbacklogs.OrderCallbackLogsMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 6 - 4
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/shop/ShopController.java

@@ -45,10 +45,6 @@ import cn.newfeifan.mall.sale.dal.dataobject.shop.ShopDO;
 @Validated
 public class ShopController {
 
-
-    @Resource
-    private MerchantService merchantService;
-
     @Resource
     private ShopService shopService;
 
@@ -178,6 +174,12 @@ public class ShopController {
     public CommonResult<List<Long>> getIdsByName(@RequestParam("shopName") String shopName) {
         // 获取所有店铺
         List<Long> ids = shopService.getShopByName(shopName);
+
+        //没有就返回一个不存在的id
+        if(ids.isEmpty()){
+            ids = new ArrayList<>();
+            ids.add(-1L);
+        }
         return success(ids);
     }