库存列表 导入导出
库存记录 更新供应商 最后一次进货时间
This commit is contained in:
@@ -401,6 +401,7 @@ public class SummaryServiceImpl implements SummaryService {
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("商品分类", all.getCateName());
|
||||
map.put("商品名称", all.getProductName());
|
||||
map.put("单 位", all.getUnitName());
|
||||
map.put("商品规格", StringUtils.isBlank(all.getProductSkuName()) ? "" : all.getProductSkuName());
|
||||
map.put("销 量", all.getSalesNum());
|
||||
map.put("退单量", all.getRefNum());
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package cn.ysk.cashier.service.impl.productimpl;
|
||||
|
||||
import cn.ysk.cashier.dto.product.StockQueryDto;
|
||||
import cn.ysk.cashier.repository.product.TbProductSkuRepository;
|
||||
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.vo.StockVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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 javax.servlet.http.HttpServletResponse;
|
||||
import javax.transaction.Transactional;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class StockServiceImpl implements StockService {
|
||||
|
||||
private final TbProductSkuRepository tbProductSkuRepository;
|
||||
private final TbProductService productService;
|
||||
private final RedisUtils redisUtils;
|
||||
|
||||
@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(), pageable);
|
||||
}
|
||||
|
||||
@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());
|
||||
for (StockVo all : stockVos) {
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("id(如需导入,该值不可变)", all.getId());
|
||||
map.put("商品名称", all.getName());
|
||||
map.put("商品类型", all.getType());
|
||||
map.put("商品规格", all.getSpecSnap());
|
||||
map.put("商品单位", all.getUnitName());
|
||||
map.put("库存数量", all.getNumber());
|
||||
// map.put("库存开关", all.getIsStock().equals(0)?"否":"是");
|
||||
list.add(map);
|
||||
}
|
||||
FileUtil.downloadExcel(list, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
@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
|
||||
@Override
|
||||
public void updateIsStock(Integer proId, String shopId,Integer isStock) {
|
||||
productService.updateIsStock(proId,shopId,isStock);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -466,6 +466,12 @@ public class TbProductServiceImpl implements TbProductService {
|
||||
tbProductRepository.updateIsHot(id);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void updateIsStock(Integer proId, String shopId,Integer isStock) {
|
||||
tbProductRepository.updateIsStock(proId,shopId,isStock);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void upProSort(TbProductSortCriteria param) {
|
||||
|
||||
@@ -1,20 +1,6 @@
|
||||
/*
|
||||
* Copyright 2019-2020 Zheng Jie
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package cn.ysk.cashier.service.impl.productimpl;
|
||||
|
||||
import cn.ysk.cashier.repository.shop.TbShopPurveyorRepository;
|
||||
import cn.ysk.cashier.utils.*;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -45,6 +31,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.*;
|
||||
@@ -65,6 +52,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
private final TbProductStockOperateRepository tbProductStockOperateRepository;
|
||||
private final TbProductStockOperateMapper tbProductStockOperateMapper;
|
||||
private final TbShopPurveyorTransactRepository purveyorTransactRepository;
|
||||
private final TbShopPurveyorRepository purveyorRepository;
|
||||
private final TbShopInfoRepository shopInfoRepository;
|
||||
private final TbProductSkuRepository tbProductSkuRepository;
|
||||
private final TbProductSkuService productSkuService;
|
||||
@@ -86,6 +74,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
BeanUtils.copyProperties(stockOperate,stockOperateVO);
|
||||
stockOperateVO.setStockSnap(ListUtil.stringChangeList(stockOperate.getStockSnap()));
|
||||
stockOperateVO.setOperatorSnap(StringUtils.stringChangeMap(stockOperate.getOperatorSnap()));
|
||||
stockOperateVO.setType();
|
||||
stockOperateVOList.add(stockOperateVO);
|
||||
}
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
@@ -140,6 +129,9 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public OutAndOnDto createOutAndONOperate(OutAndOnDto resources) {
|
||||
if(CollectionUtils.isEmpty(resources.getList())){
|
||||
throw new BadRequestException("出入库数据不可为空");
|
||||
}
|
||||
//用户相关
|
||||
TbShopInfo byId = shopInfoRepository.findById(Integer.valueOf(resources.getShopId())).orElseGet(TbShopInfo::new);
|
||||
if (byId.getId() == null){
|
||||
@@ -151,6 +143,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
stockOperate.setShopId(resources.getShopId());
|
||||
stockOperate.setStockSnap(resources.getList().toString());
|
||||
stockOperate.setType(resources.getType());
|
||||
//其它入库 //purveyor 供应商入库
|
||||
if ("purchase".equals(resources.getType()) || "purveyor".equals(resources.getType())){
|
||||
stockOperate.setSubType(1);
|
||||
}else {
|
||||
@@ -168,87 +161,89 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
||||
stockOperate.setUpdatedAt(times);
|
||||
stockOperate.setStatus("normal");
|
||||
TbProductStockOperate saveStockOperate = tbProductStockOperateRepository.save(stockOperate);
|
||||
//帐目往来
|
||||
if (!"other-out".equals(resources.getType()) || !"purchase".equals(resources.getType())) {
|
||||
TbShopPurveyorTransact purveyorTransact = new TbShopPurveyorTransact();
|
||||
purveyorTransact.setShopId(resources.getShopId());
|
||||
purveyorTransact.setPurveyorName(resources.getPurveyorName());
|
||||
purveyorTransact.setPurveyorId(resources.getPurveyorId());
|
||||
purveyorTransact.setRemark(resources.getRemark());
|
||||
purveyorTransact.setCreatedAt(times);
|
||||
purveyorTransact.setUpdatedAt(times);
|
||||
purveyorTransact.setTotalAmount(resources.getTotalAmount());
|
||||
purveyorTransact.setPaidAmount(resources.getPaidAmount());
|
||||
purveyorTransact.setWaitAmount(resources.getTotalAmount().subtract(resources.getPaidAmount()));
|
||||
if (resources.getTotalAmount().compareTo(resources.getPaidAmount())<0){
|
||||
purveyorTransact.setStatus(1);
|
||||
}else {
|
||||
purveyorTransact.setStatus(0);
|
||||
if (StringUtils.isNotBlank(resources.getIsImport()) && resources.getIsImport().equals("true")) {
|
||||
//供应商退货 reject
|
||||
//供应商入库 purveyor
|
||||
if ("reject".equals(resources.getType()) || "purveyor".equals(resources.getType())) {
|
||||
TbShopPurveyorTransact purveyorTransact = new TbShopPurveyorTransact();
|
||||
purveyorTransact.setShopId(resources.getShopId());
|
||||
purveyorTransact.setPurveyorName(resources.getPurveyorName());
|
||||
purveyorTransact.setPurveyorId(resources.getPurveyorId());
|
||||
purveyorTransact.setRemark(resources.getRemark());
|
||||
purveyorTransact.setCreatedAt(times);
|
||||
purveyorTransact.setUpdatedAt(times);
|
||||
purveyorTransact.setTotalAmount(resources.getTotalAmount());
|
||||
purveyorTransact.setPaidAmount(resources.getPaidAmount());
|
||||
purveyorTransact.setWaitAmount(resources.getTotalAmount().subtract(resources.getPaidAmount()));
|
||||
if (resources.getTotalAmount().compareTo(resources.getPaidAmount()) < 0) {
|
||||
purveyorTransact.setStatus(1);
|
||||
} else {
|
||||
purveyorTransact.setStatus(0);
|
||||
}
|
||||
purveyorTransact.setPaidAt(resources.getPaidAt());
|
||||
purveyorTransact.setType(resources.getType());
|
||||
purveyorTransactRepository.save(purveyorTransact);
|
||||
if (resources.getPurveyorId() != null) {
|
||||
purveyorRepository.upLastTransactAt(resources.getPurveyorId());
|
||||
}
|
||||
}
|
||||
purveyorTransact.setPaidAt(resources.getPaidAt());
|
||||
purveyorTransact.setType(resources.getType());
|
||||
purveyorTransactRepository.save(purveyorTransact);
|
||||
}
|
||||
//库存记录
|
||||
if (resources.getList() == null){
|
||||
throw new BadRequestException("数据有误");
|
||||
}
|
||||
Map<Integer, Double> idStockMap=new HashMap<>();
|
||||
for (Object date :resources.getList()) {
|
||||
//商品详情
|
||||
ProductListDto productListDto= JSONObject.parseObject(JSONObject.toJSONString(date),ProductListDto.class);
|
||||
TbProductSku tbProductSku = tbProductSkuRepository.findById(productListDto.getId()).orElseGet(TbProductSku::new);
|
||||
TbProductStockDetail productStockDetail = new TbProductStockDetail();
|
||||
productStockDetail.setBatchNumber(resources.getBatchNumber());
|
||||
productStockDetail.setCreatedAt(times);
|
||||
productStockDetail.setUpdatedAt(times);
|
||||
productStockDetail.setIsStock(1);
|
||||
Integer round = (int) Math.floor(tbProductSku.getStockNumber());
|
||||
productStockDetail.setLeftNumber(round);
|
||||
productStockDetail.setProductId(productListDto.getProductId());
|
||||
productStockDetail.setProductName(productListDto.getName());
|
||||
productStockDetail.setRecordId(saveStockOperate.getId().toString());
|
||||
productStockDetail.setShopId(resources.getShopId());
|
||||
productStockDetail.setSkuId(productListDto.getId().toString());
|
||||
productStockDetail.setSourcePath("NORMAL");
|
||||
productListDto.setNumber(productListDto.getNumber() != null? productListDto.getNumber(): 0);
|
||||
switch (resources.getType()) {
|
||||
case "sale":
|
||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||
productStockDetail.setSubType(-1);
|
||||
break;
|
||||
case "refund":
|
||||
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
||||
productStockDetail.setSubType(1);
|
||||
break;
|
||||
case "reject":
|
||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||
productStockDetail.setSubType(-1);
|
||||
break;
|
||||
case "purveyor":
|
||||
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
||||
productStockDetail.setSubType(1);
|
||||
break;
|
||||
case "purchase":
|
||||
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
||||
productStockDetail.setSubType(1);
|
||||
break;
|
||||
case "other-out":
|
||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||
productStockDetail.setSubType(-1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
Map<Integer, Double> idStockMap = new HashMap<>();
|
||||
for (Object date : resources.getList()) {
|
||||
//商品详情
|
||||
ProductListDto productListDto = JSONObject.parseObject(JSONObject.toJSONString(date), ProductListDto.class);
|
||||
TbProductSku tbProductSku = tbProductSkuRepository.findById(productListDto.getId()).orElseGet(TbProductSku::new);
|
||||
TbProductStockDetail productStockDetail = new TbProductStockDetail();
|
||||
productStockDetail.setBatchNumber(resources.getBatchNumber());
|
||||
productStockDetail.setCreatedAt(times);
|
||||
productStockDetail.setUpdatedAt(times);
|
||||
productStockDetail.setIsStock(1);
|
||||
Integer round = (int) Math.floor(tbProductSku.getStockNumber());
|
||||
productStockDetail.setLeftNumber(round);
|
||||
productStockDetail.setProductId(productListDto.getProductId());
|
||||
productStockDetail.setProductName(productListDto.getName());
|
||||
productStockDetail.setRecordId(saveStockOperate.getId().toString());
|
||||
productStockDetail.setShopId(resources.getShopId());
|
||||
productStockDetail.setSkuId(productListDto.getId().toString());
|
||||
productStockDetail.setSourcePath("NORMAL");
|
||||
productListDto.setNumber(productListDto.getNumber() != null ? productListDto.getNumber() : 0);
|
||||
switch (resources.getType()) {
|
||||
case "sale":
|
||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||
productStockDetail.setSubType(-1);
|
||||
break;
|
||||
case "refund":
|
||||
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
||||
productStockDetail.setSubType(1);
|
||||
break;
|
||||
case "reject":
|
||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||
productStockDetail.setSubType(-1);
|
||||
break;
|
||||
case "purveyor":
|
||||
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
||||
productStockDetail.setSubType(1);
|
||||
break;
|
||||
case "purchase":
|
||||
productStockDetail.setStockNumber((double) productListDto.getNumber());
|
||||
productStockDetail.setSubType(1);
|
||||
break;
|
||||
case "other-out":
|
||||
productStockDetail.setStockNumber((double) -productListDto.getNumber());
|
||||
productStockDetail.setSubType(-1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
productStockDetail.setType(resources.getType());
|
||||
productStockDetail.setUnitName(productListDto.getUnitName());
|
||||
entityManager.persist(productStockDetail);
|
||||
//sku数量
|
||||
tbProductSku.setStockNumber(tbProductSku.getStockNumber() + productStockDetail.getStockNumber());
|
||||
productSkuService.update(tbProductSku);
|
||||
idStockMap.put(productListDto.getId(), productStockDetail.getStockNumber());
|
||||
}
|
||||
productStockDetail.setType(resources.getType());
|
||||
productStockDetail.setUnitName(productListDto.getUnitName());
|
||||
entityManager.persist(productStockDetail);
|
||||
//sku数量
|
||||
tbProductSku.setStockNumber(tbProductSku.getStockNumber()+productStockDetail.getStockNumber());
|
||||
productSkuService.update(tbProductSku);
|
||||
idStockMap.put(productListDto.getId(),productStockDetail.getStockNumber());
|
||||
redisUtils.redisUp(2, resources.getShopId(), idStockMap);
|
||||
}
|
||||
redisUtils.redisUp(2,resources.getShopId(),idStockMap);
|
||||
return resources;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package cn.ysk.cashier.service.product;
|
||||
|
||||
import cn.ysk.cashier.dto.product.StockQueryDto;
|
||||
import cn.ysk.cashier.vo.StockVo;
|
||||
import org.springframework.data.domain.Page;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
public interface StockService {
|
||||
|
||||
/**
|
||||
* 查询数据分页
|
||||
* @param criteria 条件
|
||||
* @return Map<String,Object>
|
||||
*/
|
||||
Page queryAll(StockQueryDto criteria, Integer page, Integer size);
|
||||
|
||||
void download(StockQueryDto summaryDto, HttpServletResponse response) throws IOException;
|
||||
|
||||
void inHouse(String shopId,List<StockVo> list);
|
||||
|
||||
void updateIsStock(Integer proId, String shopId,Integer isStock);
|
||||
}
|
||||
@@ -74,4 +74,5 @@ public interface TbProductService {
|
||||
void download(List<TbProductDto> all, HttpServletResponse response) throws IOException;
|
||||
|
||||
void updateIsHot(Integer id, String shopId);
|
||||
void updateIsStock(Integer proId, String shopId,Integer isStock);
|
||||
}
|
||||
Reference in New Issue
Block a user