|
|
|
@@ -180,82 +180,109 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { |
|
|
|
isShare = EnumPayShare.YES; |
|
|
|
} |
|
|
|
|
|
|
|
// 1.5 检查是否有已支付订单 |
|
|
|
{ |
|
|
|
WxPayOrder payOrderParams = new WxPayOrder(); |
|
|
|
payOrderParams.setOrderId(order.getId()); |
|
|
|
payOrderParams.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); |
|
|
|
QueryWrapper<WxPayOrder> queryWrapper = new QueryWrapper<>(); |
|
|
|
queryWrapper.setEntity(payOrderParams); |
|
|
|
int count = wxPayOrderMapper.selectCount(queryWrapper); |
|
|
|
if (count > 0) { |
|
|
|
logger.error("已支付>>>" + order); |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_EXIST); |
|
|
|
} |
|
|
|
} |
|
|
|
// // 1.5 检查是否有已支付订单 |
|
|
|
// { |
|
|
|
// WxPayOrder payOrderParams = new WxPayOrder(); |
|
|
|
// payOrderParams.setOrderId(order.getId()); |
|
|
|
// payOrderParams.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); |
|
|
|
// QueryWrapper<WxPayOrder> queryWrapper = new QueryWrapper<>(); |
|
|
|
// queryWrapper.setEntity(payOrderParams); |
|
|
|
// int count = wxPayOrderMapper.selectCount(queryWrapper); |
|
|
|
// if (count > 0) { |
|
|
|
// logger.error("已支付>>>" + order); |
|
|
|
// throw new MallinkException(ErrorCode.PAY_ORDER_EXIST); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// /*设置进入分账,待分账时再判断是否存在对应的分账账户 |
|
|
|
// // 1.5 check 分账 receive |
|
|
|
// if (isShare == EnumPayShare.YES) { |
|
|
|
// WxProfitSharingReceiver receiver = new WxProfitSharingReceiver(); |
|
|
|
// receiver.setMerchantId(order.getMerchantId()); |
|
|
|
// List<WxProfitSharingReceiver> merList = wxProfitSharingReceiverMapper.findList(receiver); |
|
|
|
// if (merList.size() > 0) { |
|
|
|
// isShare = EnumPayShare.YES; |
|
|
|
// } else { |
|
|
|
// isShare = EnumPayShare.NO; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// */ |
|
|
|
// |
|
|
|
// //支付中的订单, 都是已经点过支付的订单,要等微信通知更新,不能再操作。 |
|
|
|
// record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); |
|
|
|
// List<WxPayOrder> list = wxPayOrderMapper.findList(record); |
|
|
|
// if (list.size() > 0) { |
|
|
|
// logger.error("支付状态等待微信同步中>>>" + order); |
|
|
|
// throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单支付状态等待微信同步中"); |
|
|
|
// // 3.0 已有支付订单,关闭之前的 |
|
|
|
// //payOrderClose(appInfo, list.get(0)); |
|
|
|
// } |
|
|
|
|
|
|
|
/*设置进入分账,待分账时再判断是否存在对应的分账账户 |
|
|
|
// 1.5 check 分账 receive |
|
|
|
if (isShare == EnumPayShare.YES) { |
|
|
|
WxProfitSharingReceiver receiver = new WxProfitSharingReceiver(); |
|
|
|
receiver.setMerchantId(order.getMerchantId()); |
|
|
|
List<WxProfitSharingReceiver> merList = wxProfitSharingReceiverMapper.findList(receiver); |
|
|
|
if (merList.size() > 0) { |
|
|
|
isShare = EnumPayShare.YES; |
|
|
|
} else { |
|
|
|
isShare = EnumPayShare.NO; |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
// 2. check 是否有支付中订单 |
|
|
|
Date currentDate = new Date(); |
|
|
|
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); |
|
|
|
List<WxPayOrder> list = wxPayOrderMapper.findList(record); |
|
|
|
String payOrderNo = ""; |
|
|
|
if (list.size() > 0) { |
|
|
|
// 3.0 已有支付订单,关闭之前的 |
|
|
|
payOrderClose(appInfo, list.get(0)); |
|
|
|
//一个订单只有一条支付记录。 |
|
|
|
List<WxPayOrder> list = wxPayOrderMapper.findList(record); |
|
|
|
WxPayOrder oldRecord = null; |
|
|
|
if (null != list && list.size() > 0) { |
|
|
|
oldRecord = list.get(0); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
// 3.1 创建支付订单 |
|
|
|
Long id = idworker.nextId(); |
|
|
|
payOrderNo = String.valueOf(id); |
|
|
|
record.setId(id); |
|
|
|
record.updateTenantInfo(order); |
|
|
|
record.setCUserId(user.getId()); |
|
|
|
record.setCreateTime(currentDate); |
|
|
|
record.setUpdateTime(currentDate); |
|
|
|
record.setPayTimeStart(currentDate); |
|
|
|
record.setPayTimeEnd(currentDate); |
|
|
|
// 支付单号 |
|
|
|
record.setPayOrderNo(payOrderNo); |
|
|
|
record.setPayAmount(order.getPayment()); |
|
|
|
record.setPayVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); |
|
|
|
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); |
|
|
|
record.setShare(isShare.getCode()); |
|
|
|
if (isShare == EnumPayShare.YES) { |
|
|
|
// 分账金额 |
|
|
|
int iChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRate(), false); |
|
|
|
Integer share_amount = record.getPayAmount() - iChargeFee; |
|
|
|
record.setShareAmount(share_amount); |
|
|
|
if(payAccount.getRealRate() != null) { |
|
|
|
int iRealChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRealRate(), true); |
|
|
|
if(iChargeFee > iRealChargeFee) { |
|
|
|
record.setRateAmount(iChargeFee - iRealChargeFee); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int sqlRow = wxPayOrderMapper.insert(record); |
|
|
|
if (sqlRow != 1) { |
|
|
|
logger.error("pay order insert error: " + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL); |
|
|
|
|
|
|
|
if (null != oldRecord) { |
|
|
|
//如果是已经支付成功,则不能再次支付。如果是支付中的,也不能再次支付,等待微信同步结果 |
|
|
|
if (oldRecord.getPayOrderStatus()==EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) { |
|
|
|
logger.error("已支付>>>" + order); |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_EXIST); |
|
|
|
}else if (oldRecord.getPayOrderStatus()==EnumPayStatus.PAY_STATUS_WAIT.getCode()) { |
|
|
|
logger.error("支付中,等待微信同步状态>>>" + order); |
|
|
|
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单支付中,等待微信同步状态"); |
|
|
|
}else { |
|
|
|
//如果是其他状态的,可以重复支付,把状态更新为支付中,不再新增订单 |
|
|
|
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); |
|
|
|
int sqlRow0 = wxPayOrderMapper.updateById(oldRecord); |
|
|
|
if (sqlRow0 != 1) { |
|
|
|
logger.error("pay order update error: " + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL); |
|
|
|
} |
|
|
|
record = oldRecord; |
|
|
|
} |
|
|
|
}else { |
|
|
|
{ |
|
|
|
// 3.1 创建支付订单 |
|
|
|
Long id = idworker.nextId(); |
|
|
|
payOrderNo = String.valueOf(id); |
|
|
|
record.setId(id); |
|
|
|
record.updateTenantInfo(order); |
|
|
|
record.setCUserId(user.getId()); |
|
|
|
record.setCreateTime(currentDate); |
|
|
|
record.setUpdateTime(currentDate); |
|
|
|
record.setPayTimeStart(currentDate); |
|
|
|
record.setPayTimeEnd(currentDate); |
|
|
|
// 支付单号 |
|
|
|
record.setPayOrderNo(payOrderNo); |
|
|
|
record.setPayAmount(order.getPayment()); |
|
|
|
record.setPayVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); |
|
|
|
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); |
|
|
|
record.setShare(isShare.getCode()); |
|
|
|
if (isShare == EnumPayShare.YES) { |
|
|
|
// 分账金额 |
|
|
|
int iChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRate(), false); |
|
|
|
Integer share_amount = record.getPayAmount() - iChargeFee; |
|
|
|
record.setShareAmount(share_amount); |
|
|
|
if(payAccount.getRealRate() != null) { |
|
|
|
int iRealChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRealRate(), true); |
|
|
|
if(iChargeFee > iRealChargeFee) { |
|
|
|
record.setRateAmount(iChargeFee - iRealChargeFee); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int sqlRow = wxPayOrderMapper.insert(record); |
|
|
|
if (sqlRow != 1) { |
|
|
|
logger.error("pay order insert error: " + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (payAccount.getType() == EnumPayMode.MCH.getCode()) { |
|
|
|
// 统一下单 普通商户模式 |
|
|
|
String noncestr = Utility.generate32UUID(); |
|
|
|
|