商品共享库存字段
This commit is contained in:
@@ -169,24 +169,14 @@ public class TbProductServiceImpl implements TbProductService {
|
||||
|
||||
tbProductVo.setMaxPrice(maxPrice);
|
||||
|
||||
if (product.getIsDistribute() == 1) {
|
||||
stockNumber = product.getStockNumber() == null ? 0 : product.getStockNumber();
|
||||
TbProductSku tbProductSku = null;
|
||||
if (isAdmin) {
|
||||
if (!tbProductSkus.isEmpty()) {
|
||||
tbProductSku = BeanUtil.copyProperties(tbProductSkus.get(0), TbProductSku.class);
|
||||
tbProductSku.setStockNumber(stockNumber);
|
||||
}
|
||||
skuList.add(tbProductSku);
|
||||
}
|
||||
} else {
|
||||
for (TbProductSku sku : tbProductSkus) {
|
||||
//sku
|
||||
if (sku.getProductId().equals(product.getId().toString())) {
|
||||
skuList.add(sku);
|
||||
stockNumber = isAdmin ? sku.getStockNumber() : stockNumber + sku.getStockNumber();
|
||||
}
|
||||
stockNumber = product.getStockNumber() == null ? 0 : product.getStockNumber();
|
||||
TbProductSku tbProductSku = null;
|
||||
if (isAdmin) {
|
||||
if (!tbProductSkus.isEmpty()) {
|
||||
tbProductSku = BeanUtil.copyProperties(tbProductSkus.get(0), TbProductSku.class);
|
||||
tbProductSku.setStockNumber(stockNumber);
|
||||
}
|
||||
skuList.add(tbProductSku);
|
||||
}
|
||||
tbProductVo.setStockNumber(stockNumber);
|
||||
tbProductVo.setSkuList(skuList);
|
||||
@@ -716,7 +706,6 @@ public class TbProductServiceImpl implements TbProductService {
|
||||
map.put("是否促销1-是0-否", tbProduct.getIsOnSale());
|
||||
map.put("是否展示0-下架 1上架---废弃", tbProduct.getIsShow());
|
||||
map.put("商品规格:0-单规格 1多规格", tbProduct.getTypeEnum());
|
||||
map.put("是否独立分销", tbProduct.getIsDistribute());
|
||||
map.put("是否回收站 0-否,1回收站", tbProduct.getIsDel());
|
||||
map.put("是否开启库存", tbProduct.getIsStock());
|
||||
map.put("是否暂停销售", tbProduct.getIsPauseSale());
|
||||
@@ -826,11 +815,8 @@ public class TbProductServiceImpl implements TbProductService {
|
||||
tbProductSkus.forEach(item2 -> {
|
||||
Map<String, Object> itemMap = BeanUtil.beanToMap(item2, false, true);
|
||||
|
||||
if (item.getIsDistribute().equals(1)) {
|
||||
itemMap.put("stockNumber", item.getStockNumber());
|
||||
} else {
|
||||
itemMap.put("stockNumber", item2.getStockNumber());
|
||||
}
|
||||
itemMap.put("stockNumber", item.getStockNumber());
|
||||
|
||||
specList.add(itemMap);
|
||||
});
|
||||
|
||||
|
||||
@@ -236,7 +236,6 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
throw new BadRequestException("商品有误");
|
||||
}
|
||||
|
||||
boolean isDistribute = product.getIsDistribute() == 1;
|
||||
|
||||
// 保存库存详情
|
||||
TbProductStockDetail productStockDetail = new TbProductStockDetail();
|
||||
@@ -244,7 +243,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
productStockDetail.setCreatedAt(times);
|
||||
productStockDetail.setUpdatedAt(times);
|
||||
productStockDetail.setIsStock(1);
|
||||
Integer round = (int) Math.floor(isDistribute ? product.getStockNumber() : tbProductSku.getStockNumber());
|
||||
Integer round = (int) Math.floor(product.getStockNumber());
|
||||
productStockDetail.setLeftNumber(round);
|
||||
productStockDetail.setProductId(tbProductSku.getProductId());
|
||||
productStockDetail.setProductName(product.getName());
|
||||
@@ -268,7 +267,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
|
||||
// 获取增加后的库存
|
||||
setProSpecInfo(product, tbProductSku, getStockNum(product, tbProductSku, productListDto.getNumber(), false),
|
||||
productListDto.getCostPrice(), isDistribute);
|
||||
productListDto.getCostPrice());
|
||||
break;
|
||||
//后台入库
|
||||
case "purveyor":
|
||||
@@ -281,7 +280,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
// 获取增加后的库存
|
||||
double stockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), true);
|
||||
setProSpecInfo(product, tbProductSku, stockNum,
|
||||
productListDto.getCostPrice(), isDistribute);
|
||||
productListDto.getCostPrice());
|
||||
|
||||
break;
|
||||
case "purchase":
|
||||
@@ -294,7 +293,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
|
||||
// 获取增加后的库存
|
||||
setProSpecInfo(product, tbProductSku, getStockNum(product, tbProductSku, productListDto.getNumber(), true),
|
||||
productListDto.getCostPrice(), isDistribute);
|
||||
productListDto.getCostPrice());
|
||||
break;
|
||||
case "other-out":
|
||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||
@@ -306,7 +305,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
|
||||
// 获取增加后的库存
|
||||
setProSpecInfo(product, tbProductSku, getStockNum(product, tbProductSku, productListDto.getNumber(), false),
|
||||
productListDto.getCostPrice(), isDistribute);
|
||||
productListDto.getCostPrice());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -314,15 +313,9 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
productStockDetail.setUnitName(productListDto.getUnitName());
|
||||
entityManager.persist(productStockDetail);
|
||||
|
||||
if (isDistribute) {
|
||||
//修改成本价
|
||||
tbProductSkuRepository.updateCostByProductId(product.getId().toString(), productListDto.getCostPrice());
|
||||
tbProductRepository.save(product);
|
||||
} else {
|
||||
//sku数量
|
||||
tbProductSku.setCostPrice(productListDto.getCostPrice());
|
||||
productSkuService.update(tbProductSku);
|
||||
}
|
||||
//修改成本价
|
||||
tbProductSkuRepository.updateCostByProductId(product.getId().toString(), productListDto.getCostPrice());
|
||||
tbProductRepository.save(product);
|
||||
idStockMap.put(productListDto.getId(), productStockDetail.getStockNumber());
|
||||
}
|
||||
redisUtils.redisUp(2, resources.getShopId(), idStockMap);
|
||||
@@ -333,35 +326,20 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
}
|
||||
|
||||
private double getStockNum(TbProduct product, TbProductSku productSku, double num, boolean isAdd) {
|
||||
if (product.getIsDistribute() == 1) {
|
||||
product.setStockNumber((int) (isAdd ? product.getStockNumber() + num : product.getStockNumber() - num));
|
||||
return product.getStockNumber();
|
||||
} else {
|
||||
productSku.setStockNumber(isAdd ? productSku.getStockNumber() + num : productSku.getStockNumber() - num);
|
||||
return productSku.getStockNumber();
|
||||
}
|
||||
product.setStockNumber((int) (isAdd ? product.getStockNumber() + num : product.getStockNumber() - num));
|
||||
return product.getStockNumber();
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
}
|
||||
|
||||
private void setProSpecInfo(TbProduct product, TbProductSku productSku, double num, BigDecimal cost, boolean isShareStock) {
|
||||
private void setProSpecInfo(TbProduct product, TbProductSku productSku, double num, BigDecimal cost) {
|
||||
if (product.getSpecInfo() != null) {
|
||||
JSONArray specInfoArr = JSON.parseArray(product.getSpecInfo());
|
||||
for (Object item : specInfoArr) {
|
||||
JSONObject jsonObject = (JSONObject) item;
|
||||
if (isShareStock) {
|
||||
jsonObject.put("stockNumber", num);
|
||||
jsonObject.put("costPrice", cost);
|
||||
} else if (productSku != null &&
|
||||
(
|
||||
productSku.getId().equals(jsonObject.getInteger("id")) ||
|
||||
(productSku.getSpecSnap() != null && productSku.getSpecSnap().equals(jsonObject.getString("specSnap")))
|
||||
)) {
|
||||
jsonObject.put("stockNumber", num);
|
||||
jsonObject.put("costPrice", cost);
|
||||
break;
|
||||
}
|
||||
jsonObject.put("stockNumber", num);
|
||||
jsonObject.put("costPrice", cost);
|
||||
|
||||
}
|
||||
product.setSpecInfo(specInfoArr.toJSONString());
|
||||
}
|
||||
@@ -453,8 +431,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
//增加操作日志
|
||||
long times = Instant.now().toEpochMilli();
|
||||
HashMap<String, Object> snapItem = new HashMap<>();
|
||||
snapItem.put("stockNumber", product.getIsDistribute().equals(1) ? product.getStockNumber() - stockRecordMsg.getNumber() :
|
||||
productSku.getStockNumber() - stockRecordMsg.getNumber());
|
||||
snapItem.put("stockNumber", product.getStockNumber() - stockRecordMsg.getNumber());
|
||||
snapItem.put("number", stockRecordMsg.getSubType() == -1 ? -stockRecordMsg.getNumber() : stockRecordMsg.getNumber());
|
||||
snapItem.put("coverImg", product.getCoverImg());
|
||||
snapItem.put("productId", product.getId());
|
||||
@@ -495,8 +472,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
productStockDetail.setSpecSnap(productSku.getSpecSnap());
|
||||
productStockDetail.setStockNumber(Double.valueOf(stockRecordMsg.getNumber()));
|
||||
productStockDetail.setCostAmount(productSku.getSalePrice().multiply(BigDecimal.valueOf(Math.abs(stockRecordMsg.getNumber()))));
|
||||
productStockDetail.setLeftNumber(product.getIsDistribute().equals(1) ? product.getStockNumber() - stockRecordMsg.getNumber()
|
||||
: productSku.getStockNumber().intValue() - stockRecordMsg.getNumber());
|
||||
productStockDetail.setLeftNumber(product.getStockNumber() - stockRecordMsg.getNumber());
|
||||
productStockDetail.setRecordId(stockOperate.getId().toString());
|
||||
productStockDetail.setStockSnap(JSONObject.toJSONString(snapItem));
|
||||
productStockDetail.setSourcePath("CASHIER");
|
||||
|
||||
@@ -128,56 +128,22 @@ public class TbProductStocktakinServiceImpl implements TbProductStocktakinServic
|
||||
snap.put("unitName", tbShopUnit == null ? null : tbShopUnit.getName());
|
||||
// snap.put("specSnap", tbShopUnit == null ? null : tbShopUnit.getName());
|
||||
|
||||
// 共享库存
|
||||
if (product.getIsDistribute() == 1) {
|
||||
phaseNum = productStocktakinDTO.getStocktakinNum() - product.getStockNumber();
|
||||
round = (int) Math.floor( product.getStockNumber());
|
||||
productStocktakin.setPhasePrice(
|
||||
productStocktakinDTO.getPrice().multiply(BigDecimal.valueOf(phaseNum))
|
||||
);
|
||||
phaseNum = productStocktakinDTO.getStocktakinNum() - product.getStockNumber();
|
||||
round = (int) Math.floor(product.getStockNumber());
|
||||
productStocktakin.setPhasePrice(
|
||||
productStocktakinDTO.getPrice().multiply(BigDecimal.valueOf(phaseNum))
|
||||
);
|
||||
|
||||
productStockDetail.setSubType(productStocktakinDTO.getStocktakinNum() > product.getStockNumber() ? 1 : -1);
|
||||
stockOperate.setType(productStocktakinDTO.getStocktakinNum() > product.getStockNumber() ? "盘点入库" : "盘点出库");
|
||||
productStockDetail.setType(productStocktakinDTO.getStocktakinNum() > product.getStockNumber() ? "盘点入库" : "盘点出库");
|
||||
|
||||
productStocktakin.setPhaseNum(productStocktakinDTO.getStocktakinNum() - product.getStockNumber());
|
||||
productStocktakin.setStock(product.getStockNumber());
|
||||
if (tbProductRepository.updateStock(product.getId(), product.getStockNumber(), productStocktakinDTO.getStocktakinNum()) < 1) {
|
||||
throw new BadRequestException("修改库存失败,稍后再试");
|
||||
}
|
||||
snap.put("stockNumber", product.getStockNumber());
|
||||
|
||||
}else {
|
||||
if (productStocktakinDTO.getSkuId() == null) {
|
||||
throw new BadRequestException("非共享库存必须传入skuId");
|
||||
}
|
||||
|
||||
TbProductSku productSku = producSkutMapper.selectByProIdAndId(productStocktakinDTO.getSkuId(),
|
||||
productStocktakinDTO.getProductId());
|
||||
phaseNum = (int) (productStocktakinDTO.getStocktakinNum() - productSku.getStockNumber());
|
||||
|
||||
productStocktakinDTO.setPrice(productSku.getSalePrice());
|
||||
|
||||
|
||||
round = (int) Math.floor( productSku.getStockNumber());
|
||||
productStockDetail.setSpecSnap(productSku.getSpecSnap());
|
||||
|
||||
productStockDetail.setSubType(productStocktakinDTO.getStocktakinNum() > productSku.getStockNumber() ? 1 : -1);
|
||||
stockOperate.setType(productStocktakinDTO.getStocktakinNum() > productSku.getStockNumber() ? "盘点入库" : "盘点出库");
|
||||
productStockDetail.setType(productStocktakinDTO.getStocktakinNum() > productSku.getStockNumber() ? "盘点入库" : "盘点出库");
|
||||
productStocktakin.setSkuId(productSku.getId());
|
||||
productStocktakin.setPhasePrice(
|
||||
productStocktakinDTO.getPrice().multiply(BigDecimal.valueOf(phaseNum))
|
||||
);
|
||||
productStocktakin.setStock(productSku.getStockNumber().intValue());
|
||||
|
||||
productStocktakin.setPhaseNum((int) (productStocktakinDTO.getStocktakinNum() - productSku.getStockNumber()));
|
||||
if (producSkutMapper.updateStock(productSku.getId(), productSku.getStockNumber(), productStocktakinDTO.getStocktakinNum()) < 1) {
|
||||
throw new BadRequestException("修改库存失败,稍后再试");
|
||||
}
|
||||
snap.put("stockNumber", productSku.getStockNumber());
|
||||
productStockDetail.setSubType(productStocktakinDTO.getStocktakinNum() > product.getStockNumber() ? 1 : -1);
|
||||
stockOperate.setType(productStocktakinDTO.getStocktakinNum() > product.getStockNumber() ? "盘点入库" : "盘点出库");
|
||||
productStockDetail.setType(productStocktakinDTO.getStocktakinNum() > product.getStockNumber() ? "盘点入库" : "盘点出库");
|
||||
|
||||
productStocktakin.setPhaseNum(productStocktakinDTO.getStocktakinNum() - product.getStockNumber());
|
||||
productStocktakin.setStock(product.getStockNumber());
|
||||
if (tbProductRepository.updateStock(product.getId(), product.getStockNumber(), productStocktakinDTO.getStocktakinNum()) < 1) {
|
||||
throw new BadRequestException("修改库存失败,稍后再试");
|
||||
}
|
||||
snap.put("stockNumber", product.getStockNumber());
|
||||
snap.put("number", phaseNum);
|
||||
productStocktakin.setPrice(productStocktakinDTO.getPrice());
|
||||
productStockDetail.setStockNumber((double) phaseNum);
|
||||
|
||||
@@ -319,9 +319,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
||||
throw new BadRequestException("商品不存在或已下架, id: " + addCartDTO.getSkuId());
|
||||
}
|
||||
|
||||
if ((product.getIsDistribute().equals(1) && product.getStockNumber() < 1)
|
||||
|| (!product.getIsDistribute().equals(1) && productSku.getStockNumber() < 1)
|
||||
) {
|
||||
if (product.getStockNumber() < 1) {
|
||||
throw new BadRequestException(product.getName() + "商品库存不足");
|
||||
}
|
||||
|
||||
@@ -622,12 +620,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
||||
* @param addNum 增加的库存数量
|
||||
*/
|
||||
public void incrStock(Integer productId, Integer skuId, Integer addNum) {
|
||||
TbProduct product = productMapper.selectById(productId);
|
||||
if (product.getIsDistribute() == 1) {
|
||||
productMapper.incrStock(product.getId(), addNum);
|
||||
} else {
|
||||
producSkutMapper.incrStock(skuId, addNum);
|
||||
}
|
||||
productMapper.incrStock(productId, addNum);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -639,22 +632,12 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
||||
*/
|
||||
public void decrStock(Integer productId, String skuId, int decrNum) {
|
||||
TbProduct product = productMapper.selectById(productId);
|
||||
if (product.getIsDistribute() == 1) {
|
||||
if (product.getIsStock() == 1) {
|
||||
if (productMapper.decrStock(productId, decrNum) < 1) {
|
||||
throw new BadRequestException(product.getName() + "库存不足,下单失败");
|
||||
}
|
||||
} else {
|
||||
productMapper.decrStockUnCheck(productId, decrNum);
|
||||
if (product.getIsStock() == 1) {
|
||||
if (productMapper.decrStock(productId, decrNum) < 1) {
|
||||
throw new BadRequestException(product.getName() + "库存不足,下单失败");
|
||||
}
|
||||
} else {
|
||||
if (product.getIsStock() == 1) {
|
||||
if (producSkutMapper.decrStock(String.valueOf(skuId), decrNum) < 1) {
|
||||
throw new BadRequestException(product.getName() + "库存不足,下单失败");
|
||||
}
|
||||
} else {
|
||||
producSkutMapper.decrStockUnCheck(String.valueOf(skuId), decrNum);
|
||||
}
|
||||
productMapper.decrStockUnCheck(productId, decrNum);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user