fix:取消产品单位必填限制

main
HuangHuiKang 17 hours ago
parent eec264a453
commit 4eeaf5204d

@ -32,8 +32,7 @@ public class ProductSaveReqVO {
@NotNull(message = "产品分类编号不能为空")
private Long categoryId;
@Schema(description = "单位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8869")
@NotNull(message = "单位编号不能为空")
@Schema(description = "单位编号", example = "8869")
private Long unitId;
@Schema(description = "采购单位编号", example = "8890")

@ -354,7 +354,7 @@ public class ErpProductServiceImpl implements ErpProductService {
}
private void validateProductUnitRelation(Long unitId, Long purchaseUnitId, BigDecimal purchaseUnitConvertQuantity) {
if (unitId == null || productUnitService.getProductUnit(unitId) == null) {
if (unitId != null && productUnitService.getProductUnit(unitId) == null) {
throw exception(PRODUCT_UNIT_NOT_EXISTS);
}
if (purchaseUnitId == null) {

@ -24,9 +24,7 @@ import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockMoveMapper;
import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO;
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
import cn.iocoder.yudao.module.erp.enums.stock.ErpStockMoveApproveActionEnum;
import cn.iocoder.yudao.module.erp.enums.stock.ErpStockRecordBizTypeEnum;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.erp.service.stock.bo.ErpStockRecordCreateReqBO;
import cn.iocoder.yudao.module.erp.service.warehousearea.WarehouseAreaService;
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
@ -79,7 +77,7 @@ public class ErpStockMoveServiceImpl implements ErpStockMoveService {
@Resource
private ErpWarehouseService warehouseService;
@Resource
private ErpStockRecordService stockRecordService;
private ErpStockService stockService;
@Resource
private WarehouseAreaService warehouseAreaService;
@Resource
@ -163,7 +161,7 @@ public class ErpStockMoveServiceImpl implements ErpStockMoveService {
throw exception(approve ? STOCK_MOVE_APPROVE_FAIL : STOCK_MOVE_PROCESS_FAIL);
}
List<ErpStockMoveItemDO> stockMoveItems = stockMoveItemMapper.selectListByMoveId(id);
operateStockMoveEffect(stockMove, stockMoveItems, approve);
operateStockMoveEffect(stockMoveItems, approve);
}
@Override
@ -208,7 +206,7 @@ public class ErpStockMoveServiceImpl implements ErpStockMoveService {
throw exception(STOCK_MOVE_AUDIT_FAIL_STATUS);
}
List<ErpStockMoveItemDO> stockMoveItems = stockMoveItemMapper.selectListByMoveId(stockMove.getId());
operateStockMoveEffect(stockMove, stockMoveItems, true);
operateStockMoveEffect(stockMoveItems, true);
createApproveRecord(stockMove.getId(), ErpStockMoveApproveActionEnum.AUTO_APPROVE, fromStatus,
ErpAuditStatus.APPROVE.getStatus(), NumberUtils.parseLong(stockMove.getCreator()),
auditReqVO.getRemark() != null ? auditReqVO.getRemark() : "无需审核,审核时自动调拨");
@ -230,31 +228,22 @@ public class ErpStockMoveServiceImpl implements ErpStockMoveService {
}
List<ErpStockMoveItemDO> stockMoveItems = stockMoveItemMapper.selectListByMoveId(stockMove.getId());
if (ErpAuditStatus.APPROVE.getStatus().equals(auditReqVO.getStatus())) {
operateStockMoveEffect(stockMove, stockMoveItems, true);
operateStockMoveEffect(stockMoveItems, true);
}
createApproveRecord(stockMove.getId(), ErpAuditStatus.APPROVE.getStatus().equals(auditReqVO.getStatus())
? ErpStockMoveApproveActionEnum.APPROVE : ErpStockMoveApproveActionEnum.REJECT,
fromStatus, auditReqVO.getStatus(), NumberUtils.parseLong(stockMove.getCreator()), auditReqVO.getRemark());
}
private void operateStockMoveEffect(ErpStockMoveDO stockMove, List<ErpStockMoveItemDO> stockMoveItems, boolean approve) {
Integer fromBizType = approve ? ErpStockRecordBizTypeEnum.MOVE_OUT.getType()
: ErpStockRecordBizTypeEnum.MOVE_OUT_CANCEL.getType();
Integer toBizType = approve ? ErpStockRecordBizTypeEnum.MOVE_IN.getType()
: ErpStockRecordBizTypeEnum.MOVE_IN_CANCEL.getType();
private void operateStockMoveEffect(List<ErpStockMoveItemDO> stockMoveItems, boolean approve) {
stockMoveItems.forEach(stockMoveItem -> {
BigDecimal fromCount = approve ? stockMoveItem.getCount().negate() : stockMoveItem.getCount();
BigDecimal toCount = approve ? stockMoveItem.getCount() : stockMoveItem.getCount().negate();
ErpProductRespVO productDO = productService.getProduct(stockMoveItem.getProductId());
stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO(
stockMoveItem.getProductId(), productDO.getCategoryId(), productDO.getCategoryType(),
stockMoveItem.getFromWarehouseId(), stockMoveItem.getFromAreaId(), stockMoveItem.getFromAreaName(), fromCount,
fromBizType, stockMoveItem.getMoveId(), stockMoveItem.getId(), stockMove.getNo(),stockMove.getMoveTime()));
stockRecordService.createStockRecord(new ErpStockRecordCreateReqBO(
stockMoveItem.getProductId(), productDO.getCategoryId(), productDO.getCategoryType(),
stockMoveItem.getToWarehouseId(), stockMoveItem.getToAreaId(), stockMoveItem.getToAreaName(), toCount,
toBizType, stockMoveItem.getMoveId(), stockMoveItem.getId(), stockMove.getNo(),stockMove.getMoveTime()));
stockService.updateStockCountIncrement(productDO.getCategoryId(), stockMoveItem.getProductId(),
stockMoveItem.getFromWarehouseId(), stockMoveItem.getFromAreaId(), stockMoveItem.getFromAreaName(), fromCount);
stockService.updateStockCountIncrement(productDO.getCategoryId(), stockMoveItem.getProductId(),
stockMoveItem.getToWarehouseId(), stockMoveItem.getToAreaId(), stockMoveItem.getToAreaName(), toCount);
});
}

@ -158,7 +158,7 @@ public class ErpStockServiceImpl implements ErpStockService {
stock.setAreaName(areaName);
stockMapper.updateById(new ErpStockDO().setId(stock.getId()).setAreaName(areaName));
}
if (product != null && isStockSnapshotMissing(stock)) {
if (product != null && isStockSnapshotMissing(stock, product, defaultPackagingScheme)) {
fillStockSnapshot(stock, product, defaultPackagingScheme);
stockMapper.updateById(buildStockSnapshotUpdate(stock));
}
@ -299,7 +299,7 @@ public class ErpStockServiceImpl implements ErpStockService {
String unitName = resolveStockUnitName(stockList, productMap);
card.setSkuCount(countDistinctProduct(stockList));
card.setTotalCount(totalCount);
card.setUnitName(unitName);
card.setUnitName(nullToEmpty(unitName));
card.setStockDisplay(formatNumber(totalCount) + nullToEmpty(unitName));
card.setPackagingStocks(buildStockPackagingStocks(stockList, productMap));
card.setTodayFinishedInDisplay(formatNumber(BigDecimal.ZERO) + nullToEmpty(unitName));
@ -313,7 +313,7 @@ public class ErpStockServiceImpl implements ErpStockService {
String unitName = resolveInItemUnitName(itemList, productMap);
card.setSkuCount(itemList.stream().map(ErpStockInItemDO::getProductId).distinct().count());
card.setTotalCount(totalCount);
card.setUnitName(unitName);
card.setUnitName(nullToEmpty(unitName));
card.setStockDisplay(formatNumber(totalCount) + nullToEmpty(unitName));
card.setPackagingStocks(buildInItemPackagingStocks(itemList, productMap));
return card;
@ -326,14 +326,14 @@ public class ErpStockServiceImpl implements ErpStockService {
String unitName = resolveOutItemUnitName(itemList, productMap);
card.setSkuCount(itemList.stream().map(ErpStockOutItemDO::getProductId).distinct().count());
card.setTotalCount(totalCount);
card.setUnitName(unitName);
card.setUnitName(nullToEmpty(unitName));
card.setStockDisplay(formatNumber(totalCount) + nullToEmpty(unitName));
card.setPackagingStocks(buildOutItemPackagingStocks(itemList, productMap));
return card;
}
private String buildUnitKey(Long unitId, String unitName) {
return String.valueOf(unitId) + "_" + String.valueOf(unitName);
return String.valueOf(unitId != null ? unitId : "") + "_" + nullToEmpty(unitName);
}
private ErpStockStatisticsRespVO.UnitGroupedStockCard buildInItemUnitGroupedStockCard(List<ErpStockInItemDO> itemList,
@ -387,7 +387,7 @@ public class ErpStockServiceImpl implements ErpStockService {
private ErpStockStatisticsRespVO.UnitStock buildUnitStock(Long unitId, String unitName, BigDecimal count) {
ErpStockStatisticsRespVO.UnitStock unitStock = new ErpStockStatisticsRespVO.UnitStock();
unitStock.setUnitId(unitId);
unitStock.setUnitName(unitName);
unitStock.setUnitName(nullToEmpty(unitName));
unitStock.setCount(count);
unitStock.setStockDisplay(formatNumber(count) + nullToEmpty(unitName));
return unitStock;
@ -511,7 +511,7 @@ public class ErpStockServiceImpl implements ErpStockService {
detail.setPackagingSchemeId(packagingSchemeId);
detail.setPackagingSchemeName(packagingSchemeName);
detail.setTotalCount(totalCount);
detail.setUnitName(unitName);
detail.setUnitName(nullToEmpty(unitName));
detail.setStockDisplay(formatNumber(totalCount) + nullToEmpty(unitName));
detail.setPackagingDisplay(formatProductQuantity(calculateProductQuantity(totalCount, palletTotalQuantity, packageQuantity)));
detail.setPackageQuantity(packageQuantity);
@ -639,10 +639,10 @@ public class ErpStockServiceImpl implements ErpStockService {
if (!keepZero) {
return;
}
display.append("0").append(unitName);
display.append("0").append(nullToEmpty(unitName));
return;
}
display.append(formatNumber(quantity)).append(unitName);
display.append(formatNumber(quantity)).append(nullToEmpty(unitName));
}
private BigDecimal defaultZero(BigDecimal value) {
@ -686,17 +686,18 @@ public class ErpStockServiceImpl implements ErpStockService {
.orElse(null);
}
private boolean isStockSnapshotMissing(ErpStockDO stock) {
return stock.getUnitId() == null
|| stock.getUnitName() == null
|| stock.getPurchaseUnitId() == null
|| stock.getPurchaseUnitName() == null
|| stock.getPurchaseUnitConvertQuantity() == null
|| stock.getDefaultPackagingSchemeId() == null
|| stock.getDefaultPackagingSchemeName() == null
|| stock.getPackageQuantity() == null
|| stock.getPalletPackageQuantity() == null
|| stock.getPalletTotalQuantity() == null;
private boolean isStockSnapshotMissing(ErpStockDO stock, ErpProductRespVO product,
ProductPackagingSchemeRespVO defaultPackagingScheme) {
return (product.getUnitId() != null && stock.getUnitId() == null)
|| (product.getUnitName() != null && stock.getUnitName() == null)
|| (product.getPurchaseUnitId() != null && stock.getPurchaseUnitId() == null)
|| (product.getPurchaseUnitName() != null && stock.getPurchaseUnitName() == null)
|| (product.getPurchaseUnitConvertQuantity() != null && stock.getPurchaseUnitConvertQuantity() == null)
|| (defaultPackagingScheme != null && stock.getDefaultPackagingSchemeId() == null)
|| (defaultPackagingScheme != null && stock.getDefaultPackagingSchemeName() == null)
|| (defaultPackagingScheme != null && stock.getPackageQuantity() == null)
|| (defaultPackagingScheme != null && stock.getPalletPackageQuantity() == null)
|| (defaultPackagingScheme != null && stock.getPalletTotalQuantity() == null);
}
private ErpStockDO buildStockSnapshotUpdate(ErpStockDO stock) {

@ -240,7 +240,7 @@ public class ErpWarehouseSummaryServiceImpl implements ErpWarehouseSummaryServic
BigDecimal safeCount = safeCount(count);
if (purchaseUnitConvertQuantity == null || purchaseUnitConvertQuantity.compareTo(BigDecimal.ZERO) <= 0
|| purchaseUnitName == null || unitName == null) {
return formatNumber(safeCount) + (unitName != null ? unitName : "个");
return formatNumber(safeCount) + nullToEmpty(unitName);
}
BigDecimal purchaseCount = safeCount.divideToIntegralValue(purchaseUnitConvertQuantity);
BigDecimal unitCount = safeCount.remainder(purchaseUnitConvertQuantity);
@ -254,6 +254,10 @@ public class ErpWarehouseSummaryServiceImpl implements ErpWarehouseSummaryServic
return display.toString();
}
private String nullToEmpty(String value) {
return value != null ? value : "";
}
private String formatNumber(BigDecimal value) {
return value == null ? "0" : value.stripTrailingZeros().toPlainString();
}

Loading…
Cancel
Save