Merge branch 'refs/heads/share-stock' into dev
This commit is contained in:
commit
7672bba8f9
|
|
@ -67,4 +67,8 @@ public interface CacheKey {
|
|||
* 库存 PRODUCT:shopid:skuid
|
||||
*/
|
||||
String PRODUCT_SKU = "PRODUCT:";
|
||||
/**
|
||||
* 商品库存
|
||||
*/
|
||||
String PRODUCT = "PRODUCT:";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -716,6 +716,10 @@ public class RedisUtils {
|
|||
redisTemplate.opsForValue().increment(key, delta);
|
||||
}
|
||||
|
||||
public void decrBy(String key, long delta) {
|
||||
redisTemplate.opsForValue().decrement(key, delta);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param prefix 前缀
|
||||
* @param ids id
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(","));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,14 @@ package cn.ysk.cashier.quartz.task;
|
|||
import cn.ysk.cashier.pojo.order.TbCashierCart;
|
||||
import cn.ysk.cashier.repository.order.TbCashierCartRepository;
|
||||
import cn.ysk.cashier.repository.product.TbProductSkuRepository;
|
||||
import cn.ysk.cashier.service.order.TbCashierCartService;
|
||||
import cn.ysk.cashier.service.shop.TbShopStorageService;
|
||||
import cn.ysk.cashier.utils.CacheKey;
|
||||
import cn.ysk.cashier.utils.QueryHelp;
|
||||
import cn.ysk.cashier.utils.RedisUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
|
|
@ -36,6 +38,12 @@ public class TestTask {
|
|||
@Autowired
|
||||
private RedisUtils redisUtils;
|
||||
|
||||
private final TbCashierCartService tbCashierCartService;
|
||||
|
||||
public TestTask(TbCashierCartService tbCashierCartService) {
|
||||
this.tbCashierCartService = tbCashierCartService;
|
||||
}
|
||||
|
||||
|
||||
public void run(){
|
||||
log.info("run 执行成功");
|
||||
|
|
@ -70,7 +78,7 @@ public class TestTask {
|
|||
});
|
||||
Set<String> keys = new HashSet<>();
|
||||
for (TbCashierCart cart : all) {
|
||||
skuRepository.updateStockNumber(Integer.valueOf(cart.getSkuId()),cart.getNumber().doubleValue());
|
||||
tbCashierCartService.clearExpireOrder(cart);
|
||||
cart.setStatus("cancelled");
|
||||
cartService.save(cart);
|
||||
keys.add(CacheKey.PRODUCT_SKU + cart.getShopId() + ":" + cart.getSkuId());
|
||||
|
|
|
|||
|
|
@ -35,4 +35,12 @@ 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);
|
||||
|
||||
@Modifying
|
||||
@Query("update FROM TbProduct pro set pro.stockNumber=pro.stockNumber+:number WHERE pro.id =:productId")
|
||||
void incrProductStockNumber(Integer productId, Integer number);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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, true) " +
|
||||
"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, true ) " +
|
||||
"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, false " +
|
||||
") " +
|
||||
"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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,90 @@
|
|||
package cn.ysk.cashier.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author GYJ
|
||||
*/
|
||||
@Data
|
||||
public class StockV2Vo {
|
||||
private String id;
|
||||
private Integer skuId;
|
||||
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.skuId = 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, boolean isPro) {
|
||||
this.id = id.toString() + "-" + proId.toString();
|
||||
if (isPro) {
|
||||
this.id += proId;
|
||||
} else {
|
||||
this.id += id;
|
||||
}
|
||||
this.skuId = 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