订单数量 fix bug

This commit is contained in:
Jack 2025-07-21 22:23:45 +08:00
parent cf758fd0d5
commit 1359b6a399
7 changed files with 352 additions and 154 deletions

View File

@ -8,6 +8,7 @@ import java.util.Map;
public class StateCode {
public static final int DELIVERY_TYPE_EXPRESS = 1; //快递配送运费 10
public static final int DELIVERY_TYPE_EMS = 2; //EMS邮政
public static final int DELIVERY_TYPE_MAIL = 3; //平邮

View File

@ -10,12 +10,15 @@ package com.suisung.mall.shop.library.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.suisung.mall.common.feignService.AccountService;
import com.suisung.mall.common.modules.library.LibraryProduct;
import com.suisung.mall.common.pojo.dto.LibraryProductDTO;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.library.mapper.LibraryProductMapper;
import com.suisung.mall.shop.library.service.LibraryProductService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -31,6 +34,8 @@ public class LibraryProductImpl extends BaseServiceImpl<LibraryProductMapper, Li
@Value("${project.static_domain}")
private String staticDomain;
@Autowired
private AccountService accountService;
/**
* 匹配商品
@ -54,7 +59,14 @@ public class LibraryProductImpl extends BaseServiceImpl<LibraryProductMapper, Li
}
// 使用 Stream 处理图片 URLs
list.forEach(product -> product.processImageUrls(staticDomain));
String tengxunEndpoint = "";
if (StrUtil.isBlank(tengxunEndpoint)) {
tengxunEndpoint = staticDomain;
} else {
tengxunEndpoint = "https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com";
}
String finalTengxunEndpoint = tengxunEndpoint;
list.forEach(product -> product.processImageUrls(finalTengxunEndpoint));
return list;
}

View File

@ -295,37 +295,53 @@ public class ShopOrderBaseController extends BaseControllerImpl {
// 商家版接口 开始
@ApiOperation(value = "查询移动商家端订单数据(新)", notes = "查询移动商家端订单数据(新)")
@RequestMapping(value = "/mch/order/list", method = RequestMethod.POST)
public CommonResult selectMchOrderPageList(@RequestBody JSONObject params) {
// === 用户验证 ===
UserDto userDto = getCurrentUser();
if (userDto == null) {
return CommonResult.failed(ResultCode.NEED_LOGIN);
}
// 如果 storeId 有值判断当前登录账号是否有权查看该店铺的订单(以后账号有多个店铺需要更改判断方法)
// === 店铺权限验证 ===
Integer storeId = params.getInt("storeId");
if (storeId != null && storeId > 0 && !storeId.equals(userDto.getStore_id())) {
// 如果传入storeId验证是否与当前用户所属店铺一致
if (storeId != null && storeId > 0 && !storeId.toString().equals(userDto.getStore_id())) {
return CommonResult.failed(ResultCode.FORBIDDEN);
} else {
// 未传入storeId时使用用户默认店铺
storeId = Convert.toInt(userDto.getStore_id());
}
if (storeId == null || storeId <= 0) {
return CommonResult.failed(ResultCode.FORBIDDEN);
}
// === 构建响应数据 ===
Map<String, Object> respMap = new HashMap<>();
// 订单分页数据
Long expireSeconds = 1500L; // 60秒*25分钟 = 1500秒
respMap.put("order_page_list", shopOrderBaseService.selectMchOrderPageList(storeId, params.getStr("keyword"), params.getInt("delivery"), params.getInt("status"), expireSeconds, params.getInt("pageNum"), params.getInt("pageSize")));
// 订单列表数据缓存时间25分钟
long expireSeconds = 1500L;// 60秒*25分钟 = 1500秒
respMap.put("order_page_list", shopOrderBaseService.selectMchOrderPageList(
storeId,
params.getStr("keyword"),
params.getInt("delivery"),
params.getInt("status"),
params.getInt("logistics_status"),
expireSeconds,
params.getLong("begin_time"),
params.getLong("end_time"),
params.getInt("pageNum"),
params.getInt("pageSize")
));
// 订单数量统计
respMap.put("order_count", shopOrderBaseService.mchOrderCountByStoreId(storeId));
respMap.put("order_count", shopOrderBaseService.mchOrderCountByStoreId(storeId, expireSeconds, params.getLong("begin_time"), params.getLong("end_time")));
return CommonResult.success(respMap);
}
// 商家版接口 结束
}

View File

@ -61,16 +61,37 @@ public interface ShopOrderBaseMapper extends BaseMapper<ShopOrderBase> {
*/
Map getOrderPrintInfo(@Param("orderId") String orderId, Integer payState);
/**
* 商家版订单列表
*
* @param storeId 店铺Id
* @param keyword 关键字
* @param status 订单状态
* @param storeId
* @param keyword 订单搜索关键字
* @param delivery 配送方式1-同城配送2-物流配送
* @param status 同城配送订单状态delivery=1时才生效无值 or 0-全部订单1-进行中订单2-异常超时订单3-退款订单9-已完成订单
* @param logisticsStatus 普通快递订单状态delivery=2时才生效无值 or 0-全部订单1-待支付订单2-待发货订单3-待接收订单9-已完成订单
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @param page 分页参数
* @return
*/
IPage<MchOrderInfoDTO> selectMchOrderPageList(@Param("storeId") Integer storeId, @Param("keyword") String keyword, @Param("delivery") Integer delivery, @Param("status") Integer status, @Param("expireSeconds") Long expireSeconds, IPage<MchOrderInfoDTO> page);
IPage<MchOrderInfoDTO> selectMchOrderPageList(@Param("storeId") Integer storeId, @Param("keyword") String keyword, @Param("delivery") Integer delivery, @Param("status") Integer status, @Param("logisticsStatus") Integer logisticsStatus, @Param("expireSeconds") Long expireSeconds, @Param("beginTime") Long beginTime, @Param("endTime") Long endTime, IPage<MchOrderInfoDTO> page);
/**
* 商家版根据条件查询订单条数
*
* @param storeId
* @param keyword 订单搜索关键字
* @param delivery 配送方式1-同城配送2-物流配送
* @param status 同城配送订单状态delivery=1时才生效无值 or 0-全部订单1-进行中订单2-异常超时订单3-退款订单9-已完成订单
* @param logisticsStatus 普通快递订单状态delivery=2时才生效无值 or 0-全部订单1-待支付订单2-待发货订单3-待接收订单9-已完成订单
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @return
*/
Long countMchOrderByCondition(@Param("storeId") Integer storeId, @Param("keyword") String keyword, @Param("delivery") Integer delivery, @Param("status") Integer status, @Param("logisticsStatus") Integer logisticsStatus, @Param("expireSeconds") Long expireSeconds, @Param("beginTime") Long beginTime, @Param("endTime") Long endTime);
/**
* 获取微信发货订单基本信息

View File

@ -542,21 +542,43 @@ public interface ShopOrderBaseService extends IBaseService<ShopOrderBase> {
* @param storeId
* @param keyword 订单搜索关键字
* @param delivery 配送方式1-同城配送2-物流配送
* @param status 查询状态1-进行中时效内2-异常订单已超时的3-退款订单
* @param status 同城配送订单状态delivery=1时才生效无值 or 0-全部订单1-进行中订单2-异常超时订单3-退款订单9-已完成订单
* @param logisticsStatus 普通快递订单状态delivery=2时才生效无值 or 0-全部订单1-待支付订单2-待发货订单3-待接收订单9-已完成订单
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @param pageNum 页码
* @param pageSize 页大小
* @return
*/
IPage<MchOrderInfoDTO> selectMchOrderPageList(Integer storeId, String keyword, Integer delivery, Integer status, Long expireSeconds, Integer pageNum, Integer pageSize);
IPage<MchOrderInfoDTO> selectMchOrderPageList(Integer storeId, String keyword, Integer delivery, Integer status, Integer logisticsStatus, Long expireSeconds, Long beginTime, Long endTime, Integer pageNum, Integer pageSize);
/**
* 商家版根据条件查询订单条数
*
* @param storeId 店铺Id
* @param keyword 订单搜索关键字
* @param delivery 配送方式1-同城配送2-物流配送
* @param status 同城配送订单状态delivery=1时才生效无值 or 0-全部订单1-进行中订单2-异常超时订单3-退款订单9-已完成订单
* @param logisticsStatus 普通快递订单状态delivery=2时才生效无值 or 0-全部订单1-待支付订单2-待发货订单3-待接收订单9-已完成订单
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @return
*/
Long countMchOrderByCondition(Integer storeId, String keyword, Integer delivery, Integer status, Integer logisticsStatus, Long expireSeconds, Long beginTime, Long endTime);
/**
* 商家订单各个分类和状态的订单数量
*
* @param storeId
* @param storeId 店铺Id
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @return
*/
JSONObject mchOrderCountByStoreId(Integer storeId);
JSONObject mchOrderCountByStoreId(Integer storeId, Long expireSeconds, Long beginTime, Long endTime);
/**
* 获取微信发货订单基本信息

View File

@ -8531,26 +8531,29 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
}
/**
* 商家版订单列表查询优化版
* 商家版订单列表
*
* @param storeId 店铺ID
* @param storeId
* @param keyword 订单搜索关键字
* @param delivery 配送方式1-同城配送2-物流配送
* @param status 查询状态1-进行中2-异常订单3-退款订单
* @param expireSeconds 配送超时秒数
* @param status 同城配送订单状态delivery=1时才生效无值 or 0-全部订单1-进行中订单2-异常超时订单3-退款订单9-已完成订单
* @param logisticsStatus 普通快递订单状态delivery=2时才生效无值 or 0-全部订单1-待支付订单2-待发货订单3-待接收订单9-已完成订单
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @param pageNum 页码
* @param pageSize 页大小
* @return 分页订单数据异常时返回空分页
* @return
*/
@Override
public IPage<MchOrderInfoDTO> selectMchOrderPageList(Integer storeId, String keyword, Integer delivery, Integer status, Long expireSeconds, Integer pageNum, Integer pageSize) {
public IPage<MchOrderInfoDTO> selectMchOrderPageList(Integer storeId, String keyword, Integer delivery, Integer status, Integer logisticsStatus, Long expireSeconds, Long beginTime, Long endTime, Integer pageNum, Integer pageSize) {
try {
// 初始化分页对象
Page<MchOrderInfoDTO> page = new Page<>(pageNum, pageSize);
// 查询订单基础数据
IPage<MchOrderInfoDTO> pageList = shopOrderBaseMapper.selectMchOrderPageList(
storeId, keyword, delivery, status, expireSeconds, page);
storeId, keyword, delivery, status, logisticsStatus, expireSeconds, beginTime, endTime, page);
if (CollUtil.isEmpty(pageList.getRecords())) {
return pageList;
@ -8581,13 +8584,35 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
}
/**
* 商家订单各个分类和状态的订单数量
* 商家版根据条件查询订单条数
*
* @param storeId
* @param keyword 订单搜索关键字
* @param delivery 配送方式1-同城配送2-物流配送
* @param status 同城配送订单状态delivery=1时才生效无值 or 0-全部订单1-进行中订单2-异常超时订单3-退款订单9-已完成订单
* @param logisticsStatus 普通快递订单状态delivery=2时才生效无值 or 0-全部订单1-待支付订单2-待发货订单3-待接收订单9-已完成订单
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @return
*/
@Override
public JSONObject mchOrderCountByStoreId(Integer storeId) {
public Long countMchOrderByCondition(Integer storeId, String keyword, Integer delivery, Integer status, Integer logisticsStatus, Long expireSeconds, Long beginTime, Long endTime) {
return shopOrderBaseMapper.countMchOrderByCondition(storeId, keyword, delivery, status, logisticsStatus, expireSeconds, beginTime, endTime);
}
/**
* 商家订单各个分类和状态的订单数量
*
* @param storeId 店铺Id
* @param expireSeconds 配送超时的秒数单位秒
* @param beginTime 开始时间戳13位毫秒级别
* @param endTime 截止时间戳13位毫秒级别
* @return
*/
@Override
public JSONObject mchOrderCountByStoreId(Integer storeId, Long expireSeconds, Long beginTime, Long endTime) {
JSONObject jsonObject = new JSONObject();
if (CheckUtil.isEmpty(storeId)) {
@ -8621,96 +8646,123 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
// 2060-ORDER_STATE_FINISH 已完成/已签收;
// 2070-ORDER_STATE_CANCEL已取消/已作废;
// 2080-ORDER_STATE_SELF_PICKUP自提
// 全部订单总数量
jsonObject.put("all_order_count", shopOrderInfoService.getOrderCountByStoreId(storeId, null, null, null, null));
jsonObject.put("all_order_count", countMchOrderByCondition(storeId, "", 0, 0, 0, 0L, beginTime, endTime));
// 同城配送订单总数量
jsonObject.put("same_city_order_count", shopOrderInfoService.getOrderCountByStoreId(storeId, null, null,
Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
null
));
jsonObject.put("same_city_order_count", countMchOrderByCondition(storeId, "", 1, 0, 0, expireSeconds, beginTime, endTime));
// 同城配送进行中订单数量
jsonObject.putByPath("same_city_order.progress_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
Arrays.asList(StateCode.ORDER_STATE_WAIT_REVIEW, StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW,
StateCode.ORDER_STATE_WAIT_PAID, StateCode.ORDER_STATE_PICKING,
StateCode.ORDER_STATE_WAIT_SHIPPING, StateCode.ORDER_STATE_SHIPPED),
Collections.singletonList(0),
Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
null
));
jsonObject.putByPath("same_city_order.progress_count", countMchOrderByCondition(storeId, "", 1, 1, 0, expireSeconds, beginTime, endTime));
// 同城配送超时订单数量
jsonObject.putByPath("same_city_order.overtime_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
Arrays.asList(StateCode.ORDER_STATE_WAIT_REVIEW,
StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW,
StateCode.ORDER_STATE_WAIT_PAID,
StateCode.ORDER_STATE_PICKING,
StateCode.ORDER_STATE_WAIT_SHIPPING,
StateCode.ORDER_STATE_SHIPPED),
Collections.singletonList(0),
Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
120L
));
jsonObject.putByPath("same_city_order.overtime_count", countMchOrderByCondition(storeId, "", 1, 2, 0, expireSeconds, beginTime, endTime));
// 同城配送退款订单数量
jsonObject.putByPath("same_city_order.refund_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
null,
Arrays.asList(1, 2),
Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
null
));
jsonObject.putByPath("same_city_order.refund_count", countMchOrderByCondition(storeId, "", 1, 3, 0, 0L, beginTime, endTime));
// 同城配送退款订单数量
jsonObject.putByPath("same_city_order.finish_count", countMchOrderByCondition(storeId, "", 1, 9, 0, 0L, beginTime, endTime));
// 普通物流订单总数量
jsonObject.put("logistics_order_count", shopOrderInfoService.getOrderCountByStoreId(storeId, null, null,
Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
null
));
jsonObject.put("logistics_order_count", countMchOrderByCondition(storeId, "", 2, 0, 0, 0L, beginTime, endTime));
// 普通物流待支付订单数量
jsonObject.putByPath("logistics_order.wait_pay_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
Collections.singletonList(StateCode.ORDER_STATE_WAIT_PAY),
Collections.singletonList(0),
Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
null
));
jsonObject.putByPath("logistics_order.wait_pay_count", countMchOrderByCondition(storeId, "", 2, 0, 1, 0L, beginTime, endTime));
// 普通物流待发货订单数量
jsonObject.putByPath("logistics_order.wait_shipping_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
Arrays.asList(StateCode.ORDER_STATE_WAIT_REVIEW,
StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW,
StateCode.ORDER_STATE_WAIT_PAID,
StateCode.ORDER_STATE_PICKING,
StateCode.ORDER_STATE_WAIT_SHIPPING),
Collections.singletonList(0),
Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
null
));
jsonObject.putByPath("logistics_order.wait_shipping_count", countMchOrderByCondition(storeId, "", 2, 0, 2, 0L, beginTime, endTime));
// 普通物流待收货订单数量
jsonObject.putByPath("logistics_order.receiving_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
Collections.singletonList(StateCode.ORDER_STATE_SHIPPED),
Collections.singletonList(0),
Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
null
));
jsonObject.putByPath("logistics_order.receiving_count", countMchOrderByCondition(storeId, "", 2, 0, 3, 0L, beginTime, endTime));
// 普通物流已完成订单数量
jsonObject.putByPath("logistics_order.finished_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
Arrays.asList(StateCode.ORDER_STATE_RECEIVED, StateCode.ORDER_STATE_FINISH),
jsonObject.putByPath("logistics_order.finished_count", countMchOrderByCondition(storeId, "", 2, 0, 9, 0L, beginTime, endTime));
Collections.singletonList(0),
Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
null
));
// 全部订单总数量
// jsonObject.put("all_order_count", shopOrderInfoService.getOrderCountByStoreId(storeId, null, null, null, null));
//
// // 同城配送订单总数量
// jsonObject.put("same_city_order_count", shopOrderInfoService.getOrderCountByStoreId(storeId, null, null,
// Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
// null
// ));
//
// // 同城配送进行中订单数量
// jsonObject.putByPath("same_city_order.progress_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
// Arrays.asList(StateCode.ORDER_STATE_WAIT_REVIEW, StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW,
// StateCode.ORDER_STATE_WAIT_PAID, StateCode.ORDER_STATE_PICKING,
// StateCode.ORDER_STATE_WAIT_SHIPPING, StateCode.ORDER_STATE_SHIPPED),
// Collections.singletonList(0),
// Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
// null
// ));
//
// // 同城配送超时订单数量
// jsonObject.putByPath("same_city_order.overtime_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
// Arrays.asList(StateCode.ORDER_STATE_WAIT_REVIEW,
// StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW,
// StateCode.ORDER_STATE_WAIT_PAID,
// StateCode.ORDER_STATE_PICKING,
// StateCode.ORDER_STATE_WAIT_SHIPPING,
// StateCode.ORDER_STATE_SHIPPED),
//
// Collections.singletonList(0),
// Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
// 120L
// ));
//
// // 同城配送退款订单数量
// jsonObject.putByPath("same_city_order.refund_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
// null,
// Arrays.asList(1, 2),
// Collections.singletonList(StateCode.DELIVERY_TYPE_SAME_CITY),
// null
// ));
//
//
// // 普通物流订单总数量
// jsonObject.put("logistics_order_count", shopOrderInfoService.getOrderCountByStoreId(storeId, null, null,
// Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
// null
// ));
//
// // 普通物流待支付订单数量
// jsonObject.putByPath("logistics_order.wait_pay_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
// Collections.singletonList(StateCode.ORDER_STATE_WAIT_PAY),
//
// Collections.singletonList(0),
//
// Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
// null
// ));
//
// // 普通物流待发货订单数量
// jsonObject.putByPath("logistics_order.wait_shipping_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
// Arrays.asList(StateCode.ORDER_STATE_WAIT_REVIEW,
// StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW,
// StateCode.ORDER_STATE_WAIT_PAID,
// StateCode.ORDER_STATE_PICKING,
// StateCode.ORDER_STATE_WAIT_SHIPPING),
//
// Collections.singletonList(0),
//
// Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
// null
// ));
//
// // 普通物流待收货订单数量
// jsonObject.putByPath("logistics_order.receiving_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
// Collections.singletonList(StateCode.ORDER_STATE_SHIPPED),
//
// Collections.singletonList(0),
//
// Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
// null
// ));
//
// // 普通物流已完成订单数量
// jsonObject.putByPath("logistics_order.finished_count", shopOrderInfoService.getOrderCountByStoreId(storeId,
// Arrays.asList(StateCode.ORDER_STATE_RECEIVED, StateCode.ORDER_STATE_FINISH),
//
// Collections.singletonList(0),
// Arrays.asList(StateCode.DELIVERY_TYPE_EXPRESS, StateCode.DELIVERY_TYPE_EXP),
// null
// ));
// todo 预订单数量相关数

View File

@ -636,9 +636,107 @@
</collection>
</resultMap>
<!--// refundstatus 退款状态:0-是无退款;1-是部分退款;2-是全部退款
// orderstatus 订单状态2010-待付款;2011-待订单审核;2012-待发货;2013-待财务审核;2014-待配货/待出库审核;2020-待发货;
<!--refundstatus 退款状态:0-是无退款;1-是部分退款;2-是全部退款
orderstatus 订单状态2010-待付款;2011-待订单审核;2012-待发货;2013-待财务审核;2014-待配货/待出库审核;2020-待发货;
2030-待发货/待收货确认;2040-已发货/待收货确认;2050-已签收;2060-已完成/已签收;2070-已取消/已作废;2080-自提-->
<!-- 公共的where条件片段 -->
<sql id="mchOrderWhereCondition">
<where>
<!-- 店铺ID筛选0表示不筛选 -->
<if test="storeId != null and storeId > 0">
AND ob.store_id = #{storeId}
</if>
<!-- 关键词搜索:支持多字段模糊匹配 -->
<if test="keyword != null and keyword != ''">
AND (
ob.order_id LIKE CONCAT('%', #{keyword}, '%')
OR oi.order_title LIKE CONCAT('%', #{keyword}, '%')
OR oda.da_name LIKE CONCAT('%', #{keyword}, '%')
OR oda.da_address LIKE CONCAT('%', #{keyword}, '%')
OR sb.store_address LIKE CONCAT('%', #{keyword}, '%')
OR spi.item_barcode LIKE CONCAT('%', #{keyword}, '%')
)
</if>
<!-- === 配送类型筛选 === -->
<!-- 1-同城配送 -->
<if test="delivery != null and delivery == 1">
AND oi.delivery_type_id = 16
<!-- 订单状态筛选 -->
<choose>
<!-- 1-进行中订单 -->
<when test="status != null and status == 1 and expireSeconds != null and expireSeconds > 0">
AND ob.order_state_id IN (2011,2012,2013, 2014, 2020, 2030, 2040)
AND (oi.order_time + #{expireSeconds}*1000) <![CDATA[>=]]> UNIX_TIMESTAMP() * 1000
</when>
<!-- 2-异常(超时)订单 -->
<when test="status != null and status == 2 and expireSeconds != null and expireSeconds > 0">
AND ob.order_state_id IN (2011,2012,2013, 2014, 2020, 2030, 2040)
AND (oi.order_time + #{expireSeconds}*1000) <![CDATA[<]]> UNIX_TIMESTAMP() * 1000
</when>
<!-- 3-退款订单 -->
<when test="status != null and status == 3">
AND od.order_refund_status IN (1, 2)
</when>
<!-- 9-已完成订单 -->
<when test="status != null and status == 9">
AND ob.order_state_id IN (2050, 2060)
</when>
<!-- 0-全部订单或无状态 -->
<otherwise>
AND ob.order_state_id IN (2011, 2012, 2013, 2014, 2020, 2030, 2040, 2050, 2060, 2070, 2080)
</otherwise>
</choose>
</if>
<!-- 2-物流配送 -->
<if test="delivery != null and delivery == 2">
AND oi.delivery_type_id NOT IN (1,2,3,4,10)
<!-- 订单状态筛选 -->
<choose>
<!-- 1-待支付订单 -->
<when test="logisticsStatus != null and logisticsStatus == 1">
AND ob.order_state_id=2010
</when>
<!-- 2-待发货订单 -->
<when test="logisticsStatus != null and logisticsStatus == 2">
AND ob.order_state_id IN (2011, 2012, 2013, 2014, 2020)
</when>
<!-- 3-待接收单 -->
<when test="logisticsStatus != null and logisticsStatus == 3">
AND ob.order_state_id IN (2030, 2040)
</when>
<!-- 9-已完成订单 -->
<when test="logisticsStatus != null and logisticsStatus == 9">
AND ob.order_state_id IN (2050, 2060)
</when>
<!-- 0-全部订单或无状态 -->
<otherwise>
AND ob.order_state_id IN (2011,2012, 2013, 2014, 2020, 2030, 2040, 2050, 2060, 2070, 2080)
</otherwise>
</choose>
</if>
<!-- 无配送类型或0-全部 -->
<if test="delivery == null or delivery == 0">
AND ob.order_state_id IN (2011, 2012, 2013, 2014, 2020, 2030, 2040, 2050, 2060)
</if>
<if test="beginTime != null and beginTime > 0">
AND oi.order_time <![CDATA[>=]]> #{begin_time}
</if>
<if test="endTime != null and endTime > 0">
AND oi.order_time <![CDATA[<=]]> #{end_time}
</if>
</where>
</sql>
<select id="selectMchOrderPageList" resultMap="MchOrderResult">
SELECT
ob.order_id,
@ -660,7 +758,8 @@
oi.delivery_type_id,
oi.buyer_user_id,
oi.order_picked_time,
IF((SELECT count(*) FROM shop_order_base WHERE buyer_user_id = oi.buyer_user_id AND order_state_id IN (2011,
IF((SELECT count(*) FROM shop_order_base WHERE buyer_user_id = oi.buyer_user_id AND order_state_id IN
(2011,2012,
2013, 2014, 2020, 2030, 2040))>1,2,1)
AS is_new_buyer,
oi.payment_time,
@ -715,49 +814,24 @@
left join shop_store_sf_order osf on ob.order_id=osf.shop_order_id
left join shop_product_item spi on oit.product_id=spi.product_id
left join shop_base_store_grade sbsg on sb.store_grade_id=sbsg.store_grade_id
<where>
<if test="storeId!=null and storeId > 0">
and ob.store_id=#{storeId}
</if>
<if test="keyword!=null and keyword != ''">
and
(ob.order_id LIKE CONCAT('%', #{keyword}, '%')
OR oi.order_title LIKE CONCAT('%', #{keyword}, '%')
OR oda.da_name LIKE CONCAT('%', #{keyword}, '%')
OR oda.da_address LIKE CONCAT('%', #{keyword}, '%')
OR sb.store_address LIKE CONCAT('%', #{keyword}, '%')
OR spi.item_barcode LIKE CONCAT('%', #{keyword}, '%'))
</if>
<!--配送方式1-同城配送2-物流配送-->
<if test="delivery!=null and delivery==1">
and ob.order_state_id IN (2011, 2013, 2014, 2020, 2030, 2040)
and oi.delivery_type_id = 16
<include refid="mchOrderWhereCondition"/>
<!--进行中-->
<if test="status!=null and status==1 and expireSeconds!=null and expireSeconds>0">
and (oi.order_time + #{expireSeconds}*1000) <![CDATA[>=]]> UNIX_TIMESTAMP() * 1000
</if>
<!--超时异常-->
<if test="status!=null and status==2 and expireSeconds!=null and expireSeconds>0">
and (oi.order_time + #{expireSeconds}*1000) <![CDATA[<]]> UNIX_TIMESTAMP() * 1000
</if>
<!--退款订单-->
<if test="status!=null and status==3">
and od.order_refund_status IN (1, 2)
</if>
</if>
<if test="delivery!=null and delivery==2">
and ob.order_state_id IN (2011, 2013, 2014, 2020, 2030, 2040)
and oi.delivery_type_id NOT IN (1,2,3,4,10)
</if>
</where>
order by ob.order_time desc
ORDER BY ob.order_id DESC
</select>
<select id="countMchOrderByCondition" resultType="java.lang.Long">
SELECT COUNT(DISTINCT ob.order_id)
FROM shop_order_base ob
JOIN shop_order_info oi ON ob.order_id = oi.order_id
JOIN shop_order_data od ON ob.order_id = od.order_id
JOIN shop_store_base sb ON ob.store_id = sb.store_id
JOIN shop_order_delivery_address oda ON ob.order_id = oda.order_id
<include refid="mchOrderWhereCondition"/>
</select>
<select id="getWxOrderBaseInfo" resultMap="WxOrderBaseInfoResult">
SELECT a.store_id,
a.order_id as out_trade_no,