feat(order): 新增商家订单详情查询接口

This commit is contained in:
huk 2025-09-27 16:51:18 +08:00
parent 22d6ca9897
commit 8ba2a94e97
7 changed files with 146 additions and 46 deletions

View File

@ -3,9 +3,7 @@ package org.dromara.app.merchant;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wzj.soopin.order.business.IOrderBusiness; import com.wzj.soopin.order.business.IOrderBusiness;
import com.wzj.soopin.order.domain.bo.OrderItemBo; import com.wzj.soopin.order.domain.bo.OrderItemBo;
import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.vo.MerchantOrderVO; import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
import com.wzj.soopin.order.domain.vo.OrderVO;
import com.wzj.soopin.order.service.IMerchantOrderService; import com.wzj.soopin.order.service.IMerchantOrderService;
import com.wzj.soopin.order.service.VerificationCodeService; import com.wzj.soopin.order.service.VerificationCodeService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -33,6 +31,15 @@ public class AppMerchantOrderController {
private final IMerchantOrderService merchantOrderService; private final IMerchantOrderService merchantOrderService;
private final IOrderBusiness orderBusiness; private final IOrderBusiness orderBusiness;
@Operation(summary = "获取该商家订单子项详细信息")
@GetMapping(value = "/{orderItemId}")
public R<MerchantOrderVO> getInfo(@PathVariable("orderItemId") Long orderItemId) {
return R.ok(orderBusiness.itemInfo(orderItemId));
}
/** /**
* 扫码核销接口 * 扫码核销接口
* @return 核销结果 * @return 核销结果
@ -49,9 +56,8 @@ public class AppMerchantOrderController {
*/ */
@GetMapping("/scan") @GetMapping("/scan")
@Operation(summary = "查询核销码对应的订单") @Operation(summary = "查询核销码对应的订单")
public R<OrderVO> scan(@RequestParam("code") String code) { public R<MerchantOrderVO> scan(@RequestParam("code") String code) {
Order order = verificationCodeService.scan(code); return R.ok(orderBusiness.getItemInfoByVerificationCode(code));
return R.ok(orderBusiness.info(order.getId()));
} }
@PostMapping("/page") @PostMapping("/page")

View File

@ -1,8 +1,14 @@
package com.wzj.soopin.order.business; package com.wzj.soopin.order.business;
import com.wzj.soopin.order.domain.bo.OrderBo; import com.wzj.soopin.order.domain.bo.OrderBo;
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
import com.wzj.soopin.order.domain.vo.OrderVO; import com.wzj.soopin.order.domain.vo.OrderVO;
import org.dromara.common.web.core.IBusiness; import org.dromara.common.web.core.IBusiness;
public interface IOrderBusiness extends IBusiness<OrderVO, OrderBo> { public interface IOrderBusiness extends IBusiness<OrderVO, OrderBo> {
MerchantOrderVO itemInfo(Long orderItemId);
MerchantOrderVO getItemInfoByVerificationCode(String verificationCode);
} }

View File

@ -8,6 +8,7 @@ import com.wzj.soopin.order.convert.OrderItemConvert;
import com.wzj.soopin.order.domain.bo.OrderBo; import com.wzj.soopin.order.domain.bo.OrderBo;
import com.wzj.soopin.order.domain.entity.Order; import com.wzj.soopin.order.domain.entity.Order;
import com.wzj.soopin.order.domain.entity.OrderItem; import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
import com.wzj.soopin.order.domain.vo.OrderItemVO; import com.wzj.soopin.order.domain.vo.OrderItemVO;
import com.wzj.soopin.order.domain.vo.OrderVO; import com.wzj.soopin.order.domain.vo.OrderVO;
import com.wzj.soopin.order.service.OrderItemService; import com.wzj.soopin.order.service.OrderItemService;
@ -62,4 +63,14 @@ public class OrderBusinessImpl extends BusinessImpl<OrderService, OrderConvert,
vo.setVerificationCodes(verificationCodeService.getByOrderId(vo.getId())); vo.setVerificationCodes(verificationCodeService.getByOrderId(vo.getId()));
return vo; return vo;
} }
@Override
public MerchantOrderVO itemInfo(Long orderItemId) {
return orderItemService.getMerchantOrder(orderItemId);
}
@Override
public MerchantOrderVO getItemInfoByVerificationCode(String verificationCode) {
return orderItemService.getMerchantOrder(verificationCode);
}
} }

View File

@ -36,10 +36,10 @@ public interface OrderItemMapper extends BaseMapperPlus<OrderItem, OrderItemVO>
* @return 商品名称 * @return 商品名称
*/ */
@Select("SELECT p.name " + @Select("SELECT p.name " +
"FROM oms_order_item oi " + "FROM oms_order_item oi " +
"JOIN pms_product p ON oi.product_id = p.id " + "JOIN pms_product p ON oi.product_id = p.id " +
"WHERE oi.order_id = #{orderId} " + "WHERE oi.order_id = #{orderId} " +
"LIMIT 1") "LIMIT 1")
String getName(Long orderId); String getName(Long orderId);
/** /**
@ -50,25 +50,27 @@ public interface OrderItemMapper extends BaseMapperPlus<OrderItem, OrderItemVO>
* @return 商品交易量信息列表 * @return 商品交易量信息列表
*/ */
@Select("SELECT " + @Select("SELECT " +
" oi.product_id, " + " oi.product_id, " +
" oi.product_name, " + " oi.product_name, " +
" oi.pic, " + " oi.pic, " +
" oi.out_product_id, " + " oi.out_product_id, " +
" oi.product_category_id, " + " oi.product_category_id, " +
" SUM(oi.quantity) as total_quantity, " + " SUM(oi.quantity) as total_quantity, " +
" SUM(oi.quantity * oi.sale_price) as total_amount, " + " SUM(oi.quantity * oi.sale_price) as total_amount, " +
" COUNT(DISTINCT o.id) as order_count " + " COUNT(DISTINCT o.id) as order_count " +
"FROM oms_order_item oi " + "FROM oms_order_item oi " +
"JOIN oms_order o ON oi.order_id = o.id " + "JOIN oms_order o ON oi.order_id = o.id " +
"WHERE o.status = 3 " + // 已完成订单 "WHERE o.status = 3 " + // 已完成订单
" AND o.delete_status = 0 " + // 未删除订单 " AND o.delete_status = 0 " + // 未删除订单
"GROUP BY oi.product_id, oi.product_name, oi.pic, oi.out_product_id, oi.product_category_id " + "GROUP BY oi.product_id, oi.product_name, oi.pic, oi.out_product_id, oi.product_category_id " +
"ORDER BY total_quantity DESC " + "ORDER BY total_quantity DESC " +
"LIMIT #{limit}") "LIMIT #{limit}")
List<Map<String, Object>> selectTopTradingProducts(int limit); List<Map<String, Object>> selectTopTradingProducts(int limit);
@Select("SELECT * FROM oms_order_item WHERE order_id = #{orderId}") @Select("SELECT * FROM oms_order_item WHERE order_id = #{orderId}")
List<OrderItem> findByOrderId(Long orderId); List<OrderItem> findByOrderId(Long orderId);
IPage<MerchantOrderVO> selectMerchatOrderPage(@Param("page") Page<Object> page, @Param("query") OrderItemBo query); IPage<MerchantOrderVO> selectMerchatOrderPage(@Param("page") Page<Object> page, @Param("query") OrderItemBo query);
MerchantOrderVO selectMerchatOrder(@Param("tenantId") String tenantId, @Param("orderItemId") Long orderItemId, @Param("verificationCode") String verificationCode);
} }

View File

@ -2,6 +2,7 @@ package com.wzj.soopin.order.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.order.domain.entity.OrderItem; import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
import java.util.List; import java.util.List;
@ -14,4 +15,8 @@ public interface OrderItemService extends IService<OrderItem> {
* @param limit 查询数量限制 * @param limit 查询数量限制
*/ */
void cacheTopTradingProducts(int limit); void cacheTopTradingProducts(int limit);
MerchantOrderVO getMerchantOrder(Long orderItemId);
MerchantOrderVO getMerchantOrder(String code);
} }

View File

@ -1,12 +1,16 @@
package com.wzj.soopin.order.service.impl; package com.wzj.soopin.order.service.impl;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.wzj.soopin.order.domain.entity.OrderItem; import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
import com.wzj.soopin.order.mapper.OrderItemMapper; import com.wzj.soopin.order.mapper.OrderItemMapper;
import com.wzj.soopin.order.service.OrderItemService; import com.wzj.soopin.order.service.OrderItemService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.redis.redis.RedisCache; import org.dromara.common.redis.redis.RedisCache;
import org.dromara.common.tenant.helper.TenantHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -62,4 +66,18 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
log.error("缓存交易量最多商品到Redis失败", e); log.error("缓存交易量最多商品到Redis失败", e);
} }
} }
@Override
public MerchantOrderVO getMerchantOrder(Long orderItemId) {
String tenantId = TenantHelper.getTenantId();
Assert.notEmpty(tenantId, () -> ServiceException.of("您无权查看商户订单"));
return baseMapper.selectMerchatOrder(tenantId, orderItemId, null);
}
@Override
public MerchantOrderVO getMerchantOrder(String code) {
String tenantId = TenantHelper.getTenantId();
Assert.notEmpty(tenantId, () -> ServiceException.of("您无权查看商户订单"));
return baseMapper.selectMerchatOrder(tenantId,null, code);
}
} }

View File

@ -73,28 +73,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectMerchatOrderPage" resultType="com.wzj.soopin.order.domain.vo.MerchantOrderVO"> <select id="selectMerchatOrderPage" resultType="com.wzj.soopin.order.domain.vo.MerchantOrderVO">
SELECT o.id AS orderId, SELECT o.id AS orderId,
o.order_sn AS orderSn, o.order_sn AS orderSn,
o.member_id AS memberId, o.member_id AS memberId,
o.member_username AS memberUsername, o.member_username AS memberUsername,
o.merchant_note AS merchantNote, o.merchant_note AS merchantNote,
o.pay_type AS payType, o.pay_type AS payType,
o.status AS status, o.status AS status,
o.aftersale AS aftersale, o.aftersale AS aftersale,
oi.id AS orderItemId, oi.id AS orderItemId,
oi.product_id AS productId, oi.product_id AS productId,
oi.sku_id AS skuId, oi.sku_id AS skuId,
oi.product_snapshot_id AS productSnapshotId, oi.product_snapshot_id AS productSnapshotId,
ppc.name AS productCategoryName, ppc.name AS productCategoryName,
oi.sku_snapshot_id AS skuSnapshotId, oi.sku_snapshot_id AS skuSnapshotId,
oi.pic AS pic, oi.pic AS pic,
oi.product_name AS productName, oi.product_name AS productName,
oi.sale_price AS salePrice, oi.sale_price AS salePrice,
oi.quantity AS quantity, oi.quantity AS quantity,
oi.product_category_id AS productCategoryId, oi.product_category_id AS productCategoryId,
oi.sp_data AS spData, oi.sp_data AS spData,
oi.tenant_id AS tenantId, oi.tenant_id AS tenantId,
oi.tenant_name AS tenantName oi.tenant_name AS tenantName,
vc.code AS code,
vc.status AS verificationCodeStatus,
vc.used_time AS usedTime,
vc.used_merchant_id AS usedMerchantId,
vc.expire_time AS expireTime,
vc.verification_time AS verificationTime,
vc.reason AS reason
FROM oms_order_item oi FROM oms_order_item oi
LEFT JOIN oms_order o ON oi.order_id = o.id LEFT JOIN oms_order o ON oi.order_id = o.id
LEFT JOIN pms_product_category ppc ON oi.product_category_id = ppc.id LEFT JOIN pms_product_category ppc ON oi.product_category_id = ppc.id
@ -137,4 +145,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND oi.product_category_id = #{query.productCategoryId} AND oi.product_category_id = #{query.productCategoryId}
</if> </if>
</select> </select>
<select id="selectMerchatOrder" resultType="com.wzj.soopin.order.domain.vo.MerchantOrderVO">
SELECT o.id AS orderId,
o.order_sn AS orderSn,
o.member_id AS memberId,
o.member_username AS memberUsername,
o.merchant_note AS merchantNote,
o.pay_type AS payType,
o.status AS status,
o.aftersale AS aftersale,
oi.id AS orderItemId,
oi.product_id AS productId,
oi.sku_id AS skuId,
oi.product_snapshot_id AS productSnapshotId,
ppc.name AS productCategoryName,
oi.sku_snapshot_id AS skuSnapshotId,
oi.pic AS pic,
oi.product_name AS productName,
oi.sale_price AS salePrice,
oi.quantity AS quantity,
oi.product_category_id AS productCategoryId,
oi.sp_data AS spData,
oi.tenant_id AS tenantId,
oi.tenant_name AS tenantName,
vc.code AS code,
vc.status AS verificationCodeStatus,
vc.used_time AS usedTime,
vc.used_merchant_id AS usedMerchantId,
vc.expire_time AS expireTime,
vc.verification_time AS verificationTime,
vc.reason AS reason
FROM oms_order_item oi
LEFT JOIN oms_order o ON oi.order_id = o.id
LEFT JOIN pms_product_category ppc ON oi.product_category_id = ppc.id
LEFT JOIN oms_verification_codes vc ON oi.id = vc.order_item_id
where oi.tenant_id = #{tenantId}
<if test="orderItemId != null">
AND oi.id = #{orderItemId}
</if>
<if test="verificationCode != null">
AND vc.code = #{verificationCode}
</if>
</select>
</mapper> </mapper>