fix:修改仓储管理模块相关问题

main
HuangHuiKang 2 weeks ago
parent bff1ffa31b
commit 3aaf69cf8e

@ -118,8 +118,9 @@ public class ErpProductController {
}
@GetMapping("/simple-list-all")
@Operation(summary = "获得所有精简列表", description = "只包含被开启的产品,主要用于前端的下拉选项")
public CommonResult<List<ErpProductRespVO>> getAllSimpleList(@RequestParam(name = "categoryId", required = false) Integer categoryId) {
List<ErpProductRespVO> list = productService.getProductVOListByStatus(CommonStatusEnum.ENABLE.getStatus(),categoryId);
public CommonResult<List<ErpProductRespVO>> getAllSimpleList(@RequestParam(name = "categoryId", required = false) Integer categoryId,
@RequestParam(name = "categoryType", required = false) Integer categoryType) {
List<ErpProductRespVO> list = productService.getProductVOListByStatus(CommonStatusEnum.ENABLE.getStatus(), categoryId, categoryType);
return success(convertList(list, product -> new ErpProductRespVO().setId(product.getId())
.setName(product.getName()).setBarCode(product.getBarCode())
.setCategoryId(product.getCategoryId()).setCategoryName(product.getCategoryName())

@ -38,11 +38,13 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collections;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@ -95,8 +97,10 @@ public class ErpStockController {
@Operation(summary = "获得产品库存分页")
@PreAuthorize("@ss.hasPermission('erp:stock:query')")
public CommonResult<PageResult<ErpStockRespVO>> getStockPage(@Valid ErpStockPageReqVO pageReqVO) {
PageResult<ErpStockDO> pageResult = stockService.getStockPage(pageReqVO);
return success(buildStockVOPageResult(pageResult));
ErpStockPageReqVO queryReqVO = BeanUtils.toBean(pageReqVO, ErpStockPageReqVO.class);
queryReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
PageResult<ErpStockRespVO> groupedResult = buildStockVOPageResult(stockService.getStockPage(queryReqVO));
return success(new PageResult<>(paginateStockList(groupedResult.getList(), pageReqVO), groupedResult.getTotal()));
}
@GetMapping("/export-excel")
@ -121,7 +125,7 @@ public class ErpStockController {
Map<Long, WarehouseAreaDO> areaMap = warehouseAreaService.getWarehouseAreaMap(
convertSet(pageResult.getList(), ErpStockDO::getAreaId));
Map<String, Long> palletCountMap = buildPalletCountMap(pageResult.getList());
return BeanUtils.toBean(pageResult, ErpStockRespVO.class, stock -> {
PageResult<ErpStockRespVO> respPageResult = 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())
@ -138,6 +142,8 @@ public class ErpStockController {
}
fillRecentRecordTime(stock);
});
List<ErpStockRespVO> mergedList = mergeStockByProductAndWarehouse(respPageResult.getList());
return new PageResult<>(mergedList, (long) mergedList.size());
}
private ErpStockRespVO buildStockRespVO(ErpStockDO stock) {
@ -177,6 +183,79 @@ public class ErpStockController {
return respVO;
}
private List<ErpStockRespVO> mergeStockByProductAndWarehouse(List<ErpStockRespVO> stockList) {
if (CollUtil.isEmpty(stockList)) {
return Collections.emptyList();
}
Map<String, ErpStockRespVO> mergedMap = new LinkedHashMap<>();
stockList.forEach(stock -> {
String key = buildStockGroupKey(stock.getProductId(), stock.getWarehouseId());
ErpStockRespVO merged = mergedMap.computeIfAbsent(key, item -> {
ErpStockRespVO target = BeanUtils.toBean(stock, ErpStockRespVO.class);
target.setId(null);
target.setAreaId(null);
target.setAreaName(null);
target.setCount(BigDecimal.ZERO);
target.setPalletCount(0L);
target.setAreaStocks(new ArrayList<>());
return target;
});
merged.setCount(defaultZero(merged.getCount()).add(defaultZero(stock.getCount())));
merged.setPalletCount((merged.getPalletCount() == null ? 0L : merged.getPalletCount())
+ (stock.getPalletCount() == null ? 0L : stock.getPalletCount()));
merged.getAreaStocks().add(buildAreaStock(stock));
if (merged.getRecentInTime() == null || stock.getRecentInTime() != null
&& stock.getRecentInTime().isAfter(merged.getRecentInTime())) {
merged.setRecentInTime(stock.getRecentInTime());
}
if (merged.getRecentOutTime() == null || stock.getRecentOutTime() != null
&& stock.getRecentOutTime().isAfter(merged.getRecentOutTime())) {
merged.setRecentOutTime(stock.getRecentOutTime());
}
});
mergedMap.values().forEach(stock -> {
stock.setTotalBaseCount(stock.getCount());
stock.setTotalPackageCount(calculatePackageCount(stock, stock.getCount()));
stock.setPackagingRule(buildPackagingRule(stock));
stock.setStockDisplay(buildStockDisplay(stock));
});
return new ArrayList<>(mergedMap.values());
}
private List<ErpStockRespVO> paginateStockList(List<ErpStockRespVO> list, PageParam pageReqVO) {
if (CollUtil.isEmpty(list) || Objects.equals(pageReqVO.getPageSize(), PageParam.PAGE_SIZE_NONE)) {
return list;
}
int fromIndex = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize();
if (fromIndex >= list.size()) {
return Collections.emptyList();
}
int toIndex = Math.min(fromIndex + pageReqVO.getPageSize(), list.size());
return list.subList(fromIndex, toIndex);
}
private ErpStockRespVO.AreaStock buildAreaStock(ErpStockRespVO stock) {
ErpStockRespVO.AreaStock areaStock = new ErpStockRespVO.AreaStock();
areaStock.setAreaId(stock.getAreaId());
areaStock.setAreaName(stock.getAreaName());
areaStock.setCount(defaultZero(stock.getCount()));
areaStock.setPackageCount(calculatePackageCount(stock, stock.getCount()));
areaStock.setBaseCount(calculateBaseCount(stock, stock.getCount()));
areaStock.setStockDisplay(buildAreaStockDisplay(stock, areaStock));
return areaStock;
}
private String buildAreaStockDisplay(ErpStockRespVO stock, ErpStockRespVO.AreaStock areaStock) {
String prefix = areaStock.getAreaName() != null ? areaStock.getAreaName() + "" : "";
String countDisplay = "" + formatNumber(areaStock.getCount()) + nullToEmpty(stock.getUnitName()) + "";
if (isProductType(stock.getCategoryType())) {
return prefix + formatNumber(areaStock.getPackageCount()) + "包"
+ formatNumber(areaStock.getBaseCount()) + stock.getUnitName() + countDisplay;
}
return prefix + formatNumber(areaStock.getPackageCount()) + nullToEmpty(stock.getPurchaseUnitName())
+ formatNumber(areaStock.getBaseCount()) + nullToEmpty(stock.getUnitName()) + countDisplay;
}
private void fillRecentRecordTime(ErpStockRespVO stock) {
stock.setRecentInTime(stockRecordService.getLatestRecordTime(
stock.getProductId(), stock.getWarehouseId(), stock.getAreaId(), true));
@ -188,24 +267,32 @@ public class ErpStockController {
if (stock.getUnitId() == null) {
stock.setUnitId(product.getUnitId());
}
stock.setUnitName(product.getUnitName());
if (stock.getPurchaseUnitId() == null) {
stock.setPurchaseUnitId(product.getPurchaseUnitId());
}
if (stock.getPurchaseUnitName() == null) {
stock.setPurchaseUnitName(product.getPurchaseUnitName());
}
if (stock.getPurchaseUnitConvertQuantity() == null) {
stock.setPurchaseUnitConvertQuantity(product.getPurchaseUnitConvertQuantity());
}
if (stock.getDefaultPackagingSchemeId() == null) {
stock.setDefaultPackagingSchemeId(product.getDefaultPackagingSchemeId());
}
stock.setPurchaseUnitName(product.getPurchaseUnitName());
stock.setPurchaseUnitConvertQuantity(product.getPurchaseUnitConvertQuantity());
stock.setDefaultPackagingSchemeId(product.getDefaultPackagingSchemeId());
if (stock.getDefaultPackagingScheme() == null) {
stock.setDefaultPackagingScheme(findDefaultPackagingScheme(product));
}
}
private void fillPackagingSnapshot(ErpStockRespVO stock, ErpProductRespVO product) {
if (isProductType(stock.getCategoryType())) {
ProductPackagingSchemeRespVO defaultScheme = findDefaultPackagingScheme(product);
if (defaultScheme == null) {
return;
}
stock.setDefaultPackagingSchemeId(defaultScheme.getPackagingSchemeId());
stock.setDefaultPackagingScheme(defaultScheme);
stock.setDefaultPackagingSchemeName(defaultScheme.getPackagingSchemeName());
stock.setPackageQuantity(defaultScheme.getPackageQuantity());
stock.setPalletPackageQuantity(defaultScheme.getPalletPackageQuantity());
stock.setPalletTotalQuantity(defaultScheme.getPalletTotalQuantity());
return;
}
if (stock.getDefaultPackagingSchemeName() != null
&& stock.getPackageQuantity() != null
&& stock.getPalletPackageQuantity() != null
@ -273,9 +360,10 @@ public class ErpStockController {
if (stock.getPackageQuantity() == null || stock.getPackageQuantity().compareTo(BigDecimal.ZERO) <= 0) {
return formatNumber(stock.getCount()) + stock.getUnitName();
}
BigDecimal packageCount = stock.getCount().divide(stock.getPackageQuantity(), 0, RoundingMode.CEILING);
BigDecimal packageCount = calculatePackageCount(stock, stock.getCount());
BigDecimal baseCount = calculateBaseCount(stock, stock.getCount());
return formatNumber(BigDecimal.valueOf(stock.getPalletCount() != null ? stock.getPalletCount() : 0L)) + "\u6258"
+ formatNumber(packageCount) + "\u5305" + formatNumber(stock.getCount()) + stock.getUnitName();
+ formatNumber(packageCount) + "\u5305" + formatNumber(baseCount) + stock.getUnitName();
}
if (stock.getPurchaseUnitConvertQuantity() == null || stock.getPurchaseUnitConvertQuantity().compareTo(BigDecimal.ZERO) <= 0
|| stock.getPurchaseUnitName() == null || stock.getUnitName() == null) {
@ -306,6 +394,37 @@ public class ErpStockController {
display.append(formatNumber(quantity)).append(unitName);
}
private BigDecimal calculatePackageCount(ErpStockRespVO stock, BigDecimal count) {
BigDecimal convertQuantity = getDisplayConvertQuantity(stock);
if (convertQuantity == null || convertQuantity.compareTo(BigDecimal.ZERO) <= 0) {
return BigDecimal.ZERO;
}
return defaultZero(count).divideToIntegralValue(convertQuantity);
}
private BigDecimal calculateBaseCount(ErpStockRespVO stock, BigDecimal count) {
BigDecimal convertQuantity = getDisplayConvertQuantity(stock);
if (convertQuantity == null || convertQuantity.compareTo(BigDecimal.ZERO) <= 0) {
return defaultZero(count);
}
return defaultZero(count).remainder(convertQuantity);
}
private BigDecimal getDisplayConvertQuantity(ErpStockRespVO stock) {
if (isProductType(stock.getCategoryType())) {
return stock.getPackageQuantity();
}
return stock.getPurchaseUnitConvertQuantity();
}
private BigDecimal defaultZero(BigDecimal value) {
return value != null ? value : BigDecimal.ZERO;
}
private String nullToEmpty(String value) {
return value != null ? value : "";
}
private boolean isProductType(Integer categoryType) {
return Integer.valueOf(1).equals(categoryType);
}
@ -332,6 +451,10 @@ public class ErpStockController {
return String.valueOf(productId) + "_" + String.valueOf(warehouseId) + "_" + String.valueOf(areaId);
}
private String buildStockGroupKey(Long productId, Long warehouseId) {
return String.valueOf(productId) + "_" + String.valueOf(warehouseId);
}
private String formatNumber(BigDecimal value) {
return value == null ? "0" : value.stripTrailingZeros().toPlainString();
}

@ -179,7 +179,6 @@ public class ErpStockInController {
@PreAuthorize("@ss.hasPermission('erp:stock-in:query')")
public CommonResult<PageResult<ErpStockInRespVO>> getStockInPage(@Valid ErpStockInPageReqVO pageReqVO) {
fillPageReqDefault(pageReqVO);
applyItemFilter(pageReqVO);
return success(buildStockInVOPageResult(stockInService.getStockInPage(pageReqVO)));
}
@ -190,34 +189,11 @@ public class ErpStockInController {
public void exportStockInExcel(@Valid ErpStockInPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
fillPageReqDefault(pageReqVO);
applyItemFilter(pageReqVO);
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ErpStockInRespVO> list = buildStockInVOPageResult(stockInService.getStockInPage(pageReqVO)).getList();
ExcelUtils.write(response, "其它入库单.xls", "数据", ErpStockInRespVO.class, list);
}
private void applyItemFilter(ErpStockInPageReqVO pageReqVO) {
if (pageReqVO.getProductId() == null && pageReqVO.getWarehouseId() == null) {
return;
}
List<Long> ids = stockInService.getStockInIdsByItemFilter(pageReqVO.getProductId(), pageReqVO.getWarehouseId());
if (StringUtils.isNotBlank(pageReqVO.getIds())) {
List<Long> reqIds = Stream.of(pageReqVO.getIds().split(","))
.map(String::trim)
.filter(StringUtils::isNotBlank)
.map(Long::valueOf)
.collect(Collectors.toList());
ids = ids.stream().filter(reqIds::contains).collect(Collectors.toList());
}
if (CollUtil.isEmpty(ids)) {
pageReqVO.setIds("-1");
return;
}
pageReqVO.setIds(CollUtil.join(ids, ","));
pageReqVO.setProductId(null);
pageReqVO.setWarehouseId(null);
}
private void fillPageReqDefault(ErpStockInPageReqVO pageReqVO) {
if (StringUtils.isEmpty(pageReqVO.getInType())) {
List<String> list = new ArrayList<>();
@ -341,8 +317,11 @@ public class ErpStockInController {
item.setProductBarCode(product.getBarCode());
item.setProductUnitName(product.getUnitName());
item.setCategoryType(product.getCategoryType());
item.setSupplierId(product.getDefaultSupplierId());
if (product.getDefaultSupplierId() != null && CollUtil.isNotEmpty(product.getSuppliers())) {
if (item.getSupplierId() == null) {
item.setSupplierId(product.getDefaultSupplierId());
}
if (StringUtils.isBlank(item.getSupplierName())
&& product.getDefaultSupplierId() != null && CollUtil.isNotEmpty(product.getSuppliers())) {
product.getSuppliers().stream()
.filter(supplier -> Objects.equals(supplier.getSupplierId(), product.getDefaultSupplierId()))
.findFirst()

@ -66,6 +66,12 @@ public class ErpStockInSaveReqVO {
@Schema(description = "产品编号", example = "3113")
private Long productId;
@Schema(description = "供应商编号", example = "3113")
private Long supplierId;
@Schema(description = "供应商名称", example = "供应商A")
private String supplierName;
@Schema(description = "产品单价", example = "100.00")
private BigDecimal productPrice;

@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import static cn.iocoder.yudao.module.erp.enums.DictTypeConstants.PRODUCT_CATEGORY_TYPE;
@ -95,6 +96,15 @@ public class ErpStockRespVO {
@ExcelProperty("库存展示")
private String stockDisplay;
@Schema(description = "总包数", example = "10")
private BigDecimal totalPackageCount;
@Schema(description = "总基本数量", example = "100")
private BigDecimal totalBaseCount;
@Schema(description = "库区库存明细")
private List<AreaStock> areaStocks;
@Schema(description = "托盘数量", example = "2")
private Long palletCount;
@ -112,4 +122,26 @@ public class ErpStockRespVO {
@ExcelProperty("最近出库时间")
private java.time.LocalDateTime recentOutTime;
@Data
public static class AreaStock {
@Schema(description = "库区编号", example = "1")
private Long areaId;
@Schema(description = "库区名称", example = "A-01")
private String areaName;
@Schema(description = "库存数量", example = "100")
private BigDecimal count;
@Schema(description = "包数", example = "10")
private BigDecimal packageCount;
@Schema(description = "基本数量", example = "0")
private BigDecimal baseCount;
@Schema(description = "库存展示", example = "A-0110包0个")
private String stockDisplay;
}
}

@ -56,6 +56,14 @@ public class ErpStockInItemDO extends BaseDO {
*
*/
private String productName;
/**
*
*/
private Long supplierId;
/**
*
*/
private String supplierName;
/**
*
*

@ -133,9 +133,13 @@ public interface ErpProductMapper extends BaseMapperX<ErpProductDO> {
}
/**查询不同类型的产品**/
default List<ErpProductDO> selectByCategorys(List<Integer> categoryIds) {
return selectByCategorys(categoryIds, CommonStatusEnum.ENABLE.getStatus());
}
default List<ErpProductDO> selectByCategorys(List<Integer> categoryIds, Integer status) {
LambdaQueryWrapper<ErpProductDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ErpProductDO::getStatus, 0);
wrapper.eq(status != null, ErpProductDO::getStatus, status);
if (categoryIds!=null && !categoryIds.isEmpty() ) {
wrapper.in(ErpProductDO::getCategoryId, categoryIds);

@ -2,10 +2,8 @@ package cn.iocoder.yudao.module.erp.dal.mysql.stock;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInPageReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInDO;
import com.alibaba.excel.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -22,17 +20,20 @@ public interface ErpStockInMapper extends BaseMapperX<ErpStockInDO> {
default PageResult<ErpStockInDO> selectPage(ErpStockInPageReqVO reqVO) {
MPJLambdaWrapperX<ErpStockInDO> query = new MPJLambdaWrapperX<>();
if(StringUtil.isNotBlank(reqVO.getNo())){
if(reqVO.getNo().contains("PRODUCTMATERIAL-")){
query.eq(ErpProductDO::getId, reqVO.getNo().replace("PRODUCTMATERIAL-",""));
}else{
Long productId = reqVO.getProductId();
if (StringUtil.isNotBlank(reqVO.getNo())) {
if (reqVO.getNo().contains("PRODUCTMATERIAL-")) {
productId = Long.valueOf(reqVO.getNo().replace("PRODUCTMATERIAL-", ""));
} else {
query.likeIfPresent(ErpStockInDO::getNo, reqVO.getNo());
}
}
if (productId != null || reqVO.getWarehouseId() != null) {
query.inSql(ErpStockInDO::getId, buildItemFilterSql(productId, reqVO.getWarehouseId()));
}
query
// .likeIfPresent(ErpStockInDO::getNo, reqVO.getNo())
.eqIfPresent(ErpStockInDO::getSupplierId, reqVO.getSupplierId())
.betweenIfPresent(ErpStockInDO::getInTime, reqVO.getInTime())
.inIfPresent(ErpStockInDO::getStatus, reqVO.getStatusList())
@ -52,6 +53,17 @@ public interface ErpStockInMapper extends BaseMapperX<ErpStockInDO> {
return selectJoinPage(reqVO, ErpStockInDO.class, query);
}
default String buildItemFilterSql(Long productId, Long warehouseId) {
StringBuilder itemFilterSql = new StringBuilder("select distinct in_id from erp_stock_in_item where deleted = 0");
if (productId != null) {
itemFilterSql.append(" and product_id = ").append(productId);
}
if (warehouseId != null) {
itemFilterSql.append(" and warehouse_id = ").append(warehouseId);
}
return itemFilterSql.toString();
}
default int updateByIdAndStatus(Long id, Integer status, ErpStockInDO updateObj) {
return update(updateObj, new LambdaUpdateWrapper<ErpStockInDO>()
.eq(ErpStockInDO::getId, id)

@ -5,6 +5,7 @@ import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldBrandDO;
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.dataobject.stock.ErpWarehouseDO;
@ -31,8 +32,33 @@ public interface ErpStockMapper extends BaseMapperX<ErpStockDO> {
default PageResult<ErpStockDO> selectPage(ErpStockPageReqVO reqVO) {
LambdaQueryWrapperX<ErpStockDO> erpStockDOLambdaQueryWrapperX = new LambdaQueryWrapperX<ErpStockDO>()
.eqIfPresent(ErpStockDO::getProductId, reqVO.getProductId())
LambdaQueryWrapperX<ErpStockDO> erpStockDOLambdaQueryWrapperX = new LambdaQueryWrapperX<ErpStockDO>();
// if(StringUtils.isNotBlank(reqVO.getCode())&&StringUtils.isNotBlank(reqVO.getName())&&reqVO.getCode().equals(reqVO.getName())){
// if(reqVO.getCode().contains("PRODUCTMATERIAL-")){
// queryWrapper.eq(MoldBrandDO::getId, reqVO.getCode().replace("PRODUCTMATERIAL-",""));
// }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());
// }
erpStockDOLambdaQueryWrapperX.eqIfPresent(ErpStockDO::getProductId, reqVO.getProductId())
.eqIfPresent(ErpStockDO::getWarehouseId, reqVO.getWarehouseId())
.eqIfPresent(ErpStockDO::getAreaId, reqVO.getAreaId())
.eqIfPresent(ErpStockDO::getCategoryId, reqVO.getCategoryId())

@ -73,7 +73,7 @@ public interface ErpProductService {
* @param status
* @return VO
*/
List<ErpProductRespVO> getProductVOListByStatus(Integer status,Integer categoryId);
List<ErpProductRespVO> getProductVOListByStatus(Integer status, Integer categoryId, Integer categoryType);
List<ErpProductRespVO> getProductVOListByCategory(Integer categoryId);
List<ErpProductRespVO> getProductVOListByCategory(Integer categoryId, Integer categoryType);
List<ErpProductRespVO> buildProductVOList(List<ErpProductDO> list);

@ -521,13 +521,24 @@ public class ErpProductServiceImpl implements ErpProductService {
@Override
public List<ErpProductRespVO> getProductVOListByStatus(Integer status,Integer categoryId) {
public List<ErpProductRespVO> getProductVOListByStatus(Integer status, Integer categoryId, Integer categoryType) {
List<Integer> categoryList = new ArrayList<>();
if (categoryType != null) {
List<Long> categoryIds = productMapper.selectCategoryIdListByType(categoryType);
if (CollUtil.isEmpty(categoryIds)) {
return new ArrayList<>();
}
if (categoryId != null && !categoryIds.contains(categoryId.longValue())) {
return new ArrayList<>();
}
categoryIds.forEach(item -> categoryList.add(item.intValue()));
}
if(categoryId != null ){
categoryList.clear();
categoryList.add(categoryId);
}
List<ErpProductDO> list = productMapper.selectByCategorys(categoryList);
List<ErpProductDO> list = productMapper.selectByCategorys(categoryList, status);
return buildProductVOList(list);
}
@Override

@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.StockInTypeEnum;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.pallet.ErpPalletDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpSupplierDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInApproveRecordDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInItemDO;
@ -555,14 +556,38 @@ public class ErpStockInServiceImpl implements ErpStockInService {
ErpWarehouseDO::getId);
Map<Long, WarehouseAreaDO> areaMap = warehouseAreaService.getWarehouseAreaMap(
convertSet(list, ErpStockInSaveReqVO.Item::getAreaId));
Map<Long, ErpSupplierDO> supplierMap = buildStockInItemSupplierMap(list, inType);
return convertList(list, item -> BeanUtils.toBean(item, ErpStockInItemDO.class, target -> target
.setWarehouseName(warehouseMap.containsKey(target.getWarehouseId()) ? warehouseMap.get(target.getWarehouseId()).getName() : null)
.setAreaName(areaMap.containsKey(target.getAreaId()) ? areaMap.get(target.getAreaId()).getAreaName() : null)
.setProductName(productMap.get(target.getProductId()).getName())
.setSupplierName(resolveStockInItemSupplierName(item, supplierMap, inType))
.setProductUnitId(productMap.get(target.getProductId()).getUnitId())
.setTotalPrice(MoneyUtils.priceMultiply(target.getProductPrice(), target.getCount()))));
}
private Map<Long, ErpSupplierDO> buildStockInItemSupplierMap(List<ErpStockInSaveReqVO.Item> list, String inType) {
if (!isSupplierItemStockIn(inType)) {
return Collections.emptyMap();
}
return supplierService.getSupplierMap(convertSet(list, ErpStockInSaveReqVO.Item::getSupplierId));
}
private String resolveStockInItemSupplierName(ErpStockInSaveReqVO.Item item, Map<Long, ErpSupplierDO> supplierMap,
String inType) {
if (!isSupplierItemStockIn(inType) || item.getSupplierId() == null) {
return null;
}
ErpSupplierDO supplier = supplierMap.get(item.getSupplierId());
return supplier != null ? supplier.getName() : item.getSupplierName();
}
private boolean isSupplierItemStockIn(String inType) {
return Objects.equals(inType, StockInTypeEnum..getValue())
|| Objects.equals(inType, StockInTypeEnum..getValue())
|| Objects.equals(inType, "物料入库");
}
private void validatePallets(List<ErpStockInSaveReqVO.Item> list) {
List<Long> palletIds = convertListByFlatMap(list, item -> item.getPallets() == null ? java.util.stream.Stream.empty()
: item.getPallets().stream().map(ErpStockInSaveReqVO.Item.PalletItem::getPalletId));

Loading…
Cancel
Save