feat:添加产品关联包装方案

main
HuangHuiKang 1 week ago
parent 0688ca49d9
commit 36fdf46263

@ -29,6 +29,6 @@ public class ErpPackagingSchemePageReqVO extends PageParam {
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private List<LocalDateTime> createTime;
private LocalDateTime[] createTime;
}

@ -110,4 +110,10 @@ public class ErpProductRespVO extends ErpProductDO {
@Schema(description = "关联模具列表")
private List<ProductRelationRespVO> molds;
@Schema(description = "可用包装方案列表")
private List<ProductPackagingSchemeRespVO> packagingSchemes;
@Schema(description = "默认包装方案 ID", example = "1")
private Long defaultPackagingSchemeId;
}

@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.erp.controller.admin.product.vo.product;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 产品关联包装方案 Response VO")
@Data
public class ProductPackagingSchemeRespVO {
@Schema(description = "关联记录 ID", example = "1")
private Long id;
@Schema(description = "包装方案 ID", example = "1")
private Long packagingSchemeId;
@Schema(description = "包装方案名称", example = "标准包装方案")
private String packagingSchemeName;
@Schema(description = "每包数量(件)", example = "100")
private BigDecimal packageQuantity;
@Schema(description = "每托包数(包)", example = "20")
private BigDecimal palletPackageQuantity;
@Schema(description = "每托总数量(件)", example = "2000")
private BigDecimal palletTotalQuantity;
@Schema(description = "是否默认方案", example = "1")
private Integer defaultStatus;
}

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.erp.controller.admin.product.vo.product;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 产品关联包装方案 Request VO")
@Data
public class ProductPackagingSchemeSaveReqVO {
@Schema(description = "包装方案 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "包装方案 ID 不能为空")
private Long packagingSchemeId;
@Schema(description = "是否默认方案", example = "1")
private Integer defaultStatus;
}

@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@ -68,4 +69,11 @@ public class ProductSaveReqVO {
@Schema(description = "关联模具D列表", example = "[11,15,23]")
private List<Long> moldIds;
}
@Schema(description = "可用包装方案列表")
@Valid
private List<ProductPackagingSchemeSaveReqVO> packagingSchemes;
@Schema(description = "默认包装方案 ID", example = "1")
private Long defaultPackagingSchemeId;
}

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.erp.dal.dataobject.productpackagingschemerel;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.math.BigDecimal;
@TableName("erp_product_packaging_scheme_rel")
@KeySequence("erp_product_packaging_scheme_rel_seq")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductPackagingSchemeRelDO extends BaseDO {
@TableId
private Long id;
private Long productId;
private Long packagingSchemeId;
private String packagingSchemeName;
private BigDecimal packageQuantity;
private BigDecimal palletPackageQuantity;
private BigDecimal palletTotalQuantity;
private Integer defaultStatus;
private Integer sort;
private String remark;
}

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.erp.dal.mysql.productpackagingschemerel;
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.List;
@Mapper
public interface ProductPackagingSchemeRelMapper extends BaseMapperX<ProductPackagingSchemeRelDO> {
default List<ProductPackagingSchemeRelDO> selectListByProductId(Long productId) {
return selectList(ProductPackagingSchemeRelDO::getProductId, productId);
}
}

@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.erp.controller.admin.product.vo.packagingscheme.E
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpPackagingSchemeDO;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
public interface ErpPackagingSchemeService {
@ -22,4 +23,6 @@ public interface ErpPackagingSchemeService {
List<ErpPackagingSchemeDO> getPackagingSchemeListByStatus(Integer status);
List<ErpPackagingSchemeDO> validatePackagingSchemeList(Collection<Long> ids);
}

@ -14,9 +14,13 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PACKAGING_SCHEME_CODE_DUPLICATE;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PACKAGING_SCHEME_NAME_DUPLICATE;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PACKAGING_SCHEME_NOT_EXISTS;
@ -127,4 +131,19 @@ public class ErpPackagingSchemeServiceImpl implements ErpPackagingSchemeService
return packagingSchemeMapper.selectListByStatus(status);
}
@Override
public List<ErpPackagingSchemeDO> validatePackagingSchemeList(Collection<Long> ids) {
if (ids == null || ids.isEmpty()) {
return Collections.emptyList();
}
List<ErpPackagingSchemeDO> list = packagingSchemeMapper.selectBatchIds(ids);
Map<Long, ErpPackagingSchemeDO> schemeMap = convertMap(list, ErpPackagingSchemeDO::getId);
for (Long id : ids) {
if (!schemeMap.containsKey(id)) {
throw exception(PACKAGING_SCHEME_NOT_EXISTS);
}
}
return list;
}
}

@ -15,15 +15,18 @@ import cn.iocoder.yudao.module.common.enums.QrcodeBizTypeEnum;
import cn.iocoder.yudao.module.common.service.qrcordrecord.QrcodeRecordService;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpPackagingSchemeDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.productdevicerel.ProductDeviceRelDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.productpackagingschemerel.ProductPackagingSchemeRelDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.productmoldrel.ProductMoldRelDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductCategoryMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.productdevicerel.ProductDeviceRelMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.productpackagingschemerel.ProductPackagingSchemeRelMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.productmoldrel.ProductMoldRelMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockMapper;
import cn.iocoder.yudao.module.erp.service.stock.ErpStockService;
@ -82,11 +85,17 @@ public class ErpProductServiceImpl implements ErpProductService {
@Resource
private ProductMoldRelMapper productMoldRelMapper;
@Resource
private ProductPackagingSchemeRelMapper productPackagingSchemeRelMapper;
@Resource
@Lazy // 延迟注入
private ErpStockService erpStockService;
@Resource
private ErpPackagingSchemeService packagingSchemeService;
@Resource
private QrcodeRecordService qrcodeService;
@ -180,6 +189,8 @@ public class ErpProductServiceImpl implements ErpProductService {
productMoldRelMapper.insertBatch(relList);
}
saveProductPackagingSchemes(product.getId(), createReqVO.getPackagingSchemes(), createReqVO.getDefaultPackagingSchemeId());
// 生成二维码
CodeTypeEnum codeType = autoCodeUtil.queryCodeType("PRODUCT_CODE_GENERATE");
if (codeType==null){
@ -262,6 +273,10 @@ public class ErpProductServiceImpl implements ErpProductService {
productMoldRelMapper.insertBatch(relList);
}
productPackagingSchemeRelMapper.delete(Wrappers.<ProductPackagingSchemeRelDO>lambdaQuery()
.eq(ProductPackagingSchemeRelDO::getProductId, updateObj.getId()));
saveProductPackagingSchemes(updateObj.getId(), updateReqVO.getPackagingSchemes(), updateReqVO.getDefaultPackagingSchemeId());
}
@Override
@ -323,6 +338,10 @@ public class ErpProductServiceImpl implements ErpProductService {
ErpProductRespVO respVO = BeanUtils.toBean(product, ErpProductRespVO.class);
respVO.setDevices(productMapper.selectDevicesByProductId(id));
respVO.setMolds(productMapper.selectMoldsByProductId(id));
List<ProductPackagingSchemeRelDO> packagingSchemeRels = productPackagingSchemeRelMapper.selectListByProductId(id);
respVO.setPackagingSchemes(BeanUtils.toBean(packagingSchemeRels, ProductPackagingSchemeRespVO.class));
packagingSchemeRels.stream().filter(item -> Integer.valueOf(1).equals(item.getDefaultStatus())).findFirst()
.ifPresent(item -> respVO.setDefaultPackagingSchemeId(item.getPackagingSchemeId()));
if (erpProductCategoryDO !=null ){
respVO.setCategoryType(erpProductCategoryDO.getType());
}
@ -337,6 +356,33 @@ public class ErpProductServiceImpl implements ErpProductService {
return respVO;
}
private void saveProductPackagingSchemes(Long productId, List<ProductPackagingSchemeSaveReqVO> packagingSchemes,
Long defaultPackagingSchemeId) {
if (CollUtil.isEmpty(packagingSchemes)) {
return;
}
List<Long> schemeIds = packagingSchemes.stream().map(ProductPackagingSchemeSaveReqVO::getPackagingSchemeId)
.distinct().collect(Collectors.toList());
if (defaultPackagingSchemeId != null && !schemeIds.contains(defaultPackagingSchemeId)) {
throw exception(PACKAGING_SCHEME_NOT_EXISTS);
}
List<ErpPackagingSchemeDO> schemeList = packagingSchemeService.validatePackagingSchemeList(schemeIds);
Map<Long, ErpPackagingSchemeDO> schemeMap = convertMap(schemeList, ErpPackagingSchemeDO::getId);
List<ProductPackagingSchemeRelDO> relList = schemeIds.stream().map(schemeId -> {
ErpPackagingSchemeDO scheme = schemeMap.get(schemeId);
ProductPackagingSchemeRelDO rel = new ProductPackagingSchemeRelDO();
rel.setProductId(productId);
rel.setPackagingSchemeId(schemeId);
rel.setPackagingSchemeName(scheme.getName());
rel.setPackageQuantity(scheme.getPackageQuantity());
rel.setPalletPackageQuantity(scheme.getPalletPackageQuantity());
rel.setPalletTotalQuantity(scheme.getPalletTotalQuantity());
rel.setDefaultStatus(defaultPackagingSchemeId != null && defaultPackagingSchemeId.equals(schemeId) ? 1 : 0);
return rel;
}).collect(Collectors.toList());
productPackagingSchemeRelMapper.insertBatch(relList);
}
@Override
public ErpProductRespVO getProduct(Long id, String code) {
if (id != null) {

Loading…
Cancel
Save