统计
  • 建站日期:2021-03-10
  • 文章总数:9 篇
  • 评论总数:1 条
  • 分类总数:9 个
  • 最后更新:4月28日

分店备货同时更新商品进货表价格字段

果说
首页 🎱进销存系统 正文

更新日期:2026-04-25
涉及模块:进货单、销售单修改、柯沙坡备货单(创建/修改/通知配置)

一、数据库表结构变更

1.1 keshapo_purchase_items 增加 product_id 字段

用于关联 products 表,实现库存扣减与商品同步。

ALTER TABLE keshapo_purchase_items
ADD COLUMN product_id INT DEFAULT NULL AFTER order_id,
ADD KEY idx_product_id (product_id);

1.2 确保 inventory_stock_moves 表存在(由 inventory_lib.php 自动维护)

若手动创建,语句如下:

CREATE TABLE IF NOT EXISTS inventory_stock_moves (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ref_type VARCHAR(30) NOT NULL,
    ref_id INT NOT NULL,
    product_id INT NOT NULL,
    direction ENUM('IN','OUT') NOT NULL,
    quantity INT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_ref (ref_type, ref_id),
    KEY idx_product (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

二、进货单(kd.php)商品入库逻辑

改动说明

  • 新增商品自动插入 products 表,单价写入 stock_price(进价)。
  • 已有商品若新单价不在历史列表中,以 / 追加到 stock_price
  • 事务写入 sales_stock 主表 + stock_items 明细表。
  • 调用 inventoryApplyPurchase() 增加库存。

核心逻辑

步骤 操作
1 遍历 $_POST['product'],跳过空名称
2 SELECT product_id, stock_price FROM products WHERE name = ?
3 不存在则 INSERT INTO products (name, description, stock_price)
4 存在则判断 in_array($item['price'], $currentPrices),追加新价格
5 插入 sales_stock 获取 stock_id
6 插入 stock_items 明细
7 inventoryApplyPurchase($pdo, $orderId, $inventoryItems) 加库存

三、销售单修改(xg.php)批发价同步逻辑

改动说明

  • 销售单单价为批发价,追加到 products.price 字段。
  • 不改动 stock_price(进价)字段。
  • 新增商品自动插入 productsprice 写入批发价。

核心逻辑

步骤 操作
1 遍历 $_POST['product'],跳过空名称
2 SELECT product_id, price FROM products WHERE name = ?
3 不存在则 INSERT INTO products (name, description, price, stock_quantity)
4 存在则判断 in_array($unit_price, $currentPrices),追加到 price
5 更新 sales_orders 主表
6 删除旧 order_items,插入新明细

四、柯沙坡备货单 lib.php 改动

4.1 引入 inventory_lib.php 库存函数

函数 用途
inventoryApplySalesOutbound() 备货出库,扣减库存
inventoryRevertRef() 撤销旧流水,回滚库存
inventoryHasRef() 检查是否存在库存流水

4.2 数量强制整数

keshapoBuildItemsFromPost() 中:

$quantity = (int)($product['quantity'] ?? 0);

4.3 商品同步到 products 表

新增 keshapoSyncProducts() 函数:

场景 行为
商品不存在 INSERT INTO products (name, description, stock_price, stock_quantity)
商品存在,新单价未记录 UPDATE products SET stock_price = CONCAT(stock_price, '/', price)
商品存在,单价已记录 仅更新 description

4.4 创建备货单(keshapoCreateOrder)

步骤 操作
1 keshapoSyncProducts() 同步商品,获取 productIds
2 插入 keshapo_purchase_orders 主表
3 keshapoInsertItems() 插入明细(含 product_id
4 inventoryApplySalesOutbound() 扣减库存

4.5 修改备货单(keshapoUpdateOrder)

步骤 操作
1 读取旧明细,建立 商品名 → outbound_status/outbound_at 映射
2 inventoryRevertRef('sales_out', $orderId) 回滚旧库存
3 更新 keshapo_purchase_orders 主表,重置 prepare_completed = 0
4 删除旧明细,插入新明细
5 商品名相同则保留原 outbound_statusoutbound_at
6 inventoryApplySalesOutbound() 扣减新库存

4.6 删除备货单(keshapoDeleteOrder)

步骤 操作
1 inventoryRevertRef('sales_out', $orderId) 回滚库存
2 DELETE FROM keshapo_purchase_orders WHERE id = ?

五、前端页面改动

5.1 柯沙坡创建备货单(create.php)

改动项 原值 新值
数量 input step step="0.01" step="1"
后端处理 lib.php 调用 内联 keshapoSyncProducts + inventoryApplySalesOutbound 逻辑

5.2 柯沙坡修改备货单(edit.php)

改动项 原值 新值
数量 input step step="0.01" step="1"
后端处理 keshapoUpdateOrder 保留同名商品 outbound_status 状态

5.3 柯沙坡通知配置(settings.php)

改动项 原样式 新样式
按钮容器 position: sticky; bottom: 0 普通块级,随内容滚动到底部
容器类名 .ab 删除,改用 .btns
内边距 padding: 16px 16px 100px padding: 16px 16px 24px

六、文件对应关系

文件路径 改动内容
/keshapo/lib.php 新增 keshapoSyncProducts、库存回滚/扣减、状态保留逻辑
/keshapo/create.php 数量 step="1",后端对接 lib.php
/keshapo/edit.php 数量 step="1",后端对接 lib.php
/keshapo/settings.php 按钮位置改为内容底部
/caigou/kd.php 进货单商品入库、追加进价到 stock_price
/caigou/xg.php 销售单修改、追加批发价到 price
/inventory_lib.php 库存出入库、回滚、重算函数(已有,无需改动)

七、SQL 变更汇总(可直接执行)

-- 1. 给 keshapo_purchase_items 增加 product_id 字段
ALTER TABLE keshapo_purchase_items
ADD COLUMN product_id INT DEFAULT NULL AFTER order_id,
ADD KEY idx_product_id (product_id);

-- 2. 确保库存流水表存在(如 inventory_lib.php 未自动创建)
CREATE TABLE IF NOT EXISTS inventory_stock_moves (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ref_type VARCHAR(30) NOT NULL,
    ref_id INT NOT NULL,
    product_id INT NOT NULL,
    direction ENUM('IN','OUT') NOT NULL,
    quantity INT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_ref (ref_type, ref_id),
    KEY idx_product (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

文档结束


扫描二维码,在手机上阅读

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
再听一遍武家坡 愿我们前路无坎坷
« 上一篇

发表评论

已有 1 条评论

  1. emlog Lv.1
    6 天前         Linux /     Google Chrome

    说道:这是系统生成的演示评论

HI ! 请登录
我没觉得孤独,说浪漫些,我完全自由