@@ -599,7 +599,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
orderItem . setSp3 ( cartItem . getSp3 ( ) ) ;
orderItem . setPromotionName ( " 无优惠 " ) ;
orderItem . setPromotionAmount ( zero ) ;
orderItem . setGiftIntegration ( 0 ) ;
orderItem . setGiftIntegration ( zero ) ;
orderItem . setGiftGrowth ( 0 ) ;
orderItem . setCouponAmount ( zero ) ;
orderItem . setIntegrationAmount ( zero ) ;
@@ -757,10 +757,21 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
return CommonResult . validateFailed ( " 未查询到商品信息 " ) ;
}
PmsProduct product = new Pms Product( ) ;
PmsProduct product = productMapper . selectByPrimaryKey ( skuStock . get ProductId ( ) ) ;
// 判断商品是否属于积分兑换区
boolean isPointsExchangeStatus = product . getPointsExchangeStatus ( ) = = 1 ;
// 判断商品是否属于积分兑换区
boolean isPointsExchangeStatus = product . getPointsExchangeStatus ( ) = = 1 ;
BigDecimal totalPointsAmount = new BigDecimal ( 0 ) ;
BigDecimal price = new BigDecimal ( skuStock . getPrice ( ) . doubleValue ( ) ) ;
if ( isPointsExchangeStatus ) {
// 积分兑换专区商品,设置积分价格
//获取商品的积分价格
BigDecimal pointsPrice = new BigDecimal ( product . getintergrationPrice ( ) ) ;
// 积分兑换商品的总金额
totalPointsAmount = pointsPrice . multiply ( new BigDecimal ( orderParam . getQuantity ( ) ) ) ;
}
//判断商品是否都有库存 (库存 - 锁定库存 = 真实库存)
if ( ( skuStock . getStock ( ) - skuStock . getLockStock ( ) ) < orderParam . getQuantity ( ) ) {
@@ -771,9 +782,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
if ( product ! = null ) {
UmsMember member = memberMapper . selectByPrimaryKey ( memberService . getCurrentMember ( ) . getId ( ) ) ;
BigDecimal discount = commonService . getDiscount ( member . getId ( ) ) ;
BigDecimal price = new BigDecimal ( skuStock . getPrice ( ) . doubleValue ( ) ) ;
if ( discount ! = null ) {
price = skuStock . getPrice ( ) . multiply ( discount ) . setScale ( 2 , BigDecimal . ROUND_HALF_UP ) ;
}
@@ -782,24 +792,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
BigDecimal zero = new BigDecimal ( 0 ) ;
totalAmount = price . multiply ( new BigDecimal ( orderParam . getQuantity ( ) ) ) ;
// 如果是积分兑换区商品
if ( isPointsExchangeStatus ) {
// 直接使用积分支付,不进行实际支付金额的处理
BigDecimal integrationAmount = totalAmount ;
// 确保会员有足够的积分
if ( member . getIntegration ( ) < integrationAmount . intValue ( ) ) {
return CommonResult . validateFailed ( " 积分不足,无法兑换 " ) ;
}
// 冻结会员积分
member . setIntegration ( member . getIntegration ( ) - integrationAmount . intValue ( ) ) ; // 扣除积分
member . setFreeze ( member . getFreeze ( ) . add ( new BigDecimal ( integrationAmount . intValue ( ) ) ) ) ; // 冻结积分
memberMapper . updateByPrimaryKey ( member ) ;
totalAmount = zero ; // 设置支付金额为零
orderParam . setIntegration ( integrationAmount ) ; // 设置积分金额
}
if ( orderParam . getIntegration ( ) = = null ) {
orderParam . setIntegration ( zero ) ;
}
@@ -840,6 +832,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
//生成订单信息
OmsOrder order = new OmsOrder ( ) ;
order . setTotalAmount ( totalAmount ) ; // 订单总金额
order . setIntegrationAmount ( zero ) ; // 积分部分金额设为零
order . setIntegrationAmount ( orderParam . getIntegration ( ) = = null ? zero : orderParam . getIntegration ( ) ) ;
if ( integerationFlag = = 1 ) {
int flag = orderParam . getIntegration ( ) . compareTo ( totalAmount ) ;
@@ -941,7 +934,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
orderItem . setSp3 ( skuStock . getSp3 ( ) ) ;
orderItem . setPromotionName ( " 无优惠 " ) ;
orderItem . setPromotionAmount ( new BigDecimal ( 0 ) ) ;
orderItem . setGiftIntegration ( 0 ) ;
//积分价格
orderItem . setGiftIntegration ( totalPointsAmount ) ;
orderItem . setGiftGrowth ( 0 ) ;
orderItem . setCouponAmount ( new BigDecimal ( 0 ) ) ;
orderItem . setIntegrationAmount ( new BigDecimal ( 0 ) ) ;
@@ -956,6 +950,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
result . put ( " orderId " , order . getId ( ) ) ;
result . put ( " totalAmount " , order . getPayAmount ( ) ) ;
if ( isPointsExchangeStatus ) {
result . put ( " pointsPrice " , totalPointsAmount ) ;
}
}
return CommonResult . success ( result , " 下单成功 " ) ;
@@ -1326,7 +1323,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
}
@Override
public CommonResult balance Payment( Long orderId ) {
public CommonResult point Payment( Long orderId ) {
OmsOrder order = orderMapper . selectByPrimaryKey ( orderId ) ;
if ( order = = null ) {
@@ -1337,123 +1334,213 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
return CommonResult . validateFailed ( " 未查询到订单信息 " ) ;
}
// 支付方式: 0->未支付; 1->支付宝; 2->微信; 3->线下支付; 4->余额 支付
// 支付方式为0才允许支付
if ( order . getPayType ( ) ! = 0 ) {
return CommonResult . validateFailed ( " 订单已支付 " ) ;
}
// 判断是否使用积分 支付
UmsMember member = memberMapper . selectByPrimaryKey ( currentMember . getId ( ) ) ;
//如果实际支付金额等于0表示积分支付
//如果不是使用积分支付,返回错误信息
BigDecimal zero = new BigDecimal ( 0 ) ;
// 只要订单的支付金额为0, 即表示使用积分支付
int flag = order . getPayAmount ( ) . compareTo ( zero ) ;
//flag = -1,表示PayAmount小于zero; flag = 0,表示PayAmount等于zero; flag = 1,表示PayAmount大于zero;
if ( flag = = 0 ) {
if ( flag = = 0 ) { // 如果实际支付金额为0, 表示使用积分支付
//写入会员交易记录表
DmsMemberTradeRecord tradeRecord = new DmsMemberTradeRecord ( ) ;
tradeRecord . setMemberId ( member . getId ( ) ) ;
tradeRecord . setItemType ( ItemType . IntegralShopping ) ; //积分购物
tradeRecord . setNote ( " 积分抵扣 " ) ;
tradeRecord . setTitle ( " 积分抵扣 " ) ;
tradeRecord . setValue ( order . getIntegrationAmount ( ) ) ;
tradeRecord . setType ( 1 ) ; //收支类型: 0->收入; 1->支出
tradeRecord . setCreateTime ( new Date ( ) ) ;
memberTradeRecordMapper . insert ( tradeRecord ) ;
// 获取积分兑换价格
BigDecimal totalPointsAmount = order . getIntegrationAmount ( ) ; // 使用订单中的积分字段
BigDecimal memberPoints = BigDecimal . valueOf ( member . getIntegration ( ) ) ; // 获取当前用户积分
while ( true ) {
long time = System . currentTimeMillis ( ) + RedisLock . TIMEOUT ;
if ( redisLock . lock ( String . valueOf ( member . getId ( ) ) , String . valueOf ( time ) ) ) {
member = memberMapper . selectByPrimaryKey ( member . getId ( ) ) ;
member . setFreeze ( member . getFreeze ( ) . add ( order . getIntegrationAmount ( ) ) ) ; //修改冻结金额,增加冻结资金
memberMapper . updateByPrimaryKey ( member ) ;
redisLock . unlock ( String . valueOf ( member . getId ( ) ) , String . valueOf ( time ) ) ;
break ;
}
// 判断用户积分是否足够
if ( memberPoints . compareTo ( totalPointsAmount ) < 0 ) {
return CommonResult . validateFailed ( " 积分不足,无法完成兑换 " ) ;
}
} else {
return CommonResult . validateFailed ( " 无效订单 " ) ;
}
// 扣除用户积分,并记录积分变动
member . setIntegration ( memberPoints . subtract ( totalPointsAmount ) . intValue ( ) ) ; // 扣除积分
member . setFreeze ( member . getFreeze ( ) . add ( totalPointsAmount ) ) ; // 冻结积分
memberMapper . updateByPrimaryKey ( member ) ;
Date date = new Date ( ) ;
// 支付方式: 0->未支付; 1->支付宝; 2->微信; 3->线下支付; 4->积分支付支付
// 支付方式为0才允许支付
if ( order . getPayType ( ) ! = 0 ) {
return CommonResult . validateFailed ( " 订单已支付 " ) ;
}
//支付方式: 0->未支付; 1->支付宝; 2->微信; 3->线下支付; 4->余额支付
order . setPayType ( 4 ) ;
//提货方式: 0->自提; 1->物流
if ( order . getDeliveryType ( ) = = 0 ) {
//订单状态: 0->待付款; 1->待发货; 2->已发货; 3->已完成; 4->已关闭; 5->无效订单
order . setStatus ( 2 ) ;
} else {
//订单状态: 0->待付款; 1->待发货; 2->已发货; 3->已完成; 4->已关闭; 5->无效订单
order . setStatus ( 1 ) ;
}
if ( flag = = 0 ) {
//写入会员交易记录表
DmsMemberTradeRecord tradeRecord = new DmsMemberTradeRecord ( ) ;
tradeRecord . setMemberId ( member . getId ( ) ) ;
tradeRecord . setItemType ( ItemType . IntegralShopping ) ; //积分购物
tradeRecord . setNote ( " 积分抵扣 " ) ;
tradeRecord . setTitle ( " 积分抵扣 " ) ;
tradeRecord . setValue ( totalPointsAmount ) ;
tradeRecord . setType ( 1 ) ; //收支类型: 0->收入; 1->支出
tradeRecord . setCreateTime ( new Date ( ) ) ;
memberTradeRecordMapper . insert ( tradeRecord ) ;
order . setModifyTime ( date ) ;
order . setPaymentTime ( date ) ;
orderMapper . updateByPrimaryKey ( order ) ;
while ( true ) {
long time = System . currentTimeMillis ( ) + RedisLock . TIMEOUT ;
if ( redisLock . lock ( String . valueOf ( member . getId ( ) ) , String . valueOf ( time ) ) ) {
member = memberMapper . selectByPrimaryKey ( member . getId ( ) ) ;
member . setFreeze ( member . getFreeze ( ) . add ( order . getIntegrationAmount ( ) ) ) ; //修改冻结金额,增加冻结资金
memberMapper . updateByPrimaryKey ( member ) ;
redisLock . unlock ( String . valueOf ( member . getId ( ) ) , String . valueOf ( time ) ) ;
break ;
}
}
//修改商品库存信息需要加锁,影响前台响应,所以用线程来处理
executorService . execute ( new Runnab le ( ) {
} else {
return CommonResult . validateFai led ( " 无效订单 " ) ;
}
@Override
public void run ( ) {
//库存变动
//查询订单商品项
OmsOrderItemExample example = new OmsOrderItemExample ( ) ;
example . createCriteria ( ) . andOrderIdEqualTo ( order . getId ( ) ) ;
List < OmsOrderItem > orderItemList = orderItemMapper . selectByExample ( example ) ;
PmsSkuStock skuStock = null ;
PmsProduct product = null ;
for ( OmsOrderItem orderItem : orderItemList ) {
while ( true ) {
long time = System . currentTimeMillis ( ) + RedisLock . TIMEOUT ;
if ( redisLock . lock ( orderItem . getProductId ( ) . toString ( ) , String . valueOf ( time ) ) ) {
skuStock = skuStockMapper . selectByPrimaryKey ( orderItem . getProductSkuId ( ) ) ;
if ( skuStock ! = null ) {
skuStock . setLockStock ( skuStock . getLockStock ( ) - orderItem . g etProductQuantity ( ) ) ;
skuStock . setStock ( skuStock . getStock ( ) - orderItem . getProductQuantity ( ) ) ;
skuStock . setSale ( ( skuStock . getSale ( ) = = null ? 0 : skuStock . getSale ( ) ) + orderItem . getProductQuantity ( ) ) ;
skuStockMapper . updateByPrimaryKey ( skuStock ) ;
Date date = new Date ( ) ;
//支付方式: 0->未支付; 1->支付宝; 2->微信; 3->线下支付; 4->余额支付
order . setPayType ( 4 ) ;
//提货方式: 0->自提; 1->物流
if ( order . getDeliveryType ( ) = = 0 ) {
//订单状态: 0->待付款; 1->待发货; 2->已发货; 3->已完成; 4->已关闭; 5->无效订单
order . setStatus ( 2 ) ;
} else {
//订单状态: 0->待付款; 1->待发货; 2->已发货; 3->已完成; 4->已关闭; 5->无效订单
order . setStatus ( 1 ) ;
}
order . setModifyTime ( date ) ;
order . s etPaymentTime ( date ) ;
orderMapper . updateByPrimaryKey ( order ) ;
//修改商品库存信息需要加锁,影响前台响应,所以用线程来处理
executorService . execute ( new Runnable ( ) {
@Override
public void run ( ) {
//库存变动
//查询订单商品项
OmsOrderItemExample example = new OmsOrderItemExample ( ) ;
example . createCriteria ( ) . andOrderIdEqualTo ( order . getId ( ) ) ;
List < OmsOrderItem > orderItemList = orderItemMapper . selectByExample ( example ) ;
PmsSkuStock skuStock = null ;
PmsProduct product = null ;
for ( OmsOrderItem orderItem : orderItemList ) {
while ( true ) {
long time = System . currentTimeMillis ( ) + RedisLock . TIMEOUT ;
if ( redisLock . lock ( orderItem . getProductId ( ) . toString ( ) , String . valueOf ( time ) ) ) {
skuStock = skuStockMapper . selectByPrimaryKey ( orderItem . getProductSkuId ( ) ) ;
if ( skuStock ! = null ) {
skuStock . setLockStock ( skuStock . getLockStock ( ) - orderItem . getProductQuantity ( ) ) ;
skuStock . setStock ( skuStock . getStock ( ) - orderItem . getProductQuantity ( ) ) ;
skuStock . setSale ( ( skuStock . getSale ( ) = = null ? 0 : skuStock . getSale ( ) ) + orderItem . getProductQuantity ( ) ) ;
skuStockMapper . updateByPrimaryKey ( skuStock ) ;
}
product = productMapper . selectByPrimaryKey ( orderItem . getProductId ( ) ) ;
if ( product ! = null ) {
product . setStock ( product . getStock ( ) - orderItem . getProductQuantity ( ) ) ;
product . setSale ( ( product . getSale ( ) = = null ? 0 : product . getSale ( ) ) + orderItem . getProductQuantity ( ) ) ;
productMapper . updateByPrimaryKey ( product ) ;
}
redisLock . unlock ( orderItem . getProductId ( ) . toString ( ) , String . valueOf ( time ) ) ;
break ;
}
product = productMapper . selectByPrimaryKey ( orderItem . getProductId ( ) ) ;
if ( product ! = null ) {
product . setStock ( product . getStock ( ) - orderItem . getProductQuantity ( ) ) ;
product . setSale ( ( product . getSale ( ) = = null ? 0 : product . getSale ( ) ) + orderItem . getProductQuantity ( ) ) ;
productMapper . updateByPrimaryKey ( product ) ;
}
redisLock . unlock ( orderItem . getProductId ( ) . toString ( ) , String . valueOf ( time ) ) ;
break ;
}
}
}
} ) ;
boolean distributionFlag = true ;
OmsOrderItemExample example = new OmsOrderItemExample ( ) ;
example . createCriteria ( ) . andOrderIdEqualTo ( order . getId ( ) ) ;
List < OmsOrderItem > orderItemList = orderItemMapper . selectByExample ( example ) ;
PmsProduct product = null ;
for ( OmsOrderItem orderItem : orderItemList ) {
product = productMapper . selectByPrimaryKey ( orderItem . getProductId ( ) ) ;
if ( product . getDistributionFlag ( ) . equals ( 0 ) ) { //分销标志( 0->不参与; 1->参与)
distributionFlag = false ;
}
}
//分销处理
if ( distributionFlag ) {
distributeSender . sendMessage ( order . getId ( ) ) ;
}
}
return CommonResult . success ( null , " 支付成功 " ) ;
}
/**
* 余额支付
*/
@Override
public CommonResult balancePayment ( Long orderId ) {
// 获取订单详情
OrderResult orderResult = getMemberOrderDetailInfo ( orderId ) ;
if ( orderResult = = null ) {
return CommonResult . validateFailed ( " 未查询到订单信息 " ) ;
}
// 获取订单的支付金额
BigDecimal payAmount = orderResult . getPayAmount ( ) ;
if ( payAmount = = null | | payAmount . compareTo ( BigDecimal . ZERO ) < = 0 ) {
return CommonResult . validateFailed ( " 无效的支付金额 " ) ;
}
// 获取当前用户信息
UmsMember currentMember = memberService . getCurrentMember ( ) ;
UmsMember member = memberMapper . selectByPrimaryKey ( currentMember . getId ( ) ) ;
// 获取用户余额
BigDecimal currentBalance = member . getBalance ( ) ;
// 判断余额是否足够支付
if ( currentBalance . compareTo ( payAmount ) < 0 ) {
return CommonResult . validateFailed ( " 余额不足,无法支付 " ) ;
}
// 扣除余额
member . setBalance ( currentBalance . subtract ( payAmount ) ) ;
// 更新用户余额
memberMapper . updateByPrimaryKey ( member ) ;
// 更新订单状态为已支付
OmsOrder order = orderMapper . selectByPrimaryKey ( orderId ) ;
// 设置为余额支付
order . setPayType ( 5 ) ;
// 设置订单状态为已支付
order . setStatus ( 2 ) ;
order . setPaymentTime ( new Date ( ) ) ;
orderMapper . updateByPrimaryKey ( order ) ;
// 处理库存、分销等后续操作
executorService . execute ( ( ) - > {
// 处理库存
updateStock ( orderId ) ;
} ) ;
boolean distributionFlag = true ;
OmsOrderItemExample example = new OmsOrderItemExample ( ) ;
example . createCriteria ( ) . andOrderIdEqualTo ( order . getId ( ) ) ;
List < OmsOrderItem > orderItemList = orderItemMapper . selectByExample ( example ) ;
PmsProduct product = null ;
for ( OmsOrderItem orderItem : orderItemList ) {
product = productMapper . selectByPrimaryKey ( orderItem . getProductId ( ) ) ;
if ( product . getDistributionFlag ( ) . equals ( 0 ) ) { //分销标志( 0->不参与; 1->参与)
distributionFlag = false ;
}
}
//分销处理
if ( distributionFlag ) {
distributeSender . sendMessage ( order . getId ( ) ) ;
}
return CommonResult . success ( null , " 支付成功 " ) ;
}
/**
*处理库存的逻辑
*/
private void updateStock ( Long orderId ) {
// 查询订单商品信息,进行库存更新等操作
OmsOrderItemExample example = new OmsOrderItemExample ( ) ;
example . createCriteria ( ) . andOrderIdEqualTo ( orderId ) ;
List < OmsOrderItem > orderItemList = orderItemMapper . selectByExample ( example ) ;
for ( OmsOrderItem orderItem : orderItemList ) {
PmsSkuStock skuStock = skuStockMapper . selectByPrimaryKey ( orderItem . getProductSkuId ( ) ) ;
if ( skuStock ! = null ) {
// 更新库存
skuStock . setStock ( skuStock . getStock ( ) - orderItem . getProductQuantity ( ) ) ;
skuStockMapper . updateByPrimaryKey ( skuStock ) ;
}
}
}
/**
* 微信预支付
*