Browse Source

QC子件信息录入明细增加备注与删除操作

master
yangzz 2 weeks ago
parent
commit
097d904e1f
  1. 26
      src/main/resources/sql/init_dm_attribute_template_item.sql
  2. 128
      src/main/resources/sql/init_dm_method_seq_rule.sql
  3. 349
      src/main/resources/sql/report/qc_subpart_full_port.sql

26
src/main/resources/sql/init_dm_attribute_template_item.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

128
src/main/resources/sql/init_dm_method_seq_rule.sql

@ -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, ... (出货检验方法)
-- =====================================================

349
src/main/resources/sql/report/qc_subpart_full_port.sql

@ -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';
Loading…
Cancel
Save