From 3fc56671005d6fc6846535cf0e9a54291849a3bb Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Wed, 26 Jun 2024 17:27:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=85=A5=E5=BA=93=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9product=20spec=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ysk/cashier/pojo/product/TbProduct.java | 2 +- .../productimpl/TbProductServiceImpl.java | 3 +- .../TbProductStockOperateServiceImpl.java | 71 ++++++++++++++++++- 3 files changed, 71 insertions(+), 5 deletions(-) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProduct.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProduct.java index 08c19e03..5c9ce7bc 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProduct.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProduct.java @@ -318,7 +318,7 @@ public class TbProduct implements Serializable { @Column(name = "stock_number") @ApiModelProperty("库存数量") - private Integer stockNumber; + private Integer stockNumber = 0; public void copy(TbProduct source){ diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java index c46b73af..1480c6ae 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java @@ -42,6 +42,7 @@ import java.math.BigDecimal; import java.time.Instant; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.function.DoubleSupplier; import java.util.stream.Collectors; /** @@ -146,7 +147,7 @@ public class TbProductServiceImpl implements TbProductService { double stockNumber = 0.00; if (product.getIsDistribute() == 1) { - stockNumber = Double.valueOf(product.getStockNumber()); + stockNumber = product.getStockNumber() == null ? 0 : product.getStockNumber(); TbProductSku tbProductSku = null; if (isAdmin) { if (!tbProductSkus.isEmpty()) { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockOperateServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockOperateServiceImpl.java index 91a4cdff..e7c9592d 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockOperateServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockOperateServiceImpl.java @@ -6,6 +6,7 @@ import cn.ysk.cashier.repository.product.TbProductRepository; import cn.ysk.cashier.repository.shop.TbShopPurveyorRepository; import cn.ysk.cashier.utils.*; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.pojo.product.TbProductSku; @@ -21,6 +22,7 @@ import cn.ysk.cashier.repository.shop.TbShopInfoRepository; import cn.ysk.cashier.pojo.shop.TbShopPurveyorTransact; import cn.ysk.cashier.repository.shop.TbShopPurveyorTransactRepository; +import com.alipay.api.domain.Product; import lombok.RequiredArgsConstructor; import cn.ysk.cashier.repository.product.TbProductStockOperateRepository; import cn.ysk.cashier.service.TbProductStockOperateService; @@ -211,6 +213,9 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe TbProductSku tbProductSku = tbProductSkuRepository.findById(productListDto.getId()).orElseGet(TbProductSku::new); TbProduct product = tbProductRepository.findById(Integer.valueOf(productListDto.getProductId())).orElseGet(TbProduct::new); + if (product.getStockNumber() == null) { + product.setStockNumber(0); + } if (product.getId() == null) { throw new BadRequestException("商品有误"); } @@ -244,16 +249,28 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe break; //后台出库 case "refund": - productStockDetail.setStockNumber(isDistribute ? product.getStockNumber() : tbProductSku.getStockNumber()); + productStockDetail.setStockNumber(isDistribute ? product.getStockNumber() + productListDto.getNumber() : tbProductSku.getStockNumber()); productStockDetail.setSubType(1); totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber())); productStockDetail.setCostAmount(totalCostPrice); productStockDetail.setType("供应商出库"); + // 获取增加后的库存 + double refundStockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), false); + setProSpecInfo(product, tbProductSku.getSpecSnap(), refundStockNum, + productListDto.getCostPrice(), isDistribute); + break; case "reject": productStockDetail.setStockNumber((double) -productListDto.getNumber()); productStockDetail.setSubType(-1); + totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber())); + productStockDetail.setCostAmount(totalCostPrice); + productStockDetail.setType("供应商出库"); + + // 获取增加后的库存 + setProSpecInfo(product, tbProductSku.getSpecSnap(), getStockNum(product, tbProductSku, productListDto.getNumber(), false), + productListDto.getCostPrice(), isDistribute); break; //后台入库 case "purveyor": @@ -263,28 +280,48 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe productStockDetail.setCostAmount(totalCostPrice); productStockDetail.setType("供应商入库"); + // 获取增加后的库存 + double stockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), true); + setProSpecInfo(product, tbProductSku.getSpecSnap(), stockNum, + productListDto.getCostPrice(), isDistribute); + break; case "purchase": productStockDetail.setStockNumber((double) productListDto.getNumber()); productStockDetail.setSubType(1); + + totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber())); + productStockDetail.setCostAmount(totalCostPrice); + productStockDetail.setType("其他入库"); + + // 获取增加后的库存 + setProSpecInfo(product, tbProductSku.getSpecSnap(), getStockNum(product, tbProductSku, productListDto.getNumber(), true), + productListDto.getCostPrice(), isDistribute); break; case "other-out": productStockDetail.setStockNumber((double) -productListDto.getNumber()); productStockDetail.setSubType(-1); + + totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber())); + productStockDetail.setCostAmount(totalCostPrice); + productStockDetail.setType("其他出库"); + + // 获取增加后的库存 + setProSpecInfo(product, tbProductSku.getSpecSnap(), getStockNum(product, tbProductSku, productListDto.getNumber(), false), + productListDto.getCostPrice(), isDistribute); break; default: break; } productStockDetail.setUnitName(productListDto.getUnitName()); entityManager.persist(productStockDetail); + if (isDistribute) { - product.setStockNumber(product.getStockNumber() + productStockDetail.getStockNumber().intValue()); //修改成本价 tbProductSkuRepository.updateCostByProductId(product.getId().toString(), productListDto.getCostPrice()); tbProductRepository.save(product); } else { //sku数量 - tbProductSku.setStockNumber(tbProductSku.getStockNumber() + productStockDetail.getStockNumber()); tbProductSku.setCostPrice(productListDto.getCostPrice()); productSkuService.update(tbProductSku); } @@ -297,6 +334,34 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe return resources; } + 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(); + } + } + + private void setProSpecInfo(TbProduct product, String specSnap, double num, BigDecimal cost, boolean isShareStock) { + 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 (specSnap.equals(jsonObject.getString("specSnap"))) { + jsonObject.put("stockNumber", num); + jsonObject.put("costPrice", cost); + break; + } + } + product.setSpecInfo(specInfoArr.toJSONString()); + } + } + @Override @Transactional(rollbackFor = Exception.class)