| @@ -4,14 +4,12 @@ import com.github.pagehelper.PageInfo; | |||
| import com.simple.common.ErrorCode; | |||
| import com.simple.common.Result; | |||
| import com.simple.common.ResultData; | |||
| import com.simple.domain.po.WxAppinfo; | |||
| import com.simple.domain.po.WxCouponVerify; | |||
| import com.simple.domain.po.WxMerchantBUser; | |||
| import com.simple.domain.po.WxRefundOrder; | |||
| import com.simple.domain.po.*; | |||
| import com.simple.enums.EnumCouponOrderStatus; | |||
| import com.simple.enums.EnumPayStatus; | |||
| import com.simple.enums.EnumPayWay; | |||
| import com.simple.exception.MallinkException; | |||
| import com.simple.service.WxCouponVerifyService; | |||
| import com.simple.service.WxRefundOrderService; | |||
| import com.simple.service.*; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| @@ -30,52 +28,79 @@ public class WxRefundOrderController extends BaseController { | |||
| private Logger logger = Logger.getLogger(WxRefundOrderController.class); | |||
| @Autowired | |||
| private WxCouponVerifyService wxCouponVerifyService; | |||
| private WxCouponOrderService wxCouponOrderService; | |||
| @Autowired | |||
| private WxOrderService wxOrderService; | |||
| @Autowired | |||
| private WxPayOrderService wxPayOrderService; | |||
| @Autowired | |||
| private WxRefundOrderService wxRefundOrderService; | |||
| @ApiOperation(value = "发起退款", notes = "{\"couponOrderId\":,\"string\", \"orderId\":,\"string\"}") | |||
| @ApiOperation(value = "发起退款", notes = "{\"orderId\":\"string\"}") | |||
| @PostMapping("/create") | |||
| public ResultData create(@RequestBody Map<String, String> paramMap) { | |||
| // couponOrder发起退款 | |||
| logger.info("/api/refund/create" + paramMap.toString()); | |||
| //Assert.notNull(wxRefundOrder.getName(), "角色名不能为空"); | |||
| //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); | |||
| String couponOrderIdStr = paramMap.get("couponOrderId"); | |||
| String orderIdStr = paramMap.get("orderId"); | |||
| if (StringUtils.isBlank(couponOrderIdStr)) { | |||
| logger.error("couponOrderId不能为空: " + paramMap.toString()); | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| if (StringUtils.isBlank(orderIdStr)) { | |||
| logger.error("orderId不能为空: " + paramMap.toString()); | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| Long couponOrderId = 0L; | |||
| Long orderId = 0L; | |||
| try { | |||
| couponOrderId = Long.valueOf(couponOrderIdStr); | |||
| orderId = Long.valueOf(orderIdStr); | |||
| } catch (NumberFormatException e) { | |||
| logger.error("orderId参数不正确: " + paramMap.toString()); | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| } | |||
| Long orderId = 0L; | |||
| WxOrder order = null; | |||
| try { | |||
| orderId = Long.valueOf(orderIdStr); | |||
| } catch (NumberFormatException e) { | |||
| logger.error("orderId参数不正确: " + paramMap.toString()); | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||
| 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 refundOrder = new WxRefundOrder(); | |||
| //refundOrder.setPayOrderNo(payOrderIdStr); | |||
| refundOrder.setOrderId(orderId); | |||
| WxRefundOrder refundOrderQ = new WxRefundOrder(); | |||
| refundOrderQ.setPayOrderNo(String.valueOf(payOrder.getId())); | |||
| refundOrderQ.setOrderId(orderId); | |||
| WxMerchantBUser bUser = getUser(); | |||
| WxAppinfo appinfo = getAppInfo(bUser.getAppId()); | |||
| try { | |||
| wxRefundOrderService.createRefundOrder(appinfo, refundOrder, EnumPayWay.PAY_WAY_WEAPP); | |||
| wxRefundOrderService.createRefundOrder(appinfo, refundOrderQ, payOrder, EnumPayWay.PAY_WAY_WEAPP); | |||
| return new ResultData(); | |||
| } catch (MallinkException e) { | |||
| logger.error(e.getMessage()); | |||
| @@ -121,6 +121,7 @@ public enum ErrorCode{ | |||
| /** | |||
| * 支付 | |||
| */ | |||
| PAY_ORDER_NOT_FOUND(12000, "支付订单不存在"), | |||
| PAY_ORDER_EXIST(12001, "支付订单已存在"), | |||
| PAY_ORDER_ERROR(12002, "支付订单异常"), | |||
| PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR(12003 , "支付验签失败"), | |||
| @@ -78,6 +78,14 @@ public interface WxPayOrderService { | |||
| */ | |||
| WxPayOrder getById(Long id); | |||
| /** | |||
| * 根据obj获得实体 | |||
| * | |||
| * @param payOrder | |||
| * @return | |||
| */ | |||
| WxPayOrder getByObj(WxPayOrder payOrder); | |||
| /** | |||
| @@ -4,6 +4,7 @@ import java.util.*; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.simple.common.ResultData; | |||
| import com.simple.domain.po.WxAppinfo; | |||
| import com.simple.domain.po.WxPayOrder; | |||
| import com.simple.domain.po.WxRefundOrder; | |||
| import com.simple.enums.EnumPayWay; | |||
| @@ -13,10 +14,11 @@ public interface WxRefundOrderService { | |||
| * 创建退款订单 | |||
| * @param appInfo | |||
| * @param record 退款订单请求 | |||
| * @param payOrder 支付订单 | |||
| * @param payWay | |||
| * @return | |||
| */ | |||
| ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, EnumPayWay payWay); | |||
| ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, WxPayOrder payOrder, EnumPayWay payWay); | |||
| /** | |||
| * 退款订单查询 | |||
| @@ -463,6 +463,15 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| return wxPayOrderMapper.selectByPrimaryKey(id); | |||
| } | |||
| @Override | |||
| public WxPayOrder getByObj(WxPayOrder payOrderQ) { | |||
| List<WxPayOrder> list = wxPayOrderMapper.findList(payOrderQ); | |||
| if (list.size() > 0) { | |||
| return list.get(0); | |||
| } | |||
| return null; | |||
| } | |||
| @Override | |||
| public void saveOrUpdate(WxPayOrder record) { | |||
| if (record.getId() == null) { | |||
| @@ -219,7 +219,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||
| "}"); | |||
| @Override | |||
| public ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, EnumPayWay payWay) { | |||
| public ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, WxPayOrder payOrder, EnumPayWay payWay) { | |||
| WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId()); | |||
| if (StringUtils.isBlank(payAccount.getApiKey())) { | |||
| logger.error("支付密钥为空"); | |||
| @@ -235,65 +235,25 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||
| logger.error("退款订单已存在, 无法再提交退款申请"); | |||
| throw new MallinkException(ErrorCode.REFUND_ORDER_EXIST.getCode(), "退款订单已存在, 无法再提交退款申请"); | |||
| } | |||
| // check 支付 订单 | |||
| WxPayOrder payOrder = null; | |||
| Long payOrderId = 0L; | |||
| try { | |||
| payOrderId = Long.valueOf(record.getPayOrderNo()); | |||
| } catch (NumberFormatException e) { | |||
| logger.error("参数转换异常: payOrderId-" + record.getPayOrderNo()); | |||
| throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "参数转换异常: payOrderId-" + record.getPayOrderNo()); | |||
| } | |||
| try { | |||
| WxPayOrder payOrderQ = new WxPayOrder(); | |||
| payOrderQ.setOrderId(record.getOrderId()); | |||
| payOrderQ.setId(payOrderId); | |||
| payOrderQ.setPayOrderNo(record.getPayOrderNo()); | |||
| payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode()); | |||
| List<WxPayOrder> payOrderList = wxPayOrderMapper.findList(payOrderQ); | |||
| if (payOrderList.size() > 0) { | |||
| payOrder = payOrderList.get(0); | |||
| } | |||
| } catch (Exception e) { | |||
| logger.error("数据库获取异常: " + e.getMessage()); | |||
| throw new MallinkException(ErrorCode.DB_FAIL); | |||
| } | |||
| if (payOrder == null) { | |||
| logger.error("支付订单不存在: " + record.toString()); | |||
| throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_NOT_EXIST); | |||
| } | |||
| if (payOrder.getPayAmount() <= 0) { | |||
| logger.error("支付订单金额小于等于0: " + record.toString()); | |||
| throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); | |||
| } | |||
| // 检查 是否已核销, 已核销不能退款 | |||
| /* | |||
| WxOrder order = wxOrderMapper.selectByPrimaryKey(payOrder.getOrderId()); | |||
| WxCouponVerify couponVerifyQ = new WxCouponVerify(); | |||
| couponVerifyQ.setCouponId(payOrder.getOrderId()); | |||
| WxCouponVerify couponVerify = wxCouponVerifyMapper.select() | |||
| */ | |||
| // 创建退款订单 | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| Long id = idWorker.nextId(); | |||
| Date currentDate = new Date(); | |||
| record.setId(id); | |||
| record.setTenantId(appInfo.getTenantId()); | |||
| record.setCreateTime(currentDate); | |||
| record.setUpdateTime(currentDate); | |||
| record.setTransactionId(payOrder.getTransactionId()); | |||
| record.setCUserId(payOrder.getCUserId()); | |||
| record.setTotalFee(payOrder.getPayAmount()); | |||
| record.setRefundFee(payOrder.getPayAmount()); | |||
| record.setRefundTimeStart(currentDate); | |||
| record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode()); | |||
| // 退款订单 | |||
| try { | |||
| record.setId(id); | |||
| record.setTenantId(appInfo.getTenantId()); | |||
| record.setCreateTime(currentDate); | |||
| record.setUpdateTime(currentDate); | |||
| record.setTransactionId(payOrder.getTransactionId()); | |||
| record.setCUserId(payOrder.getCUserId()); | |||
| record.setTotalFee(payOrder.getPayAmount()); | |||
| record.setRefundFee(payOrder.getPayAmount()); | |||
| record.setRefundTimeStart(currentDate); | |||
| record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode()); | |||
| int sqlRow = wxRefundOrderMapper.insertSelective(record); | |||
| if(sqlRow != 1) { | |||
| logger.error("退款订单数据库插入出错: " + record.toString()); | |||