3 changed files with 0 additions and 503 deletions
-
26src/main/resources/sql/init_dm_attribute_template_item.sql
-
128src/main/resources/sql/init_dm_method_seq_rule.sql
-
349src/main/resources/sql/report/qc_subpart_full_port.sql
@ -1,26 +0,0 @@ |
|||
/* |
|||
刀模属性-检验模板:按“物料(刀模)+模板”覆盖检验项目/标准值 |
|||
说明:当物料的检验项目需要随时调整时,不直接使用模板明细,而是将覆盖后的项目写入本表。 |
|||
*/ |
|||
|
|||
if not exists (select 1 from sysobjects where name='dm_attribute_template_item' and xtype='U') |
|||
begin |
|||
create table dm_attribute_template_item ( |
|||
site varchar(32) not null, |
|||
bu_no varchar(32) not null, |
|||
attribute_no varchar(64) not null, |
|||
template_id varchar(64) not null, |
|||
item_no varchar(64) not null, |
|||
default_value decimal(18,6) null, |
|||
max_value decimal(18,6) null, |
|||
min_value decimal(18,6) null, |
|||
order_id int null, |
|||
create_by varchar(64) null, |
|||
create_time datetime null, |
|||
update_by varchar(64) null, |
|||
update_date datetime null, |
|||
constraint PK_dm_attribute_template_item primary key (site, bu_no, attribute_no, template_id, item_no) |
|||
); |
|||
end |
|||
go |
|||
|
|||
@ -1,128 +0,0 @@ |
|||
-- ===================================================== |
|||
-- 初始化检验方法序列号规则 |
|||
-- 说明:为不同工厂创建检验方法的序列号规则 |
|||
-- 使用方法:根据实际工厂编号替换 @site 变量 |
|||
-- ===================================================== |
|||
|
|||
-- 清理旧数据(可选,谨慎使用) |
|||
-- DELETE FROM seq_rule WHERE type = 'DM'; |
|||
|
|||
-- 插入检验方法序列号规则 |
|||
-- 请根据实际情况替换以下 @site 占位符为实际的工厂编号 |
|||
|
|||
-- IQC 来料检验方法 (inspection_type_no = 105) |
|||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|||
SELECT |
|||
site, |
|||
'DM' as type, |
|||
'来料检验方法' as name, |
|||
'IQC' as prefix, |
|||
4 as length, |
|||
1 as current_val, |
|||
GETDATE() as create_date, |
|||
'SYSTEM' as create_by |
|||
FROM ( |
|||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|||
) AS sites |
|||
WHERE NOT EXISTS ( |
|||
SELECT 1 FROM seq_rule |
|||
WHERE seq_rule.site = sites.site |
|||
AND seq_rule.type = 'DM' |
|||
AND seq_rule.prefix = 'IQC' |
|||
); |
|||
|
|||
-- IPQC 过程检验方法 (inspection_type_no = 101, 102, 103, 104) |
|||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|||
SELECT |
|||
site, |
|||
'DM' as type, |
|||
'过程检验方法' as name, |
|||
'IPQC' as prefix, |
|||
4 as length, |
|||
1 as current_val, |
|||
GETDATE() as create_date, |
|||
'SYSTEM' as create_by |
|||
FROM ( |
|||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|||
) AS sites |
|||
WHERE NOT EXISTS ( |
|||
SELECT 1 FROM seq_rule |
|||
WHERE seq_rule.site = sites.site |
|||
AND seq_rule.type = 'DM' |
|||
AND seq_rule.prefix = 'IPQC' |
|||
); |
|||
|
|||
-- FAI 首件检验方法 (inspection_type_no = 106) |
|||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|||
SELECT |
|||
site, |
|||
'DM' as type, |
|||
'首件检验方法' as name, |
|||
'FAI' as prefix, |
|||
4 as length, |
|||
1 as current_val, |
|||
GETDATE() as create_date, |
|||
'SYSTEM' as create_by |
|||
FROM ( |
|||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|||
) AS sites |
|||
WHERE NOT EXISTS ( |
|||
SELECT 1 FROM seq_rule |
|||
WHERE seq_rule.site = sites.site |
|||
AND seq_rule.type = 'DM' |
|||
AND seq_rule.prefix = 'FAI' |
|||
); |
|||
|
|||
-- FQC 最终检验方法 (inspection_type_no = 107) |
|||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|||
SELECT |
|||
site, |
|||
'DM' as type, |
|||
'最终检验方法' as name, |
|||
'FQC' as prefix, |
|||
4 as length, |
|||
1 as current_val, |
|||
GETDATE() as create_date, |
|||
'SYSTEM' as create_by |
|||
FROM ( |
|||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|||
) AS sites |
|||
WHERE NOT EXISTS ( |
|||
SELECT 1 FROM seq_rule |
|||
WHERE seq_rule.site = sites.site |
|||
AND seq_rule.type = 'DM' |
|||
AND seq_rule.prefix = 'FQC' |
|||
); |
|||
|
|||
-- PQC 出货检验方法 (inspection_type_no = 108) |
|||
INSERT INTO seq_rule (site, type, name, prefix, length, current_val, create_date, create_by) |
|||
SELECT |
|||
site, |
|||
'DM' as type, |
|||
'出货检验方法' as name, |
|||
'PQC' as prefix, |
|||
4 as length, |
|||
1 as current_val, |
|||
GETDATE() as create_date, |
|||
'SYSTEM' as create_by |
|||
FROM ( |
|||
SELECT DISTINCT site FROM eam_site WHERE site IS NOT NULL |
|||
) AS sites |
|||
WHERE NOT EXISTS ( |
|||
SELECT 1 FROM seq_rule |
|||
WHERE seq_rule.site = sites.site |
|||
AND seq_rule.type = 'DM' |
|||
AND seq_rule.prefix = 'PQC' |
|||
); |
|||
|
|||
-- 查询验证 |
|||
SELECT * FROM seq_rule WHERE type = 'DM' ORDER BY site, prefix; |
|||
|
|||
-- ===================================================== |
|||
-- 编号格式说明: |
|||
-- IQC-0001, IQC-0002, ... (来料检验方法) |
|||
-- IPQC-0001, IPQC-0002, ... (过程检验方法) |
|||
-- FAI-0001, FAI-0002, ... (首件检验方法) |
|||
-- FQC-0001, FQC-0002, ... (最终检验方法) |
|||
-- PQC-0001, PQC-0002, ... (出货检验方法) |
|||
-- ===================================================== |
|||
@ -1,349 +0,0 @@ |
|||
/* |
|||
QC SubPart SQL 移植包(report 模块) |
|||
说明: |
|||
1) 保持同库不改表,仅迁移查询/新增/更新逻辑 SQL。 |
|||
2) 返回风格以当前项目 R 结构为准(code/msg/rows/total/...)。 |
|||
3) 记录号并发规则保留 SQLServer 锁语法:UPDLOCK, HOLDLOCK。 |
|||
*/ |
|||
|
|||
/* 1. 主表查询:/report/qcSubPartQuery/getHeaderList */ |
|||
SELECT id, |
|||
site, |
|||
record_no AS recordNo, |
|||
order_no AS orderNo, |
|||
seq_no AS seqNo, |
|||
citem_code AS citemCode, |
|||
item_no AS itemNo, |
|||
item_desc AS itemDesc, |
|||
work_center_no AS workCenterNo, |
|||
bom_rev_no AS bomRevNo, |
|||
finished_part_no AS partNo, |
|||
finished_part_desc AS partDesc, |
|||
sku, |
|||
resource_id AS resourceId, |
|||
resource_desc AS resourceDesc, |
|||
produce_date AS scheduledDate, |
|||
qualified_qty AS qtyApprove, |
|||
create_by AS createBy, |
|||
create_date AS createDate, |
|||
update_by AS updateBy, |
|||
update_date AS updateDate |
|||
FROM qc_subpart_record |
|||
WHERE site = :site |
|||
AND del_flag = 'N' |
|||
ORDER BY create_date DESC; |
|||
|
|||
/* 2. 明细查询:/report/qcSubPartQuery/getDetailList */ |
|||
SELECT id, |
|||
site, |
|||
header_id AS headerId, |
|||
record_no AS recordNo, |
|||
sub_part_no AS partNo, |
|||
sub_part_desc AS partDesc, |
|||
supplier_id AS supplierId, |
|||
supplier_name AS supplierName, |
|||
model_no AS modelNo, |
|||
manufacture_date AS manufactureDate, |
|||
sort_no AS sortNo |
|||
FROM qc_subpart_record_detail |
|||
WHERE site = :site |
|||
AND record_no = :recordNo |
|||
AND del_flag = 'N' |
|||
ORDER BY sort_no ASC; |
|||
|
|||
/* 3. 新增弹窗主数据:/report/qcSubPartAdd/queryAddMainList */ |
|||
SELECT DISTINCT |
|||
a.site, |
|||
ISNULL(j.sourceBu, '') AS citemCode, |
|||
a.orderno AS orderNo, |
|||
a.seqno AS seqNo, |
|||
a.itemno AS itemNo, |
|||
c.operation_desc AS itemDesc, |
|||
a.s_workcenterno AS workCenterNo, |
|||
d.bomrevno AS bomRevNo, |
|||
a.part_no AS partNo, |
|||
j.part_desc AS partDesc, |
|||
j.sku AS sku, |
|||
a.s_resourceid AS resourceId, |
|||
re.resource_desc AS resourceDesc, |
|||
CAST(a.s_scheduleddate AS DATE) AS scheduledDate, |
|||
ISNULL(a.qtyapprove, 0) AS qtyApprove |
|||
FROM soscheduledrouting a |
|||
INNER JOIN part j |
|||
ON a.site = j.site |
|||
AND a.part_no = j.part_no |
|||
INNER JOIN so_routing c |
|||
ON a.site = c.site |
|||
AND a.orderno = c.order_no |
|||
AND a.itemno = c.item_no |
|||
INNER JOIN shoporder d |
|||
ON a.site = d.site |
|||
AND a.orderno = d.orderno |
|||
LEFT JOIN resource re |
|||
ON re.Site = a.site |
|||
AND re.resource_id = a.s_resourceid |
|||
WHERE a.site = :site |
|||
AND (:citemCode = '' OR a.site + '_' + j.sourceBu = :citemCode) |
|||
AND (:orderNo = '' OR a.orderno LIKE '%' + :orderNo + '%') |
|||
AND (:seqNo = '' OR a.seqno LIKE '%' + :seqNo + '%') |
|||
AND (:partNo = '' OR a.part_no LIKE '%' + :partNo + '%') |
|||
AND (:sku = '' OR j.sku LIKE '%' + :sku + '%') |
|||
AND (:startDate IS NULL OR a.s_scheduleddate >= :startDate) |
|||
AND (:endDate IS NULL OR :endDate >= a.s_scheduleddate) |
|||
ORDER BY a.seqno DESC; |
|||
|
|||
/* 4. 新增弹窗明细数据:/report/qcSubPartAdd/queryAddDetailList(主查询) */ |
|||
SELECT DISTINCT |
|||
h.part_no AS partNo, |
|||
p.part_desc AS partDesc, |
|||
h.supplier_no AS supplierId, |
|||
s.SupplierName AS supplierName, |
|||
ISNULL(r.model_no, '') AS modelNo, |
|||
CAST(r.manufacture_date AS DATE) AS manufactureDate |
|||
FROM sfdc_material_hist h |
|||
LEFT JOIN part p |
|||
ON p.site = h.site |
|||
AND p.part_no = h.part_no |
|||
LEFT JOIN c_roll_info r |
|||
ON r.site = h.site |
|||
AND r.roll_no = h.roll_no |
|||
LEFT JOIN view_Supplier s |
|||
ON s.Site = h.site |
|||
AND s.SupplierID = h.supplier_no |
|||
WHERE h.site = :site |
|||
AND h.assjob_seq_no = :seqNo; |
|||
|
|||
/* 4.1 新增弹窗明细数据兜底:按历史子件记录回填 */ |
|||
SELECT DISTINCT |
|||
d.sub_part_no AS partNo, |
|||
d.sub_part_desc AS partDesc, |
|||
d.supplier_id AS supplierId, |
|||
d.supplier_name AS supplierName, |
|||
d.model_no AS modelNo, |
|||
d.manufacture_date AS manufactureDate |
|||
FROM qc_subpart_record_detail d |
|||
INNER JOIN qc_subpart_record h |
|||
ON h.site = d.site |
|||
AND h.id = d.header_id |
|||
WHERE h.site = :site |
|||
AND h.seq_no = :seqNo |
|||
AND h.del_flag = 'N' |
|||
AND d.del_flag = 'N' |
|||
ORDER BY d.sub_part_no; |
|||
|
|||
/* 5. 记录号并发锁:saveAddRecord */ |
|||
SELECT ISNULL(MAX(CAST(SUBSTRING(record_no, CHARINDEX('_', record_no) + 1, 20) AS INT)), 0) |
|||
FROM qc_subpart_record WITH (UPDLOCK, HOLDLOCK) |
|||
WHERE site = :site |
|||
AND seq_no = :seqNo |
|||
AND del_flag = 'N'; |
|||
|
|||
/* 6. 新增主记录:saveAddRecord */ |
|||
INSERT INTO qc_subpart_record( |
|||
site, |
|||
record_no, |
|||
order_no, |
|||
seq_no, |
|||
citem_code, |
|||
item_no, |
|||
item_desc, |
|||
work_center_no, |
|||
bom_rev_no, |
|||
finished_part_no, |
|||
finished_part_desc, |
|||
sku, |
|||
resource_id, |
|||
resource_desc, |
|||
produce_date, |
|||
qualified_qty, |
|||
create_by, |
|||
create_date, |
|||
update_by, |
|||
update_date, |
|||
del_flag |
|||
) VALUES ( |
|||
:site, |
|||
:recordNo, |
|||
:orderNo, |
|||
:seqNo, |
|||
:citemCode, |
|||
:itemNo, |
|||
:itemDesc, |
|||
:workCenterNo, |
|||
:bomRevNo, |
|||
:partNo, |
|||
:partDesc, |
|||
:sku, |
|||
:resourceId, |
|||
:resourceDesc, |
|||
:produceDate, |
|||
:qualifiedQty, |
|||
:username, |
|||
GETDATE(), |
|||
:username, |
|||
GETDATE(), |
|||
'N' |
|||
); |
|||
|
|||
/* 7. 新增明细:saveAddRecord / updateRecord */ |
|||
INSERT INTO qc_subpart_record_detail( |
|||
site, |
|||
header_id, |
|||
record_no, |
|||
sub_part_no, |
|||
sub_part_desc, |
|||
supplier_id, |
|||
supplier_name, |
|||
model_no, |
|||
manufacture_date, |
|||
sort_no, |
|||
create_by, |
|||
create_date, |
|||
del_flag |
|||
) VALUES ( |
|||
:site, |
|||
:headerId, |
|||
:recordNo, |
|||
:partNo, |
|||
:partDesc, |
|||
:supplierId, |
|||
:supplierName, |
|||
:modelNo, |
|||
:manufactureDate, |
|||
:sortNo, |
|||
:username, |
|||
GETDATE(), |
|||
'N' |
|||
); |
|||
|
|||
/* 8. 更新主记录:updateRecord(仅改主表关键字段) */ |
|||
UPDATE qc_subpart_record |
|||
SET order_no = :orderNo, |
|||
item_no = :itemNo, |
|||
item_desc = :itemDesc, |
|||
work_center_no = :workCenterNo, |
|||
bom_rev_no = :bomRevNo, |
|||
resource_id = :resourceId, |
|||
resource_desc = :resourceDesc, |
|||
produce_date = :produceDate, |
|||
qualified_qty = :qualifiedQty, |
|||
update_by = :username, |
|||
update_date = GETDATE() |
|||
WHERE site = :site |
|||
AND record_no = :recordNo |
|||
AND del_flag = 'N'; |
|||
|
|||
/* 10. 如库表缺字段时,执行以下补列脚本(SQLServer) */ |
|||
IF COL_LENGTH('qc_subpart_record', 'order_no') IS NULL |
|||
BEGIN |
|||
ALTER TABLE qc_subpart_record ADD order_no NVARCHAR(100) NULL; |
|||
END; |
|||
|
|||
IF COL_LENGTH('qc_subpart_record', 'resource_desc') IS NULL |
|||
BEGIN |
|||
ALTER TABLE qc_subpart_record ADD resource_desc NVARCHAR(200) NULL; |
|||
END; |
|||
|
|||
IF COL_LENGTH('qc_subpart_record', 'item_no') IS NULL |
|||
BEGIN |
|||
ALTER TABLE qc_subpart_record ADD item_no NVARCHAR(50) NULL; |
|||
END; |
|||
|
|||
IF COL_LENGTH('qc_subpart_record', 'item_desc') IS NULL |
|||
BEGIN |
|||
ALTER TABLE qc_subpart_record ADD item_desc NVARCHAR(200) NULL; |
|||
END; |
|||
|
|||
IF COL_LENGTH('qc_subpart_record', 'work_center_no') IS NULL |
|||
BEGIN |
|||
ALTER TABLE qc_subpart_record ADD work_center_no NVARCHAR(100) NULL; |
|||
END; |
|||
|
|||
IF COL_LENGTH('qc_subpart_record', 'bom_rev_no') IS NULL |
|||
BEGIN |
|||
ALTER TABLE qc_subpart_record ADD bom_rev_no NVARCHAR(50) NULL; |
|||
END; |
|||
|
|||
/* 11. 历史数据回填:按 site + seq_no 回填工单号、设备名称 */ |
|||
;WITH source_data AS ( |
|||
SELECT |
|||
r.id, |
|||
a.orderno AS orderNo, |
|||
a.itemno AS itemNo, |
|||
c.operation_desc AS itemDesc, |
|||
a.s_workcenterno AS workCenterNo, |
|||
d.bomrevno AS bomRevNo, |
|||
CAST(a.s_scheduleddate AS DATE) AS scheduledDate, |
|||
eo.ObjectDesc AS resourceDesc, |
|||
ROW_NUMBER() OVER ( |
|||
PARTITION BY r.id |
|||
ORDER BY ISNULL(a.update_date, a.create_date) DESC, a.seqno DESC |
|||
) AS rn |
|||
FROM qc_subpart_record r WITH (NOLOCK) |
|||
INNER JOIN soscheduledrouting a WITH (NOLOCK) |
|||
ON a.site = r.site |
|||
AND a.seqno = r.seq_no |
|||
LEFT JOIN so_routing c WITH (NOLOCK) |
|||
ON c.site = a.site |
|||
AND c.order_no = a.orderno |
|||
AND c.item_no = a.itemno |
|||
LEFT JOIN shoporder d WITH (NOLOCK) |
|||
ON d.site = a.site |
|||
AND d.orderno = a.orderno |
|||
LEFT JOIN eam_object eo WITH (NOLOCK) |
|||
ON eo.site = a.site |
|||
AND (eo.ResourceID = a.s_resourceid OR eo.ObjectID = a.s_resourceid) |
|||
WHERE r.del_flag = 'N' |
|||
) |
|||
UPDATE r |
|||
SET |
|||
order_no = CASE |
|||
WHEN ISNULL(LTRIM(RTRIM(r.order_no)), '') = '' THEN ISNULL(s.orderNo, '') |
|||
ELSE r.order_no |
|||
END, |
|||
item_no = CASE |
|||
WHEN ISNULL(LTRIM(RTRIM(r.item_no)), '') = '' THEN ISNULL(s.itemNo, '') |
|||
ELSE r.item_no |
|||
END, |
|||
item_desc = CASE |
|||
WHEN ISNULL(LTRIM(RTRIM(r.item_desc)), '') = '' THEN ISNULL(s.itemDesc, '') |
|||
ELSE r.item_desc |
|||
END, |
|||
work_center_no = CASE |
|||
WHEN ISNULL(LTRIM(RTRIM(r.work_center_no)), '') = '' THEN ISNULL(s.workCenterNo, '') |
|||
ELSE r.work_center_no |
|||
END, |
|||
bom_rev_no = CASE |
|||
WHEN ISNULL(LTRIM(RTRIM(r.bom_rev_no)), '') = '' THEN ISNULL(s.bomRevNo, '') |
|||
ELSE r.bom_rev_no |
|||
END, |
|||
produce_date = CASE |
|||
WHEN r.produce_date IS NULL THEN s.scheduledDate |
|||
ELSE r.produce_date |
|||
END, |
|||
resource_desc = CASE |
|||
WHEN ISNULL(LTRIM(RTRIM(r.resource_desc)), '') = '' THEN ISNULL(s.resourceDesc, '') |
|||
ELSE r.resource_desc |
|||
END, |
|||
update_date = GETDATE() |
|||
FROM qc_subpart_record r |
|||
INNER JOIN source_data s |
|||
ON s.id = r.id |
|||
AND s.rn = 1 |
|||
WHERE r.del_flag = 'N' |
|||
AND ( |
|||
ISNULL(LTRIM(RTRIM(r.order_no)), '') = '' |
|||
OR ISNULL(LTRIM(RTRIM(r.item_no)), '') = '' |
|||
OR ISNULL(LTRIM(RTRIM(r.item_desc)), '') = '' |
|||
OR ISNULL(LTRIM(RTRIM(r.work_center_no)), '') = '' |
|||
OR ISNULL(LTRIM(RTRIM(r.bom_rev_no)), '') = '' |
|||
OR r.produce_date IS NULL |
|||
OR ISNULL(LTRIM(RTRIM(r.resource_desc)), '') = '' |
|||
); |
|||
|
|||
/* 9. 更新明细策略:先软删后重建 */ |
|||
UPDATE qc_subpart_record_detail |
|||
SET del_flag = 'Y' |
|||
WHERE site = :site |
|||
AND record_no = :recordNo |
|||
AND del_flag = 'N'; |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue