库存问题修复
This commit is contained in:
@@ -37,4 +37,18 @@ public interface PortalOrderDao {
|
|||||||
*/
|
*/
|
||||||
int releaseSkuStockLock(@Param("itemList") List<OmsOrderItem> orderItemList);
|
int releaseSkuStockLock(@Param("itemList") List<OmsOrderItem> orderItemList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据商品的skuId来锁定库存
|
||||||
|
*/
|
||||||
|
int lockStockBySkuId(@Param("productSkuId")Long productSkuId,@Param("quantity") Integer quantity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据商品的skuId扣减真实库存
|
||||||
|
*/
|
||||||
|
int reduceSkuStock(@Param("productSkuId")Long productSkuId,@Param("quantity") Integer quantity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据商品的skuId释放库存
|
||||||
|
*/
|
||||||
|
int releaseStockBySkuId(@Param("productSkuId")Long productSkuId,@Param("quantity") Integer quantity);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.macro.mall.portal.dao.PortalOrderItemDao;
|
|||||||
import com.macro.mall.portal.dao.SmsCouponHistoryDao;
|
import com.macro.mall.portal.dao.SmsCouponHistoryDao;
|
||||||
import com.macro.mall.portal.domain.*;
|
import com.macro.mall.portal.domain.*;
|
||||||
import com.macro.mall.portal.service.*;
|
import com.macro.mall.portal.service.*;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -29,6 +30,7 @@ import java.util.stream.Collectors;
|
|||||||
* 前台订单管理Service
|
* 前台订单管理Service
|
||||||
* Created by macro on 2018/8/30.
|
* Created by macro on 2018/8/30.
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -257,11 +259,27 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
order.setStatus(1);
|
order.setStatus(1);
|
||||||
order.setPaymentTime(new Date());
|
order.setPaymentTime(new Date());
|
||||||
order.setPayType(payType);
|
order.setPayType(payType);
|
||||||
orderMapper.updateByPrimaryKeySelective(order);
|
OmsOrderExample orderExample = new OmsOrderExample();
|
||||||
|
orderExample.createCriteria()
|
||||||
|
.andIdEqualTo(order.getId())
|
||||||
|
.andDeleteStatusEqualTo(0)
|
||||||
|
.andStatusEqualTo(0);
|
||||||
|
//只修改未付款状态的订单
|
||||||
|
int updateCount = orderMapper.updateByExampleSelective(order, orderExample);
|
||||||
|
if(updateCount==0){
|
||||||
|
Asserts.fail("订单不存在或订单状态不是未支付!");
|
||||||
|
}
|
||||||
//恢复所有下单商品的锁定库存,扣减真实库存
|
//恢复所有下单商品的锁定库存,扣减真实库存
|
||||||
OmsOrderDetail orderDetail = portalOrderDao.getDetail(orderId);
|
OmsOrderDetail orderDetail = portalOrderDao.getDetail(orderId);
|
||||||
int count = portalOrderDao.updateSkuStock(orderDetail.getOrderItemList());
|
int totalCount = 0;
|
||||||
return count;
|
for (OmsOrderItem orderItem : orderDetail.getOrderItemList()) {
|
||||||
|
int count = portalOrderDao.reduceSkuStock(orderItem.getProductSkuId(),orderItem.getProductQuantity());
|
||||||
|
if(count==0){
|
||||||
|
Asserts.fail("库存不足,无法扣减!");
|
||||||
|
}
|
||||||
|
totalCount+=count;
|
||||||
|
}
|
||||||
|
return totalCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -312,7 +330,12 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(orderItemExample);
|
List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(orderItemExample);
|
||||||
//解除订单商品库存锁定
|
//解除订单商品库存锁定
|
||||||
if (!CollectionUtils.isEmpty(orderItemList)) {
|
if (!CollectionUtils.isEmpty(orderItemList)) {
|
||||||
portalOrderDao.releaseSkuStockLock(orderItemList);
|
for (OmsOrderItem orderItem : orderItemList) {
|
||||||
|
int count = portalOrderDao.releaseStockBySkuId(orderItem.getProductSkuId(),orderItem.getProductQuantity());
|
||||||
|
if(count==0){
|
||||||
|
Asserts.fail("库存不足,无法释放!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//修改优惠券使用状态
|
//修改优惠券使用状态
|
||||||
updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);
|
updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);
|
||||||
@@ -728,7 +751,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
|
for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
|
||||||
PmsSkuStock skuStock = skuStockMapper.selectByPrimaryKey(cartPromotionItem.getProductSkuId());
|
PmsSkuStock skuStock = skuStockMapper.selectByPrimaryKey(cartPromotionItem.getProductSkuId());
|
||||||
skuStock.setLockStock(skuStock.getLockStock() + cartPromotionItem.getQuantity());
|
skuStock.setLockStock(skuStock.getLockStock() + cartPromotionItem.getQuantity());
|
||||||
skuStockMapper.updateByPrimaryKeySelective(skuStock);
|
int count = portalOrderDao.lockStockBySkuId(cartPromotionItem.getProductSkuId(),cartPromotionItem.getQuantity());
|
||||||
|
if(count==0){
|
||||||
|
Asserts.fail("库存不足,无法下单");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,4 +88,27 @@
|
|||||||
#{item.productSkuId}
|
#{item.productSkuId}
|
||||||
</foreach>
|
</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
<update id="lockStockBySkuId">
|
||||||
|
UPDATE pms_sku_stock
|
||||||
|
SET lock_stock = lock_stock + #{quantity}
|
||||||
|
WHERE
|
||||||
|
id = #{productSkuId}
|
||||||
|
AND lock_stock + #{quantity} <= stock
|
||||||
|
</update>
|
||||||
|
<update id="reduceSkuStock">
|
||||||
|
UPDATE pms_sku_stock
|
||||||
|
SET lock_stock = lock_stock - #{quantity},
|
||||||
|
stock = stock - #{quantity}
|
||||||
|
WHERE
|
||||||
|
id = #{productSkuId}
|
||||||
|
AND stock - #{quantity} >= 0
|
||||||
|
AND lock_stock - #{quantity} >= 0
|
||||||
|
</update>
|
||||||
|
<update id="releaseStockBySkuId">
|
||||||
|
UPDATE pms_sku_stock
|
||||||
|
SET lock_stock = lock_stock - #{quantity}
|
||||||
|
WHERE
|
||||||
|
id = #{productSkuId}
|
||||||
|
AND lock_stock - #{quantity} >= 0
|
||||||
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user