feat(oms,wms): 出库全链路物料明细/单头增加库存锁定模式字段(存储+回显)

- 出库业务单明细/执行单明细/WMS出库明细/拣货明细/复核明细新增stockLockMode; 业务单单头新增JSON数组字段、执行单单头新增单值字段
- 下单/编辑时按明细行仓库实时判定(1-下单冻结 2-分配库存冻结默认), 下发后沿 执行单→WMS推单→拣货→复核 逐级复制继承, 交接单回显内存组装
- 业务单单头JSON两段式: 下单按仓写入(无执行单号), 下发覆盖为执行单级(带CK执行单号)
- WMS自建/通知/调拨单明细固定2; TZPD外部推入/老预约单下发路径固定2
- 达梦SQL脚本(OMS库4表+WMS库3表), 明细列DEFAULT 2存量自动回填
This commit is contained in:
rcx
2026-09-15 09:30:54 +08:00
parent 50423b4e4b
commit be5e3fc5ee
34 changed files with 259 additions and 7 deletions
@@ -169,6 +169,9 @@ public class ExecutionOutMaterialDetail extends BaseVOEntity {
@ApiModelProperty("分配仓库id")
private Long warehouseId;
@ApiModelProperty("库存锁定模式: 1-下单冻结 2-分配库存冻结(默认), 下发时从业务单明细复制")
private Integer stockLockMode;
@ApiModelProperty("分配仓库编码")
@Excel(name = "分配仓库编码")
private String warehouseCode;
@@ -183,6 +183,9 @@ public class ExecutionOutMaterialDetailPO extends ExecutionStockOutOrderBaseDO {
@ApiModelProperty("分配仓库id")
private Long warehouseId;
@ApiModelProperty("库存锁定模式: 1-下单冻结 2-分配库存冻结(默认)")
private Integer stockLockMode;
@ApiModelProperty("分配仓库编码")
@Excel(name = "分配仓库编码")
private String warehouseCode;
@@ -519,4 +519,7 @@ public class ExecutionStockOutOrder extends BaseVOEntity {
@ApiModelProperty("反审标记: 0-无 1-已反审(业务单反审时软删del_flag=2并打标记)")
private Integer reverseFlag;
@ApiModelProperty("库存锁定模式: 1-下单冻结 2-分配库存冻结(默认), 下发时按该仓明细行取值")
private Integer stockLockMode;
}
@@ -31,6 +31,8 @@ public class ExecutionStockOutOrderPO extends BaseVOEntity {
private Long outOrderId;
@ApiModelProperty("反审标记: 1-已反审(反审软删归档, 【已反审】tab按 delFlag=2+reverseFlag=1 查询)")
private Integer reverseFlag;
@ApiModelProperty("库存锁定模式: 1-下单冻结 2-分配库存冻结(默认), 下发时按该仓明细行取值")
private Integer stockLockMode;
@ApiModelProperty("总价")
@Excel(name = "总价")
private BigDecimal amount;
@@ -171,6 +171,9 @@ public class ReservationOutMaterialDetail extends BaseVOEntity {
@ApiModelProperty("分配仓库id")
private Long warehouseId;
@ApiModelProperty("库存锁定模式: 1-下单冻结 2-分配库存冻结(默认), 保存时按行仓库判定")
private Integer stockLockMode;
@ApiModelProperty("分配仓库编码")
@Excel(name = "分配仓库编码")
private String warehouseCode;
@@ -184,6 +184,9 @@ public class ReservationOutMaterialDetailPO extends ReservationStockOutOrderBase
@ApiModelProperty("分配仓库id")
private Long warehouseId;
@ApiModelProperty("库存锁定模式: 1-下单冻结 2-分配库存冻结(默认)")
private Integer stockLockMode;
@ApiModelProperty("分配仓库编码")
@Excel(name = "分配仓库编码")
private String warehouseCode;
@@ -175,6 +175,9 @@ public class ReservationOutMaterialDetailDO extends BaseVOEntity {
@ApiModelProperty("分配仓库id")
private Long warehouseId;
@ApiModelProperty("库存锁定模式: 1-下单冻结 2-分配库存冻结(默认)")
private Integer stockLockMode;
@ApiModelProperty("分配仓库编码")
@Excel(name = "分配仓库编码")
private String warehouseCode;
@@ -518,6 +518,9 @@ public class ReservationStockOutOrder extends BaseVOEntity {
@ApiModelProperty("反审状态: 0-无 1-已反审(反审后status回退为1-已创建,重新审核通过自动复位0)")
private Integer reverseStatus;
@ApiModelProperty("库存锁定模式JSON(多仓多执行单): [{\"executionOrderNumber\":\"CK001\",\"warehouseCode\":\"QZ\",\"warehouseName\":\"青洲仓\",\"stockLockMode\":1}]; 下单按仓写入, 下发后回填执行单号")
private String stockLockModeJson;
@ApiModelProperty("反审人id")
private Long reverseBy;
@@ -541,6 +541,9 @@ public class ReservationStockOutOrderPO extends BaseVOEntity {
@ApiModelProperty("反审状态: 0-无 1-已反审(反审后status回退为1-已创建,重新审核通过自动复位0)")
private Integer reverseStatus;
@ApiModelProperty("库存锁定模式JSON(多仓多执行单): [{\"executionOrderNumber\":\"CK001\",\"warehouseCode\":\"QZ\",\"warehouseName\":\"青洲仓\",\"stockLockMode\":1}]; 下单按仓写入, 下发后回填执行单号; stockLockMode: 1-下单冻结 2-分配库存冻结")
private String stockLockModeJson;
@ApiModelProperty("反审人id")
private Long reverseBy;
@@ -594,6 +594,9 @@ public class ReservationStockOutOrderDO extends BaseVOEntity {
@ApiModelProperty("反审状态: 0-无 1-已反审(反审后status回退为1-已创建,重新审核通过自动复位0)")
private Integer reverseStatus;
@ApiModelProperty("库存锁定模式JSON(多仓多执行单); 下单按仓写入, 下发后回填执行单号")
private String stockLockModeJson;
@ApiModelProperty("反审人id")
private Long reverseBy;
@@ -227,6 +227,8 @@ public class ReservationStockOutOrderDomainService {
// update / batchInsert 一致前端传计划数量为 quantity outboundQuantity
setMaterialDetailInfo(stockOutOrderDO);
// 明细行冗余存储库存锁定模式1-下单冻结 2-分配冻结按行仓库判定供回显与下发链路复制
fillDetailStockLockMode(stockOutOrderDO);
stockOutOrderDO.setMaterialQuantity(stockOutOrderDO.getMaterialDetailList().size());
BigDecimal quantity = stockOutOrderDO.getMaterialDetailList().stream().map(ReservationOutMaterialDetailDO::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
stockOutOrderDO.setQuantity(quantity);
@@ -287,6 +289,8 @@ public class ReservationStockOutOrderDomainService {
//设置物料信息
setMaterialDetailInfo(stockOutOrderDO);
// 明细行冗余存储库存锁定模式按行仓库判定 insert 同口径
fillDetailStockLockMode(stockOutOrderDO);
//统计种类
stockOutOrderDO.setMaterialQuantity(stockOutOrderDO.getMaterialDetailList().size());
//统计总数量
@@ -331,6 +335,49 @@ public class ReservationStockOutOrderDomainService {
return warehouseFeignPO != null && warehouseFeignPO.getStockLockMode() != null && warehouseFeignPO.getStockLockMode() == 1;
}
/**
* 明细行冗余存储库存锁定模式存储+回显按行仓库 warehouseId 优先空取单头实时判定
* 1-下单冻结 2-分配库存冻结默认保存/编辑时重算幂等下发后随明细复制传递到执行单/WMS
* 供老预约单下发路径复用public
*/
public void fillDetailStockLockMode(List<ReservationOutMaterialDetailDO> details, Long defaultWarehouseId) {
if (CollectionUtils.isEmpty(details)) {
return;
}
for (ReservationOutMaterialDetailDO detail : details) {
Long warehouseId = detail.getWarehouseId() != null ? detail.getWarehouseId() : defaultWarehouseId;
detail.setStockLockMode(isOrderFreezeWarehouse(warehouseId) ? 1 : 2);
}
}
private void fillDetailStockLockMode(ReservationStockOutOrderDO stockOutOrderDO) {
fillDetailStockLockMode(stockOutOrderDO.getMaterialDetailList(), stockOutOrderDO.getWarehouseId());
// 单头库存锁定模式JSON仓级元素不含执行单号下发后在 issueOrder/executeAndIssue 覆盖为执行单级
stockOutOrderDO.setStockLockModeJson(buildStockLockModeJsonByDetails(stockOutOrderDO.getMaterialDetailList()));
}
/**
* 按明细行仓库去重组装库存锁定模式JSON
* [{"warehouseId":13,"warehouseCode":"QZ","warehouseName":"青洲仓","stockLockMode":1}]
*/
private String buildStockLockModeJsonByDetails(List<ReservationOutMaterialDetailDO> details) {
if (CollectionUtils.isEmpty(details)) {
return null;
}
Map<Long, Map<String, Object>> warehouseJsonMap = new LinkedHashMap<>();
for (ReservationOutMaterialDetailDO detail : details) {
warehouseJsonMap.computeIfAbsent(detail.getWarehouseId(), k -> {
Map<String, Object> item = new LinkedHashMap<>();
item.put("warehouseId", k);
item.put("warehouseCode", detail.getWarehouseCode());
item.put("warehouseName", detail.getWarehouseName());
item.put("stockLockMode", detail.getStockLockMode() != null ? detail.getStockLockMode() : 2);
return item;
});
}
return JSON.toJSONString(warehouseJsonMap.values());
}
/**
* 出库单保存时下单冻结筛选下单冻结模式仓库的明细先冻结WMS库存再落库失败抛异常阻断保存
* 下单冻结模式仓库明细强制必选库存批次未关联 materialInventoryId 无法确定冻结哪条库存行直接阻断
@@ -492,6 +539,8 @@ public class ReservationStockOutOrderDomainService {
}
//设置物料信息
setMaterialDetailInfo(stockOutOrderDO);
// 明细行冗余存储库存锁定模式编辑时按当前行仓库重算幂等未冻结单的仓库模式可能已切换
fillDetailStockLockMode(stockOutOrderDO);
// 下单冻结模式编辑重锁原子先WMS侧释放原冻结+按新明细重锁同一事务成功后才改本地
// 已下发WMS的冻结单不可编辑须先取消下发判据=活动执行单issueStatus 不可靠
handleFreezeOnUpdate(stockOutOrderDO, stockInOrderPO);
@@ -606,6 +655,8 @@ public class ReservationStockOutOrderDomainService {
reservationOutMaterialDetail.setMaterialBaseInfoId(materialBaseInfoPO.getMaterialBaseInfoId());
reservationOutMaterialDetail.setMaterialCode(materialBaseInfoPO.getMaterialCode());
reservationOutMaterialDetail.setMaterialName(materialBaseInfoPO.getMaterialName());
// TZPD 外部推入单不参与下单冻结R8明细库存锁定模式固定为 2-分配库存冻结
reservationOutMaterialDetail.setStockLockMode(2);
return outMaterialDetailService.save(reservationOutMaterialDetail);
}
@@ -876,6 +927,8 @@ public class ReservationStockOutOrderDomainService {
// 按照 warehouseId 分组
Map<Long, List<ReservationOutMaterialDetail>> materialDetailGroupByWarehouse = materialDetailList.stream()
.collect(Collectors.groupingBy(ReservationOutMaterialDetail::getWarehouseId));
// 各仓执行单的库存锁定模式JSON元素forEach后覆盖回写业务单单头元素带执行单号
List<Map<String, Object>> stockLockModeJsonItems = new ArrayList<>();
materialDetailGroupByWarehouse.forEach((warehouseId, details) -> {
Long topOrgId = reservationStockInOrderMapper.getTopOrgId(warehouseId);
Long orgId = reservationStockInOrderMapper.getOrgId(warehouseId);
@@ -902,6 +955,8 @@ public class ReservationStockOutOrderDomainService {
// reservationStockInOrder.setTopOrganizationId(topOrgId);
reservationStockInOrder.setBusinessOutOrderNumber(inOrderNumber);
// 库存锁定模式取该仓明细行首个非空值下单时判定与明细/实际冻结行为一致
reservationStockInOrder.setStockLockMode(details.stream().map(ReservationOutMaterialDetail::getStockLockMode).filter(Objects::nonNull).findFirst().orElse(2));
// reservationStockInOrder.setOutOrderNumber(generateExecutionOrderNumber(warehouseCode));
//设置单号(仓库单号规则: Feign优先, system服务失败/降级时本地跨库兜底)
@@ -952,9 +1007,17 @@ public class ReservationStockOutOrderDomainService {
reservationStockInOrder.setQuantity(quantity);
executionStockOutOrderService.save(reservationStockInOrder);
executionInOrderNumbers.add(reservationStockInOrder.getOutOrderNumber());
Map<String, Object> lockModeItem = new LinkedHashMap<>();
lockModeItem.put("executionOrderNumber", reservationStockInOrder.getOutOrderNumber());
lockModeItem.put("warehouseCode", reservationStockInOrder.getWarehouseCode());
lockModeItem.put("warehouseName", reservationStockInOrder.getWarehouseName());
lockModeItem.put("stockLockMode", reservationStockInOrder.getStockLockMode());
stockLockModeJsonItems.add(lockModeItem);
executionOutMaterialDetailService.saveBatch(inMaterialDetailList);
});
byId.setExecutionOutOrderNumber(String.join(",", executionInOrderNumbers));
// 单头库存锁定模式JSON覆盖为执行单级元素带执行单号
byId.setStockLockModeJson(JSON.toJSONString(stockLockModeJsonItems));
stockOutOrderService.updateById(byId);
}
return update;
@@ -1224,6 +1287,8 @@ public class ReservationStockOutOrderDomainService {
}
List<String> executionInOrderNumbers = new ArrayList<>();
// 各仓执行单的库存锁定模式JSON元素forEach后覆盖回写业务单单头元素带执行单号
List<Map<String, Object>> stockLockModeJsonItems = new ArrayList<>();
materialDetailGroupByWarehouse.forEach((warehouseId, details) -> {
if (warehouseId == null) warehouseId = warehouseId1;
Long topOrgId = reservationStockInOrderMapper.getTopOrgId(warehouseId);
@@ -1248,6 +1313,8 @@ public class ReservationStockOutOrderDomainService {
reservationStockInOrder.setWarehouseCode(warehouseCode);
reservationStockInOrder.setWarehouseName(warehouseName);
reservationStockInOrder.setBusinessOutOrderNumber(inOrderNumber);
// 库存锁定模式取该仓明细行首个非空值下单时判定与明细/实际冻结行为一致
reservationStockInOrder.setStockLockMode(details.stream().map(ReservationOutMaterialDetail::getStockLockMode).filter(Objects::nonNull).findFirst().orElse(2));
//设置单号(仓库单号规则: Feign优先, system服务失败/降级时本地跨库兜底)
@@ -1296,6 +1363,12 @@ public class ReservationStockOutOrderDomainService {
BigDecimal quantity = details.stream().map(ReservationOutMaterialDetail::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
reservationStockInOrder.setQuantity(quantity);
executionInOrderNumbers.add(reservationStockInOrder.getOutOrderNumber());
Map<String, Object> lockModeItem = new LinkedHashMap<>();
lockModeItem.put("executionOrderNumber", reservationStockInOrder.getOutOrderNumber());
lockModeItem.put("warehouseCode", reservationStockInOrder.getWarehouseCode());
lockModeItem.put("warehouseName", reservationStockInOrder.getWarehouseName());
lockModeItem.put("stockLockMode", reservationStockInOrder.getStockLockMode());
stockLockModeJsonItems.add(lockModeItem);
executionStockOutOrderService.save(reservationStockInOrder);
executionOutMaterialDetailService.saveBatch(inMaterialDetailList);
@@ -1308,6 +1381,8 @@ public class ReservationStockOutOrderDomainService {
stockOutOrderApplicationService.issueOrder(param);
});
byId.setExecutionOutOrderNumber(String.join(",", executionInOrderNumbers));
// 单头库存锁定模式JSON覆盖为执行单级元素带执行单号
byId.setStockLockModeJson(JSON.toJSONString(stockLockModeJsonItems));
stockOutOrderService.updateById(byId);
}
return update;
@@ -431,6 +431,13 @@ public class ReserveStockOutOrderDomainService {
Long shipperId = reservationStockOutOrder.getShipperId();
String jsbz = reservationStockInOrderMapper.getJsbz(shipperId);
reservationStockOutOrder.setSettlementCurrency(jsbz);
// 单头库存锁定模式JSON老预约单下发的业务单不走下单冻结钩子WMS分配时才冻结固定 2-分配库存冻结单仓单元素
Map<String, Object> stockLockModeItem = new LinkedHashMap<>();
stockLockModeItem.put("warehouseId", reservationStockOutOrder.getWarehouseId());
stockLockModeItem.put("warehouseCode", reservationStockOutOrder.getWarehouseCode());
stockLockModeItem.put("warehouseName", reservationStockOutOrder.getWarehouseName());
stockLockModeItem.put("stockLockMode", 2);
reservationStockOutOrder.setStockLockModeJson(JSON.toJSONString(java.util.Collections.singletonList(stockLockModeItem)));
// 保留旧单号用于查询源明细数据
String oldOutOrderNumber = reservationStockOutOrder.getOutOrderNumber();
// 生成出库业务单号防止与已生成的出库业务单号重复
@@ -445,6 +452,8 @@ public class ReserveStockOutOrderDomainService {
ReservationOutMaterialDetail reservationOutMaterialDetail = new ReservationOutMaterialDetail();
BeanUtils.copyProperties(reserveOutMaterialDetail, reservationOutMaterialDetail,"materialDetailId");
// reservationOutMaterialDetail.setOutOrderNumber(newOrderNumber); // 使用新单号保持与主表关联
// 老预约单下发生成的业务单不走下单冻结钩子客户预约单在WMS分配时才冻结明细模式固定为 2-分配库存冻结
reservationOutMaterialDetail.setStockLockMode(2);
String lot = generateDateSerialNumber();
lot = lot+"-"+index;
index++;
@@ -32,6 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="serialNumberManage" column="serial_number_manage" />
<result property="materialInventoryId" column="material_inventory_id" />
<result property="warehouseId" column="warehouse_id" />
<result property="stockLockMode" column="stock_lock_mode" />
<result property="warehouseCode" column="warehouse_code" />
<result property="warehouseName" column="warehouse_name" />
<result property="storageSectionId" column="storage_section_id" />
@@ -119,7 +120,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.material_detail_id, a.organization_id, a.organization_name, a.top_organization_id, a.unique_id, a.out_order_number, a.material_base_info_id, a.line_number, a.material_code, a.material_name, a.bar_code, a.weight_limit, a.volume_limit,
a.quantity, a.already_allocation_quantity, a.allocation_quantity, a.picking_quantity, a.check_quantity, ROUND(GREATEST(0, IFNULL(a.quantity, 0) - IFNULL(a.check_quantity, 0), IFNULL(a.picking_quantity, 0) - IFNULL(a.check_quantity, 0)), 2) AS wait_check_quantity,
a.pack_id, a.pack_code, a.pack_name, a.pack_detail_id, a.unit_code, a.unit_name, a.material_warehouse_control_id, a.serial_number_manage,
a.warehouse_id, a.warehouse_code, a.warehouse_name, a.storage_section_id, a.storage_code, a.storage_name, a.storage_location_id, a.storage_location_code, a.storage_location_name, a.level, a.parent_unique_id, a.allow_modify,
a.warehouse_id, a.stock_lock_mode, a.warehouse_code, a.warehouse_name, a.storage_section_id, a.storage_code, a.storage_name, a.storage_location_id, a.storage_location_code, a.storage_location_name, a.level, a.parent_unique_id, a.allow_modify,
a.material_inventory_id, a.batch_number, a.container_id, a.container_code, a.container_type, a.container_type_name, a.material_status_code, a.material_status_name,
a.remark, a.create_time, a.create_by,gen_picking_order,
a.create_by_name, a.update_time, a.update_by, a.update_by_name, a.del_flag, a.over_stock_id, a.over_stock_status, a.over_stock_type,
@@ -477,7 +478,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.pack_id, a.pack_code, a.pack_name, a.pack_detail_id, a.unit_code, a.unit_name,
a.material_warehouse_control_id, a.serial_number_manage,
a.material_inventory_id, a.batch_number,
a.warehouse_id, a.warehouse_code, a.warehouse_name,
a.warehouse_id, a.stock_lock_mode, a.warehouse_code, a.warehouse_name,
a.storage_section_id, a.storage_code, a.storage_name,
a.storage_location_id, a.storage_location_code, a.storage_location_name,
a.level, a.parent_unique_id, a.allow_modify,
@@ -53,6 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateByName" column="update_by_name" />
<result property="delFlag" column="del_flag" />
<result property="reverseFlag" column="reverse_flag" />
<result property="stockLockMode" column="stock_lock_mode" />
<result property="overStockId" column="over_stock_id" />
<result property="overStockStatus" column="over_stock_status" />
<result property="overStockType" column="over_stock_type" />
@@ -129,7 +130,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.cancel_time, a.close_order, a.close_remark, a.close_by, a.close_by_name, a.close_time, a.check_status,a.BUSINESS_ORDER_NO,
a.check_task_distribution, a.check_task_distribution_time, a.check_operators_by, a.check_operators_name, a.mobilize_code,
a.remark, a.create_time, a.create_by, a.create_by_name,a.business_number,a.train_no,a.amount,a.business_out_order_number,
a.update_time, a.update_by, a.update_by_name, a.del_flag, a.reverse_flag, a.over_stock_id, a.over_stock_status, a.over_stock_type,a."TO",
a.update_time, a.update_by, a.update_by_name, a.del_flag, a.reverse_flag, a.stock_lock_mode, a.over_stock_id, a.over_stock_status, a.over_stock_type,a."TO",
a.CONTACT_PERSON,a.VEHICLE_MODEL_PLATE,a.ENTRUST_NO,a.TEL,a.DRIVER_SIGN,a.FAX,a.DECLARE_CUSTOMS,a.MANUFACTURER,
a.CUSTOMS_DECLARER_INFO,a.DELIVERY_ADDR,a.ENTRY_EXIT_CUSTOMS,a.DEPARTURE_ARRIVAL_COUNTRY,a.CARRIER,a.CONTAINER_NO,a.CONTAINER_NO_NAME,a.OUTBOUND_DATE,
a.COMPLETE_TIME,a.ORDER_DATE,a.TRANSPORT_MODE_CODE,a.TRANSPORT_MODE_NAME,a.SUPERVISION_MODE_CODE,a.SUPERVISION_MODE_NAME,
@@ -32,6 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="serialNumberManage" column="serial_number_manage" />
<result property="materialInventoryId" column="material_inventory_id" />
<result property="warehouseId" column="warehouse_id" />
<result property="stockLockMode" column="stock_lock_mode" />
<result property="warehouseCode" column="warehouse_code" />
<result property="warehouseName" column="warehouse_name" />
<result property="storageSectionId" column="storage_section_id" />
@@ -121,7 +122,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.material_detail_id, a.organization_id, a.organization_name, a.top_organization_id, a.unique_id, a.out_order_number, a.material_base_info_id, a.line_number, a.material_code, a.material_name, a.bar_code, a.weight_limit, a.volume_limit,
a.quantity, a.already_allocation_quantity, a.allocation_quantity, a.picking_quantity, a.check_quantity, ROUND(GREATEST(0, IFNULL(a.quantity, 0) - IFNULL(a.check_quantity, 0), IFNULL(a.picking_quantity, 0) - IFNULL(a.check_quantity, 0)), 2) AS wait_check_quantity,
a.pack_id, a.pack_code, a.pack_name, a.pack_detail_id, a.unit_code, a.unit_name, a.material_warehouse_control_id, a.serial_number_manage,
a.warehouse_id, a.warehouse_code, a.warehouse_name, a.storage_section_id, a.storage_code, a.storage_name, a.storage_location_id, a.storage_location_code, a.storage_location_name, a.level, a.parent_unique_id, a.allow_modify,
a.warehouse_id, a.stock_lock_mode, a.warehouse_code, a.warehouse_name, a.storage_section_id, a.storage_code, a.storage_name, a.storage_location_id, a.storage_location_code, a.storage_location_name, a.level, a.parent_unique_id, a.allow_modify,
a.material_inventory_id, a.batch_number, a.container_id, a.container_code, a.container_type, a.container_type_name, a.material_status_code, a.material_status_name,
a.remark, a.create_time, a.create_by,gen_picking_order,
a.create_by_name, a.update_time, a.update_by, a.update_by_name, a.del_flag, a.over_stock_id, a.over_stock_status, a.over_stock_type,
@@ -118,6 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="discount" column="DISCOUNT" />
<result property="totalOutboundQuantity" column="TOTAL_OUTBOUND_QUANTITY" />
<result property="reverseStatus" column="REVERSE_STATUS" />
<result property="stockLockModeJson" column="STOCK_LOCK_MODE_JSON" />
<result property="reverseBy" column="REVERSE_BY" />
<result property="reverseByName" column="REVERSE_BY_NAME" />
<result property="reverseTime" column="REVERSE_TIME" />
@@ -142,7 +143,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.DIRECTOR_NAME ,a.DIRECTOR_PHONE,a.DIRECTOR_ID,a.RESERVATION_ORDER_SOURCE,a.OUTBOUND_TIME,a.RETURN_QUANTITY,a.DELIVERY_NAME,a.CUSTOMER_NUMBER,a.INVOICE_NUMBER,a.RETURN_ORDER_NUMBER,a.TOTAL_AMOUNT,
a.ROUTE,a.PUSH_TIME,a.PUSH_STATUS,a.PUSH_BY,a.PUSH_BY_NAME,a.execution_out_order_number,a.LINE_CODE,a.LINE_NAME,a.SHUTTLE_NO,
a.TOTAL_WAREHOUSE_RENT,a.BUSINESS_CHARGE_TYPE,a.BUSINESS_PRICE_WAY,a.DISCOUNT,
a.REVERSE_STATUS,a.REVERSE_BY,a.REVERSE_BY_NAME,a.REVERSE_TIME,a.REVERSE_REMARK
a.REVERSE_STATUS,a.REVERSE_BY,a.REVERSE_BY_NAME,a.REVERSE_TIME,a.REVERSE_REMARK,
a.STOCK_LOCK_MODE_JSON
</sql>