共享库存修改
This commit is contained in:
parent
1675e5d45b
commit
b9b35849c3
|
|
@ -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()));
|
||||
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("文件格式不正确");
|
||||
}
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -212,6 +212,9 @@ public class TbProductDto implements Serializable {
|
|||
|
||||
/** 税率 */
|
||||
private String taxConfigId;
|
||||
|
||||
private Integer stockNumber;
|
||||
|
||||
/**
|
||||
* 团购卷分类Id
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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" +
|
||||
") " +
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
redisUtils.redisUp(2,shopId,idStockMap);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 /
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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 + "\"," +
|
||||
"}";
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue