修订下单锁问题;调整商品查询排序为更新时间
This commit is contained in:
parent
63bacf0cd8
commit
5984409601
@ -1,22 +1,24 @@
|
|||||||
package com.cpop.mall.business.controller.mini;
|
package com.cpop.mall.business.controller.mini;
|
||||||
|
|
||||||
|
import com.cpop.common.utils.bean.BeanUtils;
|
||||||
import com.cpop.core.base.R;
|
import com.cpop.core.base.R;
|
||||||
|
import com.cpop.core.utils.SpringUtils;
|
||||||
import com.cpop.mall.business.bo.ProductPageBo;
|
import com.cpop.mall.business.bo.ProductPageBo;
|
||||||
import com.cpop.mall.business.service.ProductService;
|
import com.cpop.mall.business.service.ProductService;
|
||||||
import com.cpop.mall.business.vo.MiniProductPageVo;
|
import com.cpop.mall.business.vo.MiniProductPageVo;
|
||||||
import com.cpop.mall.business.vo.ProductEvaluateVo;
|
import com.cpop.mall.business.vo.ProductEvaluateVo;
|
||||||
import com.cpop.mall.business.vo.ProductPageVo;
|
import com.cpop.mall.business.vo.ProductPageVo;
|
||||||
import com.cpop.mall.business.vo.StoreListVo;
|
import com.cpop.mall.business.vo.StoreListVo;
|
||||||
|
import com.cpop.system.business.entity.Store;
|
||||||
|
import com.cpop.system.business.service.StoreService;
|
||||||
import com.mybatisflex.core.paginate.Page;
|
import com.mybatisflex.core.paginate.Page;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import io.swagger.annotations.ApiParam;
|
import io.swagger.annotations.ApiParam;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,4 +76,19 @@ public class MiniProductController {
|
|||||||
return R.ok(page);
|
return R.ok(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @descriptions 根据校区ids获取校区信息
|
||||||
|
* @author DB
|
||||||
|
* @date 2023/11/02 17:11
|
||||||
|
* @param storeIds 校区id列表
|
||||||
|
* @return: com.cpop.core.base.R<java.util.List<com.cpop.mall.business.vo.StoreListVo>>
|
||||||
|
*/
|
||||||
|
@PostMapping("/getStoreByIds")
|
||||||
|
@ApiOperation("根据校区ids获取校区信息")
|
||||||
|
public R<List<StoreListVo>> getMiniProductPage(@RequestParam("storeIds") String storeIds) {
|
||||||
|
List<Store> stores = SpringUtils.getBean(StoreService.class).listByIds(Arrays.asList(storeIds.split(",")));
|
||||||
|
List<StoreListVo> list = BeanUtils.mapToList(stores, StoreListVo.class);
|
||||||
|
return R.ok(list);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -144,8 +144,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
Lock userIdLock = redisService.distributedLock(MallRedisConstant.IDEMPOTENT_LOCK_USER_PAY + loginUserInfo.getString("userId"));
|
Lock userIdLock = redisService.distributedLock(MallRedisConstant.IDEMPOTENT_LOCK_USER_PAY + loginUserInfo.getString("userId"));
|
||||||
if (userIdLock.tryLock()) {
|
if (userIdLock.tryLock()) {
|
||||||
//检查库存
|
//检查库存
|
||||||
Map<String, Integer> recordNumIsEnough = recordNumIsEnough(bo.getPlaceOrderDetailList());
|
Map<String, Integer> recordNumIsEnough = null;
|
||||||
try {
|
try {
|
||||||
|
recordNumIsEnough= recordNumIsEnough(bo.getPlaceOrderDetailList());
|
||||||
Order order = BeanUtils.mapToClass(bo, Order.class);
|
Order order = BeanUtils.mapToClass(bo, Order.class);
|
||||||
List<OrderDetail> orderDetails = BeanUtils.mapToList(bo.getPlaceOrderDetailList(), OrderDetail.class);
|
List<OrderDetail> orderDetails = BeanUtils.mapToList(bo.getPlaceOrderDetailList(), OrderDetail.class);
|
||||||
//规格记录ids
|
//规格记录ids
|
||||||
@ -202,17 +203,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
//回滚库存
|
//回滚库存
|
||||||
recordNumIsEnough.forEach((key, value) -> {
|
if (recordNumIsEnough != null){
|
||||||
redisService.longIncrement(MallRedisConstant.STOCK_RECORD_NUM + key, value.longValue());
|
recordNumIsEnough.forEach((key, value) -> {
|
||||||
});
|
redisService.longIncrement(MallRedisConstant.STOCK_RECORD_NUM + key, value.longValue());
|
||||||
|
});
|
||||||
|
}
|
||||||
throw new ServiceException(e.getMessage());
|
throw new ServiceException(e.getMessage());
|
||||||
}finally {
|
} finally {
|
||||||
//释放锁
|
//释放锁
|
||||||
userIdLock.unlock();
|
userIdLock.unlock();
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
//获取锁失败,直接返回空
|
//获取锁失败,直接返回空
|
||||||
return null;
|
throw new ServiceException("请勿重复下单");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,7 +235,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
productRecordService.updateBatch(productRecords);
|
productRecordService.updateBatch(productRecords);
|
||||||
//TODO: 通知到云?
|
//TODO: 通知到云?
|
||||||
//修改订单状态
|
//修改订单状态
|
||||||
return this.updateChain().set(ORDER.ORDER_STATUS, 3).where(ORDER.ID.eq(orderId)).update();
|
return this.updateChain().set(ORDER.ORDER_STATUS, 1).where(ORDER.ID.eq(orderId)).update();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,7 +246,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
* @param list 订单详情
|
* @param list 订单详情
|
||||||
* @return: Map<String, Integer> 预库存记录
|
* @return: Map<String, Integer> 预库存记录
|
||||||
*/
|
*/
|
||||||
private Map<String, Integer> recordNumIsEnough(List<PlaceOrderBo.PlaceOrderDetail> list) {
|
private Map<String, Integer> recordNumIsEnough(List<PlaceOrderBo.PlaceOrderDetail> list) throws ServiceException {
|
||||||
RedisService redisService = SpringUtils.getBean(RedisService.class);
|
RedisService redisService = SpringUtils.getBean(RedisService.class);
|
||||||
Map<String, Integer> stockNumMap = new HashMap<>();
|
Map<String, Integer> stockNumMap = new HashMap<>();
|
||||||
//遍历库存
|
//遍历库存
|
||||||
|
|||||||
@ -92,9 +92,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
|
|||||||
.and(PRODUCT.IS_UP.eq(bo.getIsUp()))
|
.and(PRODUCT.IS_UP.eq(bo.getIsUp()))
|
||||||
.and(PRODUCT.STORE_IDS.like(bo.getAuthorizedStoreId()))
|
.and(PRODUCT.STORE_IDS.like(bo.getAuthorizedStoreId()))
|
||||||
//置顶
|
//置顶
|
||||||
.orderBy(PRODUCT.IS_TOP.desc())
|
.orderBy(PRODUCT.IS_TOP.desc(),PRODUCT.UPDATE_TIME.desc()),
|
||||||
.orderBy(PRODUCT.CREATE_TIME.desc())
|
|
||||||
.orderBy(pageDomain.getOrderByColumn()),
|
|
||||||
ProductPageVo.class,
|
ProductPageVo.class,
|
||||||
//子查询
|
//子查询
|
||||||
item -> item.field(ProductPageVo::getTradeInfo)
|
item -> item.field(ProductPageVo::getTradeInfo)
|
||||||
@ -133,7 +131,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
|
|||||||
//价格排序
|
//价格排序
|
||||||
if (null != bo.getPriceOrder()){
|
if (null != bo.getPriceOrder()){
|
||||||
if (bo.getPriceOrder()) {
|
if (bo.getPriceOrder()) {
|
||||||
queryWrapper.orderBy(PRODUCT.MAX_PRICE.desc());
|
queryWrapper.orderBy(PRODUCT.MIN_PRICE.desc());
|
||||||
} else {
|
} else {
|
||||||
queryWrapper.orderBy(PRODUCT.MIN_PRICE.asc());
|
queryWrapper.orderBy(PRODUCT.MIN_PRICE.asc());
|
||||||
}
|
}
|
||||||
@ -149,7 +147,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
|
|||||||
.and(PRODUCT.PRODUCT_NAME.like(bo.getProductName()))
|
.and(PRODUCT.PRODUCT_NAME.like(bo.getProductName()))
|
||||||
.and(PRODUCT.BUY_RESTRICT.eq(bo.getBuyRestrict()))
|
.and(PRODUCT.BUY_RESTRICT.eq(bo.getBuyRestrict()))
|
||||||
.and(PRODUCT.PAY_TYPE.eq(bo.getPayType()))
|
.and(PRODUCT.PAY_TYPE.eq(bo.getPayType()))
|
||||||
.orderBy(pageDomain.getOrderByColumn()),
|
.orderBy(PRODUCT.IS_TOP.desc(), PRODUCT.UPDATE_TIME.desc()),
|
||||||
MiniProductPageVo.class);
|
MiniProductPageVo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user