1.新增商品出入库成本价计算

2.新增后台商品列表接口,支持共享库存sku展示
This commit is contained in:
2024-06-26 14:01:03 +08:00
parent 98439a14b8
commit 273c4c64a6
12 changed files with 109 additions and 18 deletions

View File

@@ -71,8 +71,25 @@ public class TbProductServiceImpl implements TbProductService {
private final RedisUtils redisUtils;
public static String setType(String type) {
switch (type) {
case "normal":
return "单规格";
case "sku":
return "多规格";
case "weight":
return "称重商品";
case "currentPrice":
return "套餐商品/团购卷";
case "group":
return "时价商品";
default:
return type;
}
}
@Override
public Map<String, Object> queryAll(TbProductQueryCriteria criteria) {
public Map<String, Object> queryAll(TbProductQueryCriteria criteria, boolean isAdmin) {
Sort sort = Sort.by(Sort.Direction.ASC, "sort");
Pageable pageable = PageRequest.of(criteria.getPage(), criteria.getSize(), sort);
//查询商品数据
@@ -127,14 +144,23 @@ public class TbProductServiceImpl implements TbProductService {
TbProductVo tbProductVo = new TbProductVo();
//sku,并且计算销量以及库存
double stockNumber = 0.00;
if (product.getIsDistribute() == 1) {
stockNumber = Double.valueOf(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 = stockNumber + sku.getStockNumber();
stockNumber = isAdmin ? sku.getStockNumber() : stockNumber + sku.getStockNumber();
}
}
}
@@ -184,11 +210,13 @@ public class TbProductServiceImpl implements TbProductService {
}
}
BeanUtils.copyProperties(product, tbProductVo);
tbProductVo.setTypeEnum(setType(tbProductVo.getTypeEnum()));
tbProductVoList.add(tbProductVo);
}
return PageUtil.toPage(tbProductVoList, page.getTotalElements());
}
@Override
public TbProductVo findByProductId(Integer id) throws Exception {
TbProduct tbProduct = tbProductRepository.findById(id).orElseGet(TbProduct::new);

View File

@@ -36,6 +36,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.*;
import java.io.IOException;
@@ -83,7 +84,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
}
HashMap<String, Object> map = new HashMap<>();
map.put("content",stockOperateVOList);
map.put("totalElements",page.getTotalElements());
map.put("totalElements", page.getTotalElements());
return map;
}
@@ -216,6 +217,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
boolean isDistribute = product.getIsDistribute() == 1;
// 保存库存详情
TbProductStockDetail productStockDetail = new TbProductStockDetail();
productStockDetail.setBatchNumber(resources.getBatchNumber());
productStockDetail.setCreatedAt(times);
@@ -223,30 +225,46 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
productStockDetail.setIsStock(1);
Integer round = (int) Math.floor(isDistribute ? product.getStockNumber() : tbProductSku.getStockNumber());
productStockDetail.setLeftNumber(round);
productStockDetail.setProductId(productListDto.getProductId());
productStockDetail.setProductName(productListDto.getName());
productStockDetail.setProductId(tbProductSku.getProductId());
productStockDetail.setProductName(product.getName());
productStockDetail.setRecordId(saveStockOperate.getId().toString());
productStockDetail.setShopId(resources.getShopId());
productStockDetail.setSkuId(productListDto.getId().toString());
productStockDetail.setSourcePath("NORMAL");
productStockDetail.setStockSnap(productListDto.getSpecSnap());
productListDto.setNumber(productListDto.getNumber() != null ? productListDto.getNumber() : 0);
tbProductSku.setCostPrice(productListDto.getCostPrice());
// 总成本价
BigDecimal totalCostPrice;
productStockDetail.setType(resources.getType());
switch (resources.getType()) {
case "sale":
productStockDetail.setStockNumber((double) -productListDto.getNumber());
productStockDetail.setSubType(-1);
break;
//后台出库
case "refund":
productStockDetail.setStockNumber((double) productListDto.getNumber());
productStockDetail.setStockNumber(isDistribute ? product.getStockNumber() : tbProductSku.getStockNumber());
productStockDetail.setSubType(1);
totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber()));
productStockDetail.setCostAmount(totalCostPrice);
setProOrSkuCost(product, tbProductSku,totalCostPrice, false);
productStockDetail.setType("供应商出库");
break;
case "reject":
productStockDetail.setStockNumber((double) -productListDto.getNumber());
productStockDetail.setSubType(-1);
break;
//后台入库
case "purveyor":
productStockDetail.setStockNumber((double) productListDto.getNumber());
productStockDetail.setStockNumber(isDistribute ? product.getStockNumber() : tbProductSku.getStockNumber());
productStockDetail.setSubType(1);
totalCostPrice = productListDto.getCostPrice().multiply(BigDecimal.valueOf(productListDto.getNumber()));
productStockDetail.setCostAmount(totalCostPrice);
setProOrSkuCost(product, tbProductSku,totalCostPrice, true);
productStockDetail.setType("供应商入库");
break;
case "purchase":
productStockDetail.setStockNumber((double) productListDto.getNumber());
@@ -259,15 +277,17 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
default:
break;
}
productStockDetail.setType(resources.getType());
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);
}
idStockMap.put(productListDto.getId(), productStockDetail.getStockNumber());
@@ -279,6 +299,29 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
return resources;
}
/**
* 根据是否共享库存调整成本价
* @param product 商品
* @param tbProductSku sku商品
* @param cost 成本价
* @param isAdd true 增加 false 减少
*/
private void setProOrSkuCost(TbProduct product, TbProductSku tbProductSku, BigDecimal cost, boolean isAdd) {
if (product.getTotalCostPrice() == null) {
product.setTotalCostPrice(BigDecimal.ZERO);
}
if (tbProductSku.getTotalCostPrice() == null) {
tbProductSku.setTotalCostPrice(BigDecimal.ZERO);
}
if (product.getIsDistribute() == 1) {
product.setTotalCostPrice(isAdd ? product.getTotalCostPrice().add(cost) : product.getTotalCostPrice().subtract(cost));
}else {
tbProductSku.setTotalCostPrice(isAdd ? tbProductSku.getTotalCostPrice().add(cost) : tbProductSku.getTotalCostPrice().subtract(cost));
}
}
@Override
@Transactional(rollbackFor = Exception.class)

View File

@@ -21,9 +21,11 @@ public interface TbProductService {
/**
* 查询数据分页
* @param criteria 条件
* @param isAdmin 是否为后台查询
* @return Map<String,Object>
*/
Map<String,Object> queryAll(TbProductQueryCriteria criteria);
Map<String,Object> queryAll(TbProductQueryCriteria criteria, boolean isAdmin);
/**
* 查询所有数据不分页

View File

@@ -80,4 +80,4 @@ public interface TbShopPurveyorService {
* @throws IOException /
*/
void download(List<TbShopPurveyorDto> all, HttpServletResponse response) throws IOException;
}
}