feat: 保存运输证件、报销付款和开发流程的当前实现。

补齐证书齐备、证件折算、移动用证和合同绑定,并带上报销批量发放、付款备注以及个人开发流程升级,便于继续讨论已安排计划的调整规则。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
wuzilongandCursor committed 2026-11-04 21:42:33 +08:00
1 parent 7325a0aa52
commit 8e9536332a
202 files changed
+19200 -2054

No files matched your search

@@ -13,7 +13,7 @@ CREATE TABLE `pl_purchase_cert` (
`valid_use_text` varchar(32) NOT NULL COMMENT '有效次数:一次有效或多次有效;不增加数值次数表单',
`entry_mode` varchar(20) NOT NULL DEFAULT 'manual' COMMENT '首次建档方式:manual手工录入/image_parse图片解析后确认;补图不改变来源',
`attachment_urls` text COMMENT 'MinIO原件附件地址,可空,多附件逗号分隔;无图片也可手工建档',
`status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft草稿/active可用/suspended停用/void作废;到期由日期判断',
`status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft草稿/active可用/suspended停用/closed已核销/void作废;到期由日期判断',
`verified_by` varchar(64) DEFAULT NULL COMMENT '证件信息复核人',
`verified_time` datetime DEFAULT NULL COMMENT '证件信息复核时间',
`reserved_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '已安排未结转预占量;余额缓存,禁止手工直接编辑',
@@ -55,7 +55,7 @@ CREATE TABLE `pl_transport_cert` (
`valid_use_text` varchar(32) NOT NULL COMMENT '有效次数:一次有效或多次有效;不增加数值次数表单',
`entry_mode` varchar(20) NOT NULL DEFAULT 'manual' COMMENT '首次建档方式:manual手工录入/image_parse图片解析后确认;补图不改变来源',
`attachment_urls` text COMMENT 'MinIO原件附件地址,可空,多附件逗号分隔;无图片也可手工建档',
`status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft草稿/active可用/suspended停用/void作废;到期由日期判断',
`status` varchar(20) NOT NULL DEFAULT 'draft' COMMENT 'draft草稿/active可用/suspended停用/closed已核销/void作废;到期由日期判断',
`verified_by` varchar(64) DEFAULT NULL COMMENT '证件信息复核人',
`verified_time` datetime DEFAULT NULL COMMENT '证件信息复核时间',
`reserved_qty` decimal(18,6) NOT NULL DEFAULT 0 COMMENT '已安排未结转预占量;余额缓存,禁止手工直接编辑',
@@ -0,0 +1,79 @@
-- 证书齐备:易制毒外部装送段可人工放行,安排和归档不再校验、不扣购买证与运输证。
-- MySQL 5.7。可重复执行。只给已有「计划段次用证」菜单的角色补这个入口。
SET NAMES utf8mb4;
START TRANSACTION;
SET @schema_name = DATABASE();
SET @ready_exists = (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'pl_plan' AND COLUMN_NAME = 'quota_cert_waived'
);
SET @ready_sql = IF(
@ready_exists = 0,
'ALTER TABLE pl_plan
ADD COLUMN quota_cert_waived tinyint NOT NULL DEFAULT 0 COMMENT ''证书齐备:1 时安排和归档不校验、不扣购买证与运输证额度'' AFTER hazard_cert_ready_time,
ADD COLUMN quota_cert_waived_by varchar(64) DEFAULT NULL COMMENT ''证书齐备确认人ID'' AFTER quota_cert_waived,
ADD COLUMN quota_cert_waived_by_name varchar(100) DEFAULT NULL COMMENT ''证书齐备确认人姓名'' AFTER quota_cert_waived_by,
ADD COLUMN quota_cert_waived_time datetime DEFAULT NULL COMMENT ''证书齐备确认时间'' AFTER quota_cert_waived_by_name',
'SELECT 1'
);
PREPARE ready_stmt FROM @ready_sql;
EXECUTE ready_stmt;
DEALLOCATE PREPARE ready_stmt;
INSERT INTO sys_menu (
id, menu_name, parent_id, menu_type, path, component, perms, is_frame, visible, status,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_time, del_flag
)
SELECT 'PL_CERT_READY', '证书齐备', parent.id, 'C', 'cert-ready', 'pl/cert-ready/index',
'pl:plan-cert:list', 1, '1', '1', parent.tenant_no, plan_leaf.order_num + 1,
'待调整排序', 'system', '', NOW(), NOW(), 0
FROM sys_menu plan_leaf
JOIN sys_menu parent ON parent.id = plan_leaf.parent_id AND parent.tenant_no = plan_leaf.tenant_no
AND parent.del_flag = 0 AND parent.id = 'PL_MENU_ROOT' AND parent.path = '/pl'
JOIN sys_menu root ON root.id = parent.parent_id AND root.tenant_no = parent.tenant_no
AND root.del_flag = 0 AND root.parent_id = '0' AND root.path = '/web'
WHERE plan_leaf.tenant_no = 'shanxia2.0' AND plan_leaf.del_flag = 0 AND plan_leaf.menu_type = 'C'
AND plan_leaf.perms = 'pl:plan-cert:list' AND plan_leaf.path = 'plan-cert'
AND NOT EXISTS (
SELECT 1 FROM sys_menu existing
WHERE existing.id = 'PL_CERT_READY'
OR (existing.tenant_no = plan_leaf.tenant_no AND existing.del_flag = 0
AND existing.path = 'cert-ready' AND existing.parent_id = parent.id)
);
UPDATE sys_menu sibling
JOIN sys_menu created ON created.id = 'PL_CERT_READY' AND created.del_flag = 0
AND created.tenant_no = sibling.tenant_no AND created.parent_id = sibling.parent_id
AND created.remark = '待调整排序'
SET sibling.order_num = sibling.order_num + 1, sibling.update_time = NOW()
WHERE sibling.tenant_no = 'shanxia2.0' AND sibling.del_flag = 0
AND sibling.id <> 'PL_CERT_READY' AND sibling.order_num >= created.order_num;
UPDATE sys_menu
SET remark = '计划段次用证之后的证书齐备入口', update_time = NOW()
WHERE id = 'PL_CERT_READY' AND tenant_no = 'shanxia2.0' AND del_flag = 0 AND remark = '待调整排序';
INSERT INTO sys_role_menu (
id, role_id, menu_id, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_time, del_flag
)
SELECT MD5(CONCAT(access_row.role_id, '|PL_CERT_READY|cert-ready|v1')),
access_row.role_id, created.id, access_row.tenant_no, 0,
'证书齐备:沿用计划段次用证授权',
'system', '', NOW(), NOW(), 0
FROM sys_role_menu access_row
JOIN sys_menu plan_leaf ON plan_leaf.id = access_row.menu_id AND plan_leaf.tenant_no = access_row.tenant_no
AND plan_leaf.del_flag = 0 AND plan_leaf.menu_type = 'C'
AND plan_leaf.perms = 'pl:plan-cert:list' AND plan_leaf.path = 'plan-cert'
JOIN sys_menu created ON created.id = 'PL_CERT_READY' AND created.tenant_no = plan_leaf.tenant_no
AND created.del_flag = 0
WHERE access_row.del_flag = 0 AND access_row.tenant_no = 'shanxia2.0'
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu existing
WHERE existing.role_id = access_row.role_id AND existing.menu_id = created.id
AND existing.tenant_no = access_row.tenant_no AND existing.del_flag = 0
)
ON DUPLICATE KEY UPDATE del_flag = 0, update_time = NOW();
COMMIT;
@@ -0,0 +1,87 @@
-- 菜单改名,并把 Web「合法使用证明」从运输证件管理的页签提升为同级目录。
-- MySQL 5.7。只调整 shanxia2.0 的菜单名称、父子关系和排序,不恢复已软删除菜单,不改业务数据。
-- 可重复执行。已有「合法使用证明」角色保留,并补齐新目录授权。
SET NAMES utf8mb4;
START TRANSACTION;
UPDATE sys_menu
SET menu_name='运输证件管理', update_time=NOW()
WHERE tenant_no='shanxia2.0' AND del_flag=0 AND perms='mini:pl:plan-cert:list';
UPDATE sys_menu
SET menu_name='运输证件管理', update_time=NOW()
WHERE tenant_no='shanxia2.0' AND del_flag=0 AND menu_type='M'
AND parent_id='PL_MENU_ROOT' AND path='cert-upload';
UPDATE sys_menu
SET menu_name='人车证件提醒', update_time=NOW()
WHERE tenant_no='shanxia2.0' AND del_flag=0
AND (
id IN ('PL_GROUP_DOC', 'PL_DOC_REMINDER')
OR (menu_type='M' AND parent_id='PL_MENU_ROOT' AND path='document-reminder-module')
OR (menu_type='C' AND perms='pl:document:list' AND path='document-reminder')
);
INSERT INTO sys_menu (
id, menu_name, parent_id, menu_type, path, component, perms, is_frame, visible, status,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_time, del_flag
)
SELECT 'PL_GROUP_LEGAL', '合法使用证明', parent.id, 'M', 'legal-use-module', NULL, NULL,
1, '1', '1', parent.tenant_no, COALESCE(cert.order_num, plan_leaf.order_num, 3) + 1,
'待调整排序', 'system', '', NOW(), NOW(), 0
FROM sys_menu parent
JOIN sys_menu root ON root.id=parent.parent_id AND root.tenant_no=parent.tenant_no AND root.del_flag=0
LEFT JOIN sys_menu cert ON cert.parent_id=parent.id AND cert.tenant_no=parent.tenant_no AND cert.del_flag=0
AND cert.menu_type='M' AND cert.path='cert-upload'
LEFT JOIN sys_menu plan_leaf ON plan_leaf.parent_id=parent.id AND plan_leaf.tenant_no=parent.tenant_no
AND plan_leaf.del_flag=0 AND plan_leaf.menu_type='C' AND plan_leaf.perms='pl:plan-cert:list'
AND plan_leaf.path='plan-cert'
WHERE parent.id='PL_MENU_ROOT' AND parent.path='/pl' AND parent.del_flag=0 AND parent.tenant_no='shanxia2.0'
AND root.parent_id='0' AND root.path='/web' AND root.del_flag=0
AND NOT EXISTS (
SELECT 1 FROM sys_menu existing
WHERE existing.id='PL_GROUP_LEGAL'
OR (existing.tenant_no=parent.tenant_no AND existing.parent_id=parent.id
AND existing.path='legal-use-module' AND existing.del_flag=0)
);
UPDATE sys_menu sibling
JOIN sys_menu legal ON legal.id='PL_GROUP_LEGAL' AND legal.del_flag=0
AND legal.parent_id=sibling.parent_id AND legal.tenant_no=sibling.tenant_no
AND legal.remark='待调整排序'
SET sibling.order_num=sibling.order_num + 1, sibling.update_time=NOW()
WHERE sibling.tenant_no='shanxia2.0' AND sibling.del_flag=0
AND sibling.id<>'PL_GROUP_LEGAL' AND sibling.order_num>=legal.order_num;
UPDATE sys_menu
SET remark='与运输证件管理平级的合法使用证明', update_time=NOW()
WHERE id='PL_GROUP_LEGAL' AND tenant_no='shanxia2.0' AND del_flag=0 AND remark='待调整排序';
UPDATE sys_menu leaf
JOIN sys_menu folder ON folder.id='PL_GROUP_LEGAL' AND folder.tenant_no=leaf.tenant_no AND folder.del_flag=0
AND folder.menu_type='M' AND folder.parent_id='PL_MENU_ROOT'
SET leaf.parent_id=folder.id, leaf.order_num=1, leaf.update_time=NOW()
WHERE leaf.tenant_no='shanxia2.0' AND leaf.del_flag=0 AND leaf.menu_type='C'
AND leaf.perms='pl:legal-use-document:list' AND leaf.path='legal-use-document';
INSERT INTO sys_role_menu (
id, role_id, menu_id, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_time, del_flag
)
SELECT MD5(CONCAT(access_row.role_id, '|', folder.id, '|legal-use-sibling|v1')),
access_row.role_id, folder.id, access_row.tenant_no, 0,
'合法使用证明提升为同级菜单:补齐目录授权',
'system', '', NOW(), NOW(), 0
FROM sys_role_menu access_row
JOIN sys_menu leaf ON leaf.id=access_row.menu_id AND leaf.tenant_no=access_row.tenant_no AND leaf.del_flag=0
JOIN sys_menu folder ON folder.id='PL_GROUP_LEGAL' AND folder.tenant_no=leaf.tenant_no AND folder.del_flag=0
WHERE access_row.del_flag=0 AND access_row.tenant_no='shanxia2.0'
AND leaf.menu_type='C' AND leaf.perms='pl:legal-use-document:list' AND leaf.path='legal-use-document'
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu existing
WHERE existing.role_id=access_row.role_id AND existing.menu_id=folder.id
AND existing.tenant_no=access_row.tenant_no AND existing.del_flag=0
)
ON DUPLICATE KEY UPDATE del_flag=0, update_time=NOW();
COMMIT;
@@ -0,0 +1,19 @@
-- 报销发放备注:单笔发放和批量发放共用,已处理详情读取该字段。
-- MySQL 5.7。可重复执行。
SET NAMES utf8mb4;
SET @schema_name = DATABASE();
SET @pay_remark_exists = (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema_name
AND TABLE_NAME = 'bx_reimburse_apply'
AND COLUMN_NAME = 'pay_remark'
);
SET @pay_remark_sql = IF(
@pay_remark_exists = 0,
'ALTER TABLE bx_reimburse_apply ADD COLUMN pay_remark varchar(512) DEFAULT NULL COMMENT ''发放备注'' AFTER pay_user_name',
'SELECT 1'
);
PREPARE pay_remark_stmt FROM @pay_remark_sql;
EXECUTE pay_remark_stmt;
DEALLOCATE PREPARE pay_remark_stmt;
@@ -0,0 +1,216 @@
-- 已建档运输证回填购买证关联,并补上该购买证的合同和合同产品。
-- MySQL 5.7。执行前备份 pl_transport_cert_purchase_ref、pl_contract_cert_link、pl_contract_cert_product。
-- 临时表使用 utf8mb4_general_ci,与业务表一致;库默认 unicode_ci 时直接比较会报 1267。
-- 可重复执行。只补空缺,不改已经选过的购买证,不改、不删运输证上已有合同。
--
-- 规则与证件建档识别后的自动关联一致:
-- 1. 引用证号与购买证证号去掉首尾空格后按二进制完全一致,且同一租户只命中一张未删除购买证,才写入购买证。
-- 命中 0 张或 2 张及以上保持为空。已经填写的购买证不覆盖。
-- 2. 仅针对本次新关联上的购买证,把它尚未出现在该运输证上的合同和产品复制过去。
-- 新记录使用新主键,不沿用购买证那边的关联 ID、产品范围 ID。
-- 合同已在运输证上存在(含已软删除)则整份跳过,不合并、不恢复。
-- 购买证上没有仍有效的合同产品的合同不复制。合同或产品行已删除的不复制。
-- 3. 作废、已核销的运输证只补购买证引用,不新增合同范围。
--
-- 只读核对想看结果、先不落库时,把文末 COMMIT 改成 ROLLBACK。
SET NAMES utf8mb4;
SET SESSION group_concat_max_len = 1048576;
DROP TEMPORARY TABLE IF EXISTS tmp_transport_purchase_match;
DROP TEMPORARY TABLE IF EXISTS tmp_transport_contract_copy;
CREATE TEMPORARY TABLE tmp_transport_purchase_match (
ref_id varchar(64) NOT NULL,
tenant_no varchar(64) NOT NULL,
transport_cert_id varchar(64) NOT NULL,
transport_cert_no varchar(100) NOT NULL,
transport_status varchar(20) NOT NULL,
create_dept_id varchar(64) NOT NULL,
purchase_cert_id varchar(64) NOT NULL,
purchase_cert_no varchar(100) NOT NULL,
reference_no varchar(100) NOT NULL,
PRIMARY KEY (ref_id),
KEY idx_match_transport (tenant_no, transport_cert_id),
KEY idx_match_purchase (tenant_no, purchase_cert_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TEMPORARY TABLE tmp_transport_contract_copy (
new_link_id varchar(64) NOT NULL,
source_link_id varchar(64) NOT NULL,
tenant_no varchar(64) NOT NULL,
transport_cert_id varchar(64) NOT NULL,
contract_id varchar(64) NOT NULL,
contract_no varchar(100) NOT NULL,
link_status varchar(16) NOT NULL,
order_num int DEFAULT NULL,
create_dept_id varchar(64) NOT NULL,
PRIMARY KEY (new_link_id),
UNIQUE KEY uk_transport_contract (tenant_no, transport_cert_id, contract_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
START TRANSACTION;
INSERT INTO tmp_transport_purchase_match (
ref_id, tenant_no, transport_cert_id, transport_cert_no, transport_status, create_dept_id,
purchase_cert_id, purchase_cert_no, reference_no
)
SELECT ref.id, ref.tenant_no, ref.transport_cert_id, transport.cert_no, transport.status,
transport.create_dept_id, MIN(purchase.id), MIN(purchase.cert_no), ref.reference_no
FROM pl_transport_cert_purchase_ref ref
JOIN pl_transport_cert transport
ON transport.id = ref.transport_cert_id
AND transport.tenant_no = ref.tenant_no
AND transport.del_flag = 0
JOIN pl_purchase_cert purchase
ON purchase.tenant_no = ref.tenant_no
AND purchase.del_flag = 0
AND CHAR_LENGTH(TRIM(purchase.cert_no)) > 0
AND BINARY TRIM(purchase.cert_no) = BINARY TRIM(ref.reference_no)
WHERE ref.del_flag = 0
AND CHAR_LENGTH(TRIM(IFNULL(ref.purchase_cert_id, ''))) = 0
AND CHAR_LENGTH(TRIM(ref.reference_no)) > 0
GROUP BY ref.id, ref.tenant_no, ref.transport_cert_id, transport.cert_no, transport.status,
transport.create_dept_id, ref.reference_no
HAVING COUNT(*) = 1;
-- 引用证号命中多张购买证:不自动关联,留给人工核对。
SELECT ref.tenant_no, transport.cert_no AS transport_cert_no, ref.reference_no,
COUNT(*) AS purchase_hit_count, GROUP_CONCAT(purchase.cert_no ORDER BY purchase.cert_no SEPARATOR '、') AS purchase_cert_nos
FROM pl_transport_cert_purchase_ref ref
JOIN pl_transport_cert transport
ON transport.id = ref.transport_cert_id
AND transport.tenant_no = ref.tenant_no
AND transport.del_flag = 0
JOIN pl_purchase_cert purchase
ON purchase.tenant_no = ref.tenant_no
AND purchase.del_flag = 0
AND CHAR_LENGTH(TRIM(purchase.cert_no)) > 0
AND BINARY TRIM(purchase.cert_no) = BINARY TRIM(ref.reference_no)
WHERE ref.del_flag = 0
AND CHAR_LENGTH(TRIM(IFNULL(ref.purchase_cert_id, ''))) = 0
AND CHAR_LENGTH(TRIM(ref.reference_no)) > 0
GROUP BY ref.tenant_no, transport.cert_no, ref.reference_no
HAVING COUNT(*) > 1;
INSERT INTO tmp_transport_contract_copy (
new_link_id, source_link_id, tenant_no, transport_cert_id, contract_id, contract_no,
link_status, order_num, create_dept_id
)
SELECT UPPER(REPLACE(UUID(), '-', '')), source_link.id, picked.tenant_no, picked.transport_cert_id,
picked.contract_id, IFNULL(contract.contract_no, ''),
IF(source_link.link_status = 'inactive', 'inactive', 'active'),
source_link.order_num, picked.create_dept_id
FROM (
SELECT matched.tenant_no, matched.transport_cert_id, source_link.contract_id, matched.create_dept_id,
SUBSTRING_INDEX(GROUP_CONCAT(source_link.id ORDER BY matched.ref_id, source_link.id SEPARATOR ','), ',', 1) AS source_link_id
FROM tmp_transport_purchase_match matched
JOIN pl_contract_cert_link source_link
ON source_link.tenant_no = matched.tenant_no
AND source_link.cert_type = 'purchase'
AND source_link.cert_id = matched.purchase_cert_id
AND source_link.del_flag = 0
JOIN crm_contract contract
ON contract.id = source_link.contract_id
AND contract.tenant_no = source_link.tenant_no
AND contract.del_flag = 0
WHERE matched.transport_status NOT IN ('void', 'closed')
AND EXISTS (
-- MySQL 5.7 不能在子查询 JOIN 的 ON 里引用外层 source_link,合同条件放在 WHERE。
SELECT 1
FROM pl_contract_cert_product source_product
JOIN crm_contract_product contract_product
ON contract_product.id = source_product.contract_product_id
AND contract_product.tenant_no = source_product.tenant_no
AND contract_product.del_flag = 0
WHERE source_product.contract_cert_link_id = source_link.id
AND source_product.tenant_no = source_link.tenant_no
AND source_product.del_flag = 0
AND CHAR_LENGTH(TRIM(source_product.contract_product_id)) > 0
AND contract_product.contract_id = source_link.contract_id
)
AND NOT EXISTS (
SELECT 1
FROM pl_contract_cert_link existing
WHERE existing.tenant_no = matched.tenant_no
AND existing.contract_id = source_link.contract_id
AND existing.cert_type = 'transport'
AND existing.cert_id = matched.transport_cert_id
)
GROUP BY matched.tenant_no, matched.transport_cert_id, source_link.contract_id, matched.create_dept_id
) picked
JOIN pl_contract_cert_link source_link ON source_link.id = picked.source_link_id
JOIN crm_contract contract
ON contract.id = picked.contract_id
AND contract.tenant_no = picked.tenant_no
AND contract.del_flag = 0;
-- 本次将补上的购买证引用。
SELECT tenant_no, transport_cert_no, reference_no, purchase_cert_no, transport_status
FROM tmp_transport_purchase_match
ORDER BY tenant_no, transport_cert_no, reference_no;
-- 本次将补上的合同。作废、已核销不在其中。
SELECT copy_row.tenant_no, transport.cert_no AS transport_cert_no, copy_row.contract_no,
copy_row.link_status
FROM tmp_transport_contract_copy copy_row
JOIN pl_transport_cert transport
ON transport.id = copy_row.transport_cert_id
AND transport.tenant_no = copy_row.tenant_no
ORDER BY copy_row.tenant_no, transport.cert_no, copy_row.contract_no;
UPDATE pl_transport_cert_purchase_ref ref_row
JOIN tmp_transport_purchase_match matched ON matched.ref_id = ref_row.id
SET ref_row.purchase_cert_id = matched.purchase_cert_id,
ref_row.update_by = 'system',
ref_row.update_time = NOW()
WHERE ref_row.del_flag = 0
AND CHAR_LENGTH(TRIM(IFNULL(ref_row.purchase_cert_id, ''))) = 0;
INSERT INTO pl_contract_cert_link (
id, contract_id, contract_no_snapshot, cert_type, cert_id, link_status, scope_revision,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT new_link_id, contract_id, contract_no, 'transport', transport_cert_id, link_status, 1,
tenant_no, order_num, NULL, 'system', create_dept_id, NOW(), 'system', NOW(), 0
FROM tmp_transport_contract_copy;
INSERT INTO pl_contract_cert_product (
id, contract_cert_link_id, contract_product_id, scope_status,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT UPPER(REPLACE(UUID(), '-', '')), copy_row.new_link_id, source_product.contract_product_id,
IF(source_product.scope_status = 'inactive', 'inactive', 'active'),
copy_row.tenant_no, source_product.order_num, NULL, 'system', copy_row.create_dept_id, NOW(), 'system', NOW(), 0
FROM tmp_transport_contract_copy copy_row
JOIN pl_contract_cert_product source_product
ON source_product.contract_cert_link_id = copy_row.source_link_id
AND source_product.tenant_no = copy_row.tenant_no
AND source_product.del_flag = 0
AND CHAR_LENGTH(TRIM(source_product.contract_product_id)) > 0
JOIN crm_contract_product contract_product
ON contract_product.id = source_product.contract_product_id
AND contract_product.contract_id = copy_row.contract_id
AND contract_product.tenant_no = source_product.tenant_no
AND contract_product.del_flag = 0;
-- MySQL 5.7 同一条语句不能重复打开临时表,汇总拆开查询。
SELECT COUNT(*) AS linked_purchase_refs FROM tmp_transport_purchase_match;
SELECT COUNT(*) AS copied_contracts FROM tmp_transport_contract_copy;
SELECT COUNT(*) AS copied_products
FROM tmp_transport_contract_copy copy_row
JOIN pl_contract_cert_product source_product
ON source_product.contract_cert_link_id = copy_row.source_link_id
AND source_product.tenant_no = copy_row.tenant_no
AND source_product.del_flag = 0
JOIN crm_contract_product contract_product
ON contract_product.id = source_product.contract_product_id
AND contract_product.contract_id = copy_row.contract_id
AND contract_product.tenant_no = source_product.tenant_no
AND contract_product.del_flag = 0;
COMMIT;
DROP TEMPORARY TABLE IF EXISTS tmp_transport_purchase_match;
DROP TEMPORARY TABLE IF EXISTS tmp_transport_contract_copy;
+5
View File
@@ -597,6 +597,7 @@ CREATE TABLE `bx_reimburse_apply` (
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`pay_user_id` varchar(64) DEFAULT NULL COMMENT '支付操作人ID',
`pay_user_name` varchar(64) DEFAULT NULL COMMENT '支付操作人姓名',
`pay_remark` varchar(512) DEFAULT NULL COMMENT '发放备注',
`actual_amount` decimal(14,2) DEFAULT NULL COMMENT '实际发放金额',
`offset_advance_id` varchar(64) DEFAULT NULL COMMENT '冲抵关联的备用金单ID',
`offset_amount` decimal(14,2) DEFAULT NULL COMMENT '冲抵金额',
@@ -25794,6 +25795,10 @@ CREATE TABLE `pl_plan` (
`hazard_cert_ready` tinyint(4) NOT NULL DEFAULT '0' COMMENT '危化品证书是否已人工确认齐备 0-否 1-是',
`hazard_cert_ready_by` varchar(64) DEFAULT NULL COMMENT '危化品证书确认人',
`hazard_cert_ready_time` datetime DEFAULT NULL COMMENT '危化品证书确认时间',
`quota_cert_waived` tinyint(4) NOT NULL DEFAULT '0' COMMENT '证书齐备:1 时安排和归档不校验、不扣购买证与运输证额度',
`quota_cert_waived_by` varchar(64) DEFAULT NULL COMMENT '证书齐备确认人ID',
`quota_cert_waived_by_name` varchar(100) DEFAULT NULL COMMENT '证书齐备确认人姓名',
`quota_cert_waived_time` datetime DEFAULT NULL COMMENT '证书齐备确认时间',
`erp_entered` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已录入ERP 0-否 1-是',
`cancel_reason` varchar(500) DEFAULT NULL COMMENT '作废原因',
`cancel_time` datetime DEFAULT NULL COMMENT '作废时间',