From 8bbd1d9ca73ba295ccf9ef1fcb3e6587486b37be Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 15 May 2026 19:48:34 +0800 Subject: [PATCH] fix(wms): 完善单据状态保护与金额精度处理 --- yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/item/WmsItemMapper.java | 4 ++++ yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/merchant/WmsMerchantMapper.java | 8 ++++++++ yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java | 3 +++ yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java | 12 ++++++++++++ yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java | 31 +++++++++++++++++++++++++++++++ yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java | 6 +++++- yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java | 6 +++++- yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java | 6 +++++- yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java | 6 +++++- yudao-module-wms/src/test/resources/sql/create_tables.sql | 62 ++++++++++++++++++++++++++++++++++++++++++++------------------ 10 files changed, 122 insertions(+), 22 deletions(-) diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/item/WmsItemMapper.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/item/WmsItemMapper.java index 5a17313..2645ed0 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/item/WmsItemMapper.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/item/WmsItemMapper.java @@ -43,6 +43,10 @@ public interface WmsItemMapper extends BaseMapperX { return selectOne(WmsItemDO::getName, name); } + default WmsItemDO selectByCode(String code) { + return selectOne(WmsItemDO::getCode, code); + } + default Long selectCountByCategoryId(Long categoryId) { return selectCount(WmsItemDO::getCategoryId, categoryId); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/merchant/WmsMerchantMapper.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/merchant/WmsMerchantMapper.java index 0bca7ae..efc79f1 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/merchant/WmsMerchantMapper.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/merchant/WmsMerchantMapper.java @@ -36,4 +36,12 @@ public interface WmsMerchantMapper extends BaseMapperX { .orderByDesc(WmsMerchantDO::getId)); } + default WmsMerchantDO selectByCode(String code) { + return selectOne(WmsMerchantDO::getCode, code); + } + + default WmsMerchantDO selectByName(String name) { + return selectOne(WmsMerchantDO::getName, name); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java index 6169af7..2175627 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java @@ -35,6 +35,7 @@ public interface ErrorCodeConstants { // ========== WMS 基础数据-商品 1-060-104-000 ========== ErrorCode ITEM_NOT_EXISTS = new ErrorCode(1_060_104_000, "商品不存在"); ErrorCode ITEM_NAME_DUPLICATE = new ErrorCode(1_060_104_001, "商品名称重复"); + ErrorCode ITEM_CODE_DUPLICATE = new ErrorCode(1_060_104_007, "商品编号重复"); ErrorCode ITEM_SKU_REQUIRED = new ErrorCode(1_060_104_002, "至少包含一个商品规格"); ErrorCode ITEM_SKU_NAME_DUPLICATE = new ErrorCode(1_060_104_003, "商品规格名称【{}】重复"); ErrorCode ITEM_SKU_NOT_EXISTS = new ErrorCode(1_060_104_004, "商品规格不存在"); @@ -46,6 +47,8 @@ public interface ErrorCodeConstants { ErrorCode MERCHANT_NOT_SUPPLIER = new ErrorCode(1_060_105_001, "往来企业必须是供应商或客户/供应商类型"); ErrorCode MERCHANT_NOT_CUSTOMER = new ErrorCode(1_060_105_002, "往来企业必须是客户或客户/供应商类型"); ErrorCode MERCHANT_HAS_ORDER = new ErrorCode(1_060_105_003, "删除失败!往来企业已被{}使用!"); + ErrorCode MERCHANT_CODE_DUPLICATE = new ErrorCode(1_060_105_004, "往来企业编号重复"); + ErrorCode MERCHANT_NAME_DUPLICATE = new ErrorCode(1_060_105_005, "往来企业名称重复"); // ========== WMS 入库单 1-060-200-000 ========== ErrorCode RECEIPT_ORDER_NOT_EXISTS = new ErrorCode(1_060_200_000, "入库单不存在"); diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java index 05658b8..191ca86 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemServiceImpl.java @@ -72,6 +72,8 @@ public class WmsItemServiceImpl implements WmsItemService { } private void validateItemSaveData(WmsItemSaveReqVO reqVO) { + // 校验商品编号唯一 + validateItemCodeUnique(reqVO.getId(), reqVO.getCode()); // 校验商品名称唯一 validateItemNameUnique(reqVO.getId(), reqVO.getName()); // 校验商品分类存在 @@ -80,6 +82,16 @@ public class WmsItemServiceImpl implements WmsItemService { validateBrandExists(reqVO.getBrandId()); } + private void validateItemCodeUnique(Long id, String code) { + WmsItemDO item = itemMapper.selectByCode(code); + if (item == null) { + return; + } + if (id == null || ObjectUtil.notEqual(item.getId(), id)) { + throw exception(ITEM_CODE_DUPLICATE); + } + } + private void validateItemNameUnique(Long id, String name) { WmsItemDO item = itemMapper.selectByName(name); if (item == null) { diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java index cd6eef0..8b4acdd 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java @@ -45,6 +45,9 @@ public class WmsMerchantServiceImpl implements WmsMerchantService { @Override public Long createMerchant(WmsMerchantSaveReqVO createReqVO) { + validateMerchantSaveData(null, createReqVO); + + // 新增 WmsMerchantDO merchant = BeanUtils.toBean(createReqVO, WmsMerchantDO.class); merchantMapper.insert(merchant); return merchant.getId(); @@ -54,12 +57,40 @@ public class WmsMerchantServiceImpl implements WmsMerchantService { public void updateMerchant(WmsMerchantSaveReqVO updateReqVO) { // 校验存在 validateMerchantExists(updateReqVO.getId()); + validateMerchantSaveData(updateReqVO.getId(), updateReqVO); // 更新 WmsMerchantDO updateObj = BeanUtils.toBean(updateReqVO, WmsMerchantDO.class); merchantMapper.updateById(updateObj); } + private void validateMerchantSaveData(Long id, WmsMerchantSaveReqVO reqVO) { + // 校验 code 唯一 + validateMerchantCodeUnique(id, reqVO.getCode()); + // 校验 name 唯一 + validateMerchantNameUnique(id, reqVO.getName()); + } + + private void validateMerchantCodeUnique(Long id, String code) { + WmsMerchantDO merchant = merchantMapper.selectByCode(code); + if (merchant == null) { + return; + } + if (id == null || ObjectUtil.notEqual(merchant.getId(), id)) { + throw exception(MERCHANT_CODE_DUPLICATE); + } + } + + private void validateMerchantNameUnique(Long id, String name) { + WmsMerchantDO merchant = merchantMapper.selectByName(name); + if (merchant == null) { + return; + } + if (id == null || ObjectUtil.notEqual(merchant.getId(), id)) { + throw exception(MERCHANT_NAME_DUPLICATE); + } + } + @Override public void deleteMerchant(Long id) { // 校验存在 diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java index 0fe35b0..d7beb83 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java @@ -72,7 +72,11 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService { WmsCheckOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsCheckOrderDO.class) .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); fillCheckOrderTotal(updateObj, updateReqVO); - checkOrderMapper.updateById(updateObj); + int updateCount = checkOrderMapper.updateByIdAndStatus(updateReqVO.getId(), + WmsOrderStatusEnum.PREPARE.getStatus(), updateObj); + if (updateCount == 0) { + throw exception(CHECK_ORDER_STATUS_NOT_PREPARE); + } // 2.2 更新盘库单明细 checkOrderDetailService.updateCheckOrderDetailList(updateReqVO.getId(), updateReqVO); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java index 9a15ecd..ee2613e 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java @@ -73,7 +73,11 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService { WmsMovementOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsMovementOrderDO.class) .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); fillMovementOrderTotal(updateObj, updateReqVO); - movementOrderMapper.updateById(updateObj); + int updateCount = movementOrderMapper.updateByIdAndStatus(updateReqVO.getId(), + WmsOrderStatusEnum.PREPARE.getStatus(), updateObj); + if (updateCount == 0) { + throw exception(MOVEMENT_ORDER_STATUS_NOT_PREPARE); + } // 2.2 更新移库单明细 movementOrderDetailService.updateMovementOrderDetailList(updateReqVO.getId(), updateReqVO); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java index b10f73e..70ac13c 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java @@ -76,7 +76,11 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { WmsReceiptOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsReceiptOrderDO.class) .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); fillReceiptOrderTotal(updateObj, updateReqVO); - receiptOrderMapper.updateById(updateObj); + int updateCount = receiptOrderMapper.updateByIdAndStatus(updateReqVO.getId(), + WmsOrderStatusEnum.PREPARE.getStatus(), updateObj); + if (updateCount == 0) { + throw exception(RECEIPT_ORDER_STATUS_NOT_PREPARE); + } // 2.2 更新入库单明细 receiptOrderDetailService.updateReceiptOrderDetailList(updateReqVO.getId(), updateReqVO); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java index e3542e5..3fc1e6f 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java @@ -76,7 +76,11 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService { WmsShipmentOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsShipmentOrderDO.class) .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); fillShipmentOrderTotal(updateObj, updateReqVO); - shipmentOrderMapper.updateById(updateObj); + int updateCount = shipmentOrderMapper.updateByIdAndStatus(updateReqVO.getId(), + WmsOrderStatusEnum.PREPARE.getStatus(), updateObj); + if (updateCount == 0) { + throw exception(SHIPMENT_ORDER_STATUS_NOT_PREPARE); + } // 2.2 更新出库单明细 shipmentOrderDetailService.updateShipmentOrderDetailList(updateReqVO.getId(), updateReqVO); } diff --git a/yudao-module-wms/src/test/resources/sql/create_tables.sql b/yudao-module-wms/src/test/resources/sql/create_tables.sql index 4d8f414..811ae5e 100644 --- a/yudao-module-wms/src/test/resources/sql/create_tables.sql +++ b/yudao-module-wms/src/test/resources/sql/create_tables.sql @@ -15,17 +15,17 @@ CREATE TABLE IF NOT EXISTS "wms_warehouse" ( CREATE TABLE IF NOT EXISTS "wms_merchant" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "code" varchar(20) DEFAULT NULL, - "name" varchar(50) NOT NULL, - "type" int NOT NULL, - "level" varchar(20) DEFAULT NULL, - "bank_name" varchar(50) DEFAULT NULL, - "bank_account" varchar(50) DEFAULT NULL, - "address" varchar(255) DEFAULT NULL, - "mobile" varchar(20) DEFAULT NULL, - "telephone" varchar(20) DEFAULT NULL, - "contact" varchar(20) DEFAULT NULL, - "email" varchar(64) DEFAULT NULL, + "code" varchar(20) NOT NULL, + "name" varchar(60) NOT NULL, + "type" tinyint NOT NULL, + "level" varchar(10) DEFAULT NULL, + "bank_name" varchar(255) DEFAULT NULL, + "bank_account" varchar(40) DEFAULT NULL, + "address" varchar(200) DEFAULT NULL, + "mobile" varchar(13) DEFAULT NULL, + "telephone" varchar(13) DEFAULT NULL, + "contact" varchar(30) DEFAULT NULL, + "email" varchar(50) DEFAULT NULL, "remark" varchar(255) DEFAULT NULL, "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, @@ -39,7 +39,7 @@ CREATE TABLE IF NOT EXISTS "wms_merchant" ( CREATE TABLE IF NOT EXISTS "wms_item_brand" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "code" varchar(20) NOT NULL, - "name" varchar(60) NOT NULL, + "name" varchar(30) NOT NULL, "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updater" varchar(64) DEFAULT '', @@ -53,9 +53,9 @@ CREATE TABLE IF NOT EXISTS "wms_item_category" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "parent_id" bigint NOT NULL DEFAULT '0', "code" varchar(20) NOT NULL, - "name" varchar(60) NOT NULL, + "name" varchar(30) NOT NULL, "sort" int DEFAULT '0', - "status" tinyint NOT NULL DEFAULT '0', + "status" tinyint NOT NULL DEFAULT '1', "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updater" varchar(64) DEFAULT '', @@ -67,10 +67,10 @@ CREATE TABLE IF NOT EXISTS "wms_item_category" ( CREATE TABLE IF NOT EXISTS "wms_item" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "code" varchar(20) NOT NULL, + "code" varchar(20) DEFAULT NULL, "name" varchar(60) NOT NULL, - "unit" varchar(20) DEFAULT NULL, "category_id" bigint NOT NULL, + "unit" varchar(20) DEFAULT NULL, "brand_id" bigint DEFAULT NULL, "remark" varchar(255) DEFAULT NULL, "creator" varchar(64) DEFAULT '', @@ -108,6 +108,7 @@ CREATE TABLE IF NOT EXISTS "wms_inventory" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "sku_id" bigint NOT NULL, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "remark" varchar(255) DEFAULT NULL, "creator" varchar(64) DEFAULT '', @@ -117,22 +118,26 @@ CREATE TABLE IF NOT EXISTS "wms_inventory" ( "deleted" bit NOT NULL DEFAULT FALSE, "tenant_id" bigint NOT NULL DEFAULT '0', PRIMARY KEY ("id"), - CONSTRAINT "uk_wms_inventory_sku_warehouse" UNIQUE ("sku_id", "warehouse_id", "tenant_id", "deleted") + CONSTRAINT "uk_sku_id_warehouse_id" UNIQUE ("sku_id", "warehouse_id") ) COMMENT 'WMS 库存表'; CREATE TABLE IF NOT EXISTS "wms_inventory_history" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', "sku_id" bigint NOT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "before_quantity" decimal(20, 2) DEFAULT NULL, "after_quantity" decimal(20, 2) DEFAULT NULL, + "batch_no" varchar(64) DEFAULT NULL, + "production_date" timestamp DEFAULT NULL, + "expiration_date" timestamp DEFAULT NULL, "price" decimal(16, 2) DEFAULT NULL, "total_price" decimal(16, 2) DEFAULT NULL, "remark" varchar(255) DEFAULT NULL, "order_id" bigint DEFAULT NULL, "order_no" varchar(64) DEFAULT NULL, - "order_type" tinyint DEFAULT NULL, + "order_type" int DEFAULT NULL, "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updater" varchar(64) DEFAULT '', @@ -152,6 +157,7 @@ CREATE TABLE IF NOT EXISTS "wms_receipt_order" ( "merchant_id" bigint DEFAULT NULL, "remark" varchar(255) DEFAULT NULL, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', "total_quantity" decimal(20, 2) NOT NULL DEFAULT '0', "total_price" decimal(16, 2) DEFAULT NULL, "creator" varchar(64) DEFAULT '', @@ -168,6 +174,10 @@ CREATE TABLE IF NOT EXISTS "wms_receipt_order_detail" ( "order_id" bigint NOT NULL, "sku_id" bigint NOT NULL, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', + "batch_no" varchar(64) DEFAULT NULL, + "production_date" timestamp DEFAULT NULL, + "expiration_date" timestamp DEFAULT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "price" decimal(16, 2) DEFAULT NULL, "total_price" decimal(16, 2) DEFAULT NULL, @@ -190,6 +200,7 @@ CREATE TABLE IF NOT EXISTS "wms_shipment_order" ( "merchant_id" bigint DEFAULT NULL, "remark" varchar(255) DEFAULT NULL, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', "total_quantity" decimal(20, 2) NOT NULL DEFAULT '0', "total_price" decimal(16, 2) DEFAULT NULL, "creator" varchar(64) DEFAULT '', @@ -206,6 +217,11 @@ CREATE TABLE IF NOT EXISTS "wms_shipment_order_detail" ( "order_id" bigint NOT NULL, "sku_id" bigint NOT NULL, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', + "inventory_detail_id" bigint DEFAULT NULL, + "batch_no" varchar(64) DEFAULT NULL, + "production_date" timestamp DEFAULT NULL, + "expiration_date" timestamp DEFAULT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "price" decimal(16, 2) DEFAULT NULL, "total_price" decimal(16, 2) DEFAULT NULL, @@ -243,6 +259,10 @@ CREATE TABLE IF NOT EXISTS "wms_movement_order_detail" ( "sku_id" bigint NOT NULL, "source_warehouse_id" bigint NOT NULL, "target_warehouse_id" bigint NOT NULL, + "inventory_detail_id" bigint DEFAULT NULL, + "batch_no" varchar(64) DEFAULT NULL, + "production_date" timestamp DEFAULT NULL, + "expiration_date" timestamp DEFAULT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "price" decimal(16, 2) DEFAULT NULL, "total_price" decimal(16, 2) DEFAULT NULL, @@ -262,6 +282,7 @@ CREATE TABLE IF NOT EXISTS "wms_check_order" ( "status" int NOT NULL DEFAULT '0', "remark" varchar(255) DEFAULT NULL, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', "total_quantity" decimal(20, 2) NOT NULL DEFAULT '0', "total_price" decimal(16, 2) DEFAULT NULL, "actual_price" decimal(16, 2) DEFAULT NULL, @@ -279,7 +300,12 @@ CREATE TABLE IF NOT EXISTS "wms_check_order_detail" ( "order_id" bigint NOT NULL, "sku_id" bigint NOT NULL, "warehouse_id" bigint NOT NULL, + "area_id" bigint NOT NULL DEFAULT '0', "inventory_id" bigint DEFAULT NULL, + "inventory_detail_id" bigint DEFAULT NULL, + "batch_no" varchar(64) DEFAULT NULL, + "production_date" timestamp DEFAULT NULL, + "expiration_date" timestamp DEFAULT NULL, "receipt_time" timestamp DEFAULT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "check_quantity" decimal(20, 2) NOT NULL DEFAULT '0', -- libgit2 0.21.4