增加重新派单接口

This commit is contained in:
Jack 2025-12-15 20:50:54 +08:00
parent 7938cad0cc
commit 951a1f3cf7
7 changed files with 98 additions and 13 deletions

View File

@ -69,7 +69,7 @@ public class OrderPayedListener {
String dataStr = new String(data, StandardCharsets.UTF_8);
listener(dataStr, channel, message);
}
public void listener(String data, Channel channel, Message message) throws IOException, InterruptedException {
// String messageId = message.getMessageProperties().getMessageId();
if (StrUtil.isBlank(data)) {
@ -154,7 +154,7 @@ public class OrderPayedListener {
&& !isBookingOrder) {
// 如果是立即下单将触发顺丰同城下单否则预约下单 redis+cron 定时触发顺丰同城下单
Pair<Boolean, String> pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum);
Pair<Boolean, String> pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum, false);
if (pairCreateSfOrder == null) {
logger.error("[订单支付监听] 顺丰同城下单失败,无返回值 订单ID: {}", orderId);
continue;

View File

@ -907,7 +907,7 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
}
// 调用顺丰接口创建订单
Pair<Boolean, String> sfResult = sfExpressApiService.innerCreateSfExpressOrder(orderId, 0L);
Pair<Boolean, String> sfResult = sfExpressApiService.innerCreateSfExpressOrder(orderId, 0L, false);
if (sfResult == null) {
logger.error("[预约订单顺丰下单] 调用顺丰接口无返回值, orderId={}", orderId);
throw new RuntimeException("预约订单顺丰下单失败,接口无响应");

View File

@ -44,7 +44,7 @@ public class SFExpressAdminController {
}
@ApiOperation(value = "创建顺丰同城店铺", notes = "创建顺丰同城店铺")
@ApiOperation(value = "【测试补偿】创建顺丰同城店铺", notes = "创建顺丰同城店铺")
@RequestMapping(value = "/create-shop-inner", method = RequestMethod.POST)
public CommonResult createSfExpressShopNotify(@RequestBody JSONObject requestBody) {
Pair<Boolean, String> result = sfExpressApiService.createSfExpressShopInner(
@ -64,4 +64,12 @@ public class SFExpressAdminController {
}
return CommonResult.failed(result.getSecond());
}
@ApiOperation(value = "重新创建顺丰订单(重新派发)", notes = "重新创建顺丰订单(重新派发)")
@RequestMapping(value = "/recreate-order", method = RequestMethod.POST)
public CommonResult recreateOrder(@RequestBody JSONObject requestBody) {
return sfExpressApiService.recreateOrder(
requestBody.getStr("order_id")
);
}
}

View File

@ -70,8 +70,23 @@ public interface SFExpressApiService {
ThirdApiRes createSfExpressShopNotify(String jsonData, String sign);
/**
* 创建顺丰同城订单
*
* @param shopOrderId
* @return
*/
ThirdApiRes createOrder(String shopOrderId);
/**
* 重新创建顺丰同城订单
*
* @param shopOrderId
* @return
*/
CommonResult recreateOrder(String shopOrderId);
/**
* 获取顺丰同城店铺信息
*
@ -85,9 +100,10 @@ public interface SFExpressApiService {
*
* @param orderId
* @param orderPickupNum
* @param ignoreExists 是否忽略已存在本地订单
* @return
*/
Pair<Boolean, String> innerCreateSfExpressOrder(String orderId, Long orderPickupNum);
Pair<Boolean, String> innerCreateSfExpressOrder(String orderId, Long orderPickupNum, Boolean ignoreExists);
/**
* 取消订单当商家处发生异常需要取消配送时可调用此接口对订单进行取消操作同步返回结果

View File

@ -105,7 +105,6 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
@Autowired
private ShopMchEntryService shopMchEntryService;
@Lazy
@Autowired
private PushMessageService pushMessageService;
@ -553,6 +552,60 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
}
/**
* 重新创建顺丰同城订单
* 1先获取顺丰同城订单的当前状态如果没有取消的订单则取消该订单
* 2取消成功则重新创建顺丰同城订单取消失败则返回错误信息
* 3重新创建订单成功更新订单轨迹
*
* @param shopOrderId 商城订单ID
* @return CommonResult 操作结果
*/
@Override
public CommonResult recreateOrder(String shopOrderId) {
logger.info("[顺丰] 开始重新创建订单: shopOrderId={}", shopOrderId);
// 参数校验
if (StrUtil.isBlank(shopOrderId)) {
logger.warn("[顺丰] 重新创建订单失败: 订单ID为空");
return CommonResult.failed("订单ID不能为空");
}
// 获取顺丰订单ID
String sfOrderId = shopStoreSfOrderService.getSfOrderIdByShopOrderId(shopOrderId);
if (StrUtil.isBlank(sfOrderId)) {
logger.warn("[顺丰] 重新创建订单失败: 未找到对应的顺丰订单, shopOrderId={}", shopOrderId);
return CommonResult.failed("未找到对应的顺丰订单");
}
try {
// 取消原订单
Map<String, Object> params = new HashMap<>();
params.put("order_id", sfOrderId);
ThirdApiRes cancelOrderRes = cancelOrder(params);
if (cancelOrderRes != null && !ObjectUtil.equal(cancelOrderRes.getError_code(), 0)) {
logger.error("[顺丰] 取消原订单失败: errorCode={}, errorMsg={}",
cancelOrderRes.getError_code(), cancelOrderRes.getError_msg());
return CommonResult.failed(cancelOrderRes.getError_msg());
}
// 重新创建订单传递默认取货号1
Pair<Boolean, String> createOrderRes = innerCreateSfExpressOrder(shopOrderId, 0L, true);
if (createOrderRes.getFirst()) {
logger.info("[顺丰] 重新创建订单成功: shopOrderId={}", shopOrderId);
return CommonResult.success();
}
logger.error("[顺丰] 重新创建订单失败: {}", createOrderRes.getSecond());
return CommonResult.failed(createOrderRes.getSecond());
} catch (Exception e) {
logger.error("[顺丰] 重新创建订单过程中发生异常: shopOrderId={}", shopOrderId, e);
return CommonResult.failed("系统异常: " + e.getMessage());
}
}
/**
* 获取顺丰同城店铺信息
*
@ -592,18 +645,19 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
*
* @param shopOrderId
* @param orderPickupNum
* @param ignoreExists
* @return
*/
@Transactional
@Override
public Pair<Boolean, String> innerCreateSfExpressOrder(String shopOrderId, Long orderPickupNum) {
public Pair<Boolean, String> innerCreateSfExpressOrder(String shopOrderId, Long orderPickupNum, Boolean ignoreExists) {
logger.info("开始顺丰同城下单");
if (StrUtil.isBlank(shopOrderId) || orderPickupNum == null) {
if (StrUtil.isBlank(shopOrderId) || CheckUtil.isEmpty(orderPickupNum)) {
return Pair.of(false, "顺丰同城下单时,缺少必要参数!");
}
// 检查 shop_store_sf_order 订单是否已存在
if (shopStoreSfOrderService.exists(devId, shopOrderId)) {
if (!ignoreExists && shopStoreSfOrderService.exists(devId, shopOrderId)) {
return Pair.of(true, "顺丰同城已下单过!");
}
@ -645,7 +699,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
shopStoreSfOrder.setStatus_desc("已创建顺丰同城订单");
// 下单成功保存顺丰同城订单记录到 shop_store_sf_order 表里
Boolean success = shopStoreSfOrderService.insertShopStoreSfOrder(shopStoreSfOrder);
Boolean success = shopStoreSfOrderService.saveShopStoreSfOrder(shopStoreSfOrder);
if (!success) {
logger.error("顺丰下单返回的结果:{}", sfExpressApiRes.get("result").toString());
return Pair.of(false, "保存顺丰同城下单失败!");

View File

@ -31,12 +31,12 @@ public interface ShopStoreSfOrderService extends IBaseService<ShopStoreSfOrder>
String getSfOrderIdByShopOrderId(String shopOrderId);
/**
* 新增一个顺丰同城订单记录
* 保存新增或更新一个顺丰同城订单记录
*
* @param record
* @return
*/
Boolean insertShopStoreSfOrder(ShopStoreSfOrder record);
Boolean saveShopStoreSfOrder(ShopStoreSfOrder record);
/**

View File

@ -92,7 +92,7 @@ public class ShopStoreSfOrderServiceImpl extends BaseServiceImpl<ShopStoreSfOrde
* @return
*/
@Override
public Boolean insertShopStoreSfOrder(ShopStoreSfOrder record) {
public Boolean saveShopStoreSfOrder(ShopStoreSfOrder record) {
if (record == null) {
logger.info("参数空值,保存失败!");
return false;
@ -103,6 +103,13 @@ public class ShopStoreSfOrderServiceImpl extends BaseServiceImpl<ShopStoreSfOrde
return false;
}
ShopStoreSfOrder shopStoreSfOrder = getByShopOrderId(record.getShop_order_id());
if (shopStoreSfOrder != null) {
logger.warn("该商家订单已存在,进行更新操作:{}", record);
record.setId(shopStoreSfOrder.getId());
return updateById(record);
}
return save(record);
}