Authored by Lixiaodi

转账相关代码

... ... @@ -66,16 +66,6 @@
delete from trade_bills
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.yohoufo.dal.order.model.TradeBills" >
insert into trade_bills (id, uid, order_code,
user_type, pay_type, trade_type,
income_outcome, amount, system_amount,
trade_status, create_time)
values (#{id,jdbcType=INTEGER}, #{uid,jdbcType=INTEGER}, #{orderCode,jdbcType=BIGINT},
#{userType,jdbcType=INTEGER}, #{payType,jdbcType=INTEGER}, #{tradeType,jdbcType=INTEGER},
#{incomeOutcome,jdbcType=INTEGER}, #{amount,jdbcType=DECIMAL}, #{systemAmount,jdbcType=DECIMAL},
#{tradeStatus,jdbcType=INTEGER}, #{createTime,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.yohoufo.dal.order.model.TradeBills" >
insert into trade_bills
<trim prefix="(" suffix=")" suffixOverrides="," >
... ...
... ... @@ -19,6 +19,8 @@ public class OrderInfo {
private Integer id;
private Integer uid;
private Integer sellerUid;
private Long orderCode;
... ...
... ... @@ -189,6 +189,7 @@ public class BuyerOrderPaymentService extends AbstractOrderPaymentService {
OrderInfo orderInfo = OrderInfo.builder()
.id(buyerOrder.getId())
.uid(buyerOrder.getUid())
.sellerUid(buyerOrder.getSellerUid())
.orderCode(buyerOrder.getOrderCode())
.payment(buyerOrder.getPayment())
.status(buyerOrder.getStatus())
... ...
... ... @@ -26,6 +26,7 @@ import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.SellerOrderMetaMapper;
import com.yohoufo.dal.order.TradeBillsMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.BuyerOrderGoods;
import com.yohoufo.dal.order.model.OrdersPay;
import com.yohoufo.dal.order.model.OrdersPayRefund;
import com.yohoufo.dal.order.model.OrdersPayTransfer;
... ... @@ -264,6 +265,28 @@ public class PaymentServiceImpl implements IPaymentService {
ordersPay.setAttach(attach.toJSONString());
ordersPayDao.insertSelective(ordersPay);
// 支付方式适配
Integer recordPayment = orderInfo.getPayment();
if (recordPayment != null && recordPayment == 1) {
if (recordPayment == 1) {
recordPayment = 2;
} else if (recordPayment == 2) {
recordPayment = 1;
}
}
if (codeMeta.getType() == OrderCodeType.BUYER_TYPE.getType()) {
BuyerOrderGoods goods = buyerOrderGoodsMapper.selectByOrderCode(orderInfo.getUid(), orderCode);
if (goods == null) {
logger.warn("支持回调记录流水,发现卖家商品表没有数据, orderCode is {}", orderCode);
return;
}
addPayBuyRecord(orderInfo.getUid(), orderInfo.getSellerUid(), goods.getSkup(), orderCode, recordPayment,
ordersPay.getAmount());
} else {
addPayEnsureRecord(orderInfo.getUid(), orderInfo.getSkup(), orderCode, recordPayment,
ordersPay.getAmount());
}
logger.info("paySuccess finished. orderCode is {}", orderCode);
}
... ... @@ -404,45 +427,45 @@ public class PaymentServiceImpl implements IPaymentService {
logger.info("transferMon参数检查");
// 订单号check
if (buyerOrderCode < 1 || sellerOrderCode < 1) {
logger.warn("transferMon orderCode empty");
logger.warn("transferMonErr orderCode empty");
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
}
// 类型检查
if (transferType < 1 || transferType > 3) {
logger.warn("transferType invalid");
logger.warn("transferMonErr transferType invalid");
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
}
// 买家订单检查
BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(buyerOrderCode);
if (buyerOrder == null) {
logger.warn("getOrderInfo buyer order not exist, orderCode is {}", buyerOrderCode);
logger.warn("transferMonErr getOrderInfo buyer order not exist, orderCode is {}", buyerOrderCode);
throw new ServiceException(ServiceError.ORDER_NULL);
}
// 卖家订单检查
SellerOrder sellerOrder = sellerOrderMapper.selectByOrderCode(sellerOrderCode);
if (sellerOrder == null){
logger.warn("getOrderInfo seller order not exist, orderCode is {}", sellerOrderCode);
logger.warn("transferMonErr getOrderInfo seller order not exist, orderCode is {}", sellerOrderCode);
throw new ServiceException(ServiceError.ORDER_NULL);
}
// 查看是否已经有转账记录
OrdersPayTransfer exist = ordersPayTransferMapper.selectByBuyerOrderCode(buyerOrderCode);
if (exist != null) {
logger.warn("getOrderInfo order not exist, orderCode is {}", buyerOrderCode);
logger.warn("transferMonErr getOrderInfo order not exist, orderCode is {}", buyerOrderCode);
throw new ServiceException(400, "订单已经处理过");
}
Integer targetUid = transferType == 1 ? sellerOrder.getUid() : buyerOrder.getUid();
if (targetUid == null || targetUid < 1) {
logger.warn("uid {} 不合法", targetUid);
logger.warn("transferMonErr uid {} 不合法", targetUid);
throw new ServiceException(400, "uid[" + targetUid + "]不合法");
}
String alipayAccount = getAlipayAccount(targetUid);
if (StringUtils.isBlank(alipayAccount)) {
logger.warn("uid {} 没有获取到有效的支付宝账号", targetUid);
logger.warn("transferMonErr uid {} 没有获取到有效的支付宝账号", targetUid);
throw new ServiceException(400, "uid[" + targetUid + "]没有获取到有效的支付宝账号");
}
logger.info("transferMon参数检查成功!");
... ... @@ -465,7 +488,7 @@ public class PaymentServiceImpl implements IPaymentService {
logger.info("transferMon插入初始化转账信息buyerOrderCode is {}", buyerOrderCode);
ordersPayTransferMapper.insert(transfer);
} catch (Exception e) {
logger.warn("insert ordersPayTransfer failed, orderCode is {}, msg is {}", buyerOrderCode, e.getMessage());
logger.warn("transferMonErr insert ordersPayTransfer failed, orderCode is {}, msg is {}", buyerOrderCode, e.getMessage());
throw new ServiceException(400, "交易记录创建失败");
}
... ... @@ -474,7 +497,7 @@ public class PaymentServiceImpl implements IPaymentService {
BigDecimal transferAmount = calcTransferAmount(sellerOrder.getUid(), sellerOrder.getSkup(), transferType);
logger.info("transferMon计算费用结果为 {}", transferAmount);
if (transferAmount == null || transferAmount.compareTo(new BigDecimal("0.1")) < 0) {
logger.warn("transferMon计算费用结果为 {}, 不合法的金额", transferAmount);
logger.warn("transferMonErr transferMon计算费用结果为 {}, 不合法的金额", transferAmount);
throw new ServiceException(400, "不合法的金额");
}
transfer.setAmount(transferAmount);
... ... @@ -484,7 +507,7 @@ public class PaymentServiceImpl implements IPaymentService {
logger.info("transferMon开始调用阿里接口参数buyerOrderCode={}, alipayAccount={}, transferAmount={}", buyerOrderCode, alipayAccount, transferAmount);
JSONObject jsonObject = alipayService.transferMoney(Long.toString(buyerOrderCode), alipayAccount, transferAmount);
if (jsonObject == null) {
logger.warn("转账失败 , orderCode is {}", buyerOrderCode);
logger.warn("transferMonErr 转账失败 , orderCode is {}", buyerOrderCode);
transfer.setStatus(3);
throw new ServiceException(500, "转账失败");
}
... ... @@ -500,12 +523,12 @@ public class PaymentServiceImpl implements IPaymentService {
transfer.setAlipayTradeId(orderId);
transfer.setStatus(1);
} else {
logger.warn("返回code或者order_id不是成功状态,code={}, orderId={}", code, orderId);
logger.warn("transferMonErr 返回code或者order_id不是成功状态,code={}, orderId={}", code, orderId);
transfer.setStatus(3);
}
} catch (Exception e) {
transfer.setStatus(3);
logger.warn("转账失败 , orderCode is {}, msg is {}", buyerOrderCode, e.getMessage());
logger.warn("transferMonErr 转账失败 , orderCode is {}, msg is {}", buyerOrderCode, e.getMessage());
throw new ServiceException(500, "转账失败");
} finally {
logger.info("transferMon最后更新状态 status= {}", transfer.getStatus());
... ... @@ -526,16 +549,21 @@ public class PaymentServiceImpl implements IPaymentService {
record.setAmount(transferAmount);
// 因为转账支付宝扣费累计计算,使用转账额
record.setSystemAmount(transferAmount.multiply(new BigDecimal("-1")));
record.setTradeStatus(1);
record.setTradeStatus(transferType == 1 ? 0 : 1);
record.setCreateTime(now);
tradeBillsMapper.insert(record);
} catch (Exception e) {
logger.error("记录交易到数据库出错 err={}, rec = {}", e.getMessage(), record);
logger.error("PayRecordErr记录交易到数据库出错 err={}, rec = {}", e.getMessage(), record);
}
}
// 支付保证金流水记录
public void addPayEnsureRecord(Integer uid, Integer skup, Long orderCode, Integer payType, BigDecimal amount) {
SellerOrderMeta meta = sellerOrderMetaMapper.selectByMetaKey(uid, skup, "fee");
if (meta == null) {
logger.error("PayRecordErr记录交易到数据库出错 err=meta费率信息未查到, uid = {}, skup={}", uid, skup);
return;
}
// 增加流水记录
TradeBills record = new TradeBills();
try {
... ... @@ -546,17 +574,30 @@ public class PaymentServiceImpl implements IPaymentService {
record.setTradeType(1);//1:保证金;2:货款;3:补偿款
record.setIncomeOutcome(2);// 1:用户收入; 2:用户支出
record.setAmount(amount);
record.setSystemAmount(amount.multiply(new BigDecimal("-1")));// 有货收入
try {
JSONObject metavalue = JSON.parseObject(meta.getMetaValue());
BigDecimal rate = metavalue.getJSONObject("serviceFeeRate").getBigDecimal("payChannelRate");
amount = amount.multiply(BigDecimal.ONE.subtract(rate));
} catch (Exception e) {
logger.error("PayRecordErr计费信息不完整, uid is {}, skup is {}, err is {}", uid, skup, e.getMessage());
return;
}
record.setSystemAmount(amount);// 有货收入
record.setTradeStatus(0);//0:订单未完结;1:订单完结
record.setCreateTime((int) (System.currentTimeMillis() / 1000));
tradeBillsMapper.insert(record);
} catch (Exception e) {
logger.error("记录交易到数据库出错 err={}, rec = {}", e.getMessage(), record);
logger.error("PayRecordErr记录交易到数据库出错 err={}, rec = {}", e.getMessage(), record);
}
}
// 支付货款流水记录
public void addPayBuyRecord(Integer uid, Long orderCode, Integer payType, BigDecimal amount) {
public void addPayBuyRecord(Integer uid, Integer sellerUid, Integer skup, Long orderCode, Integer payType, BigDecimal amount) {
SellerOrderMeta meta = sellerOrderMetaMapper.selectByMetaKey(sellerUid, skup, "fee");
if (meta == null) {
logger.error("PayRecordErr记录交易到数据库出错 err=meta费率信息未查到, selleruid = {}, skup={}", sellerUid, skup);
return;
}
// 增加流水记录
TradeBills record = new TradeBills();
try {
... ... @@ -566,8 +607,84 @@ public class PaymentServiceImpl implements IPaymentService {
record.setPayType(payType);// 1:支付宝; 2:微信
record.setTradeType(2);//1:保证金;2:货款;3:补偿款
record.setIncomeOutcome(2);// 1:用户收入; 2:用户支出
try {
JSONObject metavalue = JSON.parseObject(meta.getMetaValue());
BigDecimal rate = metavalue.getJSONObject("serviceFeeRate").getBigDecimal("payChannelRate");
amount = amount.multiply(BigDecimal.ONE.subtract(rate));
} catch (Exception e) {
logger.error("PayRecordErr计费信息不完整, uid is {}, skup is {}, err is {}", uid, skup, e.getMessage());
return;
}
record.setAmount(amount);
record.setSystemAmount(amount);// 有货收入
record.setTradeStatus(0);//0:订单未完结;1:订单完结
record.setCreateTime((int) (System.currentTimeMillis() / 1000));
tradeBillsMapper.insert(record);
} catch (Exception e) {
logger.error("记录交易到数据库出错 err={}, rec = {}", e.getMessage(), record);
}
}
// 退保证金流水记录
public void backPayEnsureRecord(Integer uid, Integer skup, Long orderCode, Integer payType, BigDecimal amount) {
SellerOrderMeta meta = sellerOrderMetaMapper.selectByMetaKey(uid, skup, "fee");
if (meta == null) {
logger.error("PayRecordErr记录交易到数据库出错 err=meta费率信息未查到, uid = {}, skup={}", uid, skup);
return;
}
// 增加流水记录
TradeBills record = new TradeBills();
try {
record.setUid(uid);
record.setOrderCode(orderCode);
record.setUserType(2);// 1:买家uid; 2:卖家uid
record.setPayType(payType);// 1:支付宝; 2:微信
record.setTradeType(1);//1:保证金;2:货款;3:补偿款
record.setIncomeOutcome(1);// 1:用户收入; 2:用户支出
record.setAmount(amount);
try {
JSONObject metavalue = JSON.parseObject(meta.getMetaValue());
BigDecimal rate = metavalue.getJSONObject("serviceFeeRate").getBigDecimal("payChannelRate");
amount = amount.multiply(BigDecimal.ONE.subtract(rate)).multiply(new BigDecimal("-1"));
} catch (Exception e) {
logger.error("PayRecordErr计费信息不完整, uid is {}, skup is {}, err is {}", uid, skup, e.getMessage());
return;
}
record.setSystemAmount(amount);// 有货收入
record.setTradeStatus(1);//0:订单未完结;1:订单完结
record.setCreateTime((int) (System.currentTimeMillis() / 1000));
tradeBillsMapper.insert(record);
} catch (Exception e) {
logger.error("PayRecordErr记录交易到数据库出错 err={}, rec = {}", e.getMessage(), record);
}
}
// 退付货款流水记录
public void backPayBuyRecord(Integer uid, Integer sellerUid, Integer skup, Long orderCode, Integer payType, BigDecimal amount) {
SellerOrderMeta meta = sellerOrderMetaMapper.selectByMetaKey(sellerUid, skup, "fee");
if (meta == null) {
logger.error("PayRecordErr记录交易到数据库出错 err=meta费率信息未查到, selleruid = {}, skup={}", sellerUid, skup);
return;
}
// 增加流水记录
TradeBills record = new TradeBills();
try {
record.setUid(uid);
record.setOrderCode(orderCode);
record.setUserType(1);// 1:买家uid; 2:卖家uid
record.setPayType(payType);// 1:支付宝; 2:微信
record.setTradeType(2);//1:保证金;2:货款;3:补偿款
record.setIncomeOutcome(1);// 1:用户收入; 2:用户支出
try {
JSONObject metavalue = JSON.parseObject(meta.getMetaValue());
BigDecimal rate = metavalue.getJSONObject("serviceFeeRate").getBigDecimal("payChannelRate");
amount = amount.multiply(BigDecimal.ONE.subtract(rate)).multiply(new BigDecimal("-1"));;
} catch (Exception e) {
logger.error("PayRecordErr计费信息不完整, uid is {}, skup is {}, err is {}", uid, skup, e.getMessage());
return;
}
record.setAmount(amount);
record.setSystemAmount(amount.multiply(new BigDecimal("-1")));// 有货收入
record.setSystemAmount(amount);// 有货收入
record.setTradeStatus(0);//0:订单未完结;1:订单完结
record.setCreateTime((int) (System.currentTimeMillis() / 1000));
tradeBillsMapper.insert(record);
... ...