库存校验 商品级库存

This commit is contained in:
wangw 2024-10-12 14:03:53 +08:00
parent 3b77cfb33d
commit 676daf9a8c
4 changed files with 31 additions and 90 deletions

View File

@ -382,19 +382,7 @@ public class DutyService {
if (ObjectUtil.isNotEmpty(product)) {
if (product.getIsDistribute() == 1) {
redisUtil.seckill(RedisCst.PRODUCT + shopId.toString() + ":product" + product.getId().toString(), num.toString());
productMapper.updateStockById(skuId, num);
} else {
redisUtil.seckill(RedisCst.PRODUCT + shopId.toString() + ":" + skuId.toString(), num.toString());
if (ObjectUtil.isNotEmpty(tbProductSku)) {
if (num > tbProductSku.getStockNumber()) {
// productSkuMapper.updateStockNum(skuId,num);
} else {
// productSkuMapper.updateByskuIdSub(skuId, num);
}
}
}
productMapper.updateStockById(skuId, num);
}
}

View File

@ -261,14 +261,8 @@ public class OrderService {
// 校验库存
if ("1".equals(product.getIsStock().toString())) {
if ("1".equals(product.getIsDistribute().toString())) {
if (product.getStockNumber() - number < 0) {
return Result.fail(CodeEnum.STOCKERROR);
}
} else if (product.getId().intValue() == Integer.valueOf(skuWithBLOBs.getProductId()).intValue()) {
if (skuWithBLOBs.getStockNumber() - number < 0) {
return Result.fail(CodeEnum.STOCKERROR);
}
if (product.getStockNumber() - number < 0) {
return Result.fail(CodeEnum.STOCKERROR);
}
}
@ -468,10 +462,7 @@ public class OrderService {
if (product.getStockNumber() == null) {
product.setStockNumber(0);
}
if (
(product.getIsDistribute() == 1 && product.getStockNumber() - num <= product.getWarnLine())
|| (product.getIsDistribute() != 1) && productSku.getStockNumber() - num <= product.getWarnLine()
) {
if ( product.getStockNumber() - num <= product.getWarnLine()) {
List<TbShopOpenId> shopOpenIds = shopOpenIdMapper.selectStateByShopIdAndType(product.getShopId(), ShopWxMsgTypeEnum.STOCK_MSG.getType());
shopOpenIds.forEach(item -> {
wxAccountUtil.sendStockWarnMsg("商品库存不足", product.getName(),

View File

@ -1435,22 +1435,10 @@ public class PayService {
tbProductStockDetail.setUnitName(shopUnit.getName());
tbProductStockDetail.setProductId(product.getId().toString());
if (product.getIsDistribute() == 1) {
// redisUtil.seckill(RedisCst.PRODUCT + shopId.toString() + ":product" + product.getId().toString(), String.valueOf(detail.getReturnNum() + product.getStockNumber().intValue()));
productMapper.updateStockById(product.getId(), detail.getReturnNum() * -1);
productMapper.updateStockById(product.getId(), detail.getReturnNum() * -1);
tbProductStockDetail.setLeftNumber(product.getStockNumber());
tbProductStockDetail.setStockNumber(Double.valueOf(detail.getReturnNum()));
} else {
if (ObjectUtil.isNotEmpty(productSku)) {
// redisUtil.seckill(RedisCst.PRODUCT + shopId.toString() + ":" + productSku.getId().toString(), String.valueOf(detail.getReturnNum() + productSku.getStockNumber().intValue()));
productSkuMapper.updateByskuIdSub(productSku.getId(), detail.getReturnNum() * -1);
tbProductStockDetail.setSkuId(productSku.getId().toString());
tbProductStockDetail.setLeftNumber(productSku.getStockNumber().intValue());
tbProductStockDetail.setStockNumber(Double.valueOf(detail.getReturnNum()));
}
}
tbProductStockDetail.setLeftNumber(product.getStockNumber());
tbProductStockDetail.setStockNumber(Double.valueOf(detail.getReturnNum()));
productSkuMapper.decrRealSalesNumber(productSku.getId(), detail.getReturnNum());
}

View File

@ -138,14 +138,6 @@ public class ProductService {
it.setProductSkuResult(skuResult);
// 查询sku信息
List<TbProductSku> skuWithBLOBs = tbProductSkuMapper.selectByProductCheckGrounding(it.getId());
List<TbProductSku> skus = tbProductSkuMapper.selectByProductId(it.getId());
if (it.getIsDistribute() == 0) {
int num = 0;
for (TbProductSku item : skus) {
num += item.getStockNumber();
}
it.setStockNumber(num);
}
it.setSkuList(skuWithBLOBs);
it.setGroundingSpecInfo(querySpec(Integer.valueOf(shopId), it.getId()));
@ -156,33 +148,19 @@ public class ProductService {
}
public void incrStock(String productId, String skuId, int addNum) {
TbProductWithBLOBs product = tbProductMapper.selectByPrimaryKey(Integer.valueOf(productId));
if (true ||product.getIsDistribute() == 1) {
tbProductMapper.incrStock(productId, addNum);
}else {
tbProductSkuMapper.incrStock(skuId, addNum);
}
tbProductMapper.incrStock(productId, addNum);
}
public void decrStock(String productId, String skuId, int decrNum) {
TbProductWithBLOBs product = tbProductMapper.selectByPrimaryKey(Integer.valueOf(productId));
if (true || product.getIsDistribute() == 1) {
if (product.getIsStock() == 1) {
if (tbProductMapper.decrStock(productId, decrNum) < 1) {
throw new MsgException("库存不足,下单失败");
}
}else {
tbProductMapper.decrStockUnCheck(productId, decrNum);
}
}else {
if (product.getIsStock() == 1) {
if (tbProductSkuMapper.decrStock(String.valueOf(skuId), decrNum) < 1) {
throw new MsgException("库存不足,下单失败");
}
}else {
tbProductSkuMapper.decrStockUnCheck(String.valueOf(skuId), decrNum);
if (product.getIsStock() == 1) {
if (tbProductMapper.decrStock(productId, decrNum) < 1) {
throw new MsgException("库存不足,下单失败");
}
} else {
tbProductMapper.decrStockUnCheck(productId, decrNum);
}
}
public void updateState(ProductStatusDTO productStatusDTO) {
@ -196,37 +174,33 @@ public class ProductService {
}
}
public void updateStock(ProductStockDTO productStockDTO,String loginName) {
public void updateStock(ProductStockDTO productStockDTO, String loginName) {
TbProduct product = tbProductMapper.selectByShopIdAndId(productStockDTO.getProductId(), productStockDTO.getShopId());
if (product == null) {
throw new MsgException("商品不存在");
}
if (product.getIsDistribute() != 1 && product.getTypeEnum().equals("sku")) {
throw new MsgException("多规格非共享商品暂不支持修改库存");
} else {
tbProductMapper.updateStock(productStockDTO.getShopId(), productStockDTO.getProductId(), productStockDTO.getStock());
tbProductSkuMapper.updateStock(productStockDTO.getShopId(), productStockDTO.getProductId(), productStockDTO.getStock());
List<TbProductSku> tbProductSkus = tbProductSkuMapper.selectByProductId(product.getId());
JSONObject data = new JSONObject();
data.put("shopId", productStockDTO.getShopId());
data.put("skuId", tbProductSkus.isEmpty() ? null : tbProductSkus.get(0).getId());
data.put("productId", productStockDTO.getProductId());
tbProductMapper.updateStock(productStockDTO.getShopId(), productStockDTO.getProductId(), productStockDTO.getStock());
JSONObject data = new JSONObject();
data.put("shopId", productStockDTO.getShopId());
data.put("skuId", null);
data.put("productId", productStockDTO.getProductId());
// data.put("type", "pc收银机修改库存");
data.put("subType", product.getStockNumber() > productStockDTO.getStock() ? -1 : 1);
data.put("number", productStockDTO.getStock() - product.getStockNumber());
data.put("operator", loginName);
data.put("remark", "pc收银机修改库存");
if (product.getStockNumber() > productStockDTO.getStock()) {
data.put("type", "盘点出库");
}else {
data.put("type", "盘点入库");
}
producer.sendStockRecordMsg(data);
data.put("subType", product.getStockNumber() > productStockDTO.getStock() ? -1 : 1);
data.put("number", productStockDTO.getStock() - product.getStockNumber());
data.put("operator", loginName);
data.put("remark", "pc收银机修改库存");
if (product.getStockNumber() > productStockDTO.getStock()) {
data.put("type", "盘点出库");
} else {
data.put("type", "盘点入库");
}
producer.sendStockRecordMsg(data);
}
private static void generateCombinations(List<List<String>> valuesList, int index, List<String> current, List<String> result) {
if (index == valuesList.size()) {
result.add(String.join(",", current));