|
|
|
|
@ -50,6 +50,7 @@ import javax.annotation.Resource;
|
|
|
|
|
import javax.validation.ConstraintViolationException;
|
|
|
|
|
import javax.validation.Valid;
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@ -125,8 +126,11 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
String code = createReqVO.getBarCode();
|
|
|
|
|
boolean autoGeneratedCode = StringUtils.isBlank(code);
|
|
|
|
|
|
|
|
|
|
validateProductUnitRelation(createReqVO.getUnitId(), createReqVO.getPurchaseUnitId(), createReqVO.getPurchaseUnitConvertQuantity());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ErpProductDO product = BeanUtils.toBean(createReqVO, ErpProductDO.class);
|
|
|
|
|
fillProductUnitName(product);
|
|
|
|
|
|
|
|
|
|
if (productMapper.selectProductExist(product)) {
|
|
|
|
|
throw exception(PRODUCT_NAME_AND_STANDARD_EXISTS);
|
|
|
|
|
@ -236,8 +240,10 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
// TODO 芋艿:校验分类
|
|
|
|
|
// 校验存在
|
|
|
|
|
validateProductExists(updateReqVO.getId());
|
|
|
|
|
validateProductUnitRelation(updateReqVO.getUnitId(), updateReqVO.getPurchaseUnitId(), updateReqVO.getPurchaseUnitConvertQuantity());
|
|
|
|
|
// 更新
|
|
|
|
|
ErpProductDO updateObj = BeanUtils.toBean(updateReqVO, ErpProductDO.class);
|
|
|
|
|
fillProductUnitName(updateObj);
|
|
|
|
|
ErpProductCategoryDO productCategory = productCategoryMapper.selectById(updateObj.getCategoryId());
|
|
|
|
|
Long id = productCategory.getParentId();
|
|
|
|
|
updateObj.setSubCategoryName(productCategory.getName());
|
|
|
|
|
@ -345,6 +351,36 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void validateProductUnitRelation(Long unitId, Long purchaseUnitId, BigDecimal purchaseUnitConvertQuantity) {
|
|
|
|
|
if (unitId == null || productUnitService.getProductUnit(unitId) == null) {
|
|
|
|
|
throw exception(PRODUCT_UNIT_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
if (purchaseUnitId == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (productUnitService.getProductUnit(purchaseUnitId) == null) {
|
|
|
|
|
throw exception(PRODUCT_UNIT_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
if (unitId.equals(purchaseUnitId)) {
|
|
|
|
|
throw exception(PRODUCT_UNIT_CONVERT_SELF_NOT_ALLOWED);
|
|
|
|
|
}
|
|
|
|
|
if (purchaseUnitConvertQuantity == null || purchaseUnitConvertQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
|
|
throw exception(PRODUCT_PURCHASE_UNIT_CONVERT_QUANTITY_INVALID);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void fillProductUnitName(ErpProductDO product) {
|
|
|
|
|
if (product.getPurchaseUnitId() == null) {
|
|
|
|
|
product.setPurchaseUnitName(null);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
ErpProductUnitDO purchaseUnit = productUnitService.getProductUnit(product.getPurchaseUnitId());
|
|
|
|
|
if (purchaseUnit == null) {
|
|
|
|
|
throw exception(PRODUCT_UNIT_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
product.setPurchaseUnitName(purchaseUnit.getName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public ErpProductRespVO getProduct(Long id) {
|
|
|
|
|
ErpProductDO product = productMapper.selectById(id);
|
|
|
|
|
@ -372,6 +408,12 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
if (erpProductCategoryDO !=null ){
|
|
|
|
|
respVO.setCategoryType(erpProductCategoryDO.getType());
|
|
|
|
|
}
|
|
|
|
|
if (respVO.getPurchaseUnitId() != null && respVO.getPurchaseUnitName() == null) {
|
|
|
|
|
ErpProductUnitDO purchaseUnit = productUnitService.getProductUnit(respVO.getPurchaseUnitId());
|
|
|
|
|
if (purchaseUnit != null) {
|
|
|
|
|
respVO.setPurchaseUnitName(purchaseUnit.getName());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
// respVO.setDeviceIds(respVO.getDevices().stream()
|
|
|
|
|
// .map(ProductRelationRespVO::getId)
|
|
|
|
|
@ -522,12 +564,19 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
if (CollUtil.isEmpty(list)) {
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
}
|
|
|
|
|
Map<Long, List<ProductPackagingSchemeRespVO>> packagingSchemeMap = convertMap(
|
|
|
|
|
productPackagingSchemeRelMapper.selectListByProductIds(convertSet(list, ErpProductDO::getId)),
|
|
|
|
|
ProductPackagingSchemeRelDO::getProductId,
|
|
|
|
|
rel -> BeanUtils.toBean(rel, ProductPackagingSchemeRespVO.class),
|
|
|
|
|
Collectors.toList());
|
|
|
|
|
Map<Long, ErpProductCategoryDO> categoryMap = productCategoryService.getProductCategoryMap(
|
|
|
|
|
convertSet(list, ErpProductDO::getCategoryId));
|
|
|
|
|
Map<Long, ErpProductCategoryDO> subCategoryMap = productCategoryService.getProductCategoryMap(
|
|
|
|
|
convertSet(list, ErpProductDO::getSubCategoryId));
|
|
|
|
|
Map<Long, ErpProductUnitDO> unitMap = productUnitService.getProductUnitMap(
|
|
|
|
|
convertSet(list, ErpProductDO::getUnitId));
|
|
|
|
|
Map<Long, ErpProductUnitDO> purchaseUnitMap = productUnitService.getProductUnitMap(
|
|
|
|
|
convertSet(list, ErpProductDO::getPurchaseUnitId));
|
|
|
|
|
return BeanUtils.toBean(list, ErpProductRespVO.class, product -> {
|
|
|
|
|
MapUtils.findAndThen(categoryMap, product.getCategoryId(), category -> {
|
|
|
|
|
product.setCategoryName(category.getName());
|
|
|
|
|
@ -541,6 +590,9 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
});
|
|
|
|
|
MapUtils.findAndThen(unitMap, product.getUnitId(),
|
|
|
|
|
unit -> product.setUnitName(unit.getName()));
|
|
|
|
|
MapUtils.findAndThen(purchaseUnitMap, product.getPurchaseUnitId(),
|
|
|
|
|
unit -> product.setPurchaseUnitName(unit.getName()));
|
|
|
|
|
product.setPackagingSchemes(packagingSchemeMap.getOrDefault(product.getId(), Collections.emptyList()));
|
|
|
|
|
if (Boolean.TRUE.equals(product.getDeleted())) {
|
|
|
|
|
product.setName(product.getName() + "(已被删除)");
|
|
|
|
|
}
|
|
|
|
|
@ -556,6 +608,12 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
public Long getProductCountByUnitId(Long unitId) {
|
|
|
|
|
return productMapper.selectCountByUnitId(unitId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Long getProductCountByPurchaseUnitId(Long purchaseUnitId) {
|
|
|
|
|
return productMapper.selectCountByPurchaseUnitId(purchaseUnitId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<ErpProductDO> getProductList(Collection<Long> ids) {
|
|
|
|
|
return productMapper.selectBatchIds(ids);
|
|
|
|
|
@ -705,6 +763,16 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (StrUtil.isNotBlank(importProduct.getPurchaseUnitName())) {
|
|
|
|
|
ErpProductUnitDO purchaseUnitDO = productUnitService.getProductUnitByName(importProduct.getPurchaseUnitName());
|
|
|
|
|
if (purchaseUnitDO != null) {
|
|
|
|
|
productDO.setPurchaseUnitId(purchaseUnitDO.getId());
|
|
|
|
|
productDO.setPurchaseUnitName(purchaseUnitDO.getName());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
validateProductUnitRelation(productDO.getUnitId(), productDO.getPurchaseUnitId(), productDO.getPurchaseUnitConvertQuantity());
|
|
|
|
|
|
|
|
|
|
return productDO;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|