店铺列表增加合同的状态返回,修复顺丰同城取消订单逻辑
This commit is contained in:
parent
def93e54fa
commit
89a326a05b
@ -104,55 +104,54 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
public Boolean fillDocTemplate(Integer storeId) {
|
||||
// 1. 参数校验
|
||||
if (CheckUtil.isEmpty(storeId)) {
|
||||
log.error("商家店铺Id为空");
|
||||
log.error("[合同生成] 商家店铺ID不能为空");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2. 获取平台方信息
|
||||
EsignPlatformInfo esignPlatformInfo = esignPlatformInfoService.getEsignPlatformInfo(0, "");
|
||||
if (ObjectUtils.isEmpty(esignPlatformInfo)) {
|
||||
log.error("请添加平台方(代理商方)信息");
|
||||
log.error("[合同生成] 平台方(代理商方)信息缺失,请先配置平台信息");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(esignPlatformInfo.getDoc_template())) {
|
||||
log.error("无法获取平台方合同模版信息");
|
||||
log.error("[合同生成] 平台方合同模板信息为空,无法继续生成合同");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 3. 获取入驻商家(审批通过的)的信息
|
||||
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByStoreId(storeId);
|
||||
if (shopMchEntry == null) {
|
||||
log.error("缺少商家入驻信息, storeId: {}", storeId);
|
||||
log.error("[合同生成] 找不到商家入驻信息, storeId: {}", storeId);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 4. 检查商家审批状态
|
||||
if (!CommonConstant.MCH_APPR_STA_PASS.equals(shopMchEntry.getApproval_status())) {
|
||||
log.error("入驻商家审批未通过,当前状态: {}, storeId: {}", shopMchEntry.getApproval_status(), storeId);
|
||||
log.error("[合同生成] 商家入驻审批未通过,当前状态: {}, storeId: {}", shopMchEntry.getApproval_status(), storeId);
|
||||
return false;
|
||||
}
|
||||
|
||||
ShopStoreBase shopStoreBase = shopStoreBaseService.getShopStoreBaseByStoreId(storeId);
|
||||
if (ObjectUtils.isEmpty(shopStoreBase)) {
|
||||
log.error("缺少商家店铺信息, storeId: {}", storeId);
|
||||
log.error("[合同生成] 缺少商家店铺信息, storeId: {}", storeId);
|
||||
return false;
|
||||
}
|
||||
|
||||
BigDecimal splitRatio = shopStoreBase.getSplit_ratio();
|
||||
if (CheckUtil.isEmpty(splitRatio)) {
|
||||
log.error("缺少商家店铺分账比例,从入驻申请数据获取分账比例, storeId: {}", storeId);
|
||||
log.warn("[合同生成] 店铺分账比例为空,将使用入驻申请时设置的比例, storeId: {}", storeId);
|
||||
splitRatio = shopMchEntry.getSplit_ratio();
|
||||
}
|
||||
|
||||
// 5. 获取代理商信息
|
||||
EsignPlatformInfo distributor = esignPlatformInfoService.getDistributorInfoById(shopMchEntry.getDistributor_id());
|
||||
|
||||
|
||||
// 6. 获取平台方合同模版信息
|
||||
JSONArray templates = JSONUtil.parseArray(esignPlatformInfo.getDoc_template());
|
||||
if (templates == null || templates.isEmpty()) {
|
||||
log.error("缺少平台方(代理商方)合同模版信息");
|
||||
log.error("[合同生成] 平台方(代理商方)合同模板信息缺失");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -179,7 +178,7 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
String contractNumber = StringUtils.genLklOrderNo(4);
|
||||
int successCnt = 0;
|
||||
|
||||
log.info("开始为商家生成合同文件, storeId: {}, mobile: {}", storeId, shopMchEntry.getLogin_mobile());
|
||||
log.info("[合同生成] 开始为商家生成入驻合同文件, storeId: {}, 商家手机号: {}", storeId, shopMchEntry.getLogin_mobile());
|
||||
|
||||
// 8. 遍历模版文件生成合同(模版文件里有三份合同,顺序排列的: 1.平台商户入驻服务框架协议 2.小发同城服务费结算 3.结算授权委托书)
|
||||
for (JSONObject template : templates.jsonIter()) {
|
||||
@ -189,7 +188,7 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
String fileName = template.getStr("template_name");
|
||||
int seq = template.getInt("seq");
|
||||
|
||||
log.debug("处理合同模版: templateId={}, fileName={}, seq={}", templateId, fileName, seq);
|
||||
log.debug("[合同生成] 正在处理合同模板: templateId={}, 文件名={}, 序号={}", templateId, fileName, seq);
|
||||
|
||||
// 9. 构建填充模版的数据
|
||||
JSONObject fillJson = new JSONObject();
|
||||
@ -382,7 +381,7 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
put("componentValue", today);
|
||||
}});
|
||||
|
||||
log.debug("已填充代理商信息: {}", distributor.getLicense_company());
|
||||
log.debug("[合同生成] 已填充代理商信息: {}", distributor.getLicense_company());
|
||||
} else {
|
||||
// 无代理商时填充默认值
|
||||
list.add(new HashMap<String, Object>() {{
|
||||
@ -407,7 +406,7 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
put("componentValue", "无");
|
||||
}});
|
||||
|
||||
log.debug("未配置代理商信息,使用默认值");
|
||||
log.debug("[合同生成] 未配置代理商信息,使用默认值");
|
||||
}
|
||||
|
||||
fillJson.put("components", list);
|
||||
@ -424,11 +423,11 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
EsignHttpResponse createByDocTemplate = EsignHttpHelper.doCommHttp(
|
||||
serverUrl, apiAddr, requestType, jsonParam, header, debug);
|
||||
|
||||
log.info("合同生成API调用结果: status={}, body={}",
|
||||
log.info("[合同生成] 调用电子签约服务生成合同文件: status={}, response={}",
|
||||
createByDocTemplate.getStatus(), createByDocTemplate.getBody());
|
||||
|
||||
if (createByDocTemplate.getStatus() != 200) {
|
||||
log.error("调用e签宝生成合同文件接口失败, status: {}", createByDocTemplate.getStatus());
|
||||
log.error("[合同生成] 调用电子签约服务生成合同文件失败, HTTP状态码: {}", createByDocTemplate.getStatus());
|
||||
continue; // 继续处理下一个模版
|
||||
}
|
||||
|
||||
@ -438,7 +437,7 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
String fileId = jsonObject.getStr("fileId");
|
||||
|
||||
if (StrUtil.isBlank(fileDownloadUrl) || StrUtil.isBlank(fileId)) {
|
||||
log.error("e签宝返回的合同文件信息不完整, fileDownloadUrl: {}, fileId: {}", fileDownloadUrl, fileId);
|
||||
log.error("[合同生成] 电子签约服务返回的合同文件信息不完整, 下载地址: {}, 文件ID: {}", fileDownloadUrl, fileId);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -454,7 +453,7 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
|
||||
String localFileUrl = ossService.uploadObject4OSS(fileDownloadUrl, cosFileName);
|
||||
if (StrUtil.isBlank(localFileUrl)) {
|
||||
log.error("上传合同文件到OSS失败, fileId: {}", fileId);
|
||||
log.error("[合同生成] 合同文件上传到对象存储失败, fileId: {}", fileId);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -487,25 +486,25 @@ public class EsignContractFillingFileServiceImpl extends BaseServiceImpl<EsignCo
|
||||
// 17. 保存合同填充记录并预创建签署流程
|
||||
if (esignContractFillingFileService.trySaveRecord(esignContractFillingFile)) {
|
||||
successCnt += 1;
|
||||
log.debug("合同填充记录保存成功, fileId: {}", fileId);
|
||||
log.debug("[合同生成] 合同记录保存成功, fileId: {}", fileId);
|
||||
|
||||
// 预新增一个签署合同记录
|
||||
boolean preCreateResult = esignContractService.preCreateSignFlow(
|
||||
esignContractFillingFile.getMobile(), esignContractFillingFile.getDoc_template_id());
|
||||
log.debug("预创建签署流程结果: {}, mobile: {}, templateId: {}",
|
||||
log.debug("[合同生成] 预创建签署流程结果: {}, 商家手机号: {}, 模板ID: {}",
|
||||
preCreateResult, esignContractFillingFile.getMobile(), esignContractFillingFile.getDoc_template_id());
|
||||
} else {
|
||||
log.error("保存合同填充记录失败, fileId: {}", fileId);
|
||||
log.error("[合同生成] 保存合同记录失败, fileId: {}", fileId);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("处理合同模版时发生异常, templateId: {}", template.getStr("template_id"), e);
|
||||
log.error("[合同生成] 处理合同模板时出现异常, templateId: {}", template.getStr("template_id"), e);
|
||||
// 继续处理下一个模版,不中断整个流程
|
||||
}
|
||||
}
|
||||
|
||||
boolean result = successCnt > 0;
|
||||
log.info("合同文件生成完成, storeId: {}, 总模版数: {}, 成功处理数: {}, 结果: {}",
|
||||
log.info("[合同生成] 商家合同文件全部生成完毕, storeId: {}, 总模板数: {}, 成功处理数: {}, 最终结果: {}",
|
||||
storeId, templates.size(), successCnt, result);
|
||||
|
||||
return result;
|
||||
|
||||
@ -202,7 +202,7 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
|
||||
|
||||
//发起接口请求
|
||||
EsignHttpResponse createByDocTemplate = EsignHttpHelper.doCommHttp(serverUrl, apiAddr, requestType, jsonParams, header, debug);
|
||||
log.debug("发起合同签署流程返回消息:{},{}", createByDocTemplate.getStatus(), createByDocTemplate.getBody());
|
||||
log.info("发起合同签署流程返回消息:{},{}", createByDocTemplate.getStatus(), createByDocTemplate.getBody());
|
||||
if (createByDocTemplate.getStatus() != 200) {
|
||||
if (createByDocTemplate.getBody() != null) {
|
||||
JSONObject resBody = JSONUtil.parseObj(createByDocTemplate.getBody());
|
||||
|
||||
@ -120,7 +120,7 @@ public class LakalaController extends BaseControllerImpl {
|
||||
}
|
||||
|
||||
@ApiOperation(value = "接收拉卡拉发货类交易确认收货通知", notes = "接收拉卡拉发货类交易确认收货通知 https://o.lakala.com/#/home/document/detail?id=1003")
|
||||
@RequestMapping(value = "/trans/receive/completeNotify", method = RequestMethod.POST)
|
||||
@RequestMapping(value = "/trans/receive/completeNotify", method = {RequestMethod.POST, RequestMethod.GET})
|
||||
public ResponseEntity<JSONObject> receiveCompleteNotify(HttpServletRequest request) {
|
||||
// 完整地址: https://mall.gpxscs.cn/api/mobile/shop/lakala/trans/receive/completeNotify
|
||||
JSONObject resp = lakalaPayService.receiveCompleteNotify(request);
|
||||
|
||||
@ -5022,7 +5022,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
log.info("[确认收货] 处理订单: orderId={}, currentState={}", order_row.getOrder_id(), order_row.getOrder_state_id());
|
||||
} else {
|
||||
not_eligible_orders.add(order_row.getOrder_id());
|
||||
log.warn("[确认收货] 订单状态不满足收货条件: orderId={}, currentState={}", order_row.getOrder_id(), order_row.getOrder_state_id());
|
||||
log.warn("[确认收货] 订单状态不满足确认收货条件: orderId={}, currentState={}", order_row.getOrder_id(), order_row.getOrder_state_id());
|
||||
}
|
||||
}
|
||||
|
||||
@ -5313,6 +5313,26 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
shopOrderDataService.edit(shopOrderData);
|
||||
}
|
||||
|
||||
// 取消顺丰同城配送订单
|
||||
// === 7. 特殊场景:顺丰同城配送、且全单退的时候,才触发顺丰同城订单取消 ===
|
||||
|
||||
if (shopOrderInfo.getDelivery_type_id() != null
|
||||
&& StateCode.DELIVERY_TYPE_SAME_CITY == shopOrderInfo.getDelivery_type_id().intValue()) {
|
||||
try {
|
||||
logger.info("开始取消顺丰同城配送订单,orderId: {}, delivery_type_id: {}", order_id, shopOrderInfo.getDelivery_type_id());
|
||||
ThirdApiRes sfResult = sfExpressApiService.cancelOrder(order_id, 313, "用户或商家取消订单。");
|
||||
if (sfResult != null && !sfResult.getError_code().equals(0)) {
|
||||
log.error("顺丰同城取消订单返回错误,orderId: {}, errorCode: {}, errorMsg: {}",
|
||||
order_id, sfResult.getError_code(), sfResult.getError_msg());
|
||||
} else {
|
||||
log.info("顺丰同城订单取消成功,orderId: {}", order_id);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("顺丰同城取消订单异常,orderId: {}", order_id, e);
|
||||
// 可以考虑添加补偿机制或异步重试
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 积分退还 order_resource_ext1 默认为积分。
|
||||
ShopOrderData order_data_row = shopOrderDataService.get(order_id);
|
||||
@ -5396,24 +5416,6 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
cancelActivity(order_id);
|
||||
}
|
||||
|
||||
// 取消顺丰同城配送订单
|
||||
// === 7. 特殊场景:顺丰同城配送、且全单退的时候,才触发顺丰同城订单取消 ===
|
||||
if (orderInfo.getDelivery_type_id() != null
|
||||
&& StateCode.DELIVERY_TYPE_SAME_CITY == orderInfo.getDelivery_type_id().intValue()) {
|
||||
try {
|
||||
ThirdApiRes sfResult = sfExpressApiService.cancelOrder(order_id, 313, "用户或商家取消订单。");
|
||||
if (sfResult != null && !sfResult.getError_code().equals(0)) {
|
||||
log.error("顺丰同城取消订单返回错误,orderId: {}, errorCode: {}, errorMsg: {}",
|
||||
order_id, sfResult.getError_code(), sfResult.getError_msg());
|
||||
} else {
|
||||
log.info("顺丰同城订单取消成功,orderId: {}", order_id);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("顺丰同城取消订单异常,orderId: {}", order_id, e);
|
||||
// 可以考虑添加补偿机制或异步重试
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -990,20 +990,25 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
try {
|
||||
String remark = "同城配送异常自动退款!";
|
||||
|
||||
QueryWrapper<ShopOrderReturn> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("order_id", shopOrderId);
|
||||
ShopOrderReturn shopOrderReturn = findOne(queryWrapper);
|
||||
if (shopOrderReturn == null) {
|
||||
logger.error("[顺丰超时自动退款] 订单信息异常,未找到退货单: shopOrderId={}", shopOrderId);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ObjectUtil.equal(shopOrderReturn.getReturn_state_id(), StateCode.RETURN_PROCESS_FINISH)
|
||||
|| ObjectUtil.equal(shopOrderReturn.getReturn_is_paid(), CommonConstant.Enable)) {
|
||||
logger.warn("[顺丰超时自动退款] 订单之前已处理完成,请勿重复处理: shopOrderId={}", shopOrderId);
|
||||
return true;
|
||||
}
|
||||
|
||||
// 对已存在部分退款的订单,进行剩余商品的全部退款
|
||||
CommonResult commonResult = addRemainingItems(shopOrderId, true, remark);
|
||||
commonResult.checkFenResult();
|
||||
logger.debug("[顺丰超时自动退款] 整单退货申请创建成功: shopOrderId={}", shopOrderId);
|
||||
|
||||
QueryWrapper<ShopOrderReturn> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("order_id", shopOrderId);
|
||||
ShopOrderReturn shopOrderReturn = findOne(queryWrapper);
|
||||
|
||||
if (shopOrderReturn == null) {
|
||||
logger.error("[顺丰超时自动退款] 订单信息异常,未找到退货单: shopOrderId={}", shopOrderId);
|
||||
throw new ApiException(I18nUtil._("订单信息异常!"));
|
||||
}
|
||||
|
||||
shopOrderReturn.setReturn_flag(0); // 0-不用退货;1-需要退货
|
||||
shopOrderReturn.setReturn_buyer_message(remark);
|
||||
shopOrderReturn.setReturn_store_message(remark);
|
||||
@ -1886,7 +1891,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
// shopOrderReturn.setReturn_finish_time(now);
|
||||
//
|
||||
ShopOrderReturn updateRefundStatus = new ShopOrderReturn();
|
||||
updateRefundStatus.setReturn_is_paid(1); // 0-退货未完成;1-退货完成
|
||||
updateRefundStatus.setReturn_is_paid(CommonConstant.Enable); // 0-退货未完成;1-退货完成
|
||||
updateRefundStatus.setReturn_finish_time(now);
|
||||
|
||||
QueryWrapper<ShopOrderReturn> updateWrapper = new QueryWrapper<>();
|
||||
|
||||
@ -164,6 +164,14 @@ public interface SFExpressApiService {
|
||||
*/
|
||||
ThirdApiRes notifyProductReady(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 订单实时信息查询
|
||||
* https://openic.sf-express.com/open/api/external/getorderstatus?sign=$sign
|
||||
*
|
||||
* @param sfOrderId
|
||||
* @return
|
||||
*/
|
||||
ThirdApiRes getOrderStatus(String sfOrderId);
|
||||
|
||||
// *********** 顺丰同城回调相关业务 ****************
|
||||
|
||||
@ -194,18 +202,6 @@ public interface SFExpressApiService {
|
||||
*/
|
||||
ThirdApiRes receiveOrderCompleteNotify(String jsonData, String sign);
|
||||
|
||||
//
|
||||
// /**
|
||||
// * 个推推送消息到员工
|
||||
// *
|
||||
// * @param storeId
|
||||
// * @param orderId
|
||||
// * @param message
|
||||
// * @param payloadJson
|
||||
// * @return
|
||||
// */
|
||||
// void pushMessageToStoreEmployee(Integer storeId, String orderId, String message, String payloadJson);
|
||||
|
||||
/**
|
||||
* 商家自行配送发货
|
||||
*
|
||||
|
||||
@ -675,9 +675,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
public ThirdApiRes cancelOrder(String orderId, Integer cancelCode, String cancelReason) {
|
||||
Map<String, Object> params = buildCommonParams();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId)); // 商家 orderId 转 顺丰的订单号
|
||||
params.put("cancel_type", 1); //1、顺丰订单号 2、商家订单号
|
||||
if (StrUtil.isNotBlank(cancelReason) && cancelCode != null) {
|
||||
params.put("cancel_code", orderId);
|
||||
params.put("cancel_reason", orderId);
|
||||
params.put("cancel_code", cancelCode);
|
||||
params.put("cancel_reason", cancelReason);
|
||||
}
|
||||
return cancelOrder(params);
|
||||
}
|
||||
@ -691,18 +692,33 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
@Override
|
||||
@Transactional
|
||||
public ThirdApiRes cancelOrder(Map<String, Object> params) {
|
||||
logger.info("[顺丰] 开始取消订单流程");
|
||||
logger.info("[取消顺丰订单] 开始取消顺丰订单流程");
|
||||
|
||||
// 1. 参数校验
|
||||
if (params == null || ObjectUtil.isEmpty(params.get("order_id"))) {
|
||||
logger.warn("[顺丰] 取消订单参数校验失败: 参数为空或缺少order_id");
|
||||
logger.warn("[取消顺丰订单] 取消订单参数校验失败: 参数为空或缺少order_id");
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
try {
|
||||
// 2. 获取顺丰订单号
|
||||
String sfOrderId = params.get("order_id").toString();
|
||||
logger.debug("[顺丰] 准备取消订单: sfOrderId={}", sfOrderId);
|
||||
logger.debug("[取消顺丰订单] 准备取消订单: sfOrderId={}", sfOrderId);
|
||||
|
||||
// 先实时查询顺丰订单状态
|
||||
ThirdApiRes thirdApiRes = getOrderStatus(sfOrderId);
|
||||
if (thirdApiRes != null && ObjectUtil.equal(thirdApiRes.getError_code(), 0)) {
|
||||
Object resultObj = thirdApiRes.getResult();
|
||||
if (resultObj != null) {
|
||||
JSONObject result = JSONUtil.parseObj(resultObj);
|
||||
Integer orderStatus = result.getInt("order_status");
|
||||
if (orderStatus != null &&
|
||||
(ObjectUtil.equal(orderStatus, SFExpressConstant.Cons_CanceledOrder) ||
|
||||
ObjectUtil.equal(orderStatus, SFExpressConstant.Cons_CancelingOrder))) {
|
||||
return new ThirdApiRes().success("订单已取消过!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 添加公共参数
|
||||
params.putAll(buildCommonParams());
|
||||
@ -710,34 +726,34 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
|
||||
// 4. 调用顺丰取消订单接口
|
||||
String sendUrl = buildUrl("cancelorder", paramJSON);
|
||||
logger.debug("[顺丰] 调用取消订单接口: url={}, params={}", sendUrl, paramJSON);
|
||||
logger.debug("[取消顺丰订单] 调用取消订单接口: url={}, params={}", sendUrl, paramJSON);
|
||||
|
||||
String responseStr = HttpUtil.post(sendUrl, paramJSON);
|
||||
if (StrUtil.isBlank(responseStr)) {
|
||||
logger.error("[顺丰] 取消订单接口调用失败: 无返回值, sfOrderId={}", sfOrderId);
|
||||
logger.error("[取消顺丰订单] 取消订单接口调用失败: 无返回值, sfOrderId={}", sfOrderId);
|
||||
return new ThirdApiRes().fail(2, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
// 5. 解析接口响应
|
||||
ThirdApiRes sfExpressApiRes = JsonUtil.json2object(responseStr, ThirdApiRes.class);
|
||||
if (sfExpressApiRes == null) {
|
||||
logger.error("[顺丰] 取消订单接口响应解析失败: {}, sfOrderId={}", responseStr, sfOrderId);
|
||||
logger.error("[取消顺丰订单] 取消订单接口响应解析失败: {}, sfOrderId={}", responseStr, sfOrderId);
|
||||
return new ThirdApiRes().fail(2, "顺丰同城:响应解析失败!");
|
||||
}
|
||||
|
||||
// 6. 检查接口调用结果
|
||||
if (!sfExpressApiRes.getError_code().equals(0)) {
|
||||
logger.error("[顺丰] 取消订单接口调用失败: errorCode={}, errorMsg={}, sfOrderId={}",
|
||||
logger.error("[取消顺丰订单] 取消订单接口调用失败: errorCode={}, errorMsg={}, sfOrderId={}",
|
||||
sfExpressApiRes.getError_code(), sfExpressApiRes.getError_msg(), sfOrderId);
|
||||
return new ThirdApiRes().fail(2, sfExpressApiRes.getError_msg());
|
||||
}
|
||||
|
||||
logger.info("[顺丰] 顺丰接口取消订单成功: sfOrderId={}", sfOrderId);
|
||||
logger.info("[取消顺丰订单] 顺丰接口取消订单成功: sfOrderId={}", sfOrderId);
|
||||
|
||||
// 7. 检查本地订单状态
|
||||
ShopStoreSfOrder existingOrder = shopStoreSfOrderService.getByShopOrderId(sfOrderId);
|
||||
ShopStoreSfOrder existingOrder = shopStoreSfOrderService.getBySfOrderId(sfOrderId);
|
||||
if (existingOrder == null) {
|
||||
logger.error("[顺丰] 本地订单不存在: sfOrderId={}", sfOrderId);
|
||||
logger.error("[取消顺丰订单] 本地订单不存在: sfOrderId={}", sfOrderId);
|
||||
return new ThirdApiRes().fail(2, "订单不存在!");
|
||||
}
|
||||
|
||||
@ -745,7 +761,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
if (existingOrder.getOrder_status() != null &&
|
||||
(existingOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELED) ||
|
||||
existingOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_CANCELING))) {
|
||||
logger.info("[顺丰] 订单已处于取消状态,无需重复操作: sfOrderId={}, status={}",
|
||||
logger.info("[取消顺丰订单] 订单已处于取消状态,无需重复操作: sfOrderId={}, status={}",
|
||||
sfOrderId, existingOrder.getOrder_status());
|
||||
return new ThirdApiRes().success("订单已取消过!");
|
||||
}
|
||||
@ -758,15 +774,15 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
|
||||
Boolean updateSuccess = shopStoreSfOrderService.updateShopStoreSfOrderStatus(updateOrder);
|
||||
if (!updateSuccess) {
|
||||
logger.error("[顺丰] 更新本地订单状态失败: sfOrderId={}", sfOrderId);
|
||||
logger.error("[取消顺丰订单] 更新本地订单状态失败: sfOrderId={}", sfOrderId);
|
||||
throw new ApiException(_("取消顺丰订单失败!"));
|
||||
}
|
||||
|
||||
logger.info("[顺丰] 本地订单状态更新成功: sfOrderId={}", sfOrderId);
|
||||
logger.info("[取消顺丰订单] 本地订单状态更新成功: sfOrderId={}", sfOrderId);
|
||||
return sfExpressApiRes;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("[顺丰] 取消订单过程中发生异常: ", e);
|
||||
logger.error("[取消顺丰订单] 取消订单过程中发生异常: ", e);
|
||||
return new ThirdApiRes().fail(-1, "系统异常: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
@ -974,6 +990,39 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单实时信息查询
|
||||
* https://openic.sf-express.com/open/api/external/getorderstatus?sign=$sign
|
||||
*
|
||||
* @param sfOrderId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ThirdApiRes getOrderStatus(String sfOrderId) {
|
||||
if (StrUtil.isBlank(sfOrderId)) {
|
||||
return new ThirdApiRes().fail(1003, "缺少必要参数!");
|
||||
}
|
||||
|
||||
Map<String, Object> params = buildCommonParams();
|
||||
params.put("order_id", sfOrderId);
|
||||
params.put("order_type", 1);//查询订单ID类型:1、顺丰订单号 2、商家订单号
|
||||
|
||||
|
||||
// 转换 json 字符串参数
|
||||
String paramJSON = JsonUtil.toJSONString(params);
|
||||
logger.debug("订单实时信息查询:" + paramJSON);
|
||||
|
||||
// 根据参数生成请求签名
|
||||
String send_url = buildUrl("getorderstatus", paramJSON);
|
||||
String retRespStr = HttpUtil.post(send_url, paramJSON);
|
||||
if (StrUtil.isBlank(retRespStr)) {
|
||||
logger.error("顺丰同城:订单实时信息查询,无返回值!");
|
||||
return new ThirdApiRes().fail(-1, "顺丰同城:无返回值!");
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, ThirdApiRes.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 接收顺丰原因订单取消回调
|
||||
|
||||
@ -1538,6 +1538,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl<ShopStoreBaseMappe
|
||||
// E签宝和拉卡拉的合同文件下载地址
|
||||
String lkl_contract_file_url = "";
|
||||
String esign_contract_file_url = "";
|
||||
Integer esign_contract_flow_status = -1;//合同签署状态:-1:预备数据阶段;0-等待签署;1-已部分签署;2-已完成(所有签署方完成签署);3-已撤销(发起方撤销签署任务;5-已过期(签署截止日到期后触发);7-已拒签(签署方拒绝签署)
|
||||
ShopMchEntry entry = shopMchEntryService.getLklContractStatusUrl(_store_id);
|
||||
if (ObjectUtil.isNotEmpty(entry)) {
|
||||
lkl_contract_file_url = entry.getContract_download_url();
|
||||
@ -1546,10 +1547,12 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl<ShopStoreBaseMappe
|
||||
EsignContract esignContract = esignContractService.getEsignContractStatusUrl(_store_id);
|
||||
if (ObjectUtil.isNotEmpty(esignContract)) {
|
||||
esign_contract_file_url = esignContract.getSigned_contract_url();
|
||||
esign_contract_flow_status = esignContract.getSign_flow_status();
|
||||
}
|
||||
|
||||
s.put("lkl_contract_file_url", lkl_contract_file_url);
|
||||
s.put("esign_contract_file_url", esign_contract_file_url);
|
||||
s.put("esign_contract_flow_status", esign_contract_flow_status);
|
||||
});
|
||||
|
||||
data.put("items", accountService.fixUserAvatar((List<Map>) data.get("items"), true));
|
||||
@ -1586,6 +1589,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl<ShopStoreBaseMappe
|
||||
// E签宝和拉卡拉的合同文件下载地址
|
||||
String lkl_contract_file_url = "";
|
||||
String esign_contract_file_url = "";
|
||||
Integer esign_contract_flow_status = -1; //合同签署状态:-1:预备数据阶段;0-等待签署;1-已部分签署;2-已完成(所有签署方完成签署);3-已撤销(发起方撤销签署任务;5-已过期(签署截止日到期后触发);7-已拒签(签署方拒绝签署)
|
||||
ShopMchEntry entry = shopMchEntryService.getLklContractStatusUrl(store_id);
|
||||
if (ObjectUtil.isNotEmpty(entry)) {
|
||||
lkl_contract_file_url = entry.getContract_download_url();
|
||||
@ -1594,9 +1598,11 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl<ShopStoreBaseMappe
|
||||
EsignContract esignContract = esignContractService.getEsignContractStatusUrl(store_id);
|
||||
if (ObjectUtil.isNotEmpty(esignContract)) {
|
||||
esign_contract_file_url = esignContract.getSigned_contract_url();
|
||||
esign_contract_flow_status = esignContract.getSign_flow_status();
|
||||
}
|
||||
row.put("lkl_contract_file_url", lkl_contract_file_url);
|
||||
row.put("esign_contract_file_url", esign_contract_file_url);
|
||||
row.put("esign_contract_flow_status", esign_contract_flow_status);
|
||||
|
||||
// 火星坐标系GCJ02经纬度 转出 百度坐标系BD09经纬度(因为数据库保存的经纬度统一是GCJ02经纬度,所以需要转换 )
|
||||
gcj02ToBd09Gps(row);
|
||||
|
||||
@ -48,9 +48,14 @@ public class ShopStoreSfOrderServiceImpl extends BaseServiceImpl<ShopStoreSfOrde
|
||||
if (StrUtil.isBlank(shopOrderId)) {
|
||||
return null;
|
||||
}
|
||||
QueryWrapper<ShopStoreSfOrder> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("shop_order_id", shopOrderId);
|
||||
return getOne(wrapper);
|
||||
|
||||
if (StrUtil.startWith(shopOrderId, "JS")) { // 顺丰同城的订单号标志
|
||||
return getBySfOrderId(shopOrderId);
|
||||
} else {
|
||||
QueryWrapper<ShopStoreSfOrder> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("shop_order_id", shopOrderId);
|
||||
return getOne(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
6
pom.xml
6
pom.xml
@ -581,7 +581,6 @@
|
||||
<pushImage>true</pushImage>
|
||||
<!--推送镜像仓库校验安全证书,无安全证书无法推送-->
|
||||
<dockerCertPath>${docker.ca}</dockerCertPath>
|
||||
|
||||
<!--定义基础镜像-->
|
||||
<!-- <baseImage>java:8</baseImage>-->
|
||||
<baseImage>openjdk:8-jre</baseImage>
|
||||
@ -600,11 +599,6 @@
|
||||
<entryPoint>["sh", "-c", "mkdir -p /tmp /app/temp /root/nacos/naming/public && chmod -R 777 /tmp /app/temp /root/nacos && java -Djava.io.tmpdir=/app/temp -Dnacos.naming.cache.dir=/root/nacos/naming -jar -Xms256m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseContainerSupport -XX:MaxRAMPercentage=60.0 -XX:+UseSerialGC -XX:MinHeapFreeRatio=40 -XX:MaxHeapFreeRatio=60 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -Dspring.profiles.active=${spring.profile} -Duser.timezone=Asia/Shanghai /${project.build.finalName}.jar"]
|
||||
</entryPoint>
|
||||
|
||||
<!-- 添加额外的Dockerfile指令来清理不必要的文件 -->
|
||||
<!-- <runs>-->
|
||||
<!-- <run>rm -rf /root/.m2 && rm -rf /tmp/* && rm -rf /var/cache/*</run>-->
|
||||
<!-- </runs>-->
|
||||
|
||||
<resources>
|
||||
<resource>
|
||||
<targetPath>/</targetPath>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user