Ver Fonte

feat(s5): add iqc inspbill detail drawer

- 新增 GET /api/S5IqcInspBill/detail:qms_qcp_inspbill 单表按 id 直读
- 不 join ApprovalFlow/SQE/申请表/字典,不写任何表
- 新增 IqcInspBillDetailRow(35 展示字段 + BizType/BizId/BizCode/flowHint 占位)
- 新增 IqcInspBillDetailDrawer.vue(7 组只读展示);列表新增"查看"操作列
- 字典 pd/clfs/FBILLSTATUS/pcsq/blwtflid raw 展示;tenantId/FORGID 接收但忽略
- 无 SQL、无菜单、无功能码;无写路径/流程/通知/SQE/库存/入库
- 冒烟 list total=5、detail 首行完整、边界 204 无 500;qms 三表与 ApprovalFlow 四表前后不变
- 版本 server 1.0.236 / Web 2.4.233
YY968XX há 5 dias atrás
pai
commit
c0f323b472

+ 1 - 1
Web/package.json

@@ -1,7 +1,7 @@
 {
   "name": "admin.net",
   "type": "module",
-  "version": "2.4.232",
+  "version": "2.4.233",
   "packageManager": "pnpm@10.32.1",
   "lastBuildTime": "2026.03.15",
   "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",

+ 63 - 0
Web/src/views/aidop/s5/api/iqcInspBill.ts

@@ -58,3 +58,66 @@ export function fetchIqcInspBillList(params: any) {
 		.get<IqcInspBillPaged<IqcInspBillRow>>('/api/S5IqcInspBill/list', { params: withAidopTenantParams(params) })
 		.then((r) => r.data);
 }
+
+// ── S5 来料检验单详情(只读,qms_qcp_inspbill 单表按 id 直读)──
+// 约 35 展示字段 + 流程占位 bizType/bizId/bizCode。字典全 raw。id 不存在返回 null。
+export interface IqcInspBillDetail {
+	// A 基本信息
+	id?: number;
+	billNo?: string;
+	sourceBillNo?: string;
+	billStatus?: string;
+	bizTypeRaw?: number;
+	orgId?: number;
+	createTime?: string;
+	createUserId?: number;
+	updateTime?: string;
+	updateUserId?: number;
+	// B 物料与供应商
+	materialCode?: string;
+	materialName?: string;
+	spec?: string;
+	supplierName?: string;
+	lotNo?: string;
+	inspectionSpecNo?: string;
+	inspectionSpecVersion?: string;
+	inspectionSpecEffectiveDate?: string;
+	// C 检验数量
+	reportQty?: number;
+	inspectQty?: number;
+	sampleQty?: number;
+	testQty?: number;
+	qualifiedQty?: number;
+	unqualifiedQty?: number;
+	destructiveQty?: number;
+	retainSampleQty?: number;
+	// D 检验执行
+	inspector?: string;
+	inspectorName?: string;
+	inspectStartDate?: string;
+	inspectEndDate?: string;
+	judgement?: number;
+	processMethod?: number;
+	// E 不合格与偏差
+	unqualifiedDescription?: string;
+	returnReason?: string;
+	defectCategoryId?: number;
+	defectCategoryName?: string;
+	deviationApply?: number;
+	deviationDescription?: string;
+	// F 审核信息(仅展示)
+	leader?: string;
+	auditorId?: number;
+	auditDate?: string;
+	// G 流程占位
+	bizType?: string;
+	bizId?: number;
+	bizCode?: string;
+	flowHint?: string;
+}
+
+export function fetchIqcInspBillDetail(id: number) {
+	return service
+		.get<IqcInspBillDetail | null>('/api/S5IqcInspBill/detail', { params: withAidopTenantParams({ id }) })
+		.then((r) => r.data);
+}

+ 144 - 0
Web/src/views/aidop/s5/iqc/components/IqcInspBillDetailDrawer.vue

@@ -0,0 +1,144 @@
+<template>
+	<el-drawer v-model="innerVisible" :size="620" direction="rtl" @closed="onClosed">
+		<template #header>
+			<div class="drawer-title">
+				<span class="t1">来料检验单详情</span>
+				<span class="t2">{{ detail?.billNo || '-' }}</span>
+			</div>
+		</template>
+
+		<div v-loading="loading" class="detail-body">
+			<template v-if="detail">
+				<el-descriptions title="基本信息" :column="2" border size="small">
+					<el-descriptions-item label="检验单号">{{ dash(detail.billNo) }}</el-descriptions-item>
+					<el-descriptions-item label="来源单号">{{ dash(detail.sourceBillNo) }}</el-descriptions-item>
+					<el-descriptions-item label="单据状态">{{ dash(detail.billStatus) }}</el-descriptions-item>
+					<el-descriptions-item label="组织">{{ dash(detail.orgId) }}</el-descriptions-item>
+					<el-descriptions-item label="创建时间">{{ fmtDateTime(detail.createTime) }}</el-descriptions-item>
+					<el-descriptions-item label="更新时间">{{ fmtDateTime(detail.updateTime) }}</el-descriptions-item>
+				</el-descriptions>
+
+				<el-descriptions title="物料与供应商" :column="2" border size="small" class="mt12">
+					<el-descriptions-item label="物料编码">{{ dash(detail.materialCode) }}</el-descriptions-item>
+					<el-descriptions-item label="物料名称">{{ dash(detail.materialName) }}</el-descriptions-item>
+					<el-descriptions-item label="规格型号">{{ dash(detail.spec) }}</el-descriptions-item>
+					<el-descriptions-item label="供应商">{{ dash(detail.supplierName) }}</el-descriptions-item>
+					<el-descriptions-item label="批次">{{ dash(detail.lotNo) }}</el-descriptions-item>
+					<el-descriptions-item label="检规编号">{{ dash(detail.inspectionSpecNo) }}</el-descriptions-item>
+					<el-descriptions-item label="检规版本">{{ dash(detail.inspectionSpecVersion) }}</el-descriptions-item>
+					<el-descriptions-item label="检规生效日期">{{ dash(detail.inspectionSpecEffectiveDate) }}</el-descriptions-item>
+				</el-descriptions>
+
+				<el-descriptions title="检验数量" :column="2" border size="small" class="mt12">
+					<el-descriptions-item label="报检数量">{{ dashNum(detail.reportQty) }}</el-descriptions-item>
+					<el-descriptions-item label="检验数量">{{ dashNum(detail.inspectQty) }}</el-descriptions-item>
+					<el-descriptions-item label="样本数量">{{ dashNum(detail.sampleQty) }}</el-descriptions-item>
+					<el-descriptions-item label="测试数量">{{ dashNum(detail.testQty) }}</el-descriptions-item>
+					<el-descriptions-item label="合格数量">{{ dashNum(detail.qualifiedQty) }}</el-descriptions-item>
+					<el-descriptions-item label="不合格数量">{{ dashNum(detail.unqualifiedQty) }}</el-descriptions-item>
+					<el-descriptions-item label="破坏数量">{{ dashNum(detail.destructiveQty) }}</el-descriptions-item>
+					<el-descriptions-item label="留样数量">{{ dashNum(detail.retainSampleQty) }}</el-descriptions-item>
+				</el-descriptions>
+
+				<el-descriptions title="检验执行" :column="2" border size="small" class="mt12">
+					<el-descriptions-item label="检验员">{{ dash(detail.inspector) }}</el-descriptions-item>
+					<el-descriptions-item label="检验人">{{ dash(detail.inspectorName) }}</el-descriptions-item>
+					<el-descriptions-item label="检验开始时间">{{ fmtDateTime(detail.inspectStartDate) }}</el-descriptions-item>
+					<el-descriptions-item label="检验结束时间">{{ fmtDateTime(detail.inspectEndDate) }}</el-descriptions-item>
+					<el-descriptions-item label="判定">{{ dash(detail.judgement) }}</el-descriptions-item>
+					<el-descriptions-item label="处理方式">{{ dash(detail.processMethod) }}</el-descriptions-item>
+				</el-descriptions>
+
+				<el-descriptions title="不合格与偏差" :column="1" border size="small" class="mt12">
+					<el-descriptions-item label="不合格描述">
+						<span class="pre">{{ dash(detail.unqualifiedDescription) }}</span>
+					</el-descriptions-item>
+					<el-descriptions-item label="不良分类">{{ dash(detail.defectCategoryName) }}</el-descriptions-item>
+					<el-descriptions-item label="退货原因">
+						<span class="pre">{{ dash(detail.returnReason) }}</span>
+					</el-descriptions-item>
+					<el-descriptions-item label="偏差申请">{{ dash(detail.deviationApply) }}</el-descriptions-item>
+					<el-descriptions-item label="偏差说明">
+						<span class="pre">{{ dash(detail.deviationDescription) }}</span>
+					</el-descriptions-item>
+				</el-descriptions>
+
+				<el-descriptions title="审核信息(仅展示,不作为流程依据)" :column="2" border size="small" class="mt12">
+					<el-descriptions-item label="主管候选">{{ dash(detail.leader) }}</el-descriptions-item>
+					<el-descriptions-item label="审核人">{{ dash(detail.auditorId) }}</el-descriptions-item>
+					<el-descriptions-item label="审核时间">{{ fmtDateTime(detail.auditDate) }}</el-descriptions-item>
+				</el-descriptions>
+
+				<el-descriptions title="流程占位" :column="2" border size="small" class="mt12">
+					<el-descriptions-item label="BizType">{{ dash(detail.bizType) }}</el-descriptions-item>
+					<el-descriptions-item label="BizId">{{ dash(detail.bizId) }}</el-descriptions-item>
+					<el-descriptions-item label="BizCode">{{ dash(detail.bizCode) }}</el-descriptions-item>
+					<el-descriptions-item label="提示">{{ dash(detail.flowHint) }}</el-descriptions-item>
+				</el-descriptions>
+			</template>
+			<el-empty v-else-if="!loading" description="暂无详情数据" />
+		</div>
+	</el-drawer>
+</template>
+
+<script setup lang="ts" name="IqcInspBillDetailDrawer">
+import { computed } from 'vue';
+import type { IqcInspBillDetail } from '../../api/iqcInspBill';
+
+const props = defineProps<{
+	modelValue: boolean;
+	detail: IqcInspBillDetail | null;
+	loading?: boolean;
+}>();
+const emit = defineEmits<{
+	(e: 'update:modelValue', v: boolean): void;
+	(e: 'closed'): void;
+}>();
+
+const innerVisible = computed({
+	get: () => props.modelValue,
+	set: (v: boolean) => emit('update:modelValue', v),
+});
+
+function dash(v: unknown) {
+	if (v === null || v === undefined || v === '') return '-';
+	return String(v);
+}
+function dashNum(v?: number | null) {
+	if (v === null || v === undefined) return '-';
+	return String(v);
+}
+function fmtDateTime(v?: string | null) {
+	if (!v) return '-';
+	return String(v).replace('T', ' ').slice(0, 19);
+}
+function onClosed() {
+	emit('closed');
+}
+</script>
+
+<style scoped lang="scss">
+.drawer-title {
+	display: flex;
+	align-items: baseline;
+	gap: 10px;
+	.t1 {
+		font-weight: bold;
+		font-size: 16px;
+	}
+	.t2 {
+		color: var(--el-text-color-secondary);
+		font-size: 13px;
+	}
+}
+.detail-body {
+	min-height: 120px;
+}
+.mt12 {
+	margin-top: 12px;
+}
+.pre {
+	white-space: pre-wrap;
+	word-break: break-word;
+}
+</style>

+ 38 - 1
Web/src/views/aidop/s5/iqc/iqcTaskList.vue

@@ -61,11 +61,18 @@
 			<el-table-column prop="inspectStartDate" label="检验开始时间" min-width="150" resizable>
 				<template #default="{ row }">{{ fmtDate(row.inspectStartDate) }}</template>
 			</el-table-column>
+			<el-table-column label="操作" width="90" fixed="right">
+				<template #default="{ row }">
+					<el-button type="primary" link @click="openDetail(row)">查看</el-button>
+				</template>
+			</el-table-column>
 			<template #empty>
 				<el-empty description="暂无数据" />
 			</template>
 		</el-table>
 
+		<IqcInspBillDetailDrawer v-model="detailVisible" :detail="currentDetail" :loading="detailLoading" />
+
 		<div class="pager">
 			<el-pagination
 				v-model:current-page="query.page"
@@ -85,7 +92,8 @@ import { computed, onActivated, onMounted, reactive, ref } from 'vue';
 import { useRoute } from 'vue-router';
 import { ElMessage } from 'element-plus';
 import AidopDemoShell from '/@/views/aidop/components/AidopDemoShell.vue';
-import { fetchIqcInspBillList, type IqcInspBillRow } from '../api/iqcInspBill';
+import { fetchIqcInspBillList, fetchIqcInspBillDetail, type IqcInspBillRow, type IqcInspBillDetail } from '../api/iqcInspBill';
+import IqcInspBillDetailDrawer from './components/IqcInspBillDetailDrawer.vue';
 
 const route = useRoute();
 const pageTitle = computed(() => (route.meta?.title as string) || '来料检验任务列表');
@@ -115,11 +123,40 @@ const loading = ref(false);
 const rows = ref<IqcInspBillRow[]>([]);
 const total = ref(0);
 
+// 只读详情 drawer(S5-IQC-INSPBILL-DETAIL-READONLY-1):仅查看,无任何写/流程/通知/入库动作。
+const detailVisible = ref(false);
+const detailLoading = ref(false);
+const currentDetail = ref<IqcInspBillDetail | null>(null);
+
 function fmtDate(v?: string | null) {
 	if (!v) return '';
 	return String(v).slice(0, 10);
 }
 
+async function openDetail(row: IqcInspBillRow) {
+	if (!row?.id) {
+		ElMessage.error('检验单 id 缺失,无法查看详情');
+		return;
+	}
+	detailLoading.value = true;
+	detailVisible.value = true;
+	currentDetail.value = null;
+	try {
+		const data = await fetchIqcInspBillDetail(row.id);
+		if (!data) {
+			ElMessage.warning('未找到检验单详情');
+			currentDetail.value = null;
+			return;
+		}
+		currentDetail.value = data;
+	} catch (e: any) {
+		currentDetail.value = null;
+		ElMessage.error(e?.message || '加载检验单详情失败');
+	} finally {
+		detailLoading.value = false;
+	}
+}
+
 async function loadList() {
 	loading.value = true;
 	try {

+ 3 - 3
server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -11,9 +11,9 @@
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <Copyright>Admin.NET</Copyright>
     <Description>Admin.NET ͨ��Ȩ�޿���ƽ̨</Description>
-    <AssemblyVersion>1.0.235</AssemblyVersion>
-    <FileVersion>1.0.235</FileVersion>
-    <Version>1.0.235</Version>
+    <AssemblyVersion>1.0.236</AssemblyVersion>
+    <FileVersion>1.0.236</FileVersion>
+    <Version>1.0.236</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 111 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/MaterialWarehouse/Dto/IqcInspBillDto.cs

@@ -136,3 +136,114 @@ public class IqcInspBillListRow
     /// <summary>组织(FORGID,当前全 NULL)</summary>
     public long? OrgId { get; set; }
 }
+
+/// <summary>
+/// S5 来料检验单(qms_qcp_inspbill)只读详情 行。约 35 展示字段 + 流程占位(BizType/BizId/BizCode)。
+/// 单表按 id 直读,不 join,不查字典(pd/clfs/FBILLSTATUS/pcsq/blwtflid/FBIZTYPE 全 raw)。流程占位由服务拼装,不查 ApprovalFlow。
+/// </summary>
+public class IqcInspBillDetailRow
+{
+    // ── A 基本信息 ──
+    /// <summary>主键(id)</summary>
+    public long? Id { get; set; }
+    /// <summary>检验单号(FBILLNO)</summary>
+    public string? BillNo { get; set; }
+    /// <summary>来源单号(lydjbh)</summary>
+    public string? SourceBillNo { get; set; }
+    /// <summary>单据状态(FBILLSTATUS,raw)</summary>
+    public string? BillStatus { get; set; }
+    /// <summary>业务类型(FBIZTYPE,raw)</summary>
+    public long? BizTypeRaw { get; set; }
+    /// <summary>组织(FORGID)</summary>
+    public long? OrgId { get; set; }
+    /// <summary>创建时间(FCREATETIME)</summary>
+    public DateTime? CreateTime { get; set; }
+    /// <summary>创建人(FCREATORID)</summary>
+    public long? CreateUserId { get; set; }
+    /// <summary>更新时间(FMODIFYTIME)</summary>
+    public DateTime? UpdateTime { get; set; }
+    /// <summary>修改人(FMODIFIERID)</summary>
+    public long? UpdateUserId { get; set; }
+
+    // ── B 物料与供应商 ──
+    /// <summary>物料编码(FMATERIALCFG)</summary>
+    public string? MaterialCode { get; set; }
+    /// <summary>物料名称(wlmc)</summary>
+    public string? MaterialName { get; set; }
+    /// <summary>规格型号(ggxh)</summary>
+    public string? Spec { get; set; }
+    /// <summary>供应商(gysmc)</summary>
+    public string? SupplierName { get; set; }
+    /// <summary>批次(pch)</summary>
+    public string? LotNo { get; set; }
+    /// <summary>检规编号(jgbh)</summary>
+    public string? InspectionSpecNo { get; set; }
+    /// <summary>检规版本(jgbb)</summary>
+    public string? InspectionSpecVersion { get; set; }
+    /// <summary>检规生效日期(jgsxrq)</summary>
+    public string? InspectionSpecEffectiveDate { get; set; }
+
+    // ── C 检验数量 ──
+    /// <summary>报检数量(FRINSQTY)</summary>
+    public decimal? ReportQty { get; set; }
+    /// <summary>检验数量(jysl)</summary>
+    public decimal? InspectQty { get; set; }
+    /// <summary>样本数量(SampleQty)</summary>
+    public decimal? SampleQty { get; set; }
+    /// <summary>测试数量(TestQty)</summary>
+    public decimal? TestQty { get; set; }
+    /// <summary>合格数量(dhsl)</summary>
+    public decimal? QualifiedQty { get; set; }
+    /// <summary>不合格数量(bhgsl)</summary>
+    public decimal? UnqualifiedQty { get; set; }
+    /// <summary>破坏数量(phsl)</summary>
+    public decimal? DestructiveQty { get; set; }
+    /// <summary>留样数量(lysl)</summary>
+    public decimal? RetainSampleQty { get; set; }
+
+    // ── D 检验执行 ──
+    /// <summary>检验员(FINSPECTORID)</summary>
+    public string? Inspector { get; set; }
+    /// <summary>检验人(jyr)</summary>
+    public string? InspectorName { get; set; }
+    /// <summary>检验开始时间(FINSPESTARTDATE)</summary>
+    public DateTime? InspectStartDate { get; set; }
+    /// <summary>检验结束时间(FINSPEENDDATE)</summary>
+    public DateTime? InspectEndDate { get; set; }
+    /// <summary>判定(pd,raw)</summary>
+    public long? Judgement { get; set; }
+    /// <summary>处理方式(clfs,raw)</summary>
+    public long? ProcessMethod { get; set; }
+
+    // ── E 不合格与偏差 ──
+    /// <summary>不合格描述(UnqualifiedDescription)</summary>
+    public string? UnqualifiedDescription { get; set; }
+    /// <summary>退货原因(thyy)</summary>
+    public string? ReturnReason { get; set; }
+    /// <summary>不良分类 id(blwtflid,raw)</summary>
+    public long? DefectCategoryId { get; set; }
+    /// <summary>不良分类名(blwtflmc)</summary>
+    public string? DefectCategoryName { get; set; }
+    /// <summary>偏差申请(pcsq,raw)</summary>
+    public int? DeviationApply { get; set; }
+    /// <summary>偏差说明(pcsm)</summary>
+    public string? DeviationDescription { get; set; }
+
+    // ── F 审核信息(仅展示,不作流程依据)──
+    /// <summary>主管候选(leader)</summary>
+    public string? Leader { get; set; }
+    /// <summary>审核人(FAUDITORID)</summary>
+    public long? AuditorId { get; set; }
+    /// <summary>审核时间(FAUDITDATE)</summary>
+    public DateTime? AuditDate { get; set; }
+
+    // ── G 流程占位(服务拼装,不查 ApprovalFlow)──
+    /// <summary>流程 BizType(固定 S5_IQC_INSPBILL)</summary>
+    public string? BizType { get; set; }
+    /// <summary>流程 BizId(=id)</summary>
+    public long? BizId { get; set; }
+    /// <summary>流程 BizCode(=FBILLNO)</summary>
+    public string? BizCode { get; set; }
+    /// <summary>流程提示</summary>
+    public string? FlowHint { get; set; }
+}

+ 76 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/MaterialWarehouse/IqcInspBillService.cs

@@ -157,4 +157,80 @@ public class IqcInspBillService : IDynamicApiController, ITransient
 
         return new { total, page, pageSize, list };
     }
+
+    /// <summary>
+    /// 来料检验单详情(只读,按 id 单表直读 qms_qcp_inspbill)。
+    ///
+    /// 仅 SELECT 单行:不 join 申请表/明细/SuppMaster/ApprovalFlow/SQE,不查字典,不写任何表。
+    /// id&lt;=0 或不存在返回 null(HTTP 200)。字典字段 pd/clfs/FBILLSTATUS/pcsq/blwtflid/FBIZTYPE 全 raw。
+    /// 流程占位 BizType/BizId/BizCode 由本方法拼装,**不查 ApprovalFlowInstance、不生成流程实例**。
+    /// qms_qcp_inspbill 无 tenant_id、FORGID 全 NULL:不做租户/组织过滤,与 list 口径一致。
+    /// </summary>
+    [DisplayName("来料检验单详情")]
+    [HttpGet("detail")]
+    public async Task<object?> GetDetail([FromQuery] long id)
+    {
+        if (id <= 0) return null;
+
+        var pars = new List<SugarParameter> { new("@id", id) };
+        var list = await _db.Ado.SqlQueryAsync<IqcInspBillDetailRow>(
+            """
+            SELECT
+                ib.id              AS Id,
+                ib.FBILLNO         AS BillNo,
+                ib.lydjbh          AS SourceBillNo,
+                ib.FBILLSTATUS     AS BillStatus,
+                ib.FBIZTYPE        AS BizTypeRaw,
+                ib.FORGID          AS OrgId,
+                ib.FCREATETIME     AS CreateTime,
+                ib.FCREATORID      AS CreateUserId,
+                ib.FMODIFYTIME     AS UpdateTime,
+                ib.FMODIFIERID     AS UpdateUserId,
+                ib.FMATERIALCFG    AS MaterialCode,
+                ib.wlmc            AS MaterialName,
+                ib.ggxh            AS Spec,
+                ib.gysmc           AS SupplierName,
+                ib.pch             AS LotNo,
+                ib.jgbh            AS InspectionSpecNo,
+                ib.jgbb            AS InspectionSpecVersion,
+                ib.jgsxrq          AS InspectionSpecEffectiveDate,
+                ib.FRINSQTY        AS ReportQty,
+                ib.jysl            AS InspectQty,
+                ib.SampleQty       AS SampleQty,
+                ib.TestQty         AS TestQty,
+                ib.dhsl            AS QualifiedQty,
+                ib.bhgsl           AS UnqualifiedQty,
+                ib.phsl            AS DestructiveQty,
+                ib.lysl            AS RetainSampleQty,
+                ib.FINSPECTORID    AS Inspector,
+                ib.jyr             AS InspectorName,
+                ib.FINSPESTARTDATE AS InspectStartDate,
+                ib.FINSPEENDDATE   AS InspectEndDate,
+                ib.pd              AS Judgement,
+                ib.clfs            AS ProcessMethod,
+                ib.UnqualifiedDescription AS UnqualifiedDescription,
+                ib.thyy            AS ReturnReason,
+                ib.blwtflid        AS DefectCategoryId,
+                ib.blwtflmc        AS DefectCategoryName,
+                ib.pcsq            AS DeviationApply,
+                ib.pcsm            AS DeviationDescription,
+                ib.leader          AS Leader,
+                ib.FAUDITORID      AS AuditorId,
+                ib.FAUDITDATE      AS AuditDate
+            FROM qms_qcp_inspbill ib
+            WHERE ib.id = @id
+            LIMIT 1
+            """,
+            pars);
+
+        var row = list.FirstOrDefault();
+        if (row == null) return null;
+
+        // 流程占位:固定 BizType、BizId=id、BizCode=FBILLNO,供后续 C'/D'/E' 批次接入 ApprovalFlow 用。本批不查/不建流程实例。
+        row.BizType = "S5_IQC_INSPBILL";
+        row.BizId = row.Id;
+        row.BizCode = row.BillNo;
+        row.FlowHint = "流程将在后续 C'/D'/E' 批次接入";
+        return row;
+    }
 }