出入库成本价调整

This commit is contained in:
SongZhang 2024-06-26 18:25:41 +08:00
parent 358ad1b6e7
commit b315c23402
1 changed files with 45 additions and 40 deletions

View File

@ -46,11 +46,11 @@ import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
/** /**
* @website https://eladmin.vip * @author lyf
* @description 服务实现 * @website https://eladmin.vip
* @author lyf * @description 服务实现
* @date 2024-01-25 * @date 2024-01-25
**/ **/
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class TbProductStockOperateServiceImpl implements TbProductStockOperateService { public class TbProductStockOperateServiceImpl implements TbProductStockOperateService {
@ -62,7 +62,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
private final TbShopInfoRepository shopInfoRepository; private final TbShopInfoRepository shopInfoRepository;
private final TbProductSkuRepository tbProductSkuRepository; private final TbProductSkuRepository tbProductSkuRepository;
private final TbProductSkuService productSkuService; private final TbProductSkuService productSkuService;
private final EntityManager entityManager; private final EntityManager entityManager;
private final RedisUtils redisUtils; private final RedisUtils redisUtils;
private final TbProductRepository tbProductRepository; private final TbProductRepository tbProductRepository;
@ -74,25 +74,25 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
Pageable pageable = PageRequest.of(criteria.getPage(), criteria.getSize(), sort); Pageable pageable = PageRequest.of(criteria.getPage(), criteria.getSize(), sort);
Page<TbProductStockOperate> page = tbProductStockOperateRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); Page<TbProductStockOperate> page = tbProductStockOperateRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
List<ProductStockOperateVO> stockOperateVOList = new ArrayList<>(); List<ProductStockOperateVO> stockOperateVOList = new ArrayList<>();
for (TbProductStockOperate stockOperate :page.getContent()) { for (TbProductStockOperate stockOperate : page.getContent()) {
ProductStockOperateVO stockOperateVO = new ProductStockOperateVO(); ProductStockOperateVO stockOperateVO = new ProductStockOperateVO();
BeanUtils.copyProperties(stockOperate,stockOperateVO); BeanUtils.copyProperties(stockOperate, stockOperateVO);
stockOperateVO.setStockSnap(ListUtil.stringChangeList(stockOperate.getStockSnap())); stockOperateVO.setStockSnap(ListUtil.stringChangeList(stockOperate.getStockSnap()));
stockOperateVO.setOperatorSnap(StringUtils.stringChangeMap(stockOperate.getOperatorSnap())); stockOperateVO.setOperatorSnap(StringUtils.stringChangeMap(stockOperate.getOperatorSnap()));
stockOperateVO.setType(); stockOperateVO.setType();
stockOperateVOList.add(stockOperateVO); stockOperateVOList.add(stockOperateVO);
} }
HashMap<String, Object> map = new HashMap<>(); HashMap<String, Object> map = new HashMap<>();
map.put("content",stockOperateVOList); map.put("content", stockOperateVOList);
map.put("totalElements", page.getTotalElements()); map.put("totalElements", page.getTotalElements());
return map; return map;
} }
@Override @Override
public List<TbProductStockOperate> queryAll(TbProductStockOperateQueryCriteria criteria){ public List<TbProductStockOperate> queryAll(TbProductStockOperateQueryCriteria criteria) {
return tbProductStockOperateRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)); return tbProductStockOperateRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder));
} }
@Override @Override
@ -113,12 +113,12 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
public ProductStockOperateVO findById(Integer id) { public ProductStockOperateVO findById(Integer id) {
TbProductStockOperate tbProductStockOperate = tbProductStockOperateRepository.findById(id).orElseGet(TbProductStockOperate::new); TbProductStockOperate tbProductStockOperate = tbProductStockOperateRepository.findById(id).orElseGet(TbProductStockOperate::new);
ProductStockOperateVO stockOperateVO = new ProductStockOperateVO(); ProductStockOperateVO stockOperateVO = new ProductStockOperateVO();
BeanUtils.copyProperties(tbProductStockOperate,stockOperateVO); BeanUtils.copyProperties(tbProductStockOperate, stockOperateVO);
stockOperateVO.setStockSnap(ListUtil.stringChangeList(tbProductStockOperate.getStockSnap())); stockOperateVO.setStockSnap(ListUtil.stringChangeList(tbProductStockOperate.getStockSnap()));
stockOperateVO.setOperatorSnap(StringUtils.stringChangeMap(tbProductStockOperate.getOperatorSnap())); stockOperateVO.setOperatorSnap(StringUtils.stringChangeMap(tbProductStockOperate.getOperatorSnap()));
ValidationUtil.isNull(tbProductStockOperate.getId(),"TbProductStockOperate","id",id); ValidationUtil.isNull(tbProductStockOperate.getId(), "TbProductStockOperate", "id", id);
return stockOperateVO; return stockOperateVO;
} }
@ -130,18 +130,19 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
/** /**
* 出库 * 出库
*
* @param resources * @param resources
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public OutAndOnDto createOutAndONOperate(OutAndOnDto resources) { public OutAndOnDto createOutAndONOperate(OutAndOnDto resources) {
if(CollectionUtils.isEmpty(resources.getList())){ if (CollectionUtils.isEmpty(resources.getList())) {
throw new BadRequestException("出入库数据不可为空"); throw new BadRequestException("出入库数据不可为空");
} }
//用户相关 //用户相关
TbShopInfo byId = shopInfoRepository.findById(Integer.valueOf(resources.getShopId())).orElseGet(TbShopInfo::new); TbShopInfo byId = shopInfoRepository.findById(Integer.valueOf(resources.getShopId())).orElseGet(TbShopInfo::new);
if (byId.getId() == null){ if (byId.getId() == null) {
throw new BadRequestException("商户号有误"); throw new BadRequestException("商户号有误");
} }
//增加操作日志 //增加操作日志
@ -151,14 +152,14 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
stockOperate.setStockSnap(resources.getList().toString()); stockOperate.setStockSnap(resources.getList().toString());
stockOperate.setType(resources.getType()); stockOperate.setType(resources.getType());
//其它入库 //purveyor 供应商入库 //其它入库 //purveyor 供应商入库
if ("purchase".equals(resources.getType()) || "purveyor".equals(resources.getType())){ if ("purchase".equals(resources.getType()) || "purveyor".equals(resources.getType())) {
stockOperate.setSubType(1); stockOperate.setSubType(1);
}else { } else {
stockOperate.setSubType(-1); stockOperate.setSubType(-1);
} }
Map<String, String> operatorSnapMap = new HashMap<>(); Map<String, String> operatorSnapMap = new HashMap<>();
operatorSnapMap.put("name", byId.getShopName()); operatorSnapMap.put("name", byId.getShopName());
operatorSnapMap.put("account",byId.getAccount()); operatorSnapMap.put("account", byId.getAccount());
stockOperate.setOperatorSnap(JSON.toJSONString(operatorSnapMap)); stockOperate.setOperatorSnap(JSON.toJSONString(operatorSnapMap));
stockOperate.setBatchNumber(resources.getBatchNumber()); stockOperate.setBatchNumber(resources.getBatchNumber());
@ -173,9 +174,9 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
//供应商退货 reject //供应商退货 reject
//供应商入库 purveyor //供应商入库 purveyor
if ("reject".equals(resources.getType()) || "purveyor".equals(resources.getType())) { if ("reject".equals(resources.getType()) || "purveyor".equals(resources.getType())) {
if(StringUtils.isNotBlank(resources.getPurveyorId())){ if (StringUtils.isNotBlank(resources.getPurveyorId())) {
Optional<TbShopPurveyor> byId1 = purveyorRepository.findById(Integer.valueOf(resources.getPurveyorId())); Optional<TbShopPurveyor> byId1 = purveyorRepository.findById(Integer.valueOf(resources.getPurveyorId()));
if(byId1.isPresent()){ if (byId1.isPresent()) {
TbShopPurveyor tbShopPurveyor = byId1.get(); TbShopPurveyor tbShopPurveyor = byId1.get();
resources.setPurveyorName(tbShopPurveyor.getPurveyorName()); resources.setPurveyorName(tbShopPurveyor.getPurveyorName());
} }
@ -257,7 +258,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
// 获取增加后的库存 // 获取增加后的库存
double refundStockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), false); double refundStockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), false);
setProSpecInfo(product, refundStockNum, setProSpecInfo(product, tbProductSku, refundStockNum,
productListDto.getCostPrice(), isDistribute); productListDto.getCostPrice(), isDistribute);
break; break;
@ -269,7 +270,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
productStockDetail.setType("供应商出库"); productStockDetail.setType("供应商出库");
// 获取增加后的库存 // 获取增加后的库存
setProSpecInfo(product, getStockNum(product, tbProductSku, productListDto.getNumber(), false), setProSpecInfo(product, tbProductSku, getStockNum(product, tbProductSku, productListDto.getNumber(), false),
productListDto.getCostPrice(), isDistribute); productListDto.getCostPrice(), isDistribute);
break; break;
//后台入库 //后台入库
@ -282,7 +283,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
// 获取增加后的库存 // 获取增加后的库存
double stockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), true); double stockNum = getStockNum(product, tbProductSku, productListDto.getNumber(), true);
setProSpecInfo(product, stockNum, setProSpecInfo(product, tbProductSku, stockNum,
productListDto.getCostPrice(), isDistribute); productListDto.getCostPrice(), isDistribute);
break; break;
@ -295,7 +296,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
productStockDetail.setType("其他入库"); productStockDetail.setType("其他入库");
// 获取增加后的库存 // 获取增加后的库存
setProSpecInfo(product, getStockNum(product, tbProductSku, productListDto.getNumber(), true), setProSpecInfo(product, tbProductSku, getStockNum(product, tbProductSku, productListDto.getNumber(), true),
productListDto.getCostPrice(), isDistribute); productListDto.getCostPrice(), isDistribute);
break; break;
case "other-out": case "other-out":
@ -307,7 +308,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
productStockDetail.setType("其他出库"); productStockDetail.setType("其他出库");
// 获取增加后的库存 // 获取增加后的库存
setProSpecInfo(product, getStockNum(product, tbProductSku, productListDto.getNumber(), false), setProSpecInfo(product, tbProductSku, getStockNum(product, tbProductSku, productListDto.getNumber(), false),
productListDto.getCostPrice(), isDistribute); productListDto.getCostPrice(), isDistribute);
break; break;
default: default:
@ -328,7 +329,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
idStockMap.put(productListDto.getId(), productStockDetail.getStockNumber()); idStockMap.put(productListDto.getId(), productStockDetail.getStockNumber());
} }
redisUtils.redisUp(2, resources.getShopId(), idStockMap); redisUtils.redisUp(2, resources.getShopId(), idStockMap);
}else { } else {
tbProductStockOperateRepository.save(stockOperate); tbProductStockOperateRepository.save(stockOperate);
} }
return resources; return resources;
@ -338,13 +339,13 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
if (product.getIsDistribute() == 1) { if (product.getIsDistribute() == 1) {
product.setStockNumber((int) (isAdd ? product.getStockNumber() + num : product.getStockNumber() - num)); product.setStockNumber((int) (isAdd ? product.getStockNumber() + num : product.getStockNumber() - num));
return product.getStockNumber(); return product.getStockNumber();
}else { } else {
productSku.setStockNumber(isAdd ? productSku.getStockNumber() + num : productSku.getStockNumber() - num); productSku.setStockNumber(isAdd ? productSku.getStockNumber() + num : productSku.getStockNumber() - num);
return productSku.getStockNumber(); return productSku.getStockNumber();
} }
} }
private void setProSpecInfo(TbProduct product, double num, BigDecimal cost, boolean isShareStock) { private void setProSpecInfo(TbProduct product, TbProductSku productSku, double num, BigDecimal cost, boolean isShareStock) {
if (product.getSpecInfo() != null) { if (product.getSpecInfo() != null) {
JSONArray specInfoArr = JSON.parseArray(product.getSpecInfo()); JSONArray specInfoArr = JSON.parseArray(product.getSpecInfo());
for (Object item : specInfoArr) { for (Object item : specInfoArr) {
@ -352,7 +353,11 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
if (isShareStock) { if (isShareStock) {
jsonObject.put("stockNumber", num); jsonObject.put("stockNumber", num);
jsonObject.put("costPrice", cost); jsonObject.put("costPrice", cost);
}else if (product.getSpecInfo() != null && product.getSpecInfo().equals(jsonObject.getString("specSnap"))) { } else if (productSku != null &&
(
productSku.getId().equals(jsonObject.getInteger("id")) ||
(productSku.getSpecSnap() != null && productSku.getSpecSnap().equals(jsonObject.getString("specSnap")))
)) {
jsonObject.put("stockNumber", num); jsonObject.put("stockNumber", num);
jsonObject.put("costPrice", cost); jsonObject.put("costPrice", cost);
break; break;
@ -367,7 +372,7 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(TbProductStockOperate resources) { public void update(TbProductStockOperate resources) {
TbProductStockOperate tbProductStockOperate = tbProductStockOperateRepository.findById(resources.getId()).orElseGet(TbProductStockOperate::new); TbProductStockOperate tbProductStockOperate = tbProductStockOperateRepository.findById(resources.getId()).orElseGet(TbProductStockOperate::new);
ValidationUtil.isNull( tbProductStockOperate.getId(),"TbProductStockOperate","id",resources.getId()); ValidationUtil.isNull(tbProductStockOperate.getId(), "TbProductStockOperate", "id", resources.getId());
tbProductStockOperate.copy(resources); tbProductStockOperate.copy(resources);
tbProductStockOperateRepository.save(tbProductStockOperate); tbProductStockOperateRepository.save(tbProductStockOperate);
} }
@ -383,26 +388,26 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
public void download(List<TbProductStockOperate> all, HttpServletResponse response) throws IOException { public void download(List<TbProductStockOperate> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>(); List<Map<String, Object>> list = new ArrayList<>();
for (TbProductStockOperate stockOperate :all) { for (TbProductStockOperate stockOperate : all) {
ProductStockOperateVO stockOperateVO = new ProductStockOperateVO(); ProductStockOperateVO stockOperateVO = new ProductStockOperateVO();
BeanUtils.copyProperties(stockOperate,stockOperateVO); BeanUtils.copyProperties(stockOperate, stockOperateVO);
stockOperateVO.setType(); stockOperateVO.setType();
stockOperateVO.setStockSnap(ListUtil.stringChangeList(stockOperate.getStockSnap())); stockOperateVO.setStockSnap(ListUtil.stringChangeList(stockOperate.getStockSnap()));
stockOperateVO.setOperatorSnap(StringUtils.stringChangeMap(stockOperate.getOperatorSnap())); stockOperateVO.setOperatorSnap(StringUtils.stringChangeMap(stockOperate.getOperatorSnap()));
Map<String,Object> map = new LinkedHashMap<>(); Map<String, Object> map = new LinkedHashMap<>();
for (int i = 0; i < stockOperateVO.getStockSnap().size(); i++) { for (int i = 0; i < stockOperateVO.getStockSnap().size(); i++) {
if(i==0){ if (i == 0) {
map.put("操作类型 ", stockOperateVO.getType()); map.put("操作类型 ", stockOperateVO.getType());
map.put("供应商名称", stockOperateVO.getPurveyorName()); map.put("供应商名称", stockOperateVO.getPurveyorName());
map.put("商品数量 ", stockOperateVO.getStockSnap().size()); map.put("商品数量 ", stockOperateVO.getStockSnap().size());
map.put(" 备 注 ", stockOperateVO.getRemark()); map.put(" 备 注 ", stockOperateVO.getRemark());
map.put("操作人 ", stockOperateVO.getOperatorSnap().get("account")); map.put("操作人 ", stockOperateVO.getOperatorSnap().get("account"));
map.put("创建时间", DateUtil.getStrTime(new Date(stockOperateVO.getStockTime()))); map.put("创建时间", DateUtil.getStrTime(new Date(stockOperateVO.getStockTime())));
}else { } else {
map.put("操作类型 ", ""); map.put("操作类型 ", "");
map.put("供应商名称", ""); map.put("供应商名称", "");
map.put("商品数量 ", ""); map.put("商品数量 ", "");
map.put(" 备 注 ", ""); map.put(" 备 注 ", "");
map.put("操 作 人", ""); map.put("操 作 人", "");
map.put("创建时间", ""); map.put("创建时间", "");
} }