diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java index bd0e46644..43afdc9b3 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java @@ -365,15 +365,17 @@ public class WxMicroPayController extends BaseController { logger.error("orderId不能为空"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); } - if (StringUtils.isBlank(authCode)) { - logger.error("authCode不能为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "authCode不能为空"); - } if (StringUtils.isBlank(payPriceStr)) { logger.error("payPrice不能为空"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "payPrice不能为空"); } + BigDecimal totalFee = new BigDecimal(payPriceStr); + totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) + Integer payPrice = totalFee.multiply(new BigDecimal(100)).intValue(); + + + String ipStr = IPUtil.getIpAddr(request); WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(user.getId()); @@ -384,9 +386,7 @@ public class WxMicroPayController extends BaseController { wxMerchantBUser.setBuserId(getBuserId()); Long couponOrderId = 0L, orderId = 0L; - BigDecimal totalFee = new BigDecimal(payPriceStr); - totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) - Integer payPrice = totalFee.multiply(new BigDecimal(100)).intValue(); + try { orderId = Long.valueOf(orderIdStr); } catch (NumberFormatException e) { @@ -424,22 +424,49 @@ public class WxMicroPayController extends BaseController { } } - WxPayOrder record = new WxPayOrder(); - record.setTenantId(user.getTenantId()); - record.setOrderId(microOrder.getId()); - record.setCUserId(microOrder.getCUserId()); - record.setAuthCode(authCode); - record.setPayAmount(remainPrice); - record.setIp(ipStr); + if (remainPrice > 0) { + if (StringUtils.isBlank(authCode)) { + logger.error("authCode不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "authCode不能为空"); + } - try { - return wxPayOrderService.createMicroPayOrder(user, record, EnumPayWay.PAY_WAY_WECHAT); - } catch (MallinkException e) { - logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); - return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); + WxPayOrder record = new WxPayOrder(); + record.setTenantId(user.getTenantId()); + record.setOrderId(microOrder.getId()); + record.setCUserId(microOrder.getCUserId()); + record.setAuthCode(authCode); + record.setPayAmount(remainPrice); + record.setIp(ipStr); + + try { + return wxPayOrderService.createMicroPayOrder(user, record, EnumPayWay.PAY_WAY_WECHAT); + } catch (MallinkException e) { + logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); + } + } else { + // 支付完成 + WxPayOrder record = new WxPayOrder(); + record.setTenantId(user.getTenantId()); + record.setOrderId(microOrder.getId()); + record.setCUserId(microOrder.getCUserId()); + record.setPayAmount(remainPrice); + record.setIp(ipStr); + try { + wxPayOrderService.handleMicroOrderPaySuccessForVerify(user, record); + Map map = new HashMap(); + map.put("end", "1"); + return new ResultData(map); + } catch (MallinkException e) { + logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); + } } } } diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java index 333eb0a41..5c281dcb6 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java @@ -75,6 +75,13 @@ public interface WxPayOrderService { */ void handleMicroOrderPaySuccess(WxMerchantBUser user, WxPayOrder record, String transactionId, String openId, String isSubscribe); + /** + * 券支付成功处理 + * @param user + * @param record + */ + void handleMicroOrderPaySuccessForVerify(WxMerchantBUser user, WxPayOrder record); + /** * 支付状态处理 * diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 60c7997e6..bd660ed31 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -1440,6 +1440,58 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void handleMicroOrderPaySuccessForVerify(WxMerchantBUser user, WxPayOrder record) { + Date currentDate = new Date(); + + WxOrder order = wxOrderMapper.selectById(record.getOrderId()); + if (order == null) { + logger.error("pay success handle, order " + record.getOrderId() + " not found , payOrderid : " + record.getPayOrderNo()); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } + + WxAppinfo appinfo = wxAppinfoService.getCAppInfo(order.getTenantId()); + + if (record.getPayAmount().equals(0)) { + // B端收银台核销券处理 + WxPayOrder payOrderQ = new WxPayOrder(); + payOrderQ.setOrderId(order.getId()); + payOrderQ.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); + payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); + try { + WxPayOrder unPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(payOrderQ)); + if (unPayOrder != null) { + if (unPayOrder.getPosPayOrderId() != null) { + try { + wxCouponOrderService.microPayVerify(user, unPayOrder.getPosPayOrderId()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + // 更新后处理 + wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder.getTenantId(), unPayOrder.getPosPayOrderId(), user.getId()); + } + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + } else { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); + } + + // 修改订单状态 + try { + int _count = wxOrderService.microPayOrderSuccess(order); + if (_count > 1) { + logger.error("order micro pay count > 1"); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } + } catch (Exception e) { + logger.error("order status : " + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); + } + } + public void createMerchantSubsidy(WxPayOrder record, WxOrder order, Date curDate) { final IdWorker idWorker = IdWorker.get(); WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy();