Просмотр исходного кода

[收银台][修改]:券支付后为0时,直接完结订单

release_toaliyun_real
Stormeye Wu 6 лет назад
Родитель
Сommit
6ec4071a7b
3 измененных файлов: 108 добавлений и 22 удалений
  1. +49
    -22
      mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java
  2. +7
    -0
      mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java
  3. +52
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java

+ 49
- 22
mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java Просмотреть файл

@@ -365,15 +365,17 @@ public class WxMicroPayController extends BaseController {
logger.error("orderId不能为空"); logger.error("orderId不能为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "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)) { if (StringUtils.isBlank(payPriceStr)) {
logger.error("payPrice不能为空"); logger.error("payPrice不能为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "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); String ipStr = IPUtil.getIpAddr(request);


WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(user.getId()); WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(user.getId());
@@ -384,9 +386,7 @@ public class WxMicroPayController extends BaseController {
wxMerchantBUser.setBuserId(getBuserId()); wxMerchantBUser.setBuserId(getBuserId());


Long couponOrderId = 0L, orderId = 0L; 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 { try {
orderId = Long.valueOf(orderIdStr); orderId = Long.valueOf(orderIdStr);
} catch (NumberFormatException e) { } 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());
}
} }
} }
} }

+ 7
- 0
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); void handleMicroOrderPaySuccess(WxMerchantBUser user, WxPayOrder record, String transactionId, String openId, String isSubscribe);


/**
* 券支付成功处理
* @param user
* @param record
*/
void handleMicroOrderPaySuccessForVerify(WxMerchantBUser user, WxPayOrder record);

/** /**
* 支付状态处理 * 支付状态处理
* *


+ 52
- 0
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) { public void createMerchantSubsidy(WxPayOrder record, WxOrder order, Date curDate) {
final IdWorker idWorker = IdWorker.get(); final IdWorker idWorker = IdWorker.get();
WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy();


Загрузка…
Отмена
Сохранить