出入库同步修改product spec信息
This commit is contained in:
parent
7bc6ae7b8a
commit
3fc5667100
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue