package com.consum.base.core; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; /** * 核心出入库接口 */ @Service @Slf4j public class WarehouseCoreService { /** * 统一出入库 */ @Transactional(rollbackFor = Exception.class) public CheckWarehouseResult unifyCheck(CheckWarehouseParam param) { // TODO: 10/10/2023 此处加了唯一锁,会影响性能,思考是否有更合适的办法 try { Assert.notNull(param, "wareHouse param can not null !"); Assert.notNull(param.getWarehouseId(), "wareHouse id can not null"); CheckWarehouseResult result; synchronized (param.getWarehouseId()) { if (param.getIsCheckIn()) { result = checkin(param); } else { result = checkout(param); } } return result; } catch (Exception e) { log.error(e.getMessage()); throw new RuntimeException(e.getMessage()); } } /** * 出库 */ private CheckWarehouseResult checkout(CheckWarehouseParam param) { return new CheckWarehouseResult(); } /** * 入库 */ private CheckWarehouseResult checkin(CheckWarehouseParam param) { return new CheckWarehouseResult(); } }