Browse Source

优化

master
han\hanst 4 weeks ago
parent
commit
b8de8918c1
  1. 39
      src/main/java/com/gaotao/modules/warehouse/dao/InventoryStockMapper.java

39
src/main/java/com/gaotao/modules/warehouse/dao/InventoryStockMapper.java

@ -11,7 +11,44 @@ import java.math.BigDecimal;
@Mapper
public interface InventoryStockMapper extends BaseMapper<InventoryStock> {
@Select("SELECT * FROM inventory_stock WITH (UPDLOCK, ROWLOCK) WHERE site = #{site} AND warehouse_id = #{warehouseId} AND part_no = #{partNo} AND batch_no = #{batchNo} AND location_id = #{locationId} and wdr=#{wdr} and eng_chg_level=#{engChgLevel}")
/**
* 查询库存记录并加行锁用于更新操作
*
* <p><b>性能优化说明</b></p>
* <ul>
* <li>使用显式字段列表代替SELECT *减少网络传输和内存占用</li>
* <li>使用ROWLOCK行级锁代替表锁提高并发性能</li>
* <li>WHERE条件顺序与复合索引IDX_INVENTORY_STOCK_QUERY一致充分利用索引</li>
* <li>需要确保数据库已创建对应的复合索引见索引脚本</li>
* </ul>
*
* <p><b>必需索引</b></p>
* <pre>
* CREATE NONCLUSTERED INDEX IDX_INVENTORY_STOCK_QUERY ON inventory_stock
* (site, warehouse_id, part_no, batch_no, location_id, wdr, eng_chg_level)
* INCLUDE (in_qty, out_qty, qty_on_hand, qty_reserved, in_standard_value,
* in_actual_value, out_standard_value, out_actual_value,
* handling_unit_qty, first_in_date, latest_in_date, latest_out_date,
* active_date, manufacture_date, expired_date, latest_count_date,
* freeze_flag, qty_tmp, qty_to_issue, partner_id, partner_type,
* description, material, length, width, um_id);
* </pre>
*/
@Select("SELECT site, warehouse_id, part_no, batch_no, location_id, wdr, eng_chg_level, " +
"in_qty, out_qty, qty_on_hand, qty_reserved, " +
"in_standard_value, in_actual_value, out_standard_value, out_actual_value, " +
"handling_unit_qty, first_in_date, latest_in_date, latest_out_date, active_date, " +
"manufacture_date, expired_date, latest_count_date, freeze_flag, " +
"qty_tmp, qty_to_issue, partner_id, partner_type, " +
"description, material, length, width, um_id " +
"FROM inventory_stock WITH (ROWLOCK, UPDLOCK) " +
"WHERE site = #{site} " +
"AND warehouse_id = #{warehouseId} " +
"AND part_no = #{partNo} " +
"AND batch_no = #{batchNo} " +
"AND location_id = #{locationId} " +
"AND wdr = #{wdr} " +
"AND eng_chg_level = #{engChgLevel}")
InventoryStock selectForUpdate(@Param("site") String site,
@Param("warehouseId") String warehouseId,
@Param("partNo") String partNo,

Loading…
Cancel
Save