Merge branch 'refs/heads/share-stock' into dev
This commit is contained in:
@@ -15,24 +15,31 @@
|
||||
*/
|
||||
package cn.ysk.cashier.service.impl.order;
|
||||
|
||||
import cn.ysk.cashier.dto.product.TbProductDto;
|
||||
import cn.ysk.cashier.pojo.order.TbCashierCart;
|
||||
import cn.ysk.cashier.utils.ValidationUtil;
|
||||
import cn.ysk.cashier.utils.FileUtil;
|
||||
import cn.ysk.cashier.pojo.product.TbProduct;
|
||||
import cn.ysk.cashier.repository.product.TbProductRepository;
|
||||
import cn.ysk.cashier.repository.product.TbProductSkuRepository;
|
||||
import cn.ysk.cashier.service.product.TbProductService;
|
||||
import cn.ysk.cashier.utils.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import cn.ysk.cashier.repository.order.TbCashierCartRepository;
|
||||
import cn.ysk.cashier.service.order.TbCashierCartService;
|
||||
import cn.ysk.cashier.dto.order.TbCashierCartDto;
|
||||
import cn.ysk.cashier.dto.order.TbCashierCartQueryCriteria;
|
||||
import cn.ysk.cashier.mapper.order.TbCashierCartMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import cn.ysk.cashier.utils.PageUtil;
|
||||
import cn.ysk.cashier.utils.QueryHelp;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.io.IOException;
|
||||
import javax.persistence.criteria.*;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
@@ -47,8 +54,14 @@ import java.util.LinkedHashMap;
|
||||
@RequiredArgsConstructor
|
||||
public class TbCashierCartServiceImpl implements TbCashierCartService {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(TbCashierCartServiceImpl.class);
|
||||
private final TbCashierCartRepository tbCashierCartRepository;
|
||||
private final TbCashierCartMapper tbCashierCartMapper;
|
||||
private final TbProductService tbproductService;
|
||||
private final TbProductSkuRepository skuRepository;
|
||||
private final RedisUtils redisUtils;
|
||||
private final TbProductRepository tbProductRepository;
|
||||
|
||||
|
||||
@Override
|
||||
public Map<String,Object> queryAll(TbCashierCartQueryCriteria criteria, Pageable pageable){
|
||||
@@ -127,4 +140,25 @@ public class TbCashierCartServiceImpl implements TbCashierCartService {
|
||||
}
|
||||
FileUtil.downloadExcel(list, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearExpireOrder(TbCashierCart cart) {
|
||||
String key = CacheKey.PRODUCT + cart.getShopId() + ":product" + cart.getProductId();
|
||||
TbProduct tbProduct = tbProductRepository.findById(Integer.valueOf(cart.getProductId())).orElse(null);
|
||||
if (tbProduct == null) {
|
||||
log.warn("清空购物车查询订单失败,product id: {}", cart.getProductId());
|
||||
return;
|
||||
}
|
||||
if (tbProduct.getIsDistribute() == 1) {
|
||||
tbproductService.incrStockNumber(cart.getProductId(), cart.getNumber());
|
||||
} else {
|
||||
key = CacheKey.PRODUCT + cart.getShopId() + ":" + cart.getId();
|
||||
skuRepository.updateStockNumber(Integer.valueOf(cart.getSkuId()),cart.getNumber().doubleValue());
|
||||
}
|
||||
|
||||
// 减去销量
|
||||
if (cart.getNumber() > 0) {
|
||||
redisUtils.decrBy(key, cart.getNumber());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,40 @@
|
||||
package cn.ysk.cashier.service.impl.productimpl;
|
||||
|
||||
import cn.ysk.cashier.dto.product.OutAndOnDto;
|
||||
import cn.ysk.cashier.dto.product.StockQueryDto;
|
||||
import cn.ysk.cashier.dto.product.TbProductDto;
|
||||
import cn.ysk.cashier.exception.BadRequestException;
|
||||
import cn.ysk.cashier.pojo.product.TbProductSku;
|
||||
import cn.ysk.cashier.repository.product.TbProductSkuRepository;
|
||||
import cn.ysk.cashier.service.TbProductStockOperateService;
|
||||
import cn.ysk.cashier.service.product.StockService;
|
||||
import cn.ysk.cashier.service.product.TbProductService;
|
||||
import cn.ysk.cashier.utils.FileUtil;
|
||||
import cn.ysk.cashier.utils.RedisUtils;
|
||||
import cn.ysk.cashier.utils.StringUtils;
|
||||
import cn.ysk.cashier.vo.StockUpdateValueVO;
|
||||
import cn.ysk.cashier.vo.StockV2Vo;
|
||||
import cn.ysk.cashier.vo.StockVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.xssf.usermodel.XSSFCell;
|
||||
import org.apache.poi.xssf.usermodel.XSSFRow;
|
||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.PersistenceContext;
|
||||
import javax.persistence.Query;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.transaction.Transactional;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
@@ -29,16 +46,34 @@ public class StockServiceImpl implements StockService {
|
||||
private final TbProductService productService;
|
||||
private final RedisUtils redisUtils;
|
||||
|
||||
|
||||
private final TbProductStockOperateService stockOperateService;
|
||||
private final TbProductSkuRepository skuRepository;
|
||||
|
||||
@PersistenceContext
|
||||
private EntityManager em;
|
||||
|
||||
@Override
|
||||
public Page queryAll(StockQueryDto criteria, Integer page, Integer size) {
|
||||
Pageable pageable = PageRequest.of(page, size);
|
||||
return tbProductSkuRepository.searchProStock(criteria.getShopId(), criteria.getName(), criteria.getIsStock(),criteria.getNum(), pageable);
|
||||
return tbProductSkuRepository.searchProStock(criteria.getShopId(), criteria.getName(), criteria.getIsStock(), criteria.getNum(), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page queryAllV2(StockQueryDto criteria, Integer page, Integer size) {
|
||||
Pageable pageable = PageRequest.of(page, size);
|
||||
return tbProductSkuRepository.searchProStockV2(criteria.getShopId(), criteria.getName(), criteria.getIsStock(), pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StockV2Vo> queryProductSku(String productId) {
|
||||
return tbProductSkuRepository.searchProductSkuByProductId(productId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void download(StockQueryDto criteria, HttpServletResponse response) throws IOException {
|
||||
List<Map<String, Object>> list = new ArrayList<>();
|
||||
List<StockVo> stockVos = tbProductSkuRepository.searchProStock(criteria.getShopId(), criteria.getName(), criteria.getIsStock(),criteria.getNum());
|
||||
List<StockVo> stockVos = tbProductSkuRepository.searchProStock(criteria.getShopId(), criteria.getName(), criteria.getIsStock(), criteria.getNum());
|
||||
for (StockVo all : stockVos) {
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("id(如需导入,该值不可变)", all.getId());
|
||||
@@ -54,20 +89,228 @@ public class StockServiceImpl implements StockService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void inHouse(String shopId,List<StockVo> list) {
|
||||
Map<Integer, Double> idStockMap=new HashMap<>();
|
||||
for (StockVo stockVo : list) {
|
||||
tbProductSkuRepository.updateStockNumber2(stockVo.getId(),shopId,Double.parseDouble(stockVo.getNumber().toString()));
|
||||
idStockMap.put(stockVo.getId(),Double.parseDouble(stockVo.getNumber().toString()));
|
||||
public void downloadV2(StockQueryDto summaryDto, HttpServletResponse response) throws IOException {
|
||||
List<Map<String, Object>> list = new ArrayList<>();
|
||||
List<StockV2Vo> stockVos = tbProductSkuRepository.searchProStockV2(summaryDto.getShopId(), summaryDto.getName(), summaryDto.getIsStock());
|
||||
for (StockV2Vo all : stockVos) {
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("id(如需导入,该值不可变)", all.getProId());
|
||||
map.put("商品名称", all.getName());
|
||||
map.put("商品skuId(如需导入,该值不可变)", all.getSkuId());
|
||||
map.put("商品类型", all.getType());
|
||||
map.put("商品规格", all.getSpecSnap());
|
||||
map.put("商品单位", all.getUnitName());
|
||||
map.put("库存数量", all.getStockNumber());
|
||||
map.put("库存开关", all.getIsStock().equals(0) ? "否" : "是");
|
||||
map.put("是否共享库存", all.getIsDistribute().equals(0) ? "否" : "是");
|
||||
map.put("是否售罄", all.getIsPauseSale().equals(0) ? "否" : "是");
|
||||
list.add(map);
|
||||
|
||||
if (all.getIsDistribute().equals(1)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
List<StockV2Vo> skuList = queryProductSku(all.getProId().toString());
|
||||
for (StockV2Vo sku : skuList) {
|
||||
Map<String, Object> skuMap = new LinkedHashMap<>();
|
||||
skuMap.put("id(如需导入,该值不可变)", "");
|
||||
skuMap.put("商品名称", all.getName());
|
||||
skuMap.put("商品skuId(如需导入,该值不可变)", sku.getSkuId());
|
||||
skuMap.put("商品类型", sku.getType());
|
||||
skuMap.put("商品规格", sku.getSpecSnap());
|
||||
skuMap.put("商品单位", sku.getUnitName());
|
||||
skuMap.put("库存数量", sku.getStockNumber());
|
||||
skuMap.put("库存开关", sku.getIsStock().equals(0) ? "否" : "是");
|
||||
skuMap.put("是否共享库存", sku.getIsDistribute().equals(0) ? "否" : "是");
|
||||
skuMap.put("是否售罄", sku.getIsPauseSale().equals(0) ? "否" : "是");
|
||||
list.add(skuMap);
|
||||
}
|
||||
}
|
||||
redisUtils.redisUp(2,shopId,idStockMap);
|
||||
FileUtil.downloadExcel(list, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void importExcel(String shopId, MultipartFile file) throws IOException {
|
||||
//根据路径获取这个操作excel的实例
|
||||
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file.getInputStream());
|
||||
//根据页面index 获取sheet页
|
||||
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
|
||||
XSSFRow row = null;
|
||||
List<StockVo> list = new ArrayList<>();
|
||||
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
|
||||
row = sheet.getRow(i);
|
||||
if (row != null) {
|
||||
if (row.getCell(0) != null) {
|
||||
Optional<TbProductSku> byId = skuRepository.findById(Integer.valueOf(row.getCell(0).toString()));
|
||||
if (byId.isPresent()) {
|
||||
TbProductSku sku = byId.get();
|
||||
list.add(new StockVo(
|
||||
sku.getId(),
|
||||
row.getCell(1).toString(),
|
||||
row.getCell(4).toString(),
|
||||
row.getCell(3).toString(),
|
||||
row.getCell(5).toString(),
|
||||
sku.getStockNumber()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log.info("库存导入.importExcel.data:" + list);
|
||||
OutAndOnDto outAndOnDto = new OutAndOnDto();
|
||||
outAndOnDto.setShopId(shopId);
|
||||
outAndOnDto.setList(new ArrayList<>(list));
|
||||
outAndOnDto.setType("purchase");
|
||||
outAndOnDto.setRemark("一次性导入 库存数会覆盖");
|
||||
outAndOnDto.setIsImport("true");
|
||||
outAndOnDto.setTime(System.currentTimeMillis());
|
||||
outAndOnDto.setTotalAmount(BigDecimal.ZERO);
|
||||
outAndOnDto.setPaidAmount(BigDecimal.ZERO);
|
||||
stockOperateService.createOutAndONOperate(outAndOnDto);
|
||||
inHouse(shopId, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void importExcelV2(String shopId, MultipartFile file) throws IOException {
|
||||
//根据路径获取这个操作excel的实例
|
||||
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file.getInputStream());
|
||||
//根据页面index 获取sheet页
|
||||
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
|
||||
XSSFRow row = null;
|
||||
List<StockV2Vo> list = new ArrayList<>();
|
||||
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
|
||||
row = sheet.getRow(i);
|
||||
if (row != null) {
|
||||
XSSFCell cell0 = row.getCell(0);
|
||||
String productIdStr = cell0.toString();
|
||||
if (StringUtils.isBlank(productIdStr)) {
|
||||
Optional<TbProductSku> byId = skuRepository.findById(Double.valueOf(row.getCell(2).toString()).intValue());
|
||||
if (byId.isPresent()) {
|
||||
TbProductSku sku = byId.get();
|
||||
list.add(new StockV2Vo(
|
||||
0,
|
||||
sku.getId(),
|
||||
row.getCell(1).toString(),
|
||||
row.getCell(5).toString(),
|
||||
row.getCell(4).toString(),
|
||||
row.getCell(6).toString(),
|
||||
sku.getStockNumber(),
|
||||
0
|
||||
));
|
||||
}
|
||||
} else {
|
||||
TbProductDto product = productService.findById(Double.valueOf(productIdStr).intValue());
|
||||
if (product != null) {
|
||||
Object number = "0";
|
||||
if (product.getIsDistribute().equals(1)) {
|
||||
number = row.getCell(6).toString();
|
||||
}
|
||||
list.add(new StockV2Vo(
|
||||
product.getId(),
|
||||
0,
|
||||
product.getName(),
|
||||
row.getCell(5).toString(),
|
||||
row.getCell(4).toString(),
|
||||
number,
|
||||
product.getStockNumber(),
|
||||
product.getIsDistribute()
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log.info("库存导入.importExcel.data:" + list);
|
||||
OutAndOnDto outAndOnDto = new OutAndOnDto();
|
||||
outAndOnDto.setShopId(shopId);
|
||||
outAndOnDto.setList(new ArrayList<>(list));
|
||||
outAndOnDto.setType("purchase");
|
||||
outAndOnDto.setRemark("一次性导入 库存数会覆盖");
|
||||
outAndOnDto.setIsImport("true");
|
||||
outAndOnDto.setTime(System.currentTimeMillis());
|
||||
outAndOnDto.setTotalAmount(BigDecimal.ZERO);
|
||||
outAndOnDto.setPaidAmount(BigDecimal.ZERO);
|
||||
stockOperateService.createOutAndONOperate(outAndOnDto);
|
||||
inHouseV2(shopId, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void inHouse(String shopId, List<StockVo> list) {
|
||||
Map<Integer, Double> idStockMap = new HashMap<>();
|
||||
for (StockVo stockVo : list) {
|
||||
tbProductSkuRepository.updateStockNumber2(stockVo.getId(), shopId, Double.parseDouble(stockVo.getNumber().toString()));
|
||||
idStockMap.put(stockVo.getId(), Double.parseDouble(stockVo.getNumber().toString()));
|
||||
}
|
||||
redisUtils.redisUp(2, shopId, idStockMap);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void inHouseV2(String shopId, List<StockV2Vo> list) {
|
||||
Map<Integer, Double> idStockMap = new HashMap<>();
|
||||
for (StockV2Vo stockVo : list) {
|
||||
if (stockVo.getProId() == 0) {
|
||||
tbProductSkuRepository.updateStockNumber2(stockVo.getSkuId(), shopId, Double.parseDouble(stockVo.getNumber().toString()));
|
||||
} else {
|
||||
productService.updateStockNumber(stockVo.getProId(), Double.parseDouble(stockVo.getNumber().toString()));
|
||||
}
|
||||
idStockMap.put(stockVo.getSkuId(), Double.parseDouble(stockVo.getNumber().toString()));
|
||||
}
|
||||
redisUtils.redisUp(2, shopId, idStockMap);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void updateIsStock(Integer proId, String shopId,Integer isStock) {
|
||||
productService.updateIsStock(proId,shopId,isStock);
|
||||
public void updateIsStock(Integer proId, String shopId, Integer isStock) {
|
||||
productService.updateIsStock(proId, shopId, isStock);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateProductStatus(StockUpdateValueVO updateValueVO) {
|
||||
if (!"0".equals(updateValueVO.getUpdateValue()) && !"1".equals(updateValueVO.getUpdateValue())) {
|
||||
throw new BadRequestException("无效值");
|
||||
}
|
||||
if (StringUtils.isBlank(updateValueVO.getTargetId())) {
|
||||
throw new BadRequestException("更新id不能为空");
|
||||
}
|
||||
StringBuilder sqlQuery = new StringBuilder("update tb_product ");
|
||||
|
||||
switch (updateValueVO.getUpdateKey()) {
|
||||
case "pauseSaleSku":
|
||||
sqlQuery = new StringBuilder("update tb_product_sku set is_pause_sale = ").
|
||||
append(updateValueVO.getUpdateValue()).
|
||||
append(" where id = ").
|
||||
append(updateValueVO.getTargetId()).
|
||||
append(";");
|
||||
|
||||
Query nativeQuery = em.createNativeQuery(String.valueOf(sqlQuery));
|
||||
nativeQuery.executeUpdate();
|
||||
return;
|
||||
case "stock":
|
||||
sqlQuery.append(" set is_stock = ").append(updateValueVO.getUpdateValue());
|
||||
break;
|
||||
case "distribute":
|
||||
sqlQuery.append(" set is_distribute = ").append(updateValueVO.getUpdateValue());
|
||||
break;
|
||||
case "pauseSale":
|
||||
sqlQuery.append(" set is_pause_sale = ").append(updateValueVO.getUpdateValue());
|
||||
break;
|
||||
default:
|
||||
throw new BadRequestException("无效更新类型");
|
||||
}
|
||||
|
||||
sqlQuery.append(" where ");
|
||||
|
||||
if (StringUtils.isNotBlank(updateValueVO.getShopId())) {
|
||||
sqlQuery.append(" shop_id = ").append(updateValueVO.getShopId());
|
||||
sqlQuery.append(" and ");
|
||||
}
|
||||
sqlQuery.append(" id = ").append(updateValueVO.getTargetId());
|
||||
|
||||
sqlQuery.append(" ;");
|
||||
System.out.println(sqlQuery);
|
||||
|
||||
Query nativeQuery = em.createNativeQuery(String.valueOf(sqlQuery));
|
||||
nativeQuery.executeUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,12 +126,16 @@ public class TbProductServiceImpl implements TbProductService {
|
||||
List<TbProductSku> skuList = new ArrayList<>();
|
||||
TbProductVo tbProductVo = new TbProductVo();
|
||||
//sku,并且计算销量以及库存
|
||||
Double stockNumber = 0.00;
|
||||
for (TbProductSku sku : tbProductSkus) {
|
||||
//sku
|
||||
if (sku.getProductId().equals(product.getId().toString())) {
|
||||
skuList.add(sku);
|
||||
stockNumber = stockNumber + sku.getStockNumber();
|
||||
double stockNumber = 0.00;
|
||||
if (product.getIsDistribute() == 1) {
|
||||
stockNumber = Double.valueOf(product.getStockNumber());
|
||||
} else {
|
||||
for (TbProductSku sku : tbProductSkus) {
|
||||
//sku
|
||||
if (sku.getProductId().equals(product.getId().toString())) {
|
||||
skuList.add(sku);
|
||||
stockNumber = stockNumber + sku.getStockNumber();
|
||||
}
|
||||
}
|
||||
}
|
||||
tbProductVo.setStockNumber(stockNumber);
|
||||
@@ -520,6 +524,11 @@ public class TbProductServiceImpl implements TbProductService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStockNumber(Integer id, Double stockNumber) {
|
||||
tbProductRepository.updateProductStockNumber(id, stockNumber.intValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void deleteAll(Integer[] ids) {
|
||||
@@ -604,4 +613,9 @@ public class TbProductServiceImpl implements TbProductService {
|
||||
}
|
||||
FileUtil.downloadExcel(list, response);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrStockNumber(String productId, Integer number) {
|
||||
tbProductRepository.incrProductStockNumber(Integer.valueOf(productId), number);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package cn.ysk.cashier.service.impl.productimpl;
|
||||
|
||||
import cn.ysk.cashier.pojo.product.TbProduct;
|
||||
import cn.ysk.cashier.pojo.shop.TbShopPurveyor;
|
||||
import cn.ysk.cashier.repository.product.TbProductRepository;
|
||||
import cn.ysk.cashier.repository.shop.TbShopPurveyorRepository;
|
||||
import cn.ysk.cashier.utils.*;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@@ -60,6 +62,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
private final EntityManager entityManager;
|
||||
|
||||
private final RedisUtils redisUtils;
|
||||
private final TbProductRepository tbProductRepository;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -205,12 +208,20 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
continue;
|
||||
}
|
||||
TbProductSku tbProductSku = tbProductSkuRepository.findById(productListDto.getId()).orElseGet(TbProductSku::new);
|
||||
|
||||
TbProduct product = tbProductRepository.findById(Integer.valueOf(productListDto.getProductId())).orElseGet(TbProduct::new);
|
||||
if (product.getId() == null) {
|
||||
throw new BadRequestException("商品有误");
|
||||
}
|
||||
|
||||
boolean isDistribute = product.getIsDistribute() == 1;
|
||||
|
||||
TbProductStockDetail productStockDetail = new TbProductStockDetail();
|
||||
productStockDetail.setBatchNumber(resources.getBatchNumber());
|
||||
productStockDetail.setCreatedAt(times);
|
||||
productStockDetail.setUpdatedAt(times);
|
||||
productStockDetail.setIsStock(1);
|
||||
Integer round = (int) Math.floor(tbProductSku.getStockNumber());
|
||||
Integer round = (int) Math.floor(isDistribute ? product.getStockNumber() : tbProductSku.getStockNumber());
|
||||
productStockDetail.setLeftNumber(round);
|
||||
productStockDetail.setProductId(productListDto.getProductId());
|
||||
productStockDetail.setProductName(productListDto.getName());
|
||||
@@ -251,9 +262,14 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
productStockDetail.setType(resources.getType());
|
||||
productStockDetail.setUnitName(productListDto.getUnitName());
|
||||
entityManager.persist(productStockDetail);
|
||||
//sku数量
|
||||
tbProductSku.setStockNumber(tbProductSku.getStockNumber() + productStockDetail.getStockNumber());
|
||||
productSkuService.update(tbProductSku);
|
||||
if (isDistribute) {
|
||||
product.setStockNumber(product.getStockNumber() + productStockDetail.getStockNumber().intValue());
|
||||
tbProductRepository.save(product);
|
||||
} else {
|
||||
//sku数量
|
||||
tbProductSku.setStockNumber(tbProductSku.getStockNumber() + productStockDetail.getStockNumber());
|
||||
productSkuService.update(tbProductSku);
|
||||
}
|
||||
idStockMap.put(productListDto.getId(), productStockDetail.getStockNumber());
|
||||
}
|
||||
redisUtils.redisUp(2, resources.getShopId(), idStockMap);
|
||||
@@ -316,4 +332,4 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
}
|
||||
FileUtil.downloadExcel(list, response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,4 +80,10 @@ public interface TbCashierCartService {
|
||||
* @throws IOException /
|
||||
*/
|
||||
void download(List<TbCashierCartDto> all, HttpServletResponse response) throws IOException;
|
||||
|
||||
/**
|
||||
* 清除过期订单
|
||||
* @param cart 购物车订单
|
||||
*/
|
||||
void clearExpireOrder(TbCashierCart cart);
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
package cn.ysk.cashier.service.product;
|
||||
|
||||
import cn.ysk.cashier.dto.product.StockQueryDto;
|
||||
import cn.ysk.cashier.vo.StockUpdateValueVO;
|
||||
import cn.ysk.cashier.vo.StockV2Vo;
|
||||
import cn.ysk.cashier.vo.StockVo;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
@@ -17,9 +20,21 @@ public interface StockService {
|
||||
*/
|
||||
Page queryAll(StockQueryDto criteria, Integer page, Integer size);
|
||||
|
||||
Page queryAllV2(StockQueryDto criteria, Integer page, Integer size);
|
||||
|
||||
List<StockV2Vo> queryProductSku(String productId);
|
||||
|
||||
void download(StockQueryDto summaryDto, HttpServletResponse response) throws IOException;
|
||||
|
||||
void downloadV2(StockQueryDto summaryDto, HttpServletResponse response) throws IOException;
|
||||
|
||||
void importExcel(String shopId, MultipartFile file) throws IOException;
|
||||
|
||||
void importExcelV2(String shopId, MultipartFile file) throws IOException;
|
||||
|
||||
void inHouse(String shopId,List<StockVo> list);
|
||||
|
||||
void updateIsStock(Integer proId, String shopId,Integer isStock);
|
||||
|
||||
void updateProductStatus(StockUpdateValueVO updateValueVO);
|
||||
}
|
||||
|
||||
@@ -59,6 +59,8 @@ public interface TbProductService {
|
||||
|
||||
void upProSort(TbProductSortCriteria param);
|
||||
|
||||
void updateStockNumber(Integer id, Double stockNumber);
|
||||
|
||||
/**
|
||||
* 多选删除
|
||||
* @param ids /
|
||||
@@ -75,4 +77,11 @@ public interface TbProductService {
|
||||
|
||||
void updateIsHot(Integer id, String shopId);
|
||||
void updateIsStock(Integer proId, String shopId,Integer isStock);
|
||||
}
|
||||
|
||||
/**
|
||||
* 增加库存
|
||||
* @param productId 商品id
|
||||
* @param number 增加数量
|
||||
*/
|
||||
void incrStockNumber(String productId, Integer number);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user