package com.simple.controller; import com.github.pagehelper.PageInfo; import com.simple.common.ErrorCode; import com.simple.common.Result; import com.simple.common.ResultData; import com.simple.config.PayProperty; import com.simple.domain.po.*; import com.simple.enums.EnumPayStatus; import com.simple.enums.EnumPayWay; import com.simple.exception.MallinkException; import com.simple.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Map; @RestController @RequestMapping("/api/refund") @Api(description="退款相关接口") public class WxRefundOrderController extends BaseController { private Logger logger = Logger.getLogger(WxRefundOrderController.class); @Autowired private PayProperty payProperty; @Autowired private WxCouponOrderService wxCouponOrderService; @Autowired private WxOrderService wxOrderService; @Autowired private WxPayOrderService wxPayOrderService; @Autowired private WxRefundOrderService wxRefundOrderService; @ApiOperation(value = "发起退款", notes = "{\"orderId\":\"string\"}") @PostMapping("/create") public ResultData create(@RequestBody Map paramMap) { // couponOrder发起退款 logger.info("/api/refund/create" + paramMap.toString()); //Assert.notNull(wxRefundOrder.getName(), "角色名不能为空"); //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); String orderIdStr = paramMap.get("orderId"); if (StringUtils.isBlank(orderIdStr)) { logger.error("orderId不能为空: " + paramMap.toString()); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } Long orderId = 0L; try { orderId = Long.valueOf(orderIdStr); } catch (NumberFormatException e) { logger.error("orderId参数不正确: " + paramMap.toString()); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } WxOrder order = null; try { order = wxOrderService.getById(orderId); } catch (Exception e) { logger.error("订单不存在: " + orderIdStr); return new ResultData(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "订单不存在: " + orderIdStr); } if (order == null) { logger.error("订单不存在: " + orderIdStr); return new ResultData(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "订单不存在: " + orderIdStr); } if (order.getPayment() <= 0) { logger.error("订单支付金额小于等于0: " + order.toString()); throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); } WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.setCUserId(order.getCUserId()); payOrderQ.setOrderId(orderId); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode()); WxPayOrder payOrder = null; try { payOrder = wxPayOrderService.getByObj(payOrderQ); } catch (Exception e) { logger.error("payOrder不存在"); return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND.getCode(), "支付订单不存在,无法退款"); } if (payOrder == null) { logger.error("payOrder不存在"); return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND.getCode(), "支付订单不存在,无法退款"); } WxRefundOrder refundOrderQ = new WxRefundOrder(); refundOrderQ.setPayOrderNo(String.valueOf(payOrder.getId())); refundOrderQ.setOrderId(orderId); WxMerchantBUser bUser = getUser(); WxAppinfo appinfo = getAppInfo(bUser.getAppId()); try { wxRefundOrderService.createRefundOrder(payProperty.isReal(), appinfo, refundOrderQ, payOrder, EnumPayWay.PAY_WAY_WEAPP); return new ResultData(); } catch (MallinkException e) { logger.error(e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { logger.error(e.getMessage()); return new ResultData(ErrorCode.REFUND_ORDER_ERROR); } } @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) public ResultData list(@ModelAttribute WxRefundOrder wxRefundOrder, Integer pageNum, Integer pageSize) { if (null == wxRefundOrder) wxRefundOrder = new WxRefundOrder(); final PageInfo page = wxRefundOrderService.listAsPage(wxRefundOrder, pageNum, pageSize); return new ResultData(page); } @ApiOperation("根据id查询接口") @GetMapping("/findById") @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) public ResultData findById(Long id) { return new ResultData(Result.SUCCESS, "查询成功", wxRefundOrderService.getById(id)); } }