This commit is contained in:
2026-08-12 12:18:59 +08:00
parent 5a26a84f78
commit 0fceece378
8 changed files with 113 additions and 31 deletions
@@ -12,6 +12,15 @@ public interface InboundOrderMapper extends BaseMapper<InboundOrderEntity> {
@Update("""
UPDATE fl_inbound_order
SET process_status = 'INBOUNDED', measure_review_status = 'APPROVED',
actual_gross_weight_kg = (SELECT COALESCE(SUM(item.total_weight_kg), 0)
FROM fl_inbound_measurement_item item
WHERE item.tenant_id = #{tenantId} AND item.measurement_id = #{measurementId}),
actual_volume_cbm = (SELECT COALESCE(SUM(item.total_volume_cbm), 0)
FROM fl_inbound_measurement_item item
WHERE item.tenant_id = #{tenantId} AND item.measurement_id = #{measurementId}),
volume_weight_kg = (SELECT COALESCE(SUM(item.volume_weight_kg), 0)
FROM fl_inbound_measurement_item item
WHERE item.tenant_id = #{tenantId} AND item.measurement_id = #{measurementId}),
inbounded_at = COALESCE(inbounded_at, CURRENT_TIMESTAMP(3)),
updated_by = #{operatorId}, version = version + 1
WHERE tenant_id = #{tenantId} AND id = #{inboundId} AND deleted = 0
@@ -20,7 +29,8 @@ public interface InboundOrderMapper extends BaseMapper<InboundOrderEntity> {
""")
int approveMeasurement(@Param("tenantId") long tenantId, @Param("inboundId") long inboundId,
@Param("operatorId") long operatorId,
@Param("expectedVersion") int expectedVersion);
@Param("expectedVersion") int expectedVersion,
@Param("measurementId") long measurementId);
@Update("""
UPDATE fl_inbound_order
@@ -67,9 +67,9 @@ public class InboundWorkflowRepository {
}
public int transitionReview(long tenantId, long inboundId, long operatorId, int expectedVersion,
boolean approved) {
boolean approved, long measurementId) {
return approved
? orders.approveMeasurement(tenantId, inboundId, operatorId, expectedVersion)
? orders.approveMeasurement(tenantId, inboundId, operatorId, expectedVersion, measurementId)
: orders.rejectMeasurement(tenantId, inboundId, operatorId, expectedVersion);
}
@@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.math.BigDecimal;
/**
* 测量审核应用服务。客服确认测量数据后将入库单推进到产品主状态 INBOUNDED;
@@ -69,8 +70,8 @@ public class MeasurementReviewService {
throw new BizException(ResultCode.CONFLICT, "测量批次不是待审核状态");
}
if (approved) {
long confirmed = repository.listMeasurementItems(tenantId, measurement.getId()).stream()
.map(com.baiyue.firstleg.entity.InboundMeasurementItemEntity::getPackageCount)
var items = repository.listMeasurementItems(tenantId, measurement.getId());
long confirmed = items.stream().map(com.baiyue.firstleg.entity.InboundMeasurementItemEntity::getPackageCount)
.filter(java.util.Objects::nonNull)
.mapToLong(Integer::longValue)
.sum();
@@ -78,10 +79,18 @@ public class MeasurementReviewService {
throw new BizException(ResultCode.VALIDATION_FAILED,
"人工确认箱数合计与入库单总箱数不一致,不能审核通过");
}
BigDecimal weight = items.stream().map(com.baiyue.firstleg.entity.InboundMeasurementItemEntity::getTotalWeightKg)
.filter(java.util.Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal volume = items.stream().map(com.baiyue.firstleg.entity.InboundMeasurementItemEntity::getTotalVolumeCbm)
.filter(java.util.Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
if (weight.signum() <= 0 || volume.signum() <= 0) {
throw new BizException(ResultCode.VALIDATION_FAILED,
"审核通过的测量快照必须包含大于零的实重和体积");
}
}
if (repository.transitionReview(tenantId, inboundId, operatorId,
request.expectedVersion(), approved) != 1) {
request.expectedVersion(), approved, request.measurementId()) != 1) {
throw concurrentConflict();
}
String result = approved ? "APPROVED" : "REJECTED";