diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index 5dfdfce85..eb34ae8e5 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -1,6 +1,7 @@ package com.iformall.schedule; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iformall.common.ErrorCode; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; import com.iformall.enums.*; @@ -122,8 +123,11 @@ public class CouponOrderExpiringSchedule { try { wxRefundOrderService.createRefundOrder(appinfo, co.getId(), EnumPayType.PAY_AUTO_REFUND, null); } catch (MallinkException e) { - logger.error("退款失败:"+e.getMessage()+"couponOrderId="+co.getId()); - throw new MallinkException(e.getErrorCode(), e.getMessage()); + if (e.getErrorCode() == ErrorCode.REFUND_NOT_ALLOW.getCode()) { + } else { + logger.error("退款失败:" + e.getMessage() + "couponOrderId=" + co.getId()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } } } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java index 9400fb5d2..955957571 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java @@ -1,18 +1,21 @@ package com.iformall.schedule; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iformall.common.ErrorCode; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxOrder; import com.iformall.enums.EnumAppType; import com.iformall.enums.EnumOrderStatus; import com.iformall.enums.EnumOrderType; import com.iformall.enums.EnumRefundStatus; +import com.iformall.exception.MallinkException; import com.iformall.mapper.WxAppinfoMapper; import com.iformall.mapper.WxCouponMapper; import com.iformall.mapper.WxOrderGroupMapper; import com.iformall.mapper.WxOrderMapper; import com.iformall.service.WxOrderService; import com.iformall.service.WxRefundOrderService; +import com.iformall.utils.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -208,10 +211,22 @@ public class OrderExpiringSchedule { appinfo.updateTenantInfo(order); appinfo.setType(EnumAppType.C.getCode()); appinfo = wxAppinfoMapper.findList(appinfo).get(0); + Date limitDate = DateUtils.getTimeAfterDays(180, order.getCreateDate()); + if (limitDate.before(new Date())) { + // 系统只自动处理180内的订单 + return; + } //退款流程 boolean has = wxRefundOrderService.hasRefundOrder(order.getId(), EnumRefundStatus.REFUND_SUCCESS.getCode()); if (!has) { - wxRefundOrderService.returnMoney(appinfo, order.getId()); + try { + wxRefundOrderService.returnMoney(appinfo, order.getId()); + } catch (MallinkException e) { + if (e.getErrorCode() == ErrorCode.REFUND_NOT_ALLOW.getCode()) { + + } + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } } } diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index ae38476fc..b0a331e09 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -297,6 +297,7 @@ public enum ErrorCode{ REFUND_ORDER_NOTIFY_CHECK_SIGN_ERROR(12014, "退款验签失败"), REFUND_ORDER_BUSER_IS_NULL(12015, "B端用户不存在"), REFUND_ORDER_BUSER_NOT_EQUAL(12016, "B端用户无操作权限"), + REFUND_NOT_ALLOW(12017, "退款订单不允许退款"), APP_ID_NOT_FOUND(12020, "APPID没找到"), MCH_INFO_NOT_FOUND(12021, "微信商户平台信息没找到"), diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index e6b8e0a7d..f196bb745 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -511,6 +511,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR); } } else { + String errDesc = returnMap.get("err_code_des"); + if (errDesc.equalsIgnoreCase("订单已全额退款")) { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateById(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } logger.error("微信退款订单申请失败: " + response); String errMsg = ""; JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); @@ -523,6 +529,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); wxRefundOrderMapper.updateById(record); + if (errDesc.equalsIgnoreCase("超期订单不允许退款")) { + // 更新券状态 + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW); + } return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg, returnMap); } } else { @@ -590,6 +600,13 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), "订单状态更新失败"); } } else { + // 特殊处理 + String errDesc = returnMap.get("err_code_des"); + if (errDesc.equalsIgnoreCase("订单已全额退款")) { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateById(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } logger.error("微信退款订单申请失败: " + response); String errMsg = ""; JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); @@ -602,6 +619,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); wxRefundOrderMapper.updateById(record); + if (errDesc.equalsIgnoreCase("超期订单不允许退款")) { + // 更新券状态 + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW); + } throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg); } } @@ -800,6 +821,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR); } } else { + String errDesc = returnMap.get("err_code_des"); + if (errDesc.equalsIgnoreCase("订单已全额退款")) { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateById(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } logger.error("微信退款订单申请失败: " + response); String errMsg = ""; JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); @@ -812,6 +839,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); wxRefundOrderMapper.updateById(record); + if (errDesc.equalsIgnoreCase("超期订单不允许退款")) { + // 更新券状态 + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW); + } return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg, returnMap); } } else { @@ -879,6 +910,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), "订单状态更新失败"); } } else { + String errDesc = returnMap.get("err_code_des"); + if (errDesc.equalsIgnoreCase("订单已全额退款")) { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateById(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } logger.error("微信退款订单申请失败: " + response); String errMsg = ""; JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); @@ -891,6 +928,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); wxRefundOrderMapper.updateById(record); + if (errDesc.equalsIgnoreCase("超期订单不允许退款")) { + // 更新券状态 + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW); + } throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg); } } @@ -1404,6 +1445,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR); } } else { + String errDesc = returnMap.get("err_code_des"); + if (errDesc.equalsIgnoreCase("订单已全额退款")) { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateById(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } logger.error("微信退款订单申请失败: " + response); String errMsg = ""; JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); @@ -1416,6 +1463,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); wxRefundOrderMapper.updateById(record); + if (errDesc.equalsIgnoreCase("超期订单不允许退款")) { + // 更新券状态 + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW); + } return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg, returnMap); } } else { @@ -1476,6 +1527,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), "订单状态更新失败"); } } else { + String errDesc = returnMap.get("err_code_des"); + if (errDesc.equalsIgnoreCase("订单已全额退款")) { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateById(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } logger.error("微信退款订单申请失败: " + response); String errMsg = ""; JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); @@ -1488,6 +1545,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); wxRefundOrderMapper.updateById(record); + if (errDesc.equalsIgnoreCase("超期订单不允许退款")) { + // 更新券状态 + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW); + } throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg); } }