提交 8981093e authored 作者: 吴德鹏's avatar 吴德鹏

新增购物车库存校验

上级 30aa79ae
......@@ -16,11 +16,9 @@ import com.example.afrishop_v3.util.ValidateUtils;
import com.example.afrishop_v3.util.WordposHelper;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
......@@ -29,7 +27,7 @@ import java.net.URISyntaxException;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
@RestController
@RequestMapping("/cart")
......@@ -37,15 +35,19 @@ public class CartController extends Controller {
private final TbCfCartRecordRRepository repository;
private final TbCfStationItemRepository itemRepository;
private final TbCfExpressTemplateRepository templateRepository;
private final TbCfItemSkuRepository skuRepository;
private final TbCfItemSkuRepository itemSkuRepository;
private final AuthenticationUser user;
private final SpiderService spiderService;
private final ReentrantLock lock=new ReentrantLock();
private static Logger logger = LoggerFactory.getLogger(CartController.class);
public CartController(TbCfCartRecordRRepository repository, TbCfStationItemRepository itemRepository, TbCfExpressTemplateRepository templateRepository, TbCfItemSkuRepository itemSkuRepository, AuthenticationUser user, SpiderService spiderService) {
public CartController(TbCfCartRecordRRepository repository, TbCfStationItemRepository itemRepository, TbCfExpressTemplateRepository templateRepository, TbCfItemSkuRepository skuRepository, TbCfItemSkuRepository itemSkuRepository, AuthenticationUser user, SpiderService spiderService) {
this.repository = repository;
this.itemRepository = itemRepository;
this.templateRepository = templateRepository;
this.skuRepository = skuRepository;
this.itemSkuRepository = itemSkuRepository;
this.user = user;
this.spiderService = spiderService;
......@@ -54,20 +56,55 @@ public class CartController extends Controller {
//Change number of the cart item
@PutMapping("/num/{cartId}/{itemNum}")
public Result changeItemNum(@PathVariable String cartId, @PathVariable int itemNum) {
Optional<TbCfCartRecordR> byId = repository.findById(cartId);
if (byId.isPresent()) {
TbCfCartRecordR record = byId.get();
record.setItemNum(itemNum);
repository.save(record);
return new Result<>(ResultCodeEnum.SUCCESS.getCode(), "Item quantity updated");
}
Result result = new Result();
try {
Optional<TbCfCartRecordR> byId = repository.findById(cartId);
if (byId.isPresent()) {
TbCfCartRecordR record = byId.get();
//校验库存
String itemSkuId = record.getItemSkuId();
lock.lock();
Optional<TbCfItemSkus> byId1 = skuRepository.findById(itemSkuId);
if (byId1.isPresent()) {
Integer itemCount = byId1.get().getSkuCount();
if (itemCount < itemNum) {
if (itemCount <= 0) {
record.setCheckFlag(0);
itemCount = 0;
}
result.setData(itemCount);
result.setMessage("Out of stock");
result.setCode(ResultCodeEnum.SERVICE_ERROR.getCode());
}
}
lock.unlock();
record.setItemNum(itemNum);
repository.save(record);
return result;
}
logger.warn("Cart record not found !");
return new Result<>(ResultCodeEnum.SERVICE_ERROR.getCode(), "Failed");
logger.warn("Cart record not found !");
return new Result<>(ResultCodeEnum.SERVICE_ERROR.getCode(), "Failed");
} finally {
// lock.unlock();
}
}
/* public synchronized boolean checkStock(String itemSkuId, int itemNum) {
Optional<TbCfItemSkus> skuOpt = skuRepository.findById(itemSkuId);
if (skuOpt.isPresent()) {
Integer skuCount = skuOpt.get().getSkuCount();
if (itemNum <= skuCount) {
return true;
}
}
return false;
}*/
//Add single item to the cart
@PostMapping
public Result addToCart(@RequestBody TbCfCartRecordR itemDetail) {
......
......@@ -81,7 +81,7 @@ public class FlutterWaveController extends Controller {
public ResponseEntity<String> payForOrderByCard(@RequestParam("orderId") String orderId, @RequestBody FlutterWaveCard flutterWaveCard) {
RaveConstant.PUBLIC_KEY = PUBLIC_KEY;
RaveConstant.SECRET_KEY = SECRET_KEY;
RaveConstant.ENVIRONMENT = Environment.STAGING; //or STAGING
RaveConstant.ENVIRONMENT = Environment.LIVE; //or STAGING
// Result result = new Result();
Optional<TbCfOrder> byId = repository.findById(orderId);
......@@ -135,7 +135,7 @@ public class FlutterWaveController extends Controller {
public ResponseEntity<String> payForOrderByPhone(@RequestParam("orderId") String orderId, @RequestBody FlutterWaveCard flutterWaveCard) {
RaveConstant.PUBLIC_KEY = PUBLIC_KEY;
RaveConstant.SECRET_KEY = SECRET_KEY;
RaveConstant.ENVIRONMENT = Environment.STAGING; //or STAGING
RaveConstant.ENVIRONMENT = Environment.LIVE; //or STAGING
// Result result = new Result();
Optional<TbCfOrder> byId = repository.findById(orderId);
......
......@@ -95,7 +95,7 @@ public class TbCfCartRecordR {
@Formula(value = "(SELECT st.discount_price FROM tb_cf_station_item st WHERE st.item_id=item_id limit 1)")
private BigDecimal realItemPrice;
@Formula(value = "(SELECT st.sku_count FROM tb_cf_item_skus st WHERE st.id=item_sku_id limit 1)")
@Formula(value = "(SELECT IFNULL(st.sku_count,0) FROM tb_cf_item_skus st WHERE st.id=item_sku_id limit 1)")
private Integer itemCount;
@Formula(value = "(SELECT sk.sku_price FROM tb_cf_item_skus sk WHERE sk.id=item_sku_id limit 1)")
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论