共享库存修改

This commit is contained in:
GYJ 2024-06-24 11:42:41 +08:00
parent 1675e5d45b
commit b9b35849c3
15 changed files with 520 additions and 73 deletions

View File

@ -1,31 +1,21 @@
package cn.ysk.cashier.controller.product;
import cn.ysk.cashier.annotation.Log;
import cn.ysk.cashier.dto.product.OutAndOnDto;
import cn.ysk.cashier.dto.product.StockQueryDto;
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.vo.StockVo;
import cn.ysk.cashier.vo.StockUpdateValueVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@RestController
@RequiredArgsConstructor
@ -35,8 +25,6 @@ import java.util.Optional;
public class StockController {
private final StockService stockService;
private final TbProductStockOperateService stockOperateService;
private final TbProductSkuRepository skuRepository;
@ApiOperation("库存导出")
@PostMapping(value = "download")
@ -44,6 +32,12 @@ public class StockController {
stockService.download(criteria,response);
}
@ApiOperation("库存导出")
@PostMapping(value = "download/v2")
public void exportTbOrderInfoV2(HttpServletResponse response, @RequestBody StockQueryDto criteria) throws IOException {
stockService.downloadV2(criteria,response);
}
@Log("库存导入")
@PostMapping("/doImport")
@ApiOperation("文件导入库存")
@ -56,42 +50,26 @@ public class StockController {
throw new BadRequestException("文件格式不正确");
}
try {
//根据路径获取这个操作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).getRawValue()));
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);
stockService.inHouse(shopId,list);
stockService.importExcel(shopId,file);
} catch (Exception e) {
log.error("文件导入库存异常:",e);
}
return new ResponseEntity<>(HttpStatus.OK);
}
@Log("库存导入")
@PostMapping("/doImport/v2")
@ApiOperation("文件导入库存")
public ResponseEntity<Object> importExcelV2(@RequestParam String shopId,@RequestParam("file") MultipartFile file) {
String fileName = file.getOriginalFilename();
if (file.isEmpty()) {
throw new BadRequestException("文件不能为空");
}
if (!fileName.contains("xls") && !fileName.contains("xlsx")) {
throw new BadRequestException("文件格式不正确");
}
try {
stockService.importExcelV2(shopId,file);
} catch (Exception e) {
log.error("文件导入库存异常:",e);
}
@ -106,6 +84,20 @@ public class StockController {
return new ResponseEntity<>(stockService.queryAll(criteria,page,size), HttpStatus.OK);
}
@GetMapping("/v2")
@ApiOperation("查询库存")
public ResponseEntity<Object> queryTbProductV2(StockQueryDto criteria,
@RequestParam(required = false, defaultValue = "0") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer size){
return new ResponseEntity<>(stockService.queryAllV2(criteria,page,size), HttpStatus.OK);
}
@GetMapping("/sku")
@ApiOperation("查询库存")
public ResponseEntity<Object> queryProductSku(String productId){
return new ResponseEntity<>(stockService.queryProductSku(productId), HttpStatus.OK);
}
@GetMapping("/isStock")
public ResponseEntity<Object> updateIsHot(
@RequestParam String shopId,
@ -115,4 +107,10 @@ public class StockController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PutMapping("productStatus")
public ResponseEntity<Object> updateProductStatus(@RequestBody StockUpdateValueVO updateValueVO) {
stockService.updateProductStatus(updateValueVO);
return new ResponseEntity<>("修改成功", HttpStatus.OK);
}
}

View File

@ -212,6 +212,9 @@ public class TbProductDto implements Serializable {
/** 税率 */
private String taxConfigId;
private Integer stockNumber;
/**
* 团购卷分类Id
*/
@ -221,4 +224,4 @@ public class TbProductDto implements Serializable {
* 商品sku信息
*/
private List<TbProductSku> skuList;
}
}

View File

@ -33,6 +33,9 @@ import java.util.stream.Collectors;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface TbProductMapper extends BaseMapper<TbProductDto, TbProduct> {
default List<Integer> map(String value) {
if (value == null || value.isEmpty()) {
return null;
}
return ListUtil.stringChangeIntegerList(value);
}
@ -46,4 +49,4 @@ public interface TbProductMapper extends BaseMapper<TbProductDto, TbProduct> {
.map(String::valueOf)
.collect(Collectors.joining(","));
}
}
}

View File

@ -316,6 +316,10 @@ public class TbProduct implements Serializable {
@ApiModelProperty(value = "团购卷分类Id")
private String groupCategoryId;
@Column(name = "stock_number")
@ApiModelProperty("库存数量")
private Integer stockNumber;
public void copy(TbProduct source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));

View File

@ -135,4 +135,8 @@ public class TbProductSku implements Serializable {
public void copy(TbProductSku source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
@Column(name = "`is_pause_sale`")
@ApiModelProperty(value = "是否暂停销售")
private Integer isPauseSale = 0;
}

View File

@ -35,4 +35,8 @@ public interface TbProductRepository extends JpaRepository<TbProduct, Integer>,
@Query(value = "update tb_product set is_hot=0 where shop_id = :shopId and is_hot = 1",nativeQuery = true)
@Modifying
void updateNullHot(@Param("shopId")String shopId);
}
@Modifying
@Query("update FROM TbProduct pro set pro.stockNumber=:stockNumber WHERE pro.id =:productId")
void updateProductStockNumber(@Param("productId") Integer productId,@Param("stockNumber") Integer stockNumber);
}

View File

@ -1,6 +1,7 @@
package cn.ysk.cashier.repository.product;
import cn.ysk.cashier.pojo.product.TbProductSku;
import cn.ysk.cashier.vo.StockV2Vo;
import cn.ysk.cashier.vo.StockVo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@ -51,6 +52,64 @@ public interface TbProductSkuRepository extends JpaRepository<TbProductSku, Inte
"ORDER BY " +
"pro.name DESC,sku.stockNumber DESC")
Page<StockVo> searchProStock(@Param("shopId") String shopId, @Param("proName") String proName, @Param("isStock")Integer isStock,@Param("num")Double num, Pageable pageable);
@Query("SELECT new cn.ysk.cashier.vo.StockV2Vo(" +
"sku.id,pro.id,pro.coverImg,pro.name,unit.name,pro.typeEnum,sku.specSnap,pro.isStock, " +
"CASE " +
" WHEN pro.isDistribute = 1 THEN pro.stockNumber " +
" ELSE SUM(sku.stockNumber) " +
" END " +
", pro.isDistribute, pro.isPauseSale) " +
"from " +
"TbProduct pro " +
"LEFT JOIN TbProductSku sku on pro.id = sku.productId " +
"LEFT JOIN TbShopUnit unit ON pro.unitId = unit.id " +
"WHERE " +
"pro.shopId = :shopId " +
"AND pro.status = 1 " +
"AND (:proName IS NULL OR pro.name LIKE %:proName%) " +
"AND (:isStock IS NULL OR pro.isStock = :isStock) " +
"group by pro.id " +
"ORDER BY " +
"pro.name DESC,sku.stockNumber DESC")
Page<StockV2Vo> searchProStockV2(@Param("shopId") String shopId, @Param("proName") String proName, @Param("isStock")Integer isStock, Pageable pageable);
@Query("SELECT new cn.ysk.cashier.vo.StockV2Vo(" +
"sku.id,pro.id,pro.coverImg,pro.name,unit.name,pro.typeEnum,sku.specSnap,pro.isStock, " +
"CASE " +
" WHEN pro.isDistribute = 1 THEN pro.stockNumber " +
" ELSE SUM(sku.stockNumber) " +
" END " +
", pro.isDistribute, pro.isPauseSale) " +
"from " +
"TbProduct pro " +
"LEFT JOIN TbProductSku sku on pro.id = sku.productId " +
"LEFT JOIN TbShopUnit unit ON pro.unitId = unit.id " +
"WHERE " +
"pro.shopId = :shopId " +
"AND pro.status = 1 " +
"AND (:proName IS NULL OR pro.name LIKE %:proName%) " +
"AND (:isStock IS NULL OR pro.isStock = :isStock) " +
"group by pro.id " +
"ORDER BY " +
"pro.name DESC,sku.stockNumber DESC")
List<StockV2Vo> searchProStockV2(@Param("shopId") String shopId, @Param("proName") String proName, @Param("isStock")Integer isStock);
@Query("SELECT new cn.ysk.cashier.vo.StockV2Vo(" +
"sku.id,pro.id,pro.coverImg,pro.name,unit.name,pro.typeEnum,sku.specSnap,pro.isStock,sku.stockNumber, 1, sku.isPauseSale" +
") " +
"from " +
"TbProductSku sku " +
"left join TbProduct pro on sku.productId = pro.id " +
"left join TbShopUnit unit on pro.unitId = unit.id " +
"where " +
"sku.productId = :productId " +
"order by " +
"sku.stockNumber desc "
)
List<StockV2Vo> searchProductSkuByProductId(@Param("productId") String productId);
@Query("SELECT new cn.ysk.cashier.vo.StockVo(" +
"sku.id,pro.id,pro.coverImg,pro.name,unit.name,pro.typeEnum,sku.specSnap,pro.isStock,sku.stockNumber" +
") " +
@ -87,4 +146,4 @@ public interface TbProductSkuRepository extends JpaRepository<TbProductSku, Inte
@Modifying
@Query("update FROM TbProductSku sku set sku.stockNumber=:stockNumber WHERE sku.shopId=:shopId and sku.id =:id")
Integer updateStockNumber2(@Param("id") Integer id,@Param("shopId")String shopId, @Param("stockNumber") Double stockNumber);
}
}

View File

@ -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,227 @@ 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.getId());
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(如需导入,该值不可变)", all.getProId());
skuMap.put("商品名称", all.getName());
skuMap.put("商品skuId(如需导入,该值不可变)", sku.getId());
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).getRawValue()));
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);
if (cell0 == null || "".equals(cell0)) {
Optional<TbProductSku> byId = skuRepository.findById(Integer.valueOf(row.getCell(0).getRawValue()));
if (byId.isPresent()) {
TbProductSku sku = byId.get();
list.add(new StockV2Vo(
0,
sku.getId(),
row.getCell(1).getRawValue(),
row.getCell(5).toString(),
row.getCell(4).toString(),
row.getCell(6).toString(),
sku.getStockNumber(),
0
));
}
} else {
TbProductDto product = productService.findById(Integer.valueOf(cell0.getRawValue()));
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.getId(), shopId, Double.parseDouble(stockVo.getNumber().toString()));
} else {
productService.updateStockNumber(stockVo.getProId(), Double.parseDouble(stockVo.getNumber().toString()));
}
idStockMap.put(stockVo.getId(), 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(";");
System.out.println(sqlQuery);
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(" ;");
Query nativeQuery = em.createNativeQuery(String.valueOf(sqlQuery));
nativeQuery.executeUpdate();
}
}

View File

@ -520,6 +520,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 +609,4 @@ public class TbProductServiceImpl implements TbProductService {
}
FileUtil.downloadExcel(list, response);
}
}
}

View File

@ -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);
}

View File

@ -59,6 +59,8 @@ public interface TbProductService {
void upProSort(TbProductSortCriteria param);
void updateStockNumber(Integer id, Double stockNumber);
/**
* 多选删除
* @param ids /
@ -75,4 +77,4 @@ public interface TbProductService {
void updateIsHot(Integer id, String shopId);
void updateIsStock(Integer proId, String shopId,Integer isStock);
}
}

View File

@ -0,0 +1,14 @@
package cn.ysk.cashier.vo;
import lombok.Data;
/**
* @author GYJ
*/
@Data
public class StockUpdateValueVO {
private String updateValue;
private String updateKey;
private String targetId;
private String shopId;
}

View File

@ -0,0 +1,83 @@
package cn.ysk.cashier.vo;
import lombok.Data;
import java.util.List;
/**
* @author GYJ
*/
@Data
public class StockV2Vo {
private Integer id;
private Integer proId;
private String img;
private String name;
private String unitName;
private String type;
private String specSnap;
private Object isStock;
private Object stockNumber;
private Integer isDistribute;
private Integer isPauseSale;
private Object number;
public StockV2Vo(Integer proId, Integer skuId, String name, String unitName,String specSnap, Object number,Object stockNumber, Integer isDistribute) {
this.proId = proId;
this.id = skuId;
this.name = name;
this.unitName = unitName;
this.specSnap = specSnap;
this.number = number;
this.stockNumber = stockNumber;
this.isDistribute = isDistribute;
}
public StockV2Vo(Integer id, Integer proId,String img,String name,String unitName, String type, String specSnap,
Object isStock, Object number, Integer isDistribute, Integer isPauseSale) {
this.id = id;
this.proId = proId;
this.img = img;
this.name = name;
this.unitName = unitName;
setType(type);
this.specSnap = specSnap;
this.isStock = isStock;
this.stockNumber = number;
this.isDistribute = isDistribute;
this.isPauseSale = isPauseSale;
}
public void setType(String type) {
switch (type) {
case "normal":
this.type = "单规格";
break;
case "sku":
this.type = "多规格";
break;
case "weight":
this.type = "称重商品";
break;
case "currentPrice":
this.type = "套餐商品/团购卷";
break;
case "group":
this.type = "时价商品";
break;
default:
this.type = type;
break;
}
}
@Override
public String toString() {
return "{" +
"\"name\":\"" + name + "\","+
"\"unitName\":\"" + unitName +"\","+
"\"specSnap\":\"" + specSnap + "\"," +
"\"stockNumber\":\"" + stockNumber + "\"," +
"}";
}
}

View File

@ -3,10 +3,13 @@ spring:
datasource:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
#driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
# driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:mysql://101.37.12.135:3306/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
username: fycashier
password: Twc6MrzzjBiWSsjh
# url: jdbc:mysql://127.0.0.1:3306/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
# username: root
# password: gongyijieqp002
driver-class-name: com.mysql.cj.jdbc.Driver
# 初始连接数
initial-size: 5

View File

@ -29,7 +29,7 @@ spring:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
show_sql: false
show_sql: true
# redisdb5:
# #数据库索引
@ -38,12 +38,20 @@ spring:
# port: ${REDIS_PORT:6379}
# password: ${REDIS_PWD:111111}
# redis:
# #数据库索引
# database: ${REDIS_DB:0}
# host: ${REDIS_HOST:127.0.0.1}
# port: ${REDIS_PORT:6379}
# password: ${REDIS_PWD:111111}
# #连接超时时间
# timeout: 5000
redis:
#数据库索引
database: ${REDIS_DB:0}
host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:111111}
database: 0
host: 127.0.0.1
port: 6379
password:
#连接超时时间
timeout: 5000