出入库同步修改product spec信息
This commit is contained in:
@@ -318,7 +318,7 @@ public class TbProduct implements Serializable {
|
|||||||
|
|
||||||
@Column(name = "stock_number")
|
@Column(name = "stock_number")
|
||||||
@ApiModelProperty("库存数量")
|
@ApiModelProperty("库存数量")
|
||||||
private Integer stockNumber;
|
private Integer stockNumber = 0;
|
||||||
|
|
||||||
|
|
||||||
public void copy(TbProduct source){
|
public void copy(TbProduct source){
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import java.math.BigDecimal;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.function.DoubleSupplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -146,7 +147,7 @@ public class TbProductServiceImpl implements TbProductService {
|
|||||||
double stockNumber = 0.00;
|
double stockNumber = 0.00;
|
||||||
|
|
||||||
if (product.getIsDistribute() == 1) {
|
if (product.getIsDistribute() == 1) {
|
||||||
stockNumber = Double.valueOf(product.getStockNumber());
|
stockNumber = product.getStockNumber() == null ? 0 : product.getStockNumber();
|
||||||
TbProductSku tbProductSku = null;
|
TbProductSku tbProductSku = null;
|
||||||
if (isAdmin) {
|
if (isAdmin) {
|
||||||
if (!tbProductSkus.isEmpty()) {
|
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.repository.shop.TbShopPurveyorRepository;
|
||||||
import cn.ysk.cashier.utils.*;
|
import cn.ysk.cashier.utils.*;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import cn.ysk.cashier.exception.BadRequestException;
|
import cn.ysk.cashier.exception.BadRequestException;
|
||||||
import cn.ysk.cashier.pojo.product.TbProductSku;
|
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.pojo.shop.TbShopPurveyorTransact;
|
||||||
import cn.ysk.cashier.repository.shop.TbShopPurveyorTransactRepository;
|
import cn.ysk.cashier.repository.shop.TbShopPurveyorTransactRepository;
|
||||||
|
import com.alipay.api.domain.Product;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import cn.ysk.cashier.repository.product.TbProductStockOperateRepository;
|
import cn.ysk.cashier.repository.product.TbProductStockOperateRepository;
|
||||||
import cn.ysk.cashier.service.TbProductStockOperateService;
|
import cn.ysk.cashier.service.TbProductStockOperateService;
|
||||||
@@ -211,6 +213,9 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
|||||||
TbProductSku tbProductSku = tbProductSkuRepository.findById(productListDto.getId()).orElseGet(TbProductSku::new);
|
TbProductSku tbProductSku = tbProductSkuRepository.findById(productListDto.getId()).orElseGet(TbProductSku::new);
|
||||||
|
|
||||||
TbProduct product = tbProductRepository.findById(Integer.valueOf(productListDto.getProductId())).orElseGet(TbProduct::new);
|
TbProduct product = tbProductRepository.findById(Integer.valueOf(productListDto.getProductId())).orElseGet(TbProduct::new);
|
||||||
|
if (product.getStockNumber() == null) {
|
||||||
|
product.setStockNumber(0);
|
||||||
|
}
|
||||||
if (product.getId() == null) {
|
if (product.getId() == null) {
|
||||||
throw new BadRequestException("商品有误");
|
throw new BadRequestException("商品有误");
|
||||||
}
|
}
|
||||||
@@ -244,16 +249,28 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
|||||||
break;
|
break;
|
||||||
//后台出库
|
//后台出库
|
||||||
case "refund":
|
case "refund":
|
||||||
productStockDetail.setStockNumber(isDistribute ? product.getStockNumber() : tbProductSku.getStockNumber());
|
productStockDetail.setStockNumber(isDistribute ? product.getStockNumber() + productListDto.getNumber() : tbProductSku.getStockNumber());
|
||||||
productStockDetail.setSubType(1);
|
productStockDetail.setSubType(1);
|
||||||
totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber()));
|
totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber()));
|
||||||
productStockDetail.setCostAmount(totalCostPrice);
|
productStockDetail.setCostAmount(totalCostPrice);
|
||||||
productStockDetail.setType("供应商出库");
|
productStockDetail.setType("供应商出库");
|
||||||
|
|
||||||
|
// 获取增加后的库存
|
||||||
|
double refundStockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), false);
|
||||||
|
setProSpecInfo(product, tbProductSku.getSpecSnap(), refundStockNum,
|
||||||
|
productListDto.getCostPrice(), isDistribute);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "reject":
|
case "reject":
|
||||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||||
productStockDetail.setSubType(-1);
|
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;
|
break;
|
||||||
//后台入库
|
//后台入库
|
||||||
case "purveyor":
|
case "purveyor":
|
||||||
@@ -263,28 +280,48 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
|||||||
productStockDetail.setCostAmount(totalCostPrice);
|
productStockDetail.setCostAmount(totalCostPrice);
|
||||||
productStockDetail.setType("供应商入库");
|
productStockDetail.setType("供应商入库");
|
||||||
|
|
||||||
|
// 获取增加后的库存
|
||||||
|
double stockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), true);
|
||||||
|
setProSpecInfo(product, tbProductSku.getSpecSnap(), stockNum,
|
||||||
|
productListDto.getCostPrice(), isDistribute);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "purchase":
|
case "purchase":
|
||||||
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
||||||
productStockDetail.setSubType(1);
|
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;
|
break;
|
||||||
case "other-out":
|
case "other-out":
|
||||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||||
productStockDetail.setSubType(-1);
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
productStockDetail.setUnitName(productListDto.getUnitName());
|
productStockDetail.setUnitName(productListDto.getUnitName());
|
||||||
entityManager.persist(productStockDetail);
|
entityManager.persist(productStockDetail);
|
||||||
|
|
||||||
if (isDistribute) {
|
if (isDistribute) {
|
||||||
product.setStockNumber(product.getStockNumber() + productStockDetail.getStockNumber().intValue());
|
|
||||||
//修改成本价
|
//修改成本价
|
||||||
tbProductSkuRepository.updateCostByProductId(product.getId().toString(), productListDto.getCostPrice());
|
tbProductSkuRepository.updateCostByProductId(product.getId().toString(), productListDto.getCostPrice());
|
||||||
tbProductRepository.save(product);
|
tbProductRepository.save(product);
|
||||||
} else {
|
} else {
|
||||||
//sku数量
|
//sku数量
|
||||||
tbProductSku.setStockNumber(tbProductSku.getStockNumber() + productStockDetail.getStockNumber());
|
|
||||||
tbProductSku.setCostPrice(productListDto.getCostPrice());
|
tbProductSku.setCostPrice(productListDto.getCostPrice());
|
||||||
productSkuService.update(tbProductSku);
|
productSkuService.update(tbProductSku);
|
||||||
}
|
}
|
||||||
@@ -297,6 +334,34 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
|||||||
return resources;
|
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
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
|||||||
Reference in New Issue
Block a user