| @@ -4,14 +4,12 @@ import com.github.pagehelper.PageInfo; | |||||
| import com.simple.common.ErrorCode; | import com.simple.common.ErrorCode; | ||||
| import com.simple.common.Result; | import com.simple.common.Result; | ||||
| import com.simple.common.ResultData; | 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.enums.EnumPayWay; | ||||
| import com.simple.exception.MallinkException; | 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.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | import io.swagger.annotations.ApiImplicitParams; | ||||
| @@ -30,52 +28,79 @@ public class WxRefundOrderController extends BaseController { | |||||
| private Logger logger = Logger.getLogger(WxRefundOrderController.class); | private Logger logger = Logger.getLogger(WxRefundOrderController.class); | ||||
| @Autowired | @Autowired | ||||
| private WxCouponVerifyService wxCouponVerifyService; | |||||
| private WxCouponOrderService wxCouponOrderService; | |||||
| @Autowired | |||||
| private WxOrderService wxOrderService; | |||||
| @Autowired | |||||
| private WxPayOrderService wxPayOrderService; | |||||
| @Autowired | @Autowired | ||||
| private WxRefundOrderService wxRefundOrderService; | private WxRefundOrderService wxRefundOrderService; | ||||
| @ApiOperation(value = "发起退款", notes = "{\"couponOrderId\":,\"string\", \"orderId\":,\"string\"}") | |||||
| @ApiOperation(value = "发起退款", notes = "{\"orderId\":\"string\"}") | |||||
| @PostMapping("/create") | @PostMapping("/create") | ||||
| public ResultData create(@RequestBody Map<String, String> paramMap) { | public ResultData create(@RequestBody Map<String, String> paramMap) { | ||||
| // couponOrder发起退款 | // couponOrder发起退款 | ||||
| logger.info("/api/refund/create" + paramMap.toString()); | logger.info("/api/refund/create" + paramMap.toString()); | ||||
| //Assert.notNull(wxRefundOrder.getName(), "角色名不能为空"); | //Assert.notNull(wxRefundOrder.getName(), "角色名不能为空"); | ||||
| //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); | //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); | ||||
| String couponOrderIdStr = paramMap.get("couponOrderId"); | |||||
| String orderIdStr = paramMap.get("orderId"); | 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)) { | if (StringUtils.isBlank(orderIdStr)) { | ||||
| logger.error("orderId不能为空: " + paramMap.toString()); | logger.error("orderId不能为空: " + paramMap.toString()); | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | ||||
| } | } | ||||
| Long couponOrderId = 0L; | |||||
| Long orderId = 0L; | |||||
| try { | try { | ||||
| couponOrderId = Long.valueOf(couponOrderIdStr); | |||||
| orderId = Long.valueOf(orderIdStr); | |||||
| } catch (NumberFormatException e) { | } catch (NumberFormatException e) { | ||||
| logger.error("orderId参数不正确: " + paramMap.toString()); | logger.error("orderId参数不正确: " + paramMap.toString()); | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | ||||
| } | } | ||||
| Long orderId = 0L; | |||||
| WxOrder order = null; | |||||
| try { | 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(); | WxMerchantBUser bUser = getUser(); | ||||
| WxAppinfo appinfo = getAppInfo(bUser.getAppId()); | WxAppinfo appinfo = getAppInfo(bUser.getAppId()); | ||||
| try { | try { | ||||
| wxRefundOrderService.createRefundOrder(appinfo, refundOrder, EnumPayWay.PAY_WAY_WEAPP); | |||||
| wxRefundOrderService.createRefundOrder(appinfo, refundOrderQ, payOrder, EnumPayWay.PAY_WAY_WEAPP); | |||||
| return new ResultData(); | return new ResultData(); | ||||
| } catch (MallinkException e) { | } catch (MallinkException e) { | ||||
| logger.error(e.getMessage()); | logger.error(e.getMessage()); | ||||
| @@ -121,6 +121,7 @@ public enum ErrorCode{ | |||||
| /** | /** | ||||
| * 支付 | * 支付 | ||||
| */ | */ | ||||
| PAY_ORDER_NOT_FOUND(12000, "支付订单不存在"), | |||||
| PAY_ORDER_EXIST(12001, "支付订单已存在"), | PAY_ORDER_EXIST(12001, "支付订单已存在"), | ||||
| PAY_ORDER_ERROR(12002, "支付订单异常"), | PAY_ORDER_ERROR(12002, "支付订单异常"), | ||||
| PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR(12003 , "支付验签失败"), | PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR(12003 , "支付验签失败"), | ||||
| @@ -78,6 +78,14 @@ public interface WxPayOrderService { | |||||
| */ | */ | ||||
| WxPayOrder getById(Long id); | 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.github.pagehelper.PageInfo; | ||||
| import com.simple.common.ResultData; | import com.simple.common.ResultData; | ||||
| import com.simple.domain.po.WxAppinfo; | import com.simple.domain.po.WxAppinfo; | ||||
| import com.simple.domain.po.WxPayOrder; | |||||
| import com.simple.domain.po.WxRefundOrder; | import com.simple.domain.po.WxRefundOrder; | ||||
| import com.simple.enums.EnumPayWay; | import com.simple.enums.EnumPayWay; | ||||
| @@ -13,10 +14,11 @@ public interface WxRefundOrderService { | |||||
| * 创建退款订单 | * 创建退款订单 | ||||
| * @param appInfo | * @param appInfo | ||||
| * @param record 退款订单请求 | * @param record 退款订单请求 | ||||
| * @param payOrder 支付订单 | |||||
| * @param payWay | * @param payWay | ||||
| * @return | * @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); | 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 | @Override | ||||
| public void saveOrUpdate(WxPayOrder record) { | public void saveOrUpdate(WxPayOrder record) { | ||||
| if (record.getId() == null) { | if (record.getId() == null) { | ||||
| @@ -219,7 +219,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| "}"); | "}"); | ||||
| @Override | @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()); | WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId()); | ||||
| if (StringUtils.isBlank(payAccount.getApiKey())) { | if (StringUtils.isBlank(payAccount.getApiKey())) { | ||||
| logger.error("支付密钥为空"); | logger.error("支付密钥为空"); | ||||
| @@ -235,65 +235,25 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| logger.error("退款订单已存在, 无法再提交退款申请"); | logger.error("退款订单已存在, 无法再提交退款申请"); | ||||
| throw new MallinkException(ErrorCode.REFUND_ORDER_EXIST.getCode(), "退款订单已存在, 无法再提交退款申请"); | 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(); | final IdWorker idWorker = IdWorker.get(); | ||||
| Long id = idWorker.nextId(); | Long id = idWorker.nextId(); | ||||
| Date currentDate = new Date(); | 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 { | 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); | int sqlRow = wxRefundOrderMapper.insertSelective(record); | ||||
| if(sqlRow != 1) { | if(sqlRow != 1) { | ||||
| logger.error("退款订单数据库插入出错: " + record.toString()); | logger.error("退款订单数据库插入出错: " + record.toString()); | ||||