商品编辑 修改状态日志记录

快捷修改接口 日志记录 商品Id
库存警戒值
/api/summary/productSaleDate 商品销售 时间顺序
This commit is contained in:
2024-10-08 13:24:03 +08:00
parent f16f23ab84
commit 869d14f158
22 changed files with 63 additions and 1152 deletions

View File

@@ -143,22 +143,11 @@ public class TbCashierCartServiceImpl implements TbCashierCartService {
@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());
}
tbproductService.incrStockNumber(cart.getProductId(), cart.getNumber());
}
}

View File

@@ -1,9 +1,5 @@
package cn.ysk.cashier.service.impl.productimpl;
import cn.hutool.core.util.StrUtil;
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.TbProduct;
import cn.ysk.cashier.pojo.product.TbProductSku;
@@ -16,34 +12,24 @@ import cn.ysk.cashier.repository.product.TbProductStockDetailRepository;
import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
import cn.ysk.cashier.repository.shop.TbShopUnitRepository;
import cn.ysk.cashier.service.LogService;
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.*;
import cn.ysk.cashier.utils.JSONUtil;
import cn.ysk.cashier.utils.SecurityUtils;
import cn.ysk.cashier.utils.StringUtils;
import cn.ysk.cashier.utils.WxMsgUtils;
import cn.ysk.cashier.vo.StockUpdateValueVO;
import cn.ysk.cashier.vo.StockUpdateWarnLineVO;
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.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.*;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
@@ -51,12 +37,7 @@ import java.util.*;
public class StockServiceImpl implements StockService {
private final TbProductSkuRepository tbProductSkuRepository;
private final TbProductService productService;
private final RedisUtils redisUtils;
private final TbProductStockOperateService stockOperateService;
private final TbProductSkuRepository skuRepository;
private final TbShopInfoRepository tbShopInfoRepository;
private final TbShopUnitRepository shopUnitRepository;
private final TbProductStockDetailRepository tbProductStockDetailRepository;
@@ -67,288 +48,6 @@ public class StockServiceImpl implements StockService {
@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);
}
@Override
public Page queryAllV2(StockQueryDto criteria, Integer page, Integer size) {
Pageable pageable = PageRequest.of(page, size);
if (StrUtil.isNotBlank(criteria.getSort()) && Boolean.parseBoolean(criteria.getSort())) {
return tbProductSkuRepository.searchProStockV2ByDesc(criteria.getShopId(), criteria.getName(), criteria.getIsStock(), criteria.getCategoryId(), pageable);
}
return tbProductSkuRepository.searchProStockV2(criteria.getShopId(), criteria.getName(), criteria.getIsStock(), criteria.getCategoryId(), 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());
for (StockVo all : stockVos) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("id(如需导入,该值不可变)", all.getId());
map.put("商品名称", all.getName());
map.put("商品类型", all.getType());
map.put("商品规格", all.getSpecSnap());
map.put("商品单位", all.getUnitName());
map.put("库存数量", all.getNumber());
// map.put("库存开关", all.getIsStock().equals(0)?"否":"是");
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
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(), summaryDto.getCategoryId());
for (StockV2Vo all : stockVos) {
if (all.getIsDistribute().equals(1)) {
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);
} else {
List<StockV2Vo> skuList = queryProductSku(all.getProId().toString());
for (StockV2Vo sku : skuList) {
Map<String, Object> skuMap = new LinkedHashMap<>();
skuMap.put("id(如需导入,该值不可变)", "sku");
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);
}
}
}
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<>();
List<TbProductStockDetail> stockDetails = 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();
TbProductStockDetail stockDetail = new TbProductStockDetail();
stockDetail.setCreatedAt(System.currentTimeMillis());
stockDetail.setUpdatedAt(System.currentTimeMillis());
stockDetail.setSourcePath("SHOP");
stockDetail.setRemark("一次性入库覆盖库存");
stockDetail.setOperator(SecurityUtils.getCurrentUsername());
if ("sku".equals(productIdStr)) {
Optional<TbProductSku> byId = skuRepository.findById(Double.valueOf(row.getCell(2).toString()).intValue());
if (byId.isPresent()) {
TbProductSku sku = byId.get();
String numStr = row.getCell(6).toString();
Double aDouble = Double.valueOf(numStr);
if (aDouble.equals(sku.getStockNumber())) {
continue;
}
TbProductDto product = productService.findById(Integer.valueOf(sku.getProductId()));
TbShopUnit shopUnit = shopUnitRepository.searchUnit(product.getUnitId());
stockDetail.setShopId(sku.getShopId());
stockDetail.setSkuId(sku.getId().toString());
stockDetail.setProductId(product.getId().toString());
stockDetail.setProductName(product.getName());
stockDetail.setUnitName(shopUnit.getName());
stockDetail.setLeftNumber(product.getStockNumber());//原库存
BigDecimal subtract = new BigDecimal(aDouble).subtract(new BigDecimal(product.getStockNumber()));
if (subtract.compareTo(BigDecimal.ZERO) > 0) {
stockDetail.setSubType(1);
stockDetail.setType("盘点入库");
stockDetail.setStockNumber(subtract.doubleValue());
}else {
stockDetail.setSubType(-1);
stockDetail.setType("盘点出库");
stockDetail.setStockNumber(subtract.doubleValue());
}
stockDetails.add(stockDetail);
list.add(new StockV2Vo(
0,
sku.getId(),
row.getCell(1).toString(),
row.getCell(5).toString(),
row.getCell(4).toString(),
aDouble.intValue(),
sku.getStockNumber().intValue(),
0
));
}
} else {
TbProductDto product = productService.findById(Double.valueOf(productIdStr).intValue());
if (product != null) {
String numStr = row.getCell(6).toString();
Double aDouble = Double.valueOf(numStr);
Integer aIntValue = aDouble.intValue();
if (aIntValue.equals(product.getStockNumber())) {
continue;
}
TbShopUnit shopUnit = shopUnitRepository.searchUnit(product.getUnitId());
stockDetail.setShopId(product.getShopId());
stockDetail.setProductId(product.getId().toString());
stockDetail.setProductName(product.getName());
stockDetail.setUnitName(shopUnit.getName());
// stockDetail.setLeftNumber(0);
// stockDetail.setStockNumber(aDouble);
stockDetail.setLeftNumber(product.getStockNumber());//原库存
BigDecimal subtract = new BigDecimal(aDouble).subtract(new BigDecimal(product.getStockNumber()));
if (subtract.compareTo(BigDecimal.ZERO) > 0) {
stockDetail.setSubType(1);
stockDetail.setType("盘点入库");
stockDetail.setStockNumber(subtract.doubleValue());
}else {
stockDetail.setSubType(-1);
stockDetail.setType("盘点出库");
stockDetail.setStockNumber(subtract.doubleValue());
}
stockDetails.add(stockDetail);
list.add(new StockV2Vo(
product.getId(),
0,
product.getName(),
row.getCell(5).toString(),
row.getCell(4).toString(),
aIntValue,
product.getStockNumber(),
product.getIsDistribute()
));
}
}
}
}
if (!stockDetails.isEmpty()) {
tbProductStockDetailRepository.saveAll(stockDetails);
}
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) {
Set<Integer> proIds = new HashSet<>();
Set<Integer> skuIds = new HashSet<>();
for (StockV2Vo stockVo : list) {
if (stockVo.getProId() == 0) {
tbProductSkuRepository.updateStockNumber2(stockVo.getSkuId(), shopId, Double.parseDouble(stockVo.getNumber().toString()));
skuIds.add(stockVo.getSkuId());
} else {
productService.updateStockNumber(stockVo.getProId(), Double.parseDouble(stockVo.getNumber().toString()));
proIds.add(stockVo.getProId());
}
}
redisUtils.delByIntKey(CacheKey.PRODUCT_SKU + shopId + ":product", proIds);
redisUtils.delByIntKey(CacheKey.PRODUCT_SKU + shopId + ":", skuIds);
}
@Transactional
@Override
public void updateIsStock(Integer proId, String shopId, Integer isStock) {
productService.updateIsStock(proId, shopId, isStock);
}
@Override
@Transactional
@@ -390,6 +89,8 @@ public class StockServiceImpl implements StockService {
tbProductSkuRepository.updateGroundingByProId(product.getId().toString(), Integer.valueOf(updateValueVO.getValue()));
description.append("0".equals(updateValueVO.getValue()) ? "已下架" : "已上架");
sqlQuery.append(" set is_grounding = ").append(updateValueVO.getValue());
// 推送微信操作消息
wxMsgUtils.aboardOperationMsg(("1".equals(updateValueVO.getValue()) ? "上架商品: " : "下架商品: ") + product.getName(), Integer.valueOf(product.getShopId()));
break;
case "stockNumber"://库存
description.append(" 库存数量修改为:"+updateValueVO.getValue()+" 原库存:"+product.getStockNumber());
@@ -464,6 +165,7 @@ public class StockServiceImpl implements StockService {
}
logService.save(description.toString(),
"cn.ysk.cashier.controller.product.StockController.updateProductStatus()",
Integer.valueOf(product.getShopId()),
JSONUtil.toJSONString(updateValueVO));
}
@@ -483,17 +185,18 @@ public class StockServiceImpl implements StockService {
throw new BadRequestException("无效值");
}
sqlQuery.append(" set is_pause_sale = ").append(updateValueVO.getValue());
description.append(" 修改为" + ("0".equals(updateValueVO.getValue()) ? "非售罄" : "已售罄"));
description.append(" 修改为").append("0".equals(updateValueVO.getValue()) ? "非售罄" : "已售罄");
break;
case "grounding": //sku上下架
if (!"0".equals(updateValueVO.getValue()) && !"1".equals(updateValueVO.getValue())) {
throw new BadRequestException("无效值");
}
sqlQuery.append(" set is_grounding = ").append(updateValueVO.getValue());
wxMsgUtils.aboardOperationMsg(("1".equals(updateValueVO.getValue()) ? "上架: " : "下架: ") + description, Integer.valueOf(product.getShopId()));
description.append("0".equals(updateValueVO.getValue()) ? "已下架" : "已上架");
break;
case "salePrice"://价格
description.append("修改价格为" + updateValueVO.getValue());
description.append("修改价格为").append(updateValueVO.getValue());
sqlQuery.append(" set sale_price = ").append(updateValueVO.getValue());
if(("sku").equals(product.getTypeEnum())){
BigDecimal bigDecimal = tbProductSkuRepository.searchMinSalePrice(Integer.valueOf(tbProductSku.getProductId()),tbProductSku.getId());
@@ -528,6 +231,7 @@ public class StockServiceImpl implements StockService {
}
logService.save(description.toString(),
"cn.ysk.cashier.controller.product.StockController.updateProductStatus()",
Integer.valueOf(product.getShopId()),
JSONUtil.toJSONString(updateValueVO));
}
@@ -538,24 +242,6 @@ public class StockServiceImpl implements StockService {
if (shopInfo == null) {
throw new BadRequestException("店铺不存在");
}
tbProductSkuRepository.updateWarnLineByShopId(stockUpdateWarnLineVO.getWarnLine(), stockUpdateWarnLineVO.getShopId());
}
@Override
public void grounding(Integer shopId, Integer skuId, Boolean isGrounding) {
TbProductSku tbProductSku = skuRepository.findById(skuId).orElse(null);
if (tbProductSku == null) {
throw new BadRequestException("商品不存在skuId: " + skuId);
}
TbProduct product = tbProductRepository.selectByShopIdAndId(Integer.parseInt(tbProductSku.getProductId()), String.valueOf(shopId));
// 推送微信操作消息
wxMsgUtils.aboardOperationMsg((isGrounding ? "上架商品: " : "下架商品: ") + product.getName(), shopId);
// 共享库存下架所有sku
if (product.getIsDistribute().equals(1)) {
tbProductSkuRepository.updateGroundingByProId(product.getId().toString(), isGrounding ? 1 : 0);
}else {
tbProductSkuRepository.updateGrounding(skuId, isGrounding ? 1 : 0);
}
tbProductRepository.updateWarnLineByShopId(stockUpdateWarnLineVO.getWarnLine(), stockUpdateWarnLineVO.getShopId());
}
}

View File

@@ -24,6 +24,7 @@ import cn.ysk.cashier.repository.product.*;
import cn.ysk.cashier.repository.shop.TbPurchaseNoticeRepository;
import cn.ysk.cashier.repository.shop.TbShopUnitRepository;
import cn.ysk.cashier.repository.shop.TbShopUserDutyDetailRepository;
import cn.ysk.cashier.service.LogService;
import cn.ysk.cashier.service.TbPlatformDictService;
import cn.ysk.cashier.service.product.TbProductService;
import cn.ysk.cashier.service.shop.TbCouponCategoryService;
@@ -79,6 +80,7 @@ public class TbProductServiceImpl implements TbProductService {
private final cn.ysk.cashier.mybatis.mapper.TbProductMapper productMapper;
private final TbProductSkuResultRepository productSkuResultRepository;
private final ViewConSkuRepository viewConSkuRepository;
private final LogService logService;
private final RedisUtils redisUtils;
@@ -514,6 +516,21 @@ public class TbProductServiceImpl implements TbProductService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(TbProductVo resources) {
TbProduct source = tbProductRepository.findById(resources.getId()).orElse(null);
if (source == null) {
throw new BadRequestException("商品不存在");
}
StringBuilder description = new StringBuilder("商品" + source.getName());
//上架 库存开关 设为推荐
if (resources.getIsHot().equals(source.getIsHot())) {
description.append((resources.getIsHot() == 0 ? ",已取消" : ",已设为") + "推荐");
}
if (resources.getIsGrounding().equals(source.getIsGrounding())) {
description.append((resources.getIsGrounding() == 0 ? ",已取消" : ",已设为") + "上架");
}
if (resources.getIsStock().equals(source.getIsStock())) {
description.append((resources.getIsStock() == 0 ? ",已关闭" : ",已打开") + "库存开关");
}
TbProduct product = new TbProduct();
//组装
BeanUtils.copyProperties(resources, product);
@@ -569,7 +586,6 @@ public class TbProductServiceImpl implements TbProductService {
//sku
if (resources.getSkuList() != null) {
// if ("sku".equals(save.getTypeEnum())) {
List<Integer> collect = resources.getSkuList().stream().map(TbProductSku::getId).collect(Collectors.toList());
List<TbProductSku> tbProductSkus = tbProductSkuRepository.searchSku(resources.getId().toString());
for (TbProductSku productSkus : tbProductSkus) {
@@ -577,7 +593,6 @@ public class TbProductServiceImpl implements TbProductService {
tbProductSkuRepository.deleteBySkuId(productSkus.getId());
}
}
// }
tbProductSkuRepository.saveAll(resources.getSkuList());
}
//保存到sku_result
@@ -602,19 +617,16 @@ public class TbProductServiceImpl implements TbProductService {
noticeRepository.save(resources.getNotices());
}
}
String desc = description.toString();
if (desc.contains("推荐") || desc.contains("上架") || desc.contains("库存开关")) {
logService.save(description.toString(),
"cn.ysk.cashier.controller.product.StockController.updateProductStatus()",
Integer.valueOf(product.getShopId()),
JSONUtil.toJSONString(resources));
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateIsHot(Integer id, Integer isHot) {
tbProductRepository.updateIsHot(id, isHot);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateIsStock(Integer proId, String shopId, Integer isStock) {
tbProductRepository.updateIsStock(proId, shopId, isStock);
}
@Transactional(rollbackFor = Exception.class)
@Override
@@ -768,11 +780,7 @@ public class TbProductServiceImpl implements TbProductService {
log.info("返还库存失败,商品不存在: {}", productId);
return;
}
if (product.getIsDistribute() == 1) {
tbProductRepository.incrStock(productId, num);
} else {
tbProductSkuRepository.incrStock(productSkuId, Double.valueOf(num));
}
tbProductRepository.incrStock(productId, num);
}
}

View File

@@ -53,21 +53,21 @@ public class TbProductSkuServiceImpl implements TbProductSkuService {
private final TbProductSkuMapper tbProductSkuMapper;
@Override
public Map<String,Object> queryAll(TbProductSkuQueryCriteria criteria, Pageable pageable){
Page<TbProductSku> page = tbProductSkuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
public Map<String, Object> queryAll(TbProductSkuQueryCriteria criteria, Pageable pageable) {
Page<TbProductSku> page = tbProductSkuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(tbProductSkuMapper::toDto));
}
@Override
public List<TbProductSkuDto> queryAll(TbProductSkuQueryCriteria criteria){
return tbProductSkuMapper.toDto(tbProductSkuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
public List<TbProductSkuDto> queryAll(TbProductSkuQueryCriteria criteria) {
return tbProductSkuMapper.toDto(tbProductSkuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder)));
}
@Override
@Transactional
public TbProductSkuDto findById(Integer id) {
TbProductSku tbProductSku = tbProductSkuRepository.findById(id).orElseGet(TbProductSku::new);
ValidationUtil.isNull(tbProductSku.getId(),"TbProductSku","id",id);
ValidationUtil.isNull(tbProductSku.getId(), "TbProductSku", "id", id);
return tbProductSkuMapper.toDto(tbProductSku);
}
@@ -81,7 +81,7 @@ public class TbProductSkuServiceImpl implements TbProductSkuService {
@Transactional(rollbackFor = Exception.class)
public void update(TbProductSku resources) {
TbProductSku tbProductSku = tbProductSkuRepository.findById(resources.getId()).orElseGet(TbProductSku::new);
ValidationUtil.isNull( tbProductSku.getId(),"TbProductSku","id",resources.getId());
ValidationUtil.isNull(tbProductSku.getId(), "TbProductSku", "id", resources.getId());
tbProductSku.copy(resources);
tbProductSkuRepository.save(tbProductSku);
}
@@ -92,35 +92,4 @@ public class TbProductSkuServiceImpl implements TbProductSkuService {
tbProductSkuRepository.deleteById(id);
}
}
@Override
public void download(List<TbProductSkuDto> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (TbProductSkuDto tbProductSku : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put(" shopId", tbProductSku.getShopId());
map.put("条形码", tbProductSku.getBarCode());
map.put("商品Id", tbProductSku.getProductId());
map.put("原价", tbProductSku.getOriginPrice());
map.put("成本价", tbProductSku.getCostPrice());
map.put("会员价", tbProductSku.getMemberPrice());
map.put(" mealPrice", tbProductSku.getMealPrice());
map.put("售价", tbProductSku.getSalePrice());
map.put("进货参考价", tbProductSku.getGuidePrice());
map.put(" strategyPrice", tbProductSku.getStrategyPrice());
map.put("库存数量", tbProductSku.getStockNumber());
map.put("标签镜像", tbProductSku.getSpecSnap());
map.put(" coverImg", tbProductSku.getCoverImg());
map.put("库存警戒线", tbProductSku.getWarnLine());
map.put(" weight", tbProductSku.getWeight());
map.put(" volume", tbProductSku.getVolume());
map.put("销量", tbProductSku.getRealSalesNumber());
map.put("一级分销金额", tbProductSku.getFirstShared());
map.put("二级分销金额", tbProductSku.getSecondShared());
map.put(" createdAt", tbProductSku.getCreatedAt());
map.put(" updatedAt", tbProductSku.getUpdatedAt());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
}

View File

@@ -1,41 +1,12 @@
package cn.ysk.cashier.service.product;
import cn.ysk.cashier.dto.product.StockQueryDto;
import cn.ysk.cashier.vo.StockUpdateValueVO;
import cn.ysk.cashier.vo.StockUpdateWarnLineVO;
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;
import java.util.List;
public interface StockService {
/**
* 查询数据分页
* @param criteria 条件
* @return Map<String,Object>
*/
Page queryAll(StockQueryDto criteria, Integer page, Integer size);
Page<StockV2Vo> 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(List<StockUpdateValueVO> updateValueVO);
@@ -45,12 +16,4 @@ public interface StockService {
*/
void updateProductWarnLine(StockUpdateWarnLineVO stockUpdateWarnLineVO);
/**
* 上下架商品
*
* @param shopId 店铺id
* @param skuId ski
* @param isGrounding
*/
void grounding(Integer shopId, Integer skuId, Boolean isGrounding);
}

View File

@@ -73,11 +73,5 @@ public interface TbProductSkuService {
*/
void deleteAll(Integer[] ids);
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<TbProductSkuDto> all, HttpServletResponse response) throws IOException;
}