fix:添加物料和备件采购单位字段

main
HuangHuiKang 6 days ago
parent 067d78a51f
commit ef7c95bcac

@ -22,9 +22,25 @@ import java.util.stream.Collectors;
public interface MoldBrandMapper extends BaseMapperX<MoldBrandDO> {
default LambdaQueryWrapperX<MoldBrandDO> buildQueryWrapper(MoldBrandPageReqVO reqVO) {
LambdaQueryWrapperX<MoldBrandDO> queryWrapper = new LambdaQueryWrapperX<MoldBrandDO>()
.likeIfPresent(MoldBrandDO::getCode, reqVO.getCode())
.likeIfPresent(MoldBrandDO::getName, reqVO.getName())
LambdaQueryWrapperX<MoldBrandDO> queryWrapper = new LambdaQueryWrapperX<>();
if(StringUtils.isNotBlank(reqVO.getCode())&&StringUtils.isNotBlank(reqVO.getName())&&reqVO.getCode().equals(reqVO.getName())){
if(reqVO.getCode().contains("MOLD-")){
queryWrapper.eq(MoldBrandDO::getId, reqVO.getCode().replace("MOLD-",""));
}else{
queryWrapper.and(w -> w
.like(MoldBrandDO::getCode, reqVO.getCode())
.or()
.like(MoldBrandDO::getName, reqVO.getName())
);
}
}else{
queryWrapper.likeIfPresent(MoldBrandDO::getCode, reqVO.getCode())
.likeIfPresent(MoldBrandDO::getName, reqVO.getName());
}
queryWrapper
/* .likeIfPresent(MoldBrandDO::getCode, reqVO.getCode())
.likeIfPresent(MoldBrandDO::getName, reqVO.getName())*/
.eqIfPresent(MoldBrandDO::getMoldType, reqVO.getMoldType())
.eqIfPresent(MoldBrandDO::getProductId, reqVO.getProductId())
.likeIfPresent(MoldBrandDO::getProductName, reqVO.getProductName())

@ -179,6 +179,8 @@ public interface ErrorCodeConstants {
ErrorCode PRODUCT_UNIT_NOT_EXISTS = new ErrorCode(1_030_502_000, "产品单位不存在");
ErrorCode PRODUCT_UNIT_NAME_DUPLICATE = new ErrorCode(1_030_502_001, "已存在该名字的产品单位");
ErrorCode PRODUCT_UNIT_EXITS_PRODUCT = new ErrorCode(1_030_502_002, "存在产品使用该单位,无法删除");
ErrorCode PRODUCT_UNIT_CONVERT_SELF_NOT_ALLOWED = new ErrorCode(1_030_502_003, "不能设置自己的单位换算自己的单位");
ErrorCode PRODUCT_PURCHASE_UNIT_CONVERT_QUANTITY_INVALID = new ErrorCode(1_030_502_004, "采购单位换算数量必须大于0");
// ========== ERP 结算账户 1-030-600-000 ==========
ErrorCode ACCOUNT_NOT_EXISTS = new ErrorCode(1_030_600_000, "结算账户不存在");

@ -124,6 +124,8 @@ public class ErpProductController {
.setName(product.getName()).setBarCode(product.getBarCode())
.setCategoryId(product.getCategoryId()).setCategoryName(product.getCategoryName())
.setUnitId(product.getUnitId()).setUnitName(product.getUnitName())
.setPurchaseUnitId(product.getPurchaseUnitId()).setPurchaseUnitName(product.getPurchaseUnitName())
.setPurchaseUnitConvertQuantity(product.getPurchaseUnitConvertQuantity())
.setPurchasePrice(product.getPurchasePrice()).setSalePrice(product.getSalePrice())
.setMinPrice(product.getMinPrice()).setImages(product.getImages())));
}
@ -138,6 +140,8 @@ public class ErpProductController {
.setName(product.getName()).setBarCode(product.getBarCode())
.setCategoryId(product.getCategoryId()).setCategoryName(product.getCategoryName())
.setUnitId(product.getUnitId()).setUnitName(product.getUnitName())
.setPurchaseUnitId(product.getPurchaseUnitId()).setPurchaseUnitName(product.getPurchaseUnitName())
.setPurchaseUnitConvertQuantity(product.getPurchaseUnitConvertQuantity())
.setPurchasePrice(product.getPurchasePrice()).setSalePrice(product.getSalePrice())
.setMinPrice(product.getMinPrice()).setImages(product.getImages())));
}
@ -149,6 +153,8 @@ public class ErpProductController {
.setName(product.getName()).setBarCode(product.getBarCode())
.setCategoryId(product.getCategoryId()).setCategoryName(product.getCategoryName())
.setUnitId(product.getUnitId()).setUnitName(product.getUnitName())
.setPurchaseUnitId(product.getPurchaseUnitId()).setPurchaseUnitName(product.getPurchaseUnitName())
.setPurchaseUnitConvertQuantity(product.getPurchaseUnitConvertQuantity())
.setPurchasePrice(product.getPurchasePrice()).setSalePrice(product.getSalePrice())
.setMinPrice(product.getMinPrice()).setImages(product.getImages())));
}
@ -172,6 +178,8 @@ public class ErpProductController {
.setName(product.getName()).setBarCode(product.getBarCode())
.setCategoryId(product.getCategoryId()).setCategoryName(product.getCategoryName())
.setUnitId(product.getUnitId()).setUnitName(product.getUnitName())
.setPurchaseUnitId(product.getPurchaseUnitId()).setPurchaseUnitName(product.getPurchaseUnitName())
.setPurchaseUnitConvertQuantity(product.getPurchaseUnitConvertQuantity())
.setPurchasePrice(product.getPurchasePrice()).setSalePrice(product.getSalePrice())
.setMinPrice(product.getMinPrice()).setImages(product.getImages())));
}
@ -183,6 +191,8 @@ public class ErpProductController {
.setName(product.getName()).setBarCode(product.getBarCode())
.setCategoryId(product.getCategoryId()).setCategoryName(product.getCategoryName())
.setUnitId(product.getUnitId()).setUnitName(product.getUnitName())
.setPurchaseUnitId(product.getPurchaseUnitId()).setPurchaseUnitName(product.getPurchaseUnitName())
.setPurchaseUnitConvertQuantity(product.getPurchaseUnitConvertQuantity())
.setPurchasePrice(product.getPurchasePrice()).setSalePrice(product.getSalePrice())
.setMinPrice(product.getMinPrice()).setImages(product.getImages())));
}

@ -62,7 +62,16 @@ public class ErpProductImportExcelVO {
@ExcelIgnore
private Long unitId; // 单位ID
@ExcelIgnore
private Long purchaseUnitId; // 采购单位ID
@ExcelIgnore
private String purchaseUnitName; // 采购单位名称
@ExcelIgnore
private BigDecimal purchaseUnitConvertQuantity; // 采购单位换算数量
@ExcelIgnore
private LocalDateTime createTime;
}
}

@ -53,6 +53,18 @@ public class ErpProductRespVO extends ErpProductDO {
@ExcelProperty("单位")
private String unitName;
@Schema(description = "采购单位编号", example = "8890")
@ExcelProperty("采购单位编号")
private Long purchaseUnitId;
@Schema(description = "采购单位", example = "包")
@ExcelProperty("采购单位")
private String purchaseUnitName;
@Schema(description = "采购单位换算数量", example = "100")
@ExcelProperty("采购单位换算数量")
private BigDecimal purchaseUnitConvertQuantity;
@Schema(description = "产品状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty("产品状态")
private Integer status;

@ -36,6 +36,15 @@ public class ProductSaveReqVO {
@NotNull(message = "单位编号不能为空")
private Long unitId;
@Schema(description = "采购单位编号", example = "8890")
private Long purchaseUnitId;
@Schema(description = "采购单位名称", example = "包")
private String purchaseUnitName;
@Schema(description = "采购单位换算数量", example = "100")
private BigDecimal purchaseUnitConvertQuantity;
@Schema(description = "产品状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "产品状态不能为空")
private Integer status;

@ -65,6 +65,23 @@ public class ErpProductDO extends BaseDO {
* {@link ErpProductUnitDO#getId()}
*/
private Long unitId;
/**
*
*
* {@link ErpProductUnitDO#getId()}
*/
private Long purchaseUnitId;
/**
*
*/
private String purchaseUnitName;
/**
*
*/
private BigDecimal purchaseUnitConvertQuantity;
/**
*
*

@ -101,6 +101,10 @@ public interface ErpProductMapper extends BaseMapperX<ErpProductDO> {
return selectCount(ErpProductDO::getUnitId, unitId);
}
default Long selectCountByPurchaseUnitId(Long purchaseUnitId) {
return selectCount(ErpProductDO::getPurchaseUnitId, purchaseUnitId);
}
default List<ErpProductDO> selectListByStatus(Integer status) {
return selectList(ErpProductDO::getStatus, status);
}

@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.productpackagingschemerel.ProductPackagingSchemeRelDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.Collection;
import java.util.List;
@Mapper
@ -13,4 +14,8 @@ public interface ProductPackagingSchemeRelMapper extends BaseMapperX<ProductPack
return selectList(ProductPackagingSchemeRelDO::getProductId, productId);
}
default List<ProductPackagingSchemeRelDO> selectListByProductIds(Collection<Long> productIds) {
return selectList(ProductPackagingSchemeRelDO::getProductId, productIds);
}
}

@ -118,6 +118,8 @@ public interface ErpProductService {
* @return
*/
Long getProductCountByUnitId(Long unitId);
Long getProductCountByPurchaseUnitId(Long purchaseUnitId);
/**
*
*

@ -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;
}
}

@ -67,6 +67,7 @@ public class ErpProductUnitServiceImpl implements ErpProductUnitService {
}
// 1.1 校验存在
validateProductUnitExists(updateReqVO.getId());
validatePrimaryUnitNotSelf(updateReqVO.getId(), updateReqVO.getPrimaryId());
// 1.2 校验名字唯一
validateProductUnitNameUnique(updateReqVO.getId(), updateReqVO.getName());
// 2. 更新
@ -98,7 +99,7 @@ public class ErpProductUnitServiceImpl implements ErpProductUnitService {
// 1.1 校验存在
validateProductUnitExists(id);
// 1.2 校验产品是否使用
if (productService.getProductCountByUnitId(id) > 0) {
if (productService.getProductCountByUnitId(id) > 0 || productService.getProductCountByPurchaseUnitId(id) > 0) {
throw exception(PRODUCT_UNIT_EXITS_PRODUCT);
}
// 2. 删除
@ -111,6 +112,12 @@ public class ErpProductUnitServiceImpl implements ErpProductUnitService {
}
}
private void validatePrimaryUnitNotSelf(Long id, Long primaryId) {
if (primaryId != null && primaryId.equals(id)) {
throw exception(PRODUCT_UNIT_CONVERT_SELF_NOT_ALLOWED);
}
}
@Override
public ErpProductUnitDO getProductUnit(Long id) {
return productUnitMapper.selectById(id);
@ -181,4 +188,4 @@ public class ErpProductUnitServiceImpl implements ErpProductUnitService {
});
CollUtil.isNotEmpty(erpProductUnitDOs);productUnitMapper.insertBatch(erpProductUnitDOs);
}
}
}

@ -10,6 +10,7 @@
-->
<select id="selectListByIdsWithDeleted" resultType="cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO">
SELECT id, name, bar_code, category_id, sub_category_id, sub_category_name, unit_id,
purchase_unit_id, purchase_unit_name, purchase_unit_convert_quantity,
status, standard, remark, expiry_day, weight, purchase_price, sale_price,
min_price, safety_number, create_time, update_time, creator, updater, deleted
FROM erp_product

Loading…
Cancel
Save