diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockController.java index 1f97382a3..e876e2828 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockController.java @@ -104,9 +104,10 @@ public class ErpStockController { convertSet(pageResult.getList(), ErpStockDO::getWarehouseId)); return BeanUtils.toBean(pageResult, ErpStockRespVO.class, stock -> { MapUtils.findAndThen(productMap, stock.getProductId(), product -> stock.setProductName(product.getName()).setBarCode(product.getBarCode()) - .setCategoryName(product.getCategoryName()).setUnitName(product.getUnitName())); + .setCategoryName(product.getCategoryName()).setUnitName(product.getUnitName()) + .setCategoryType(product.getCategoryType())); MapUtils.findAndThen(warehouseMap, stock.getWarehouseId(), warehouse -> stock.setWarehouseName(warehouse.getName())); }); } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java index 7e662284d..719914e60 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java @@ -257,6 +257,7 @@ public class ErpStockInController { item.setProductName(product.getName()); item.setProductBarCode(product.getBarCode()); item.setProductUnitName(product.getUnitName()); + item.setCategoryType(product.getCategoryType()); }); })); stockInVO.setProductNames(CollUtil.join(stockInVO.getItems(), ",", ErpStockInRespVO.Item::getProductName)); diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockOutController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockOutController.java index 7a9113794..e34d48699 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockOutController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockOutController.java @@ -250,6 +250,7 @@ public class ErpStockOutController { item.setProductName(product.getName()); item.setProductBarCode(product.getBarCode()); item.setProductUnitName(product.getUnitName()); + item.setCategoryType(product.getCategoryType()); }); })); stockOutVO.setProductNames(CollUtil.join(stockOutVO.getItems(), ",", ErpStockOutRespVO.Item::getProductName)); diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockRecordController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockRecordController.java index 5209eb10d..7597b1a4a 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockRecordController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockRecordController.java @@ -96,10 +96,11 @@ public class ErpStockRecordController { convertSet(pageResult.getList(), record -> Long.parseLong(record.getCreator()))); return BeanUtils.toBean(pageResult, ErpStockRecordRespVO.class, stock -> { MapUtils.findAndThen(productMap, stock.getProductId(), product -> stock.setProductName(product.getName()) - .setCategoryName(product.getCategoryName()).setUnitName(product.getUnitName())); + .setCategoryName(product.getCategoryName()).setUnitName(product.getUnitName()) + .setCategoryType(product.getCategoryType())); MapUtils.findAndThen(warehouseMap, stock.getWarehouseId(), warehouse -> stock.setWarehouseName(warehouse.getName())); MapUtils.findAndThen(userMap, Long.parseLong(stock.getCreator()), user -> stock.setCreatorName(user.getNickname())); }); } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java index c1914b8ae..c422d8b1b 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java @@ -121,6 +121,9 @@ public class ErpStockInRespVO { @Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3113") private Long productId; + @Schema(description = "产品分类类型", example = "1") + private Integer categoryType; + @Schema(description = "产品单价", example = "100.00") private BigDecimal productPrice; diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/out/ErpStockOutRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/out/ErpStockOutRespVO.java index 13b0a882f..d3d1122c5 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/out/ErpStockOutRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/out/ErpStockOutRespVO.java @@ -120,6 +120,9 @@ public class ErpStockOutRespVO { @Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3113") private Long productId; + @Schema(description = "产品分类类型", example = "1") + private Integer categoryType; + @Schema(description = "产品单价", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") private BigDecimal productPrice; diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/record/ErpStockRecordRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/record/ErpStockRecordRespVO.java index 5e466bb9e..bad864103 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/record/ErpStockRecordRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/record/ErpStockRecordRespVO.java @@ -23,6 +23,11 @@ public class ErpStockRecordRespVO { @Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10625") private Long productId; + @Schema(description = "产品分类类型", example = "1") + @ExcelProperty(value = "产品分类类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.PRODUCT_CATEGORY_TYPE) + private Integer categoryType; + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32407") private Long warehouseId; @@ -89,4 +94,4 @@ public class ErpStockRecordRespVO { @Schema(description = "出入库时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("出入库时间") private LocalDateTime recordTime; -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockPageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockPageReqVO.java index 1ae954bc6..97b35f441 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockPageReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockPageReqVO.java @@ -21,6 +21,9 @@ public class ErpStockPageReqVO extends PageParam { @Schema(description = "产品分类", example = "2802") private Long categoryId; + @Schema(description = "产品分类类型", example = "1") + private Integer categoryType; + @Schema(description = "id集合导出用") private String ids; -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockRespVO.java index 6c86f7ac9..e4fdcfb58 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/stock/ErpStockRespVO.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.erp.controller.admin.stock.vo.stock; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,6 +9,8 @@ import lombok.Data; import java.math.BigDecimal; +import static cn.iocoder.yudao.module.erp.enums.DictTypeConstants.PRODUCT_CATEGORY_TYPE; + @Schema(description = "管理后台 - ERP 库存 Response VO") @Data @ExcelIgnoreUnannotated @@ -28,6 +32,11 @@ public class ErpStockRespVO { @Schema(description = "产品分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11161") private Long categoryId; + + @Schema(description = "产品分类类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "产品分类类型", converter = DictConvert.class) + @DictFormat(PRODUCT_CATEGORY_TYPE) + private Integer categoryType; // ========== 产品信息 ========== @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "苹果") @@ -52,4 +61,4 @@ public class ErpStockRespVO { @ExcelProperty("仓库名称") private String warehouseName; -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockDO.java index fb95841e5..ac8350dea 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockDO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockDO.java @@ -46,6 +46,15 @@ public class ErpStockDO extends BaseDO { * 库存数量 */ private BigDecimal count; - //@Schema(description = "产品分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11161") + /** + * 产品分类编号 + */ private Long categoryId; -} \ No newline at end of file + + /** + * 产品分类类型 + * + * 关联 {@link cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO#getType()} + */ + private Integer categoryType; +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockRecordDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockRecordDO.java index 6d7c4aa92..8a03fee0c 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockRecordDO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/stock/ErpStockRecordDO.java @@ -43,6 +43,10 @@ public class ErpStockRecordDO extends BaseDO { * 关联 {@link ErpProductDO#getId()} */ private Long categoryId; + /** + * 产品分类类型 + */ + private Integer categoryType; /** * 仓库编号 * @@ -89,4 +93,4 @@ public class ErpStockRecordDO extends BaseDO { * 出入库时间 */ private LocalDateTime recordTime; -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java index 6dbd53501..5887434c8 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java @@ -34,6 +34,7 @@ public interface ErpStockMapper extends BaseMapperX { .eqIfPresent(ErpStockDO::getProductId, reqVO.getProductId()) .eqIfPresent(ErpStockDO::getWarehouseId, reqVO.getWarehouseId()) .eqIfPresent(ErpStockDO::getCategoryId, reqVO.getCategoryId()) + .eqIfPresent(ErpStockDO::getCategoryType, reqVO.getCategoryType()) .orderByDesc(ErpStockDO::getId); // 单独处理 ids 条件 @@ -55,6 +56,12 @@ public interface ErpStockMapper extends BaseMapperX { ErpStockDO::getWarehouseId, warehouseId); } + default ErpStockDO selectByProductIdAndWarehouseIdAndCategoryType(Long productId, Long warehouseId, Integer categoryType) { + return selectOne(ErpStockDO::getProductId, productId, + ErpStockDO::getWarehouseId, warehouseId, + ErpStockDO::getCategoryType, categoryType); + } + default List selectByProductId(Long productId) { return selectList(new QueryWrapper() .eq("product_id", productId)); @@ -95,4 +102,4 @@ public interface ErpStockMapper extends BaseMapperX { @Param("warehouseId") Long warehouseId, @Param("num") BigDecimal num); -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java index 0726f0fb6..20d8707ab 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInAuditR import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInSaveReqVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInSubmitReqVO; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInApproveRecordDO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInDO; @@ -334,19 +335,19 @@ public class ErpStockInServiceImpl implements ErpStockInService { : (approve ? ErpStockRecordBizTypeEnum.OTHER_IN.getType() : ErpStockRecordBizTypeEnum.OTHER_IN_CANCEL.getType()); stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO( - stockInItem.getProductId(), moldDO.getId(), stockInItem.getWarehouseId(), count, + stockInItem.getProductId(), moldDO.getId(), null, stockInItem.getWarehouseId(), count, recordBizType, stockInItem.getInId(), stockInItem.getId(), stockIn.getNo(), stockIn.getInTime())); if (approve && itemNeedUpdateMoldStatus(moldDO)) { moldDO.setStatus(MoldBrandStatusEnum.STANDBY.getStatus()); moldBrandService.updateMoldBrand(BeanUtils.toBean(moldDO, MoldBrandSaveReqVO.class)); } } else { - ErpProductDO productDO = productService.getProduct(stockInItem.getProductId()); + ErpProductRespVO productDO = productService.getProduct(stockInItem.getProductId()); Integer recordBizType = bizType != null ? bizType : (approve ? ErpStockRecordBizTypeEnum.getTypeByName(stockIn.getInType()) : ErpStockRecordBizTypeEnum.getTypeByName(stockIn.getInType(), 10)); stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO( - stockInItem.getProductId(), productDO.getCategoryId(), stockInItem.getWarehouseId(), count, + stockInItem.getProductId(), productDO.getCategoryId(), productDO.getCategoryType(), stockInItem.getWarehouseId(), count, recordBizType, stockInItem.getInId(), stockInItem.getId(), stockIn.getNo(), stockIn.getInTime())); } }); diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java index 963cc58f5..df13fec60 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java @@ -328,7 +328,7 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { : (approve ? ErpStockRecordBizTypeEnum.OTHER_OUT.getType() : ErpStockRecordBizTypeEnum.OTHER_OUT_CANCEL.getType()); stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO( - stockOutItem.getProductId(), moldDO.getId(), stockOutItem.getWarehouseId(), count, + stockOutItem.getProductId(), moldDO.getId(), null, stockOutItem.getWarehouseId(), count, recordBizType, stockOutItem.getOutId(), stockOutItem.getId(), stockOut.getNo(), stockOut.getOutTime())); if (approve && itemNeedUpdateMoldStatus(moldDO)) { moldDO.setStatus(3); @@ -340,7 +340,7 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { : (approve ? ErpStockRecordBizTypeEnum.getTypeByName(stockOut.getOutType()) : ErpStockRecordBizTypeEnum.getTypeByName(stockOut.getOutType(), 10)); stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO( - stockOutItem.getProductId(), product.getCategoryId(), stockOutItem.getWarehouseId(), count, + stockOutItem.getProductId(), product.getCategoryId(), product.getCategoryType(), stockOutItem.getWarehouseId(), count, recordBizType, stockOutItem.getOutId(), stockOutItem.getId(), stockOut.getNo(), stockOut.getOutTime())); } }); diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockRecordServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockRecordServiceImpl.java index c0931b09f..53e89d9d0 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockRecordServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockRecordServiceImpl.java @@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.erp.service.stock; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.record.ErpStockRecordPageReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockRecordDO; import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockRecordMapper; +import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.stock.bo.ErpStockRecordCreateReqBO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +30,9 @@ public class ErpStockRecordServiceImpl implements ErpStockRecordService { @Resource private ErpStockService stockService; + @Resource + private ErpProductService productService; + @Override public ErpStockRecordDO getStockRecord(Long id) { return stockRecordMapper.selectById(id); @@ -44,11 +49,17 @@ public class ErpStockRecordServiceImpl implements ErpStockRecordService { // 1. 更新库存 BigDecimal totalCount = stockService.updateStockCountIncrement(createReqBO.getCategoryId(), createReqBO.getProductId(), createReqBO.getWarehouseId(), createReqBO.getCount()); + Integer categoryType = createReqBO.getCategoryType(); + if (categoryType == null) { + ErpProductRespVO product = productService.getProduct(createReqBO.getProductId()); + categoryType = product != null ? product.getCategoryType() : null; + } // 2. 创建库存明细 ErpStockRecordDO stockRecord = BeanUtils.toBean(createReqBO, ErpStockRecordDO.class) .setCategoryId(createReqBO.getCategoryId()) + .setCategoryType(categoryType) .setTotalCount(totalCount); stockRecordMapper.insert(stockRecord); } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java index ccf1a4773..0da04e9c1 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.erp.service.stock; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.stock.ErpStockPageReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO; import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockMapper; @@ -42,12 +43,26 @@ public class ErpStockServiceImpl implements ErpStockService { @Override public ErpStockDO getStock(Long id) { - return stockMapper.selectById(id); + ErpStockDO stock = stockMapper.selectById(id); + if (stock != null && stock.getCategoryType() == null) { + ErpProductRespVO product = productService.getProduct(stock.getProductId()); + if (product != null) { + stock.setCategoryType(product.getCategoryType()); + } + } + return stock; } @Override public ErpStockDO getStock(Long productId, Long warehouseId) { - return stockMapper.selectByProductIdAndWarehouseId(productId, warehouseId); + ErpStockDO stock = stockMapper.selectByProductIdAndWarehouseId(productId, warehouseId); + if (stock != null && stock.getCategoryType() == null) { + ErpProductRespVO product = productService.getProduct(productId); + if (product != null) { + stock.setCategoryType(product.getCategoryType()); + } + } + return stock; } @Override public List getStockByProductId(Long productId) { @@ -67,12 +82,18 @@ public class ErpStockServiceImpl implements ErpStockService { @Override public BigDecimal updateStockCountIncrement(Long categoryId,Long productId, Long warehouseId, BigDecimal count) { + ErpProductRespVO product = productService.getProduct(productId); + Integer categoryType = product != null ? product.getCategoryType() : null; // 1.1 查询当前库存 ErpStockDO stock = stockMapper.selectByProductIdAndWarehouseId(productId, warehouseId); if (stock == null) { - stock = new ErpStockDO().setProductId(productId).setWarehouseId(warehouseId).setCount(BigDecimal.ZERO); + stock = new ErpStockDO().setProductId(productId).setWarehouseId(warehouseId).setCount(BigDecimal.ZERO) + .setCategoryType(categoryType); stock.setCategoryId(categoryId); stockMapper.insert(stock); + } else if (stock.getCategoryType() == null) { + stock.setCategoryType(categoryType); + stockMapper.updateById(new ErpStockDO().setId(stock.getId()).setCategoryType(categoryType)); } // 1.2 校验库存是否充足 if (!NEGATIVE_STOCK_COUNT_ENABLE && stock.getCount().add(count).compareTo(BigDecimal.ZERO) < 0) { @@ -92,4 +113,4 @@ public class ErpStockServiceImpl implements ErpStockService { return stock.getCount().add(count); } -} \ No newline at end of file +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/bo/ErpStockRecordCreateReqBO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/bo/ErpStockRecordCreateReqBO.java index 0c55c9ad9..5f18c0b26 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/bo/ErpStockRecordCreateReqBO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/bo/ErpStockRecordCreateReqBO.java @@ -28,6 +28,10 @@ public class ErpStockRecordCreateReqBO { */ @NotNull(message = "产品类型不能为空") private Long categoryId; + /** + * 产品分类类型 + */ + private Integer categoryType; /** * 仓库编号 */ @@ -64,4 +68,10 @@ public class ErpStockRecordCreateReqBO { @NotNull(message = "出入库时间不能为空") private LocalDateTime recordTime; + + public ErpStockRecordCreateReqBO(Long productId, Long categoryId, Long warehouseId, BigDecimal count, + Integer bizType, Long bizId, Long bizItemId, String bizNo, + LocalDateTime recordTime) { + this(productId, categoryId, null, warehouseId, count, bizType, bizId, bizItemId, bizNo, recordTime); + } }