出入库同步修改product spec信息

This commit is contained in:
SongZhang 2024-06-26 17:27:47 +08:00
parent 7bc6ae7b8a
commit 3fc5667100
3 changed files with 71 additions and 5 deletions

View File

@ -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){

View File

@ -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()) {

View File

@ -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)