这次好像对的

This commit is contained in:
2026-08-08 17:29:28 +08:00
parent dc0d2622f3
commit a2dac3b095
4 changed files with 0 additions and 297 deletions
@@ -1,200 +0,0 @@
-- ============================================================
-- PSI 订单/出库与业务表建表 —— 服装厂成衣标准
-- ============================================================
-- 包含:销售订单、采购订单、出库单 共 6 张表
-- + 修复 psi_purchases 缺少列
-- 各表均已补齐品牌/款号/色号/尺码明细/箱重/体积等成衣行业必备字段
-- ============================================================
-- -------------------------------------------
-- 1. 销售订单主表
-- -------------------------------------------
CREATE TABLE IF NOT EXISTS `psi_sales_orders` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`order_no` VARCHAR(40) NOT NULL COMMENT '订单编号 SO+年月日+流水',
`customer` VARCHAR(100) NOT NULL COMMENT '客户名称',
`customer_po` VARCHAR(80) DEFAULT '' COMMENT '客户采购单号(国际成衣贸易必备)',
`brand` VARCHAR(100) DEFAULT '' COMMENT '品牌',
`salesman` VARCHAR(50) DEFAULT '' COMMENT '业务员',
`channel` VARCHAR(20) DEFAULT 'domestic' COMMENT '销售渠道 domestic/export',
`region` VARCHAR(60) DEFAULT '' COMMENT '销售区域',
`currency` VARCHAR(10) DEFAULT 'CNY' COMMENT '币种 CNY/USD/EUR',
`payment_terms` VARCHAR(50) DEFAULT '' COMMENT '付款条件 T/T,L/C,D/P,OA',
`incoterm` VARCHAR(10) DEFAULT '' COMMENT '贸易术语 FOB/CIF/EXW/CFR/DDP',
`shipping_mark` VARCHAR(200) DEFAULT '' COMMENT '唛头',
`style_count` INT DEFAULT 0 COMMENT '款数',
`total_qty` INT DEFAULT 0 COMMENT '总数量',
`total_amount` DECIMAL(12,2) DEFAULT 0 COMMENT '总金额',
`delivery_date` VARCHAR(20) DEFAULT '' COMMENT '预计交付日期',
`remark` TEXT COMMENT '备注',
`status` VARCHAR(20) DEFAULT 'pending' COMMENT '状态 pending/partial/delivered/closed',
`created_at` VARCHAR(20) DEFAULT '' COMMENT '创建时间',
`updated_at` VARCHAR(20) DEFAULT '' COMMENT '最后修改时间',
INDEX `idx_so_customer` (`customer`),
INDEX `idx_so_salesman` (`salesman`),
INDEX `idx_so_status` (`status`),
INDEX `idx_so_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售订单主表';
-- -------------------------------------------
-- 2. 销售订单明细表
-- -------------------------------------------
CREATE TABLE IF NOT EXISTS `psi_sales_order_items` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`so_id` INT NOT NULL COMMENT '关联销售订单ID',
`product_id` INT DEFAULT 0 COMMENT '关联成品ID',
`style_no` VARCHAR(60) DEFAULT '' COMMENT '款号/货号',
`name` VARCHAR(120) NOT NULL COMMENT '商品名称',
`spec` VARCHAR(100) DEFAULT '' COMMENT '规格',
`color_code` VARCHAR(30) DEFAULT '' COMMENT '色号',
`size_detail` TEXT COMMENT '尺码明细 JSON [{size:\"S\",qty:100},...]',
`unit` VARCHAR(20) DEFAULT '' COMMENT '单位',
`qty` INT DEFAULT 0 COMMENT '数量',
`price` DECIMAL(10,2) DEFAULT 0 COMMENT '单价',
`amount` DECIMAL(12,2) DEFAULT 0 COMMENT '金额',
`unit_price_cny` DECIMAL(10,2) DEFAULT 0 COMMENT '人民币单价(外单换算用)',
`packing` VARCHAR(60) DEFAULT '' COMMENT '包装方式(独色独码/混色混码)',
`delivered_qty` INT DEFAULT 0 COMMENT '已交付数量',
INDEX `idx_soi_so_id` (`so_id`),
INDEX `idx_soi_product_id` (`product_id`),
INDEX `idx_soi_style_no` (`style_no`),
FOREIGN KEY (`so_id`) REFERENCES `psi_sales_orders`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售订单明细';
-- -------------------------------------------
-- 3. 采购订单主表
-- -------------------------------------------
CREATE TABLE IF NOT EXISTS `psi_purchase_orders` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`order_no` VARCHAR(40) NOT NULL COMMENT '订单编号 PO+年月日+流水',
`contract_no` VARCHAR(80) DEFAULT '' COMMENT '合同号',
`supplier_id` INT DEFAULT 0 COMMENT '供应商ID',
`supplier_name` VARCHAR(100) DEFAULT '' COMMENT '供应商名称',
`brand` VARCHAR(100) DEFAULT '' COMMENT '品牌',
`salesman` VARCHAR(50) DEFAULT '' COMMENT '采购员',
`currency` VARCHAR(10) DEFAULT 'CNY' COMMENT '币种',
`payment_terms` VARCHAR(50) DEFAULT '' COMMENT '付款条件',
`total_qty` INT DEFAULT 0 COMMENT '总数量',
`total_amount` DECIMAL(12,2) DEFAULT 0 COMMENT '总金额',
`expected_at` VARCHAR(20) DEFAULT '' COMMENT '预计到货日期',
`remark` TEXT COMMENT '备注',
`status` VARCHAR(20) DEFAULT 'pending' COMMENT '状态 pending/received/closed',
`created_at` VARCHAR(20) DEFAULT '' COMMENT '创建时间',
`updated_at` VARCHAR(20) DEFAULT '' COMMENT '最后修改时间',
INDEX `idx_po_supplier` (`supplier_id`),
INDEX `idx_po_status` (`status`),
INDEX `idx_po_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购订单主表';
-- -------------------------------------------
-- 4. 采购订单明细表
-- -------------------------------------------
CREATE TABLE IF NOT EXISTS `psi_purchase_order_items` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`po_id` INT NOT NULL COMMENT '关联采购订单ID',
`item_type` VARCHAR(10) DEFAULT 'product' COMMENT '类型 product/material',
`item_id` INT DEFAULT 0 COMMENT '关联物料/成品ID',
`style_no` VARCHAR(60) DEFAULT '' COMMENT '款号/货号',
`name` VARCHAR(120) NOT NULL COMMENT '商品名称',
`spec` VARCHAR(100) DEFAULT '' COMMENT '规格',
`color_code` VARCHAR(30) DEFAULT '' COMMENT '色号',
`size_detail` TEXT COMMENT '尺码明细 JSON',
`material_code` VARCHAR(60) DEFAULT '' COMMENT '物料编码',
`unit` VARCHAR(20) DEFAULT '' COMMENT '单位',
`qty` INT DEFAULT 0 COMMENT '数量',
`price` DECIMAL(10,2) DEFAULT 0 COMMENT '单价',
`amount` DECIMAL(12,2) DEFAULT 0 COMMENT '金额',
`delivery_date` VARCHAR(20) DEFAULT '' COMMENT '预计交期',
`received_qty` INT DEFAULT 0 COMMENT '已收货数量',
INDEX `idx_poi_po_id` (`po_id`),
INDEX `idx_poi_item_type` (`item_type`),
INDEX `idx_poi_style_no` (`style_no`),
FOREIGN KEY (`po_id`) REFERENCES `psi_purchase_orders`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购订单明细';
-- -------------------------------------------
-- 5. 出库单主表
-- -------------------------------------------
CREATE TABLE IF NOT EXISTS `psi_outbounds` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`order_no` VARCHAR(40) NOT NULL COMMENT '出库单号 OUT+年月日+流水',
`so_no` VARCHAR(40) DEFAULT '' COMMENT '关联销售订单号',
`customer` VARCHAR(100) DEFAULT '' COMMENT '客户',
`customer_po` VARCHAR(80) DEFAULT '' COMMENT '客户采购单号',
`brand` VARCHAR(100) DEFAULT '' COMMENT '品牌',
`salesman` VARCHAR(50) DEFAULT '' COMMENT '业务员',
`warehouse` VARCHAR(60) DEFAULT '' COMMENT '出库仓库',
`carton_count` INT DEFAULT 0 COMMENT '箱数',
`container_no` VARCHAR(100) DEFAULT '' COMMENT '柜号/箱号范围',
`seal_no` VARCHAR(60) DEFAULT '' COMMENT '封条号',
`packing_list_no` VARCHAR(60) DEFAULT '' COMMENT '装箱单号',
`shipping_line` VARCHAR(80) DEFAULT '' COMMENT '船公司/快递',
`voyage` VARCHAR(60) DEFAULT '' COMMENT '航次/航班',
`port_of_loading` VARCHAR(60) DEFAULT '' COMMENT '装运港',
`port_of_discharge` VARCHAR(60) DEFAULT '' COMMENT '卸货港',
`etd` VARCHAR(20) DEFAULT '' COMMENT '预计离港日',
`eta` VARCHAR(20) DEFAULT '' COMMENT '预计到港日',
`gross_weight` DECIMAL(10,2) DEFAULT 0 COMMENT '毛重 KG',
`net_weight` DECIMAL(10,2) DEFAULT 0 COMMENT '净重 KG',
`volume` DECIMAL(10,3) DEFAULT 0 COMMENT '体积 CBM',
`status` VARCHAR(20) DEFAULT 'delivered' COMMENT '状态 delivered/partial',
`delivery_date` VARCHAR(20) DEFAULT '' COMMENT '实际交付日期',
`remark` TEXT COMMENT '备注',
`created_at` VARCHAR(20) DEFAULT '' COMMENT '创建时间',
`updated_at` VARCHAR(20) DEFAULT '' COMMENT '最后修改时间',
INDEX `idx_ob_so_no` (`so_no`),
INDEX `idx_ob_customer` (`customer`),
INDEX `idx_ob_status` (`status`),
INDEX `idx_ob_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出库单主表';
-- -------------------------------------------
-- 6. 出库单明细表
-- -------------------------------------------
CREATE TABLE IF NOT EXISTS `psi_outbound_items` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`ob_id` INT NOT NULL COMMENT '关联出库单ID',
`so_item_id` INT DEFAULT 0 COMMENT '关联销售订单明细ID',
`product_id` INT DEFAULT 0 COMMENT '成品ID',
`style_no` VARCHAR(60) DEFAULT '' COMMENT '款号/货号',
`name` VARCHAR(120) NOT NULL COMMENT '商品名称',
`spec` VARCHAR(100) DEFAULT '' COMMENT '规格',
`color_code` VARCHAR(30) DEFAULT '' COMMENT '色号',
`size_detail` TEXT COMMENT '尺码明细 JSON',
`carton_no` VARCHAR(40) DEFAULT '' COMMENT '箱号',
`unit` VARCHAR(20) DEFAULT '' COMMENT '单位',
`qty` INT DEFAULT 0 COMMENT '数量',
`price` DECIMAL(10,2) DEFAULT 0 COMMENT '单价',
`amount` DECIMAL(12,2) DEFAULT 0 COMMENT '金额',
`unit_weight` DECIMAL(10,2) DEFAULT 0 COMMENT '单件重量 g/KG',
INDEX `idx_obi_ob_id` (`ob_id`),
INDEX `idx_obi_product_id` (`product_id`),
INDEX `idx_obi_so_item_id` (`so_item_id`),
INDEX `idx_obi_style_no` (`style_no`),
FOREIGN KEY (`ob_id`) REFERENCES `psi_outbounds`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出库单明细';
-- -------------------------------------------
-- 7. 修复 psi_purchases —— 补齐 PurchaseOrdersController::receive() 所需的列
-- -------------------------------------------
-- 使用 INFORMATION_SCHEMA 动态检测是否存在列,兼容 MySQL 5.7+ / MariaDB 10.2+
DROP PROCEDURE IF EXISTS tmp_psi_purchases_alter;
DELIMITER $$
CREATE PROCEDURE tmp_psi_purchases_alter()
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'psi_purchases' AND COLUMN_NAME = 'product_id') THEN
ALTER TABLE `psi_purchases` ADD COLUMN `product_id` INT DEFAULT 0 COMMENT '成品ID(采购订单收货时使用)' AFTER `item_id`;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'psi_purchases' AND COLUMN_NAME = 'supplier') THEN
ALTER TABLE `psi_purchases` ADD COLUMN `supplier` VARCHAR(100) DEFAULT '' COMMENT '供应商名称' AFTER `supplier_id`;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'psi_purchases' AND COLUMN_NAME = 'brand') THEN
ALTER TABLE `psi_purchases` ADD COLUMN `brand` VARCHAR(100) DEFAULT '' COMMENT '品牌' AFTER `supplier`;
END IF;
END$$
DELIMITER ;
CALL tmp_psi_purchases_alter();
DROP PROCEDURE IF EXISTS tmp_psi_purchases_alter;
@@ -1,46 +0,0 @@
-- ============================================================
-- 事件通知(邮件 + 企业微信)数据升级包
-- ============================================================
-- 作用:
-- 1) 创建 psi_events 紧急事件表(Notify 服务使用,首次触发也会自动建表,这里提前建好)
-- 2) 写入 notify_* 通知设置(INSERT IGNORE,重复执行不会重复插入)
-- 说明:
-- 本文件专供后台「数据库升级」面板(/admin/upgrade)使用;
-- 若已通过「数据升级」按钮执行过,这里仍为幂等安全。
-- ============================================================
-- -------------------------------------------
-- 1. 紧急事件表(站内提醒 + 邮件/企业微信推送记录)
-- -------------------------------------------
CREATE TABLE IF NOT EXISTS `psi_events` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`sys` VARCHAR(20) NOT NULL DEFAULT 'psi',
`type` VARCHAR(40) NOT NULL DEFAULT '',
`level` VARCHAR(20) NOT NULL DEFAULT 'urgent',
`title` VARCHAR(255) NOT NULL DEFAULT '',
`body` TEXT,
`url` VARCHAR(255) NOT NULL DEFAULT '',
`ref_no` VARCHAR(64) NOT NULL DEFAULT '',
`recipients` TEXT,
`channels` VARCHAR(255) NOT NULL DEFAULT '["inapp"]',
`read_by` TEXT,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- -------------------------------------------
-- 2. 通知设置(缺则插入)
-- -------------------------------------------
INSERT IGNORE INTO `settings` (`skey`,`sval`,`sgroup`) VALUES
('notify_enabled','0','notify'),
('notify_email_enabled','0','notify'),
('notify_email_smtp_host','','notify'),
('notify_email_smtp_port','465','notify'),
('notify_email_smtp_user','','notify'),
('notify_email_smtp_pass','','notify'),
('notify_email_from','','notify'),
('notify_email_to','','notify'),
('notify_wechat_enabled','0','notify'),
('notify_wechat_webhook','','notify'),
('notify_wechat_mention','','notify'),
('notify_lowstock_enabled','1','notify'),
('notify_lowstock_threshold','20','notify');
@@ -1,20 +0,0 @@
-- 给 psi_sales 表增加 item_type 字段,用于精确识别成品/物料类型
-- 幂等升级:可多次安全执行
DROP PROCEDURE IF EXISTS `psi_add_item_type`;
DELIMITER $$
CREATE PROCEDURE `psi_add_item_type`()
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='psi_sales' AND COLUMN_NAME='item_type') THEN
ALTER TABLE psi_sales ADD COLUMN item_type VARCHAR(16) DEFAULT '' AFTER item_id;
END IF;
END$$
DELIMITER ;
CALL `psi_add_item_type`();
DROP PROCEDURE IF EXISTS `psi_add_item_type`;
-- 如果有 stock_moves 记录,尝试补齐现有数据的 item_type
UPDATE psi_sales s
LEFT JOIN psi_stock_moves m ON m.ref_no = s.order_no AND m.item_id = s.item_id AND m.qty = s.qty
SET s.item_type = m.item_type
WHERE s.item_type = '' AND m.item_type IS NOT NULL AND m.item_type != '';
-31
View File
@@ -1,31 +0,0 @@
-- 新增 page_seo 表:支持后台逐页设置 SEO(标题/描述/关键词/Open Graph 等)
-- 幂等升级:可多次安全执行(CREATE TABLE IF NOT EXISTS + INSERT IGNORE
CREATE TABLE IF NOT EXISTS `page_seo` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`page_key` VARCHAR(64) NOT NULL COMMENT '页面标识(home/products/product_category/news/cases/about/contact)',
`page_label` VARCHAR(64) NOT NULL COMMENT '后台显示名称',
`title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '页面标题',
`description` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '页面描述',
`keywords` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '关键词,逗号分隔',
`og_title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '社交分享标题',
`og_description` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '社交分享描述',
`og_image` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '社交分享图',
`og_type` VARCHAR(32) NOT NULL DEFAULT 'website',
`canonical` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '规范链接',
`noindex` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否禁止收录',
`sort` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_page_key` (`page_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='逐页SEO设置';
-- 种子数据:默认文案已满足 SEO 建议字数
-- 首页标题≥35字符 / 描述≥120字符 / 分类页描述≥80字符 / 关键词≥10个(部分页面按语义给 6-10 个)
INSERT IGNORE INTO `page_seo` (`page_key`,`page_label`,`title`,`description`,`keywords`,`og_type`,`sort`) VALUES
('home','首页','酷冰甲降温服官网 | 科技降温服定制·水冷循环·相变蓄冷·风冷背心·10套起订','酷冰甲专注降温服的研发、生产与定制,提供水冷循环、相变蓄冷、风冷制冷、冰袋背心等多系列降温装备,广泛适用于消防、工业、电力、钢铁、环卫及户外高温作业场景。支持企业LOGO刺绣、尺寸与面料定制,10套起订,7天打样,全国发货,为您提供一站式高温防护解决方案。','降温服,降温背心,水冷降温服,相变降温服,制冷背心,工业降温服,消防降温服,高温作业防护,降温服定制,酷冰甲','website',10),
('products','产品中心','降温服产品中心 - 水冷/相变/风冷多系列 | 酷冰甲','酷冰甲降温服产品中心,系统展示水冷循环降温服、相变冰袋降温背心、风冷制冷背心、冰马甲等多系列产品,按使用场景与降温方式分类,参数规格与适用行业一目了然。支持企业批量定制、LOGO刺绣与免费拿样,提供专业选型建议与透明报价,助力高温作业安全防护。','降温服产品,水冷降温服,相变降温服,风冷降温服,制冷背心,冰马甲,工业降温装备,降温服批发,降温服定制,酷冰甲产品','website',20),
('product_category','产品分类页','{cat}降温服 - 酷冰甲科技降温·定制批发','酷冰甲{cat}系列降温服,采用科技降温方案,专为高温作业与户外暴晒场景设计,具备清凉持久、轻便透气、可循环重复使用等特点。支持企业定制、LOGO刺绣与小批量批发,10套起订,7天打样,全国发货。','{cat}降温服,{cat},降温服定制,降温背心,工业降温,酷冰甲','website',25),
('news','新闻列表','降温服行业新闻与动态 - 酷冰甲官网','酷冰甲降温服行业新闻中心,汇集高温防护政策解读、降温技术深度解析、产品应用案例、客户现场实录与行业前沿动态,持续分享降温服选型、使用、保养与清洗知识,帮助企业做好高温作业人员的健康与安全防护。我们关注每一次技术迭代,也记录每一处真实应用,让高温防护更有依据、更可落地。','降温服新闻,降温技术,高温防护,工业降温,降温服应用,行业动态,酷冰甲资讯,降温服知识','website',30),
('cases','客户案例','客户案例 - 酷冰甲降温服应用实录','酷冰甲降温服客户案例展示,覆盖消防、电力、钢铁、环卫、户外施工、车间制造等高温作业场景的真实合作项目,逐一呈现降温方案设计思路、现场使用效果与客户真实反馈,并附上适用行业与选型建议,为同类企业的高温防护升级提供可参考、可复用的实战样本,切实降低高温作业风险。','降温服案例,客户案例,高温作业,降温方案,消防降温,工业应用,酷冰甲案例','website',40),
('about','关于我们','关于酷冰甲 - 科技降温服研发与定制厂家','酷冰甲专注降温服的研发、生产与定制,拥有水冷循环、相变蓄冷、风冷制冷等多条成熟产品线,长期服务消防、工业、电力、钢铁等高温作业领域。工厂直供、支持ODM/OEM与来样定制,提供从需求沟通、方案设计、打样生产到售后维护的全流程服务,做您身边靠谱的高温防护伙伴。','关于酷冰甲,降温服厂家,降温服工厂,降温服研发,ODM定制,降温服生产,酷冰甲品牌','website',50),
('contact','联系我们','联系酷冰甲 - 降温服定制咨询与报价','联系酷冰甲,获取降温服定制方案与专属报价。我们支持企业批量采购、LOGO刺绣、尺寸与面料定制,提供在线咨询、电话与邮件多种沟通方式。7天打样、全国发货,专业团队一对一对接您的高温防护需求,从选型到交付全程跟进,确保交付准时可靠,让合作更省心、更可靠。','联系酷冰甲,降温服定制,降温服报价,降温服采购,企业定制,降温服厂家,酷冰甲联系','website',60);