diff --git a/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java b/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java index cc3f72d7..0f7d1f78 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java +++ b/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java @@ -17,26 +17,79 @@ import javax.servlet.http.HttpServletRequest; @RestControllerAdvice public class GlobalExceptionHandler { - private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); + private final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(value = Exception.class) public CommonResult exceptionHandler(HttpServletRequest req, Exception e) { - logger.error("Exception全局异常捕获-" + e.getMessage(), e); - return CommonResult.failed(); + + + // 获取异常的第一帧堆栈信息 + 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); + } + + logger.error("Exception全局异常捕获 URI: {} - Method: {} - Error: {} at {}", + req.getRequestURI(), + req.getMethod(), + e.getMessage(), + location, + e); + + return CommonResult.failed("系统异常:" + location); + +// logger.error("Exception全局异常捕获-" + e.getMessage(), e); +// return CommonResult.failed(); } @ExceptionHandler(value = ApiException.class) public CommonResult exceptionHandler(HttpServletRequest req, ApiException e) { +// IErrorCode errorCode = e.getErrorCode(); +// String message = e.getMessage(); +// logger.error("ApiException全局异常捕获-" + e.getMessage(), e); +// if (errorCode != null) { +// return CommonResult.failed(errorCode); +// } else if (StrUtil.isNotBlank(message)) { +// return CommonResult.failed(message); +// } else { +// return CommonResult.failed(ResultCode.FAILED); +// } + + // 获取异常位置信息 + StackTraceElement[] stackTrace = e.getStackTrace(); + String location = "未知位置"; + + if (stackTrace.length > 0) { + StackTraceElement element = stackTrace[0]; // 第一个异常抛出点 + location = String.format("%s.%s (line: %d)", + element.getClassName(), + element.getMethodName(), + element.getLineNumber() + ); + } + IErrorCode errorCode = e.getErrorCode(); String message = e.getMessage(); - logger.error("ApiException全局异常捕获-" + e.getMessage(), e); + + logger.error("Exception全局异常捕获 URI: {} - Method: {} - Error: {} at {}", + req.getRequestURI(), + req.getMethod(), + e.getMessage(), + location, + e); + if (errorCode != null) { return CommonResult.failed(errorCode); } else if (StrUtil.isNotBlank(message)) { - return CommonResult.failed(message); + return CommonResult.failed("业务异常:" + message + " [" + location + "]"); } else { return CommonResult.failed(ResultCode.FAILED); } - } } diff --git a/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java b/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java index 2e9c2bd1..60287686 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java +++ b/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java @@ -289,7 +289,7 @@ public interface ShopService { * @return */ @PostMapping(value = "/mobile/shop/orderlkl/pay/add/order") - Boolean lklPayAddShopOrderLkl(@RequestBody JSONObject lklPayReqAndRespJson); + boolean lklPayAddShopOrderLkl(@RequestBody JSONObject lklPayReqAndRespJson); /** * 当拉卡拉支付成功后,更改一个拉卡拉订单信息 @@ -298,7 +298,7 @@ public interface ShopService { * @return */ @PostMapping(value = "/mobile/shop/orderlkl/pay/notify/update/order") - Boolean lklPayNotifyUpdateShopOrderLkl(@RequestBody JSONObject lklPayNotifyDataJson); + boolean lklPayNotifyUpdateShopOrderLkl(@RequestBody JSONObject lklPayNotifyDataJson); } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java index 415a07ff..e63bcd28 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.suisung.mall.common.api.CommonResult; @@ -27,6 +28,8 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -64,7 +67,7 @@ public class IndexController extends BaseControllerImpl { @RequestMapping(value = "/test/case", method = RequestMethod.POST) public JSONObject testCase(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject objectJSON) { - return lakalaPayService.transPreOrder(request, response, (String) objectJSON.get("orderId")); + return lakalaPayService.lklTransPreOrder(request, response, (String) objectJSON.get("orderId")); } @ApiOperation(value = "获取支付密码", notes = "获取支付密码") @@ -245,8 +248,13 @@ public class IndexController extends BaseControllerImpl { @ApiOperation(value = "第三方拉卡拉在微信回调通知", notes = "第三方拉卡拉在微信回调通知") @RequestMapping(value = "/lkl_wxPay_notify_url", method = RequestMethod.POST) - public String lklWxNotifyUrl(HttpServletRequest request) { - return payUserPayService.lklNotifyUrl(request); + public ResponseEntity lklWxNotifyUrl(HttpServletRequest request) { + JSONObject resp = JSONUtil.parseObj(payUserPayService.lklNotifyUrl(request)); + if (resp != null && "SUCCESS".equals(resp.get("code"))) { + return new ResponseEntity<>(resp, HttpStatus.OK); + } + + return new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR); } @RequestMapping(value = "/pay_state_detection", method = RequestMethod.GET) diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java index 55050b64..855a6fc3 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java @@ -18,7 +18,7 @@ public interface LakalaPayService { Boolean initLKLSDK(); - JSONObject transPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId); + JSONObject lklTransPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId); /** * 拉卡拉预下单 @@ -28,7 +28,6 @@ public interface LakalaPayService { * @param termNo 终端号 * @param xcxAppId 小程序appid * @param openId openid - * @param storeId 店铺号 * @param orderId 订单号 * @param subject 订单标题 * @param totalAmount 订单金额 @@ -37,7 +36,7 @@ public interface LakalaPayService { * @param remark 备注 * @return */ - JSONObject transPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String storeId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark); + JSONObject lklTransPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String storeId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark); /** * 聚合扫码-交易查询 diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java index 6805dae1..31823930 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java @@ -108,7 +108,7 @@ public class LakalaPayServiceImpl implements LakalaPayService { } @Override - public cn.hutool.json.JSONObject transPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId) { + public cn.hutool.json.JSONObject lklTransPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId) { // 1. 配置初始化 initLKLSDK(); @@ -157,7 +157,7 @@ public class LakalaPayServiceImpl implements LakalaPayService { * @param termNo 终端号 * @param xcxAppId 小程序appid * @param openId openid - * @param storeId 订单号 + * @param storeId 店铺号 * @param orderId 订单号 * @param subject 订单标题 * @param totalAmount 订单金额 @@ -167,7 +167,7 @@ public class LakalaPayServiceImpl implements LakalaPayService { * @return */ @Override - public JSONObject transPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String storeId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark) { + public JSONObject lklTransPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String storeId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark) { // 1. 配置初始化 initLKLSDK(); @@ -203,7 +203,7 @@ public class LakalaPayServiceImpl implements LakalaPayService { wechatBus.setSubAppid(xcxAppId); // 小程序appId wechatBus.setUserId(openId); // 微信 openId wechatBus.setDeviceInfo("WEB"); // 终端设备号(门店号或收银设备ID),注意:PC网页或JSAPI支付请传”WEB” - wechatBus.setAttach(storeId); // 附加数据,商户自定义数据,在查询交易结果时原样返回。 + // wechatBus.setAttach(storeId); // 附加数据,商户自定义数据,在查询交易结果时原样返回。 v3LabsTransPreorderWechatReq.setAccBusiFields(wechatBus); try { diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java index 950bb10e..c549e054 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java @@ -222,7 +222,6 @@ public class PayUserPayServiceImpl extends BaseServiceImpl trade_is_paids = trade_rows.stream().map(PayConsumeTrade::getTrade_is_paid).collect(Collectors.toList()); Integer trade_is_paid = trade_is_paids.contains(StateCode.ORDER_PAID_STATE_YES) ? StateCode.ORDER_PAID_STATE_YES : StateCode.ORDER_PAID_STATE_NO; trade_row.setTrade_is_paid(trade_is_paid); @@ -257,6 +256,11 @@ public class PayUserPayServiceImpl extends BaseServiceImpl orderIdList) { + private void handleSfExpressOrderActions(List orderIdList) { if (orderIdList == null || orderIdList.isEmpty()) { return; } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java index f3719cee..e7456f00 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java @@ -14,10 +14,12 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.suisung.mall.common.modules.order.ShopOrderBase; import com.suisung.mall.common.modules.order.ShopOrderLkl; import com.suisung.mall.common.utils.DateTimeUtils; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.order.mapper.ShopOrderLklMapper; +import com.suisung.mall.shop.order.service.ShopOrderBaseService; import com.suisung.mall.shop.order.service.ShopOrderDataService; import com.suisung.mall.shop.order.service.ShopOrderLklService; import com.suisung.mall.shop.store.service.ShopStoreBaseService; @@ -39,10 +41,15 @@ public class ShopOrderLklServiceImpl extends BaseServiceImpl