|
@@ -21,6 +21,7 @@ import io.swagger.annotations.ApiImplicitParam;
|
|
|
import io.swagger.annotations.ApiImplicitParams;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import lombok.extern.log4j.Log4j2;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
@@ -162,35 +163,104 @@ public class AppPayController extends BaseController {
|
|
|
return Result.failure("下单失败");
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 订单退款请求
|
|
|
- */
|
|
|
- @ApiOperation(value = "订单退款请求")
|
|
|
- @PostMapping("refund")
|
|
|
- public Object refund(Integer orderId) {
|
|
|
- //
|
|
|
- TmOrder orderInfo = tmOrderService.getById(orderId);
|
|
|
|
|
|
- if (null == orderInfo) {
|
|
|
- return Result.failure( "订单已取消");
|
|
|
+ @ApiOperation(value = "订单退款查询")
|
|
|
+ @PostMapping("refundQuery")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "orderId", value = "订单号", paramType = "query", required = true, dataType = "String")
|
|
|
+ })
|
|
|
+ public Object refund(@RequestParam(name = "orderId") String orderId) {
|
|
|
+
|
|
|
+ if(StringUtils.isBlank(orderId)){
|
|
|
+ return Result.failure("订单号不能为空");
|
|
|
+ }
|
|
|
+ TmOrder dbOrder = tmOrderService.getById(orderId);
|
|
|
+ if (null == dbOrder) {
|
|
|
+ return Result.failure( "订单不存在");
|
|
|
+ }
|
|
|
+ //1、检查订单状态
|
|
|
+ if(null != dbOrder.getStatus()){
|
|
|
+ if(OrderStatusEnum.ORDER_CANCEL.getStatus().compareTo(dbOrder.getStatus()) == 0 ){
|
|
|
+ return Result.failure("订单号已经取消");
|
|
|
+ }
|
|
|
+ if(OrderStatusEnum.ORDER_USED.getStatus().compareTo(dbOrder.getStatus()) == 0){
|
|
|
+ return Result.failure("订单号已经使用,无法取消");
|
|
|
+ }
|
|
|
}
|
|
|
+ //2、检查订单支付状态
|
|
|
+ if(null != dbOrder.getPayStatus()){
|
|
|
+ if(OrderPayStatusEnum.REFUND_SUCCESS.getStatus().compareTo(dbOrder.getPayStatus()) == 0){
|
|
|
+ //这里更新订单的状态??? TODO:先去微信支付查询再反转状态?
|
|
|
+ dbOrder.setStatus(OrderStatusEnum.ORDER_CANCEL.getStatus());
|
|
|
+ //更新订单状态为已经取消
|
|
|
+ if(tmOrderService.updateWithId(dbOrder) != 1){
|
|
|
+ throw new CommonBaseException(ResultCodeEnum.D101 , "更新订单状态失败");
|
|
|
+ }
|
|
|
+ return Result.failure("订单号已退款成功");
|
|
|
+ }else if(OrderPayStatusEnum.REFUND_FAIL.getStatus().compareTo(dbOrder.getPayStatus()) == 0){
|
|
|
+ //上次退款失败,需要调用查询接口去查询
|
|
|
+ //TODO:
|
|
|
|
|
|
- if (orderInfo.getStatus() == 401 || orderInfo.getStatus() == 402) {
|
|
|
- return Result.failure("订单已退款");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<String, Object> result = WechatUtil.wxRefundquery(dbOrder.getOrderNo() , dbOrder.getRefundId());
|
|
|
+ if(null == result || result.isEmpty()){
|
|
|
+ throw new CommonBaseException(ResultCodeEnum.D101 , "微信返回异常");
|
|
|
}
|
|
|
- WechatRefundApiResult result = WechatUtil.wxRefund(orderInfo.getId(),
|
|
|
- orderInfo.getOrderPrice().doubleValue(), orderInfo.getOrderPrice().doubleValue());
|
|
|
- if (result.getResult_code().equals("SUCCESS")) {
|
|
|
- if (orderInfo.getStatus() == 201) {
|
|
|
- orderInfo.setStatus(3);
|
|
|
- } else if (orderInfo.getStatus() == 300) {
|
|
|
- orderInfo.setStatus(3);
|
|
|
+ // 响应报文
|
|
|
+ String returnCode = MapUtils.getString("return_code", result);
|
|
|
+ String returnMsg = MapUtils.getString("return_msg", result);
|
|
|
+ if (StringUtils.isNotBlank(returnCode) && returnCode.equals("SUCCESS")) {
|
|
|
+ String refundStatus = "";
|
|
|
+ //TODO:改成jdk8的形式
|
|
|
+ for ( String key : result.keySet()) {
|
|
|
+ if(key.startsWith("refund_status_")){
|
|
|
+ refundStatus = (String) result.get(key);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- tmOrderService.updateById(orderInfo);
|
|
|
- return Result.success( "成功退款");
|
|
|
+ if("SUCCESS".equals(refundStatus)){
|
|
|
+ //退款成功,更新状态
|
|
|
+ boolean needUpdate = false;
|
|
|
+ if(null != dbOrder.getStatus() && OrderStatusEnum.ORDER_CANCEL.getStatus().compareTo(dbOrder.getStatus()) != 0){
|
|
|
+ needUpdate = true;
|
|
|
+ dbOrder.setStatus(OrderStatusEnum.ORDER_CANCEL.getStatus());
|
|
|
+ }
|
|
|
+ if(null != dbOrder.getPayStatus() && OrderPayStatusEnum.REFUND_SUCCESS.getStatus().compareTo(dbOrder.getPayStatus()) != 0){
|
|
|
+ needUpdate = true;
|
|
|
+ dbOrder.setPayStatus(OrderPayStatusEnum.REFUND_SUCCESS.getStatus());
|
|
|
+ }
|
|
|
+ if(needUpdate){
|
|
|
+ if(tmOrderService.updateWithId(dbOrder) != 1){
|
|
|
+ throw new CommonBaseException(ResultCodeEnum.D101 , "更新订单为取消成功状态失败");
|
|
|
+ }
|
|
|
+ TmDesk tmDesk = tmDeskService.getById(dbOrder.getDeskId());
|
|
|
+ if(null != tmDesk){
|
|
|
+ if(null == tmDesk.getStatus() || tmDesk.getStatus().compareTo(1) == 0){
|
|
|
+ tmDesk.setStatus(0);
|
|
|
+ if(tmDeskService.updateWithId(tmDesk) != 1){
|
|
|
+ throw new CommonBaseException(ResultCodeEnum.D101 , "更新订单为取消成功状态失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Result.success( "退款成功");
|
|
|
+ }else if("REFUNDCLOSE".equals(refundStatus)){
|
|
|
+ log.info("微信支付退款查询,微信返回退款关闭");
|
|
|
+ //退款关闭
|
|
|
+ }else if("PROCESSING".equals(refundStatus)){
|
|
|
+ //退款处理中
|
|
|
+ log.info("微信支付退款查询,微信返回退款处理中");
|
|
|
+ }else if("CHANGE".equals(refundStatus)){
|
|
|
+ //退款异常
|
|
|
+ log.info("微信支付退款查询,微信返回退款异常");
|
|
|
+ }
|
|
|
+ return Result.success( "退款处理中");
|
|
|
} else {
|
|
|
- return Result.failure( "退款失败");
|
|
|
+ return Result.failure( "退款查询失败:"+ returnMsg);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|