批量发货

This commit is contained in:
wyn
2026-07-01 09:52:54 +08:00
parent 7bddd3d012
commit dbcf3151bd
4 changed files with 74 additions and 0 deletions

View File

@@ -1222,6 +1222,17 @@ public class BuyOrderController {
return buyOrderService.delivery(expressCompanyCode, buyOrderProductId);
}
/**
* 批量订单发货仅支持单商品且数量为1的订单快递公司固定顺丰 SF
*
* @param orderIds 订单 ID 列表
* @return R存在不符合条件的订单时 msg 为逗号拼接的订单号
*/
@RequestMapping(value = "/batchDelivery", method = RequestMethod.POST)
public R batchDelivery(@RequestBody List<Integer> orderIds) throws Exception {
return buyOrderService.batchDelivery("SF", orderIds);
}
@RequestMapping("/mytest")
public R mytest() throws IOException {
String mytest = buyOrderService.mytest();

View File

@@ -55,6 +55,14 @@ public interface BuyOrderService extends IService<BuyOrder> {
*/
R delivery(String expressCompanyCode, List<Integer> buyOrderDetailId);
/**
* 批量订单发货仅支持单商品且数量为1的订单
*
* @param expressCompanyCode 快递公司代码
* @param orderIds 订单 ID 列表
*/
R batchDelivery(String expressCompanyCode, List<Integer> orderIds);
Page<BuyOrder> orderList(BuyOrderListRequestVo requestVo, Boolean isHT);
Page<BuyOrder> getUserOrderList(UserOrderDto userOrderDto);

View File

@@ -437,6 +437,22 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
List<Integer> collect = buyOrderProductDao.selectJoinList(BuyOrderProduct.class, buyOrderProductMPJLambdaWrapper).stream().map(BuyOrderProduct::getOrderId).collect(Collectors.toList());
wrapper.in(BuyOrder::getOrderId,collect);
}
if(requestVo.getShowOne()!=null && requestVo.getShowOne()==1){
List<Map<String, Object>> list = buyOrderProductService.listMaps(
new QueryWrapper<BuyOrderProduct>()
.select("order_id orderId")
.groupBy("order_id")
.having("COUNT(*) = 1 AND SUM(quantity) = 1")
);
List<Integer> collect = list.stream()
.map(map -> ((Number) map.get("orderId")).intValue())
.collect(Collectors.toList());
if (collect.size() > 0) {
wrapper.in(BuyOrder::getOrderId, collect);
} else {
wrapper.eq(BuyOrder::getOrderId, -1);
}
}
Page<BuyOrder> buyOrderPage = getBaseMapper().selectPage(new Page<BuyOrder>(requestVo.getPageIndex(), requestVo.getPageSize()), wrapper);
//丰富订单内容
for (BuyOrder b : buyOrderPage.getRecords()){
@@ -720,6 +736,40 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
}
}
@Override
public R batchDelivery(String expressCompanyCode, List<Integer> orderIds) {
if (orderIds == null || orderIds.isEmpty()) {
return R.error("订单列表不能为空");
}
List<Integer> distinctOrderIds = orderIds.stream().distinct().collect(Collectors.toList());
List<String> invalidOrderSns = new ArrayList<>();
List<Integer> buyOrderProductIds = new ArrayList<>();
for (Integer orderId : distinctOrderIds) {
BuyOrder buyOrder = getById(orderId);
if (buyOrder == null) {
invalidOrderSns.add(String.valueOf(orderId));
continue;
}
List<BuyOrderProduct> products = buyOrderProductService.list(
new LambdaQueryWrapper<BuyOrderProduct>().eq(BuyOrderProduct::getOrderId, orderId));
if (products.size() != 1 || products.get(0).getQuantity() != 1) {
invalidOrderSns.add(buyOrder.getOrderSn());
} else {
buyOrderProductIds.add(products.get(0).getId());
}
}
if (!invalidOrderSns.isEmpty()) {
return R.error(String.join(",", invalidOrderSns));
}
for (Integer buyOrderProductId : buyOrderProductIds) {
R result = delivery(expressCompanyCode, Collections.singletonList(buyOrderProductId));
if (!Integer.valueOf(0).equals(result.get("code"))) {
return result;
}
}
return R.ok();
}
public String mytest() throws IOException {
String html = "";
File file = new File("D:/1.html");

View File

@@ -55,4 +55,9 @@ public class BuyOrderListRequestVo {
* 数据起始位置
*/
private Integer index;
/**
* 过滤预售
*/
private Integer showOne;
}