|
@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.qs.mp.admin.domain.Goods;
|
|
|
+import com.qs.mp.admin.domain.GoodsSku;
|
|
|
import com.qs.mp.admin.domain.param.UserDeliverOrderShipParam;
|
|
|
import com.qs.mp.admin.service.IGoodsService;
|
|
|
+import com.qs.mp.admin.service.IGoodsSkuService;
|
|
|
import com.qs.mp.common.enums.*;
|
|
|
import com.qs.mp.common.exception.ServiceException;
|
|
|
import com.qs.mp.common.utils.DateUtils;
|
|
@@ -29,6 +31,8 @@ import com.qs.mp.user.service.IUserPrizeStorageService;
|
|
|
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -64,9 +68,49 @@ public class UserDeliverOrderServiceImpl extends ServiceImpl<UserDeliverOrderMap
|
|
|
@Autowired
|
|
|
private IGoodsService goodsService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IGoodsSkuService goodsSkuService;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public String submitOrder(Long userId, String memo, DeliverOrderSettleVO orderSettleVO) {
|
|
|
+
|
|
|
+ if (DeliverOrderResourceEnum.PAYMENT.getValue().equals(orderSettleVO.getResource())) {
|
|
|
+ // 现金购买需要校验和锁库存
|
|
|
+ for (UserPrizeStorage userPrizeStorage : orderSettleVO.getPrizeList()) {
|
|
|
+ if (Objects.nonNull(userPrizeStorage.getSkuId()) && userPrizeStorage.getSkuId() != 0) {
|
|
|
+ GoodsSku goodsSku = goodsSkuService.getById(userPrizeStorage.getSkuId());
|
|
|
+ if (goodsSku.getSoldQty() + userPrizeStorage.getGoodsNum() > goodsSku.getQuantity()) {
|
|
|
+ throw new ServiceException(userPrizeStorage.getTitle() + "库存不足,请重新下单");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新库存
|
|
|
+ boolean updateSku = goodsSkuService.update(new LambdaUpdateWrapper<GoodsSku>()
|
|
|
+ .set(GoodsSku::getQuantity, goodsSku.getQuantity() - userPrizeStorage.getGoodsNum())
|
|
|
+ .set(GoodsSku::getSoldQty, goodsSku.getSoldQty() + userPrizeStorage.getGoodsNum())
|
|
|
+ .eq(GoodsSku::getSkuId, goodsSku.getSkuId())
|
|
|
+ .eq(GoodsSku::getQuantity, goodsSku.getQuantity())
|
|
|
+ .eq(GoodsSku::getSoldQty, goodsSku.getSoldQty()));
|
|
|
+ Assert.isTrue(updateSku, "现金购买商品更新SKU库存失败。goodsId:" + goodsSku.getGoodsId() + ",skuId:" + goodsSku.getSkuId());
|
|
|
+
|
|
|
+ } else {
|
|
|
+ Goods goods = goodsService.getById(userPrizeStorage.getGoodsId());
|
|
|
+ if (goods.getExchangedQty() + userPrizeStorage.getGoodsNum() > goods.getQuantity()) {
|
|
|
+ throw new ServiceException(userPrizeStorage.getTitle() + "库存不足,请重新下单");
|
|
|
+ }
|
|
|
+ // 更新库存
|
|
|
+ boolean updateGoods = goodsService.update(new LambdaUpdateWrapper<Goods>()
|
|
|
+ .set(goods.getQuantity() - userPrizeStorage.getGoodsNum() == 0, Goods::getStatus, GoodsStatusEnum.PUT_OFF)
|
|
|
+ .set(Goods::getQuantity, goods.getQuantity() - userPrizeStorage.getGoodsNum())
|
|
|
+ .set(Goods::getExchangedQty, goods.getExchangedQty() + userPrizeStorage.getGoodsNum())
|
|
|
+ .eq(Goods::getGoodsId, goods.getGoodsId()).eq(Goods::getQuantity, goods.getQuantity()).eq(Goods::getExchangedQty, goods.getExchangedQty()));
|
|
|
+ Assert.isTrue(updateGoods, "现金购买商品更新GOODS库存失败。goodsId:" + goods.getGoodsId() );
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
UserDeliverOrder userDeliverOrder = new UserDeliverOrder();
|
|
|
userDeliverOrder.setOrderId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
|
|
|
userDeliverOrder.setUserId(userId);
|
|
@@ -129,10 +173,36 @@ public class UserDeliverOrderServiceImpl extends ServiceImpl<UserDeliverOrderMap
|
|
|
orderId, userDeliverOrder.getStatus());
|
|
|
return false;
|
|
|
}
|
|
|
- if (!DeliverOrderResourceEnum.PAYMENT.equals(userDeliverOrder.getResource())) {
|
|
|
+ List<UserDeliverOrderItem> orderItemList = userDeliverOrderItemService.list(new LambdaQueryWrapper<UserDeliverOrderItem>()
|
|
|
+ .eq(UserDeliverOrderItem::getOrderId, userDeliverOrder.getOrderId()));
|
|
|
+ if (DeliverOrderResourceEnum.PAYMENT.equals(userDeliverOrder.getResource())) {
|
|
|
+ // 恢复商品库存状态
|
|
|
+ for (UserDeliverOrderItem orderItem : orderItemList) {
|
|
|
+ if (Objects.nonNull(orderItem.getSkuId()) && orderItem.getSkuId() != 0) {
|
|
|
+ GoodsSku goodsSku = goodsSkuService.getById(orderItem.getSkuId());
|
|
|
+ boolean updateSku = goodsSkuService.update(new LambdaUpdateWrapper<GoodsSku>()
|
|
|
+ .set(GoodsSku::getQuantity, goodsSku.getQuantity() + orderItem.getGoodsNum())
|
|
|
+ .set(GoodsSku::getSoldQty, goodsSku.getSoldQty() - orderItem.getGoodsNum())
|
|
|
+ .eq(GoodsSku::getSkuId, goodsSku.getSkuId())
|
|
|
+ .eq(GoodsSku::getQuantity, goodsSku.getGoodsId())
|
|
|
+ .eq(GoodsSku::getProperties, orderItem.getProperties()));
|
|
|
+
|
|
|
+ Assert.isTrue(updateSku, "现金购买商品取消订单更新SKU库存失败。goodsId:" + goodsSku.getGoodsId() + ",skuId:" + goodsSku.getSkuId());
|
|
|
+ } else {
|
|
|
+ Goods goods = goodsService.getById(orderItem.getGoodsId());
|
|
|
+ // 更新库存
|
|
|
+ boolean updateGoods = goodsService.update(new LambdaUpdateWrapper<Goods>()
|
|
|
+ .set(Goods::getStatus, GoodsStatusEnum.PUT_ON)
|
|
|
+ .set(Goods::getQuantity, goods.getQuantity() + orderItem.getGoodsNum())
|
|
|
+ .set(Goods::getExchangedQty, goods.getExchangedQty() - orderItem.getGoodsNum())
|
|
|
+ .eq(Goods::getGoodsId, goods.getGoodsId())
|
|
|
+ .eq(Goods::getQuantity, goods.getQuantity())
|
|
|
+ .eq(Goods::getExchangedQty, goods.getExchangedQty()));
|
|
|
+ Assert.isTrue(updateGoods, "现金购买商品取消订单更新GOODS库存失败。goodsId:" + goods.getGoodsId() );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
// 恢复奖品库状态
|
|
|
- List<UserDeliverOrderItem> orderItemList = userDeliverOrderItemService.list(new LambdaQueryWrapper<UserDeliverOrderItem>()
|
|
|
- .eq(UserDeliverOrderItem::getOrderId, userDeliverOrder.getOrderId()));
|
|
|
for (UserDeliverOrderItem orderItem : orderItemList) {
|
|
|
boolean rtn = userPrizeStorageService.update(new LambdaUpdateWrapper<UserPrizeStorage>()
|
|
|
.set(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.NOT_DISTRIBUTED)
|