fix 顺丰下单 bug
This commit is contained in:
parent
d7793cc24f
commit
1e181a7638
@ -2,77 +2,72 @@ package com.suisung.mall.common.exception;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.api.IErrorCode;
|
||||
import com.suisung.mall.common.api.ResultCode;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* 全局异常处理
|
||||
* 全局异常处理器
|
||||
*
|
||||
* <p>主要功能:
|
||||
* <ul>
|
||||
* <li>统一处理系统未捕获异常</li>
|
||||
* <li>特殊处理数据库相关异常</li>
|
||||
* <li>规范化业务异常响应格式</li>
|
||||
* </ul>
|
||||
*/
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
|
||||
private static final String UNKNOWN_LOCATION = "未知位置";
|
||||
private static final String DB_ERROR_MSG = "数据库操作失败,请稍后重试";
|
||||
private static final String LOG_FORMAT = "业务异常 || URI={} || Method={} || Error={} || Location={}";
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
|
||||
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
public CommonResult exceptionHandler(HttpServletRequest req, Exception e) {
|
||||
// 获取异常的第一帧堆栈信息
|
||||
StackTraceElement[] stackTrace = e.getStackTrace();
|
||||
String location = "未知位置";
|
||||
|
||||
if (stackTrace.length > 0) {
|
||||
StackTraceElement element = stackTrace[0]; // 第一个异常抛出点
|
||||
String className = element.getClassName();
|
||||
String methodName = element.getMethodName();
|
||||
int lineNumber = element.getLineNumber();
|
||||
location = String.format("%s.%s (line: %d)", className, methodName, lineNumber);
|
||||
/**
|
||||
* 获取异常发生位置信息
|
||||
*
|
||||
* @param stackTrace 异常堆栈
|
||||
* @return 格式化的位置信息(类名.方法名 : 行号)
|
||||
*/
|
||||
private String getExceptionLocation(StackTraceElement[] stackTrace) {
|
||||
if (stackTrace == null || stackTrace.length == 0) {
|
||||
return UNKNOWN_LOCATION;
|
||||
}
|
||||
StackTraceElement first = stackTrace[0];
|
||||
return String.format("%s.%s:%d", first.getClassName(), first.getMethodName(), first.getLineNumber());
|
||||
}
|
||||
|
||||
logger.error("Exception全局异常捕获 URI: {} - Method: {} - Error: {} at {}",
|
||||
req.getRequestURI(),
|
||||
req.getMethod(),
|
||||
e.getMessage(),
|
||||
location,
|
||||
e);
|
||||
/**
|
||||
* 处理系统级异常(数据库异常/通用异常)
|
||||
*/
|
||||
@ExceptionHandler({SQLException.class, DataAccessException.class, Exception.class})
|
||||
public CommonResult handleSystemException(HttpServletRequest req, Exception e) {
|
||||
String location = getExceptionLocation(e.getStackTrace());
|
||||
logger.error(LOG_FORMAT, req.getRequestURI(), req.getMethod(), e.getMessage(), location, e);
|
||||
|
||||
if (e instanceof SQLException || e instanceof DataAccessException) {
|
||||
return CommonResult.failed(DB_ERROR_MSG);
|
||||
}
|
||||
return CommonResult.failed(e.getMessage());
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = ApiException.class)
|
||||
public CommonResult exceptionHandler(HttpServletRequest req, ApiException e) {
|
||||
// 获取异常位置信息
|
||||
StackTraceElement[] stackTrace = e.getStackTrace();
|
||||
String location = "未知错误位置";
|
||||
/**
|
||||
* 处理业务API异常
|
||||
*/
|
||||
@ExceptionHandler(ApiException.class)
|
||||
public CommonResult handleApiException(HttpServletRequest req, ApiException e) {
|
||||
String location = getExceptionLocation(e.getStackTrace());
|
||||
logger.error(LOG_FORMAT,
|
||||
req.getRequestURI(), req.getMethod(), e.getErrorCode(), location, e);
|
||||
|
||||
IErrorCode errorCode = e.getErrorCode();
|
||||
String message = e.getMessage();
|
||||
|
||||
if (stackTrace.length > 0) {
|
||||
StackTraceElement element = stackTrace[0]; // 第一个异常抛出点
|
||||
location = String.format("%s.%s (line: %d)",
|
||||
element.getClassName(),
|
||||
element.getMethodName(),
|
||||
element.getLineNumber()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
logger.error("Exception全局异常捕获 URI:{} - Method:{} - Error:{} at {}",
|
||||
req.getRequestURI(),
|
||||
req.getMethod(),
|
||||
message,
|
||||
location,
|
||||
e);
|
||||
|
||||
if (StrUtil.isNotBlank(message)) {
|
||||
return CommonResult.failed(message);
|
||||
} else {
|
||||
return CommonResult.failed(ResultCode.FAILED);
|
||||
}
|
||||
return StrUtil.isNotBlank(e.getMessage())
|
||||
? CommonResult.failed(e.getMessage())
|
||||
: CommonResult.failed(ResultCode.FAILED);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -9,13 +9,19 @@
|
||||
package com.suisung.mall.shop.config;
|
||||
|
||||
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.AsyncConfigurer;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class AsyncConfig implements AsyncConfigurer {
|
||||
|
||||
@Bean(name = "asyncExecutor")
|
||||
@Override
|
||||
public Executor getAsyncExecutor() {
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
|
||||
@ -47,7 +47,7 @@ public class LakalaController extends BaseControllerImpl {
|
||||
@ApiOperation(value = "测试案例", notes = "测试案例")
|
||||
@RequestMapping(value = "/testcase", method = RequestMethod.POST)
|
||||
public Object testcase(@RequestBody JSONObject paramsJSON) {
|
||||
return shopOrderReturnService.sfExpressExpiredForceRefund(paramsJSON.getStr("orderId"), paramsJSON.getInt("returnFlag"));
|
||||
return shopOrderReturnService.sfExpressExpiredForceRefund(paramsJSON.getStr("orderId"));
|
||||
// return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile"));
|
||||
// return lakalaPayService.LedgerMerEcDownload(975790666910121984L);
|
||||
|
||||
|
||||
@ -1379,11 +1379,16 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
|
||||
// 2. 解析回调参数
|
||||
JSONObject paramsJSON = JSONUtil.parseObj(checkResult.getSecond());
|
||||
if (paramsJSON == null) {
|
||||
log.error("商家绑定分账接收方异步通知参数转化失败");
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "参数转换失败");
|
||||
}
|
||||
if (paramsJSON == null || StrUtil.isBlank(paramsJSON.getStr("applyId"))) {
|
||||
// https://o.lakala.com/#/home/document/detail?id=386 返回的数据结果有歧义,需处理
|
||||
paramsJSON = paramsJSON.getJSONObject("respData");
|
||||
|
||||
if (paramsJSON == null || StrUtil.isBlank(paramsJSON.getStr("applyId"))) {
|
||||
log.error("商家绑定分账接收方异步通知参数转化失败");
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "参数转换失败");
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 提取核心参数
|
||||
String merCupNo = paramsJSON.getStr("merCupNo");
|
||||
String applyId = paramsJSON.getStr("applyId");
|
||||
@ -1426,8 +1431,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
// 7. 成功后更新商户绑定状态为已绑定
|
||||
shopMchEntryService.updateMulStatus("", merCupNo, 0, 0, 0, 0, 0, 1, CommonConstant.MCH_APPR_STA_PASS);
|
||||
|
||||
// 8. 检查商户绑定状态是否完成, 更改总的审核状态
|
||||
shopMchEntryService.checkMerchEntryFinished("", merCupNo);
|
||||
// 8. 日志记录并返回成功响应
|
||||
|
||||
// 9. 日志记录并返回成功响应
|
||||
log.debug("商家绑定分账接收方异步通知处理完成,merCupNo:{}", merCupNo);
|
||||
return JSONUtil.createObj().put("code", "SUCCESS").put("message", "分账接收方绑定成功");
|
||||
|
||||
|
||||
@ -51,7 +51,7 @@ public class PushMessageServiceImpl implements PushMessageService {
|
||||
* @return
|
||||
*/
|
||||
|
||||
@Async("pushAsyncExecutor")
|
||||
@Async("asyncExecutor")
|
||||
@Override
|
||||
public CompletableFuture<Boolean> noticeMerchantSignEcContract(Integer userId, JSONObject payload) {
|
||||
try {
|
||||
@ -107,12 +107,16 @@ public class PushMessageServiceImpl implements PushMessageService {
|
||||
* @param content 必填参数
|
||||
* @param payload 可选参数
|
||||
*/
|
||||
@Async("pushAsyncExecutor")
|
||||
@Async("asyncExecutor")
|
||||
@Override
|
||||
public void noticeMerchantEmployeeOrderAction(Integer storeId, String orderId, String title, String content, JSONObject payload) {
|
||||
List<String> cidList = shopStoreEmployeeService.selectEmployeeGeTuiCidByStoreId(storeId, orderId, null);
|
||||
// 获取 商家的 cid
|
||||
uniCloudPushService.sendPushMessageBatch(cidList, title, content, payload);
|
||||
try {
|
||||
List<String> cidList = shopStoreEmployeeService.selectEmployeeGeTuiCidByStoreId(storeId, orderId, null);
|
||||
// 获取 商家的 cid
|
||||
uniCloudPushService.sendPushMessageBatch(cidList, title, content, payload);
|
||||
} catch (Exception e) {
|
||||
log.error("执行 noticeMerchantEmployeeOrderAction 方法时发生异常,storeId:{}", storeId, e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package com.suisung.mall.shop.order.controller.admin;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.api.ResultCode;
|
||||
@ -198,5 +199,13 @@ public class ShopOrderReturnController extends BaseControllerImpl {
|
||||
return CommonResult.success(shopOrderReturnService.transferToSupplier(return_id));
|
||||
}
|
||||
|
||||
// 商家App 相关接口
|
||||
|
||||
@ApiOperation(value = "商家退货退款", notes = "商家退货退款,支持整单或个别商品退货")
|
||||
@RequestMapping(value = "/mch/order/doRefund", method = RequestMethod.POST)
|
||||
public CommonResult doRefundForMch(@RequestBody JSONObject params) {
|
||||
return shopOrderReturnService.doRefundForMch(params);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.suisung.mall.shop.order.service;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.modules.order.ShopOrderInfo;
|
||||
import com.suisung.mall.common.modules.order.ShopOrderItem;
|
||||
@ -85,11 +86,10 @@ public interface ShopOrderReturnService extends IBaseService<ShopOrderReturn> {
|
||||
/**
|
||||
* 支付订单,顺丰同城配送超时,自动取消订单并退款,加库存
|
||||
*
|
||||
* @param orderId 订单Id
|
||||
* @param returnFlag 退货类型(ENUM): 0-不用退货;1-需要退货
|
||||
* @param orderId 订单Id
|
||||
* @return
|
||||
*/
|
||||
Boolean sfExpressExpiredForceRefund(String orderId, Integer returnFlag);
|
||||
Boolean sfExpressExpiredForceRefund(String orderId);
|
||||
|
||||
CommonResult editRefund(String return_id, BigDecimal return_refund_amount);
|
||||
|
||||
@ -159,4 +159,12 @@ public interface ShopOrderReturnService extends IBaseService<ShopOrderReturn> {
|
||||
* @return
|
||||
*/
|
||||
boolean transferToSupplier(String return_id);
|
||||
|
||||
/**
|
||||
* 商家退货退款,支持全单或个别商品退货
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
CommonResult doRefundForMch(JSONObject params);
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.PhoneUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@ -511,7 +512,6 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
}
|
||||
|
||||
boolean is_denyreturn = ifDenyReturn(shopOrderInfo, shopOrderItem, shopProductIndex);
|
||||
|
||||
if (is_denyreturn) {
|
||||
throw new ApiException(I18nUtil._("此商品不允许退货!"));
|
||||
}
|
||||
@ -916,7 +916,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
*/
|
||||
@GlobalTransactional
|
||||
@Override
|
||||
public Boolean sfExpressExpiredForceRefund(String orderId, Integer returnFlag) {
|
||||
public Boolean sfExpressExpiredForceRefund(String orderId) {
|
||||
|
||||
// 先整单退货申请
|
||||
CommonResult commonResult = addWholeItems(orderId);
|
||||
@ -929,30 +929,12 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
throw new ApiException(I18nUtil._("订单信息异常!"));
|
||||
}
|
||||
|
||||
returnFlag = CheckUtil.isEmpty(returnFlag) ? 0 : returnFlag;
|
||||
shopOrderReturn.setReturn_flag(0);
|
||||
shopOrderReturn.setReturn_buyer_message("配送异常,系统自动退款");
|
||||
shopOrderReturn.setReturn_store_message("配送异常,系统自动退款");
|
||||
|
||||
|
||||
List<String> return_ids = Collections.singletonList(shopOrderReturn.getReturn_id());
|
||||
|
||||
//订单已支付,但拣货超时,顺丰同城配送异常超时被取消, 强制退款
|
||||
ShopOrderReturn orderReturn = new ShopOrderReturn();
|
||||
orderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_RECEIVED);
|
||||
orderReturn.setReturn_flag(returnFlag);
|
||||
if (!editShopOrderReturnAndItemNextState(return_ids, StateCode.RETURN_PROCESS_CHECK, orderReturn)) {
|
||||
throw new ApiException(I18nUtil._("修改订单信息失败!"));
|
||||
}
|
||||
|
||||
shopOrderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_RECEIVED);
|
||||
shopOrderReturn.setReturn_store_message("系统自动退款");
|
||||
shopOrderReturn.setReturn_flag(returnFlag);
|
||||
// end 待审核状态
|
||||
|
||||
if (!edit(shopOrderReturn)) {
|
||||
throw new ApiException(I18nUtil._("修改订单信息失败!"));
|
||||
}
|
||||
|
||||
// 订单审核
|
||||
return processReviewList(return_ids, Collections.singletonList(shopOrderReturn), StateCode.RETURN_PROCESS_RECEIVED, StateCode.RETURN_PROCESS_FINISH);
|
||||
// 退货审核(商家同意退款,仅仅退款,因为商品还没有配送出去)
|
||||
return processReviewList(shopOrderReturn, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1188,81 +1170,78 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
}
|
||||
|
||||
/**
|
||||
* 退货单审核 - 商家同意退款退库
|
||||
* 退货单审核(商家同意退款退库)
|
||||
* 处理逻辑:
|
||||
* 1. 验证店铺权限
|
||||
* 2. 根据退货标志(return_flag)区分处理流程:
|
||||
* - 0:无需退货,直接完成退货单
|
||||
* - 1:需要退货,设置退货地址后审核
|
||||
* 3. 审核完成后通知买家
|
||||
*
|
||||
* @param shopOrderReturn
|
||||
* @return
|
||||
* @param shopOrderReturn 退货单信息
|
||||
* @param receiving_address 收货地址ID
|
||||
* @return 处理结果
|
||||
* @throws ApiException 处理失败时抛出异常
|
||||
*/
|
||||
@Override
|
||||
@GlobalTransactional
|
||||
public boolean processReviewList(ShopOrderReturn shopOrderReturn, Integer receiving_address) {
|
||||
try {
|
||||
// 1. 获取并验证店铺权限
|
||||
Integer store_id = Optional.ofNullable(shopOrderReturn.getStore_id())
|
||||
.orElseGet(() -> Convert.toInt(getCurrentUser().getStore_id()));
|
||||
|
||||
Integer store_id;
|
||||
if (shopOrderReturn.getStore_id() == null) {
|
||||
UserDto user = getCurrentUser();
|
||||
store_id = Convert.toInt(user.getStore_id());
|
||||
} else {
|
||||
store_id = shopOrderReturn.getStore_id();
|
||||
}
|
||||
List<String> return_ids = Convert.toList(String.class, shopOrderReturn.getReturn_id());
|
||||
List<ShopOrderReturn> orderReturns = gets(return_ids);
|
||||
|
||||
String str_return_id = shopOrderReturn.getReturn_id();
|
||||
List<String> return_ids = Convert.toList(String.class, str_return_id);
|
||||
if (!CheckUtil.checkDataRights(store_id, orderReturns, ShopOrderReturn::getStore_id)) {
|
||||
throw new ApiException(ResultCode.FORBIDDEN);
|
||||
}
|
||||
|
||||
List<ShopOrderReturn> orderReturns = gets(return_ids);
|
||||
|
||||
if (CheckUtil.checkDataRights(store_id, orderReturns, ShopOrderReturn::getStore_id)) {
|
||||
|
||||
Integer return_flag = shopOrderReturn.getReturn_flag();
|
||||
if (ObjectUtil.equal(return_flag, 0)) {
|
||||
//无需退货:直接修改退货单状态为完成,并调用 review 方法进行审核:
|
||||
// 2. 根据退货标志处理不同流程
|
||||
if (ObjectUtil.equal(shopOrderReturn.getReturn_flag(), 0)) {
|
||||
// 2.1 无需退货流程
|
||||
if (!edit(shopOrderReturn)) {
|
||||
throw new ApiException(I18nUtil._("修改订单信息失败!"));
|
||||
}
|
||||
|
||||
Integer return_next_state_id = StateCode.RETURN_PROCESS_FINISH;
|
||||
// 订单审核
|
||||
if (!processReviewList(return_ids, orderReturns, StateCode.RETURN_PROCESS_CHECK, return_next_state_id)) {
|
||||
if (!processReviewList(return_ids, orderReturns, StateCode.RETURN_PROCESS_CHECK, StateCode.RETURN_PROCESS_FINISH)) {
|
||||
throw new ApiException(I18nUtil._("审核失败!"));
|
||||
}
|
||||
|
||||
} else {
|
||||
//需要退货:获取收货地址信息,并更新退货单的相关字段(如地址、联系方式等)。随后调用 review 方法进行审核:
|
||||
ShopStoreShippingAddress address_row = shopStoreShippingAddressService.get(receiving_address);
|
||||
if (address_row != null) {
|
||||
String return_addr = address_row.getSs_province() + address_row.getSs_city() + address_row.getSs_county() + address_row.getSs_address();
|
||||
Long return_mobile = Convert.toLong(address_row.getSs_mobile());
|
||||
String return_telephone = address_row.getSs_telephone();
|
||||
String return_contact_name = address_row.getSs_name();
|
||||
|
||||
shopOrderReturn.setReturn_addr(return_addr);
|
||||
shopOrderReturn.setReturn_mobile(return_mobile);
|
||||
shopOrderReturn.setReturn_telephone(return_telephone);
|
||||
shopOrderReturn.setReturn_contact_name(return_contact_name);
|
||||
if (!edit(shopOrderReturn)) {
|
||||
throw new ApiException(I18nUtil._("修改订单信息失败!"));
|
||||
}
|
||||
|
||||
// 订单审核
|
||||
if (!processReviewList(return_ids, orderReturns, StateCode.RETURN_PROCESS_CHECK, 0)) {
|
||||
throw new ApiException(I18nUtil._("审核失败!"));
|
||||
}
|
||||
} else {
|
||||
// 2.2 需要退货流程
|
||||
ShopStoreShippingAddress address = shopStoreShippingAddressService.get(receiving_address);
|
||||
if (address == null) {
|
||||
throw new ApiException(I18nUtil._("请选择收货地址!"));
|
||||
}
|
||||
|
||||
// 设置退货地址信息
|
||||
shopOrderReturn.setReturn_addr(address.getSs_province() + address.getSs_city() + address.getSs_county() + address.getSs_address());
|
||||
shopOrderReturn.setReturn_mobile(Convert.toLong(address.getSs_mobile()));
|
||||
shopOrderReturn.setReturn_telephone(address.getSs_telephone());
|
||||
shopOrderReturn.setReturn_contact_name(address.getSs_name());
|
||||
|
||||
if (!edit(shopOrderReturn) ||
|
||||
!processReviewList(return_ids, orderReturns, StateCode.RETURN_PROCESS_CHECK, 0)) {
|
||||
throw new ApiException(I18nUtil._("退货流程处理失败!"));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 没有权限
|
||||
throw new ApiException(ResultCode.FORBIDDEN);
|
||||
|
||||
// 3. 通知买家
|
||||
messageService.sendNoticeMsg(
|
||||
shopOrderReturn.getBuyer_user_id(),
|
||||
0,
|
||||
"refunds-and-reminders",
|
||||
new HashMap<String, Object>() {{
|
||||
put("order_id", shopOrderReturn.getReturn_id());
|
||||
put("return_refund_amount", shopOrderReturn.getReturn_refund_amount());
|
||||
}});
|
||||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
logger.error("退货单审核处理异常", e);
|
||||
throw e instanceof ApiException ? (ApiException) e :
|
||||
new ApiException(I18nUtil._("系统处理异常: ") + e.getMessage());
|
||||
}
|
||||
|
||||
// 通知买家退货退款成功
|
||||
String message_id = "refunds-and-reminders";
|
||||
Map args = new HashMap();
|
||||
args.put("order_id", shopOrderReturn.getReturn_id());
|
||||
args.put("return_refund_amount", shopOrderReturn.getReturn_refund_amount());
|
||||
messageService.sendNoticeMsg(shopOrderReturn.getBuyer_user_id(), 0, message_id, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2051,7 +2030,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
// 生成退款单
|
||||
OrderReturnInputVo orderReturnInputVo = new OrderReturnInputVo();
|
||||
orderReturnInputVo.setOrder_id(order_id);
|
||||
orderReturnInputVo.setReturn_tel("");
|
||||
orderReturnInputVo.setReturn_tel(""); // 为什么不获取订单用户的手机号码
|
||||
orderReturnInputVo.setReturn_buyer_message(I18nUtil._("整单退!"));
|
||||
orderReturnInputVo.setUser_id(orderInfo.getBuyer_user_id());
|
||||
|
||||
@ -2188,4 +2167,15 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 商家退货退款,支持全单或个别商品退货
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public CommonResult doRefundForMch(JSONObject params) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -8,6 +8,7 @@
|
||||
|
||||
package com.suisung.mall.shop.sfexpress.controller.mobile;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.pojo.res.ThirdApiRes;
|
||||
import com.suisung.mall.common.utils.SseEmitterUtil;
|
||||
@ -71,6 +72,10 @@ public class SFExpressController {
|
||||
@ApiOperation(value = "查询顺丰同城订单状态流", notes = "查询顺丰同城订单状态流")
|
||||
@RequestMapping(value = "/list-order-feed", method = RequestMethod.POST)
|
||||
public ThirdApiRes listOrderFeed(@RequestParam(name = "order_id", defaultValue = "") String orderId) {
|
||||
if (StrUtil.isBlank(orderId) || orderId == "undefined" || orderId == "null") {
|
||||
return new ThirdApiRes().fail(1003, "请求参数有误!");
|
||||
}
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("order_id", shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId));
|
||||
return sfExpressApiService.listOrderFeed(params);
|
||||
|
||||
@ -313,7 +313,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
// List<String> orderList = new ArrayList<>();
|
||||
// orderList.add(shopStoreSfOrderExist.getShop_order_id());
|
||||
// 取消订单, 流程:订单状态;积分、众宝、库存、礼包、优惠券 有就统统退还
|
||||
Boolean success = shopOrderReturnService.sfExpressExpiredForceRefund(shopStoreSfOrderExist.getShop_order_id(), 0); // 不检查订单付款状态
|
||||
Boolean success = shopOrderReturnService.sfExpressExpiredForceRefund(shopStoreSfOrderExist.getShop_order_id()); // 不检查订单付款状态
|
||||
if (!success) {
|
||||
throw new ApiException(I18nUtil._("取消商家订单失败!"));
|
||||
}
|
||||
@ -578,7 +578,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
|
||||
// 重要:订单取消
|
||||
// success = shopOrderBaseService.cancel(orderList, null, false);
|
||||
success = shopOrderReturnService.sfExpressExpiredForceRefund(shopOrderId, 0);
|
||||
success = shopOrderReturnService.sfExpressExpiredForceRefund(shopOrderId);
|
||||
if (!success) {
|
||||
return new ThirdApiRes().fail(-1, "取消订单业务处理失败!");
|
||||
}
|
||||
|
||||
@ -1315,7 +1315,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
|
||||
ShopMchEntry merchantEntryUpd = new ShopMchEntry();
|
||||
merchantEntryUpd.setId(merchantEntry.getId());
|
||||
merchantEntryUpd.setApproval_status(CommonConstant.MCH_APPR_STA_PASS); // 设置审批状态为已通过
|
||||
merchantEntryUpd.setApproval_remark("入驻流程已全部完成!"); // 设置审批备注
|
||||
merchantEntryUpd.setApproval_remark("已全部完成入驻流程!"); // 设置审批备注
|
||||
boolean updateResult = updateById(merchantEntry); // 更新商户入驻信息
|
||||
if (!updateResult) {
|
||||
log.error("更新商户入驻信息状态失败, merchantId={}", merchantEntry.getId());
|
||||
|
||||
24
pom.xml
24
pom.xml
@ -317,18 +317,18 @@
|
||||
<!-- sentinel配置 -->
|
||||
<sentinel.transport.dashboard>114.132.210.208:8718</sentinel.transport.dashboard>
|
||||
<!-- mysql配置 -->
|
||||
<mysql.host>42.194.196.179</mysql.host>
|
||||
<mysql.port>3306</mysql.port>
|
||||
<mysql.db>mall_dev</mysql.db>
|
||||
<mysql.user>webdev</mysql.user>
|
||||
<mysql.pwd>jbFr9YewcA9Mihx6fnw51Kzq</mysql.pwd>
|
||||
<mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>
|
||||
<!-- <mysql.host>42.194.196.179</mysql.host>-->
|
||||
<!-- <mysql.port>3306</mysql.port>-->
|
||||
<!-- <mysql.db>mall_prod</mysql.db>-->
|
||||
<!-- <mysql.user>root</mysql.user>-->
|
||||
<!-- <mysql.pwd>J0XivNvAcR14}pA6Cysm.E17</mysql.pwd>-->
|
||||
<!-- <mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>-->
|
||||
<!-- <mysql.host>42.194.196.179</mysql.host>-->
|
||||
<!-- <mysql.port>3306</mysql.port>-->
|
||||
<!-- <mysql.db>mall_dev</mysql.db>-->
|
||||
<!-- <mysql.user>webdev</mysql.user>-->
|
||||
<!-- <mysql.pwd>jbFr9YewcA9Mihx6fnw51Kzq</mysql.pwd>-->
|
||||
<!-- <mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>-->
|
||||
<mysql.host>42.194.196.179</mysql.host>
|
||||
<mysql.port>3306</mysql.port>
|
||||
<mysql.db>mall_prod</mysql.db>
|
||||
<mysql.user>root</mysql.user>
|
||||
<mysql.pwd>J0XivNvAcR14}pA6Cysm.E27</mysql.pwd>
|
||||
<mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>
|
||||
<!-- redis配置 -->
|
||||
<redis.host>114.132.210.208</redis.host>
|
||||
<redis.database>15</redis.database>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user