Authored by mali

防并发

... ... @@ -25,7 +25,7 @@ public interface EntrySellerRechargeOrderMapper {
//根据用户uid ,获取流水(分页)
List<EntrySellerRechargeOrder> selectWithPageByUid(@Param("uid") Integer uid, @Param("start") Integer start, @Param("limit") Integer limit);
void updateByOrderCode(EntrySellerRechargeOrder order);
int updateByOrderCode(EntrySellerRechargeOrder order);
int updateReturnDepositByOrderCode(@Param("orderCode") long orderCode, @Param("amount") BigDecimal amount, @Param("status") Integer status, @Param("updateTime") Integer updateTime);
... ...
... ... @@ -26,4 +26,5 @@ public class EntrySellerRechargeOrder {
private Integer updateTime;
private Integer initStatus;
}
\ No newline at end of file
... ...
... ... @@ -150,6 +150,9 @@
</if>
update_time = #{updateTime,jdbcType=INTEGER}
where order_code = #{orderCode,jdbcType=BIGINT}
<if test="initStatus != null">
and status = #{initStatus,jdbcType=INTEGER},
</if>
</update>
<update id="updateReturnDepositByOrderCode">
... ...
... ... @@ -80,7 +80,7 @@ public abstract class AbstractOrderPaymentService {
* 更新订单状态
* @param orderInfo
*/
public abstract void updateOrderStatusPaid(OrderInfo orderInfo);
public abstract int updateOrderStatusPaid(OrderInfo orderInfo);
public abstract void processAfterPay(OrderInfo orderInfo);
... ...
... ... @@ -69,17 +69,17 @@ public class BuyerOrderPaymentService extends AbstractOrderPaymentService {
* 更新订单状态
* @param orderInfo
*/
public void updateOrderStatusPaid(OrderInfo orderInfo){
public int updateOrderStatusPaid(OrderInfo orderInfo){
Integer uid = orderInfo.getUid();
BuyerOrder buyerOrder = new BuyerOrder();
buyerOrder.setOrderCode(orderInfo.getOrderCode());
buyerOrder.setUid(uid);
buyerOrder.setStatus(OrderStatus.HAS_PAYED.getCode());
buyerOrder.setUpdateTime(DateUtil.getCurrentTimeSecond());
buyerOrderMapper.updateByOrderCode(buyerOrder);
int result = buyerOrderMapper.updateByOrderCode(buyerOrder);
//
orderInfo.setStatus(OrderStatus.HAS_PAYED.getCode());
return result;
}
@Override
... ...
... ... @@ -76,14 +76,16 @@ public class MerchantOrderPaymentService extends AbstractOrderPaymentService {
* 更新订单状态
* @param orderInfo
*/
public void updateOrderStatusPaid(OrderInfo orderInfo) {
public int updateOrderStatusPaid(OrderInfo orderInfo) {
EntrySellerRechargeOrder order = new EntrySellerRechargeOrder();
order.setOrderCode(orderInfo.getOrderCode());
order.setInitStatus(OrderStatus.WAITING_PAY.getCode());
order.setStatus(OrderStatus.HAS_PAYED.getCode());
order.setUpdateTime(DateUtil.getCurrentTimeSecond());
// order.setPayment(orderInfo.getPayment());
entrySellerRechargeOrderMapper.updateByOrderCode(order);
int result = entrySellerRechargeOrderMapper.updateByOrderCode(order);
orderInfo.setStatus(OrderStatus.HAS_PAYED.getCode());
return result;
}
@Override
... ...
... ... @@ -60,7 +60,7 @@ public class SellerOrderPaymentService extends AbstractOrderPaymentService {
* 更新订单状态
* @param orderInfo
*/
public void updateOrderStatusPaid(OrderInfo orderInfo){
public int updateOrderStatusPaid(OrderInfo orderInfo){
//
logger.info("in update seller OrderStatus after Paid, orderInfo {}",orderInfo);
SellerOrder sellerOrder = new SellerOrder();
... ... @@ -84,6 +84,7 @@ public class SellerOrderPaymentService extends AbstractOrderPaymentService {
tsog.setId(orderInfo.getSkup());
productProxyService.syncSkup(tsog, soTargetStatus.getSkupStatus());
}
return updateCnt;
}
@Override
... ...
... ... @@ -272,7 +272,7 @@ public class PaymentServiceImpl implements IPaymentService {
}
// 更新订单状态[已支付]
abstractOrderService.updateOrderStatusPaid(orderInfo);
int num = abstractOrderService.updateOrderStatusPaid(orderInfo);
// 记录支付成功记录
OrdersPay ordersPay = new OrdersPay();
... ... @@ -313,8 +313,10 @@ public class PaymentServiceImpl implements IPaymentService {
addPayEnsureRecord(orderInfo.getUid(), orderInfo.getSkup(), orderCode, recordPayment,
ordersPay.getAmount());
} else if (codeMeta.getType() == OrderCodeType.SELLER_RECHARGE_EARNEST_TYPE.getType()) {
addPayEnsureRecord(orderInfo.getUid(), orderInfo.getSkup(), orderCode, recordPayment,
ordersPay.getAmount());
if (num > 0) { // 防止并发回调和 主动查询结果。做幂等
addPayEnsureRecord(orderInfo.getUid(), orderInfo.getSkup(), orderCode, recordPayment,
ordersPay.getAmount());
}
}
logger.info("paySuccess finished. orderCode is {}", orderCode);
abstractOrderService.processAfterPay(orderInfo);
... ...
... ... @@ -59,11 +59,11 @@ public class ProductSearchController {
Map<Integer,Integer> poolConfig = ufoServiceCaller.call("ufo.resource.goodsPool", Map.class);
if (type == 0) {
productPool = String.valueOf(poolConfig.get(2));
order = "pools.id:asc";
order = "pools.order_by:desc";
}
if (type == 1) {
productPool = String.valueOf(poolConfig.get(4));
order = "pools.id:asc";
order = "pools.order_by:desc";
}
if (type == 2) {
isSoonSale = "Y";
... ...