Преглед на файлове

chore: bump version 2.4.84 / 1.0.51

- AiDOP: 订单交付、销售发货、实体映射与菜单等

- doc/migrations 与 server/sql 数据库脚本

- 配置与前后端版本号

Made-with: Cursor
Pengxy преди 3 месеца
родител
ревизия
811421c43e
променени са 35 файла, в които са добавени 2777 реда и са изтрити 166 реда
  1. 1 1
      Web/package.json
  2. 2 0
      Web/src/views/aidop/api/orderDelivery.ts
  3. 16 6
      Web/src/views/aidop/business/asnShipperForm.vue
  4. 6 45
      Web/src/views/aidop/business/orderDeliveryList.vue
  5. 0 5
      Web/src/views/aidop/business/productDesignForm.vue
  6. 20 0
      doc/migrations/2026-04-17_aidopdev_demo_item_cust.sql
  7. 162 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part1.sql
  8. 134 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part2.sql
  9. 263 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part3.sql
  10. 63 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part4a_stubs_and_wost.sql
  11. 514 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part4b_workord.sql
  12. 45 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part5_linkageplan.sql
  13. 38 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part5_view.sql
  14. 603 0
      doc/migrations/2026-04-17_aidopdev_linkage_ddl_part6_procedure.sql
  15. 65 0
      doc/migrations/_extract_linkage_ddl.mjs
  16. 1 0
      doc/migrations/_extracted_view_raw.txt
  17. 4 4
      server/Admin.NET.Application/Configuration/Database.json
  18. 3 3
      server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj
  19. 52 0
      server/Plugins/Admin.NET.Plugin.AiDOP/Infrastructure/AidopMenuLinkSync.cs
  20. 16 12
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/AsnShipperService.cs
  21. 5 0
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Dto/OrderDeliveryDto.cs
  22. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/AsnShipperDetail.cs
  23. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/AsnShipperMaster.cs
  24. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/LinkagePlan.cs
  25. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/SeOrder.cs
  26. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/SeOrderChange.cs
  27. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/SeOrderEntry.cs
  28. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/ShippingPlan.cs
  29. 0 1
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/ShippingPlanDetail.cs
  30. 31 71
      server/Plugins/Admin.NET.Plugin.AiDOP/Order/OrderDeliveryService.cs
  31. 17 3
      server/Plugins/Admin.NET.Plugin.AiDOP/SeedData/SysMenuSeedData.cs
  32. 13 8
      server/Plugins/Admin.NET.Plugin.AiDOP/WorkOrder/WorkOrderDispatchService.cs
  33. 15 0
      server/sql/aidopdev_alter_tables_utf8mb4_unicode_ci.sql
  34. 409 0
      server/sql/aidopdev_create_tables_20260417.sql
  35. 279 0
      server/sql/aidopdev_utf8mb4_0900_ai_ci_columns.tsv

+ 1 - 1
Web/package.json

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

+ 2 - 0
Web/src/views/aidop/api/orderDelivery.ts

@@ -9,6 +9,8 @@ export interface Paged<T> {
 
 export interface DeliveryRow {
 	id: number;
+	/** 销售订单头 Id(crm_seorder.Id),与 id(订单行)不同 */
+	seOrderId?: number | null;
 	billNo?: string | null;
 	moentryMono?: string | null;
 	entrySeq?: number | null;

+ 16 - 6
Web/src/views/aidop/business/asnShipperForm.vue

@@ -91,10 +91,7 @@
 				</el-table-column>
 				<el-table-column label="项次" width="80" align="center">
 					<template #default="{ row, $index }">
-						<template v-if="editingRows.has($index) && !isView">
-							<el-input-number v-model="row.line" :min="1" size="small" style="width: 100%" />
-						</template>
-						<span v-else>{{ row.line }}</span>
+						<span>{{ row.line ?? $index + 1 }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column label="订单号" width="130">
@@ -281,6 +278,13 @@ function finishEditRow(idx: number) {
 	editingRows.delete(idx);
 }
 
+/** 子表项次:只读,自 1 起递增;新增行取当前最大项次 + 1 */
+function nextLineNo(): number {
+	if (form.details.length === 0) return 1;
+	const maxLine = Math.max(0, ...form.details.map((r) => Number(r.line) || 0));
+	return maxLine + 1;
+}
+
 // ── 下拉数据 ──
 const salesOrdOptions = ref<SimpleKv[]>([]);
 const salesOrdLoading = ref(false);
@@ -335,7 +339,10 @@ async function loadDetail() {
 		form.shipDate = d.shipDate ?? null;
 		form.status = d.status ?? '';
 		form.remark = d.remark ?? '';
-		form.details = (d.details || []).map((x) => ({ ...x }));
+		form.details = (d.details || []).map((x, i) => ({
+			...x,
+			line: x.line != null && Number(x.line) > 0 ? x.line : i + 1,
+		}));
 
 		// 回填下拉选项,确保已选值显示正常
 		if (form.ordNbr) {
@@ -355,7 +362,7 @@ async function loadDetail() {
 function addRow() {
 	const newRow: AsnShipperDetailItem = {
 		recID: null,
-		line: (form.details.length || 0) + 1,
+		line: nextLineNo(),
 		qtyToShip: 0,
 	};
 	form.details.push(newRow);
@@ -364,6 +371,9 @@ function addRow() {
 
 function removeRow(idx: number) {
 	form.details.splice(idx, 1);
+	form.details.forEach((r, i) => {
+		r.line = i + 1;
+	});
 	editingRows.delete(idx);
 	const toUpdate = [...editingRows].filter((i) => i > idx);
 	toUpdate.forEach((i) => {

+ 6 - 45
Web/src/views/aidop/business/orderDeliveryList.vue

@@ -34,7 +34,6 @@
 
 		<!-- 工具栏 -->
 		<div class="toolbar">
-			<el-button type="warning" :disabled="!selectedRows.length" @click="onShippingPlan">出货计划</el-button>
 			<el-popover placement="bottom" width="200" trigger="click">
 				<template #reference>
 					<el-button text>列设置</el-button>
@@ -52,9 +51,7 @@
 			border
 			stripe
 			style="width: 100%"
-			@selection-change="onSelectionChange"
 		>
-			<el-table-column type="selection" width="44" fixed="left" />
 			<el-table-column v-if="col.customNo" prop="customNo" label="客户编码" width="120" fixed="left" show-overflow-tooltip sortable />
 			<el-table-column v-if="col.billNo" prop="billNo" label="订单号" width="160" fixed="left" show-overflow-tooltip sortable />
 			<el-table-column v-if="col.moentryMono" prop="moentryMono" label="工单编号" width="150" show-overflow-tooltip sortable />
@@ -115,11 +112,6 @@
 		<el-dialog v-model="flowVisible" title="交付跟踪" width="1200px" destroy-on-close>
 			<OrderDeliveryFlow :entry-id="flowEntryId" />
 		</el-dialog>
-
-	<!-- 出货计划表单 -->
-	<el-dialog v-model="shippingPlanVisible" title="新增出货计划" width="1100px" destroy-on-close>
-		<ShippingPlanForm mode="create" :plan-id="null" :preset-rows="shippingPlanRows" @cancel="shippingPlanVisible = false" @saved="onShippingPlanSaved" />
-	</el-dialog>
 	</AidopDemoShell>
 </template>
 
@@ -130,7 +122,6 @@ import { ElMessage } from 'element-plus';
 import AidopDemoShell from '../components/AidopDemoShell.vue';
 import SalesOrderForm from './salesOrderForm.vue';
 import OrderDeliveryFlow from './orderDeliveryFlow.vue';
-import ShippingPlanForm from './shippingPlanForm.vue';
 import { fetchDeliveryList, type DeliveryRow } from '../api/orderDelivery';
 
 const route = useRoute();
@@ -187,7 +178,6 @@ const query = reactive({
 const loading = ref(false);
 const rows = ref<DeliveryRow[]>([]);
 const total = ref(0);
-const selectedRows = ref<DeliveryRow[]>([]);
 
 function fmtDate(v?: string | null) {
 	if (!v) return '—';
@@ -199,10 +189,6 @@ function progressActive(p?: string | null): number {
 	return isNaN(n) ? 0 : n;
 }
 
-function onSelectionChange(sel: DeliveryRow[]) {
-	selectedRows.value = sel;
-}
-
 function doSearch() {
 	query.page = 1;
 	loadList();
@@ -237,42 +223,17 @@ async function loadList() {
 	}
 }
 
-// ── 出货计划 ──
-const shippingPlanVisible = ref(false);
-const shippingPlanRows = ref<DeliveryRow[]>([]);
-
-function onShippingPlan() {
-	if (!selectedRows.value.length) {
-		ElMessage.warning('请先勾选行');
-		return;
-	}
-	const invalid = selectedRows.value.filter((r) => r.recid != null);
-	if (invalid.length) {
-		ElMessage.warning('选择的订单有已出货物料,无需再新建出货计划');
-		return;
-	}
-	const billNos = new Set(selectedRows.value.map((r) => r.billNo));
-	if (billNos.size > 1) {
-		ElMessage.warning('同一次出货计划只能选择同一订单的行,请重新勾选');
-		return;
-	}
-	shippingPlanRows.value = selectedRows.value;
-	shippingPlanVisible.value = true;
-}
-
-function onShippingPlanSaved() {
-	shippingPlanVisible.value = false;
-	loadList();
-}
-
 // ── 销售订单查看 ──
 const salesOrderVisible = ref(false);
 const salesOrderId = ref<number | null>(null);
 
 function openSalesOrder(row: DeliveryRow) {
-	// seorder id 需要从 entry 关联,这里用 row.id(entry id)作为占位,
-	// 实际需后端或前端再查 seorder_id
-	salesOrderId.value = row.id as any;
+	const oid = row.seOrderId != null && row.seOrderId !== undefined ? Number(row.seOrderId) : null;
+	if (oid == null || Number.isNaN(oid) || oid === 0) {
+		ElMessage.warning('无法获取销售订单主键,请检查订单数据');
+		return;
+	}
+	salesOrderId.value = oid;
 	salesOrderVisible.value = true;
 }
 

+ 0 - 5
Web/src/views/aidop/business/productDesignForm.vue

@@ -199,11 +199,6 @@
 							/>
 						</template>
 					</el-table-column>
-					<el-table-column label="批号" width="100">
-						<template #default="{ row }">
-							<el-input v-model="row.batchNo" size="small" :disabled="isView" placeholder="批号" />
-						</template>
-					</el-table-column>
 					<el-table-column v-if="!isView" label="操作" width="150" align="center" fixed="right">
 						<template #default="{ row }">
 							<el-button link type="primary" size="small" @click="addChildBom(row)">子项</el-button>

+ 20 - 0
doc/migrations/2026-04-17_aidopdev_demo_item_cust.sql

@@ -0,0 +1,20 @@
+-- aidopdev:演示用物料 / 客户各 1 条(与后端 Database.json 中库名一致)
+-- 原因说明:若仅在其它库(如 dopdemo)插入,在 aidopdev 连接下看不到数据。
+-- 执行:mysql -h HOST -P 3306 -u USER -p aidopdev < 2026-04-17_aidopdev_demo_item_cust.sql
+
+INSERT INTO ItemMaster (
+  company_ref_id, factory_ref_id, ItemNum, Descr,
+  KeyItem, Inspect, IssuePolicy, AutoLotNums, Install, LotSerialControl, AllocateSingleLot,
+  Status, TraceDetail, IsMainMas, IsActive, IsConfirm, CreateTime, cust_supplied
+)
+SELECT
+  0, 0, 'AIDOP-DEMO-001', 'AiDOP演示物料-001',
+  0, 1, 0, 0, 0, 0, 0,
+  'A', 0, 0, 1, 1, NOW(), 0
+FROM DUAL
+WHERE NOT EXISTS (SELECT 1 FROM ItemMaster WHERE ItemNum = 'AIDOP-DEMO-001' LIMIT 1);
+
+INSERT INTO CustMaster (company_ref_id, factory_ref_id, Cust, TaxIn, IsActive, IsConfirm, CreateTime, SortName)
+SELECT 0, 0, 'AIDOP-DEMO-C1', 0, 1, 1, NOW(), 'AiDOP演示客户'
+FROM DUAL
+WHERE NOT EXISTS (SELECT 1 FROM CustMaster WHERE Cust = 'AIDOP-DEMO-C1' LIMIT 1);

+ 162 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part1.sql

@@ -0,0 +1,162 @@
+-- aidopdev 采购/工单相关表(Part1:PurOrdMaster、ScheduleResultOpMaster)
+-- 执行:mysql -h HOST -P 3306 -u USER -p aidopdev < 2026-04-17_aidopdev_linkage_ddl_part1.sql
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+DROP TABLE IF EXISTS `PurOrdMaster`;
+CREATE TABLE `PurOrdMaster` (
+  `OwnerApplication` varchar(12) NULL DEFAULT NULL,
+  `APAcct` varchar(16) NULL DEFAULT NULL,
+  `CostCtr` varchar(4) NULL DEFAULT NULL,
+  `APSubAcct` varchar(8) NULL DEFAULT NULL,
+  `Bank` varchar(2) NULL DEFAULT NULL,
+  `BillTo` varchar(10) NULL DEFAULT NULL,
+  `BlanketOrd` varchar(24) NULL DEFAULT NULL,
+  `Buyer` varchar(30) NULL DEFAULT NULL,
+  `CloseDate` datetime NULL DEFAULT NULL COMMENT '关闭日期',
+  `CommentIndex` int NOT NULL DEFAULT 0 COMMENT '备注索引',
+  `Confirming` bit(1) NOT NULL DEFAULT b'0' COMMENT '确认',
+  `Consignment` smallint NOT NULL DEFAULT 0,
+  `Contact` varchar(24) NULL DEFAULT NULL,
+  `Contract` varchar(24) NULL DEFAULT NULL,
+  `CreditTermsInt` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '信用类别Int',
+  `CreditTerms` varchar(8) NULL DEFAULT NULL,
+  `Curr` varchar(3) NULL DEFAULT NULL,
+  `CycleCode` varchar(2) NULL DEFAULT NULL,
+  `DeliverTo` varchar(4) NULL DEFAULT NULL,
+  `Disc` decimal(7, 5) NOT NULL DEFAULT 0.00000 COMMENT '折扣',
+  `Domain` varchar(24) NULL DEFAULT NULL,
+  `DueDate` datetime NULL DEFAULT NULL COMMENT '到期日',
+  `DutyType` varchar(1) NULL DEFAULT NULL,
+  `BlanketStart` datetime NULL DEFAULT NULL COMMENT '全部开始',
+  `BlanketEnd` datetime NULL DEFAULT NULL COMMENT '全体结束',
+  `ExchRate` decimal(10, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇率',
+  `ERSOption` varchar(2) NULL DEFAULT NULL,
+  `EstVal` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '估值',
+  `Sequence` int NOT NULL DEFAULT 0 COMMENT '序列',
+  `ExchRate1` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇率',
+  `ExchRate2` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇率',
+  `RateType` varchar(8) NULL DEFAULT NULL,
+  `FixedPrice` bit(1) NOT NULL DEFAULT b'0' COMMENT '固定价格',
+  `FixedRate` bit(1) NOT NULL DEFAULT b'0' COMMENT '固定等级',
+  `FOB` varchar(20) NULL DEFAULT NULL,
+  `Frt` decimal(6, 5) NOT NULL DEFAULT 0.00000 COMMENT '运费',
+  `FSMType` varchar(8) NULL DEFAULT NULL,
+  `FSTID` varchar(24) NULL DEFAULT NULL,
+  `InvoicesVia` varchar(8) NULL DEFAULT NULL,
+  `EMTPO` smallint NOT NULL DEFAULT 0,
+  `Language` varchar(2) NULL DEFAULT NULL,
+  `MaxAgingDays` int NOT NULL DEFAULT 0 COMMENT '最大过期天数',
+  `PurOrd` varchar(48) NULL DEFAULT NULL,
+  `OrdDate` datetime NULL DEFAULT NULL COMMENT '订单日期',
+  `PartialOK` bit(1) NOT NULL DEFAULT b'0' COMMENT '部分OK',
+  `AmtPrepaid` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '预付金额',
+  `LastPriceDt` datetime NULL DEFAULT NULL COMMENT '价格日期',
+  `PricingDate` datetime NULL DEFAULT NULL COMMENT '价格日期',
+  `PrintPO` bit(1) NOT NULL DEFAULT b'0' COMMENT '采购打印',
+  `Project` varchar(24) NULL DEFAULT NULL,
+  `DiscTbl` varchar(8) NULL DEFAULT NULL,
+  `PriceTbl` varchar(20) NULL DEFAULT NULL,
+  `ERSPriceListOption` int NOT NULL DEFAULT 0 COMMENT 'ERS价格清单选项',
+  `PST` bit(1) NOT NULL DEFAULT b'0' COMMENT 'PST销售税标识',
+  `PSTID` varchar(24) NULL DEFAULT NULL,
+  `Recurr` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否重复订货标识',
+  `Release` bit(1) NOT NULL DEFAULT b'0' COMMENT '发布',
+  `Rel` int NOT NULL DEFAULT 0 COMMENT 'REL',
+  `ReqBy` varchar(8) NULL DEFAULT NULL,
+  `Revision` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '修订',
+  `Remark` varchar(200) NULL DEFAULT NULL,
+  `Scheduled` bit(1) NOT NULL DEFAULT b'0' COMMENT '日程',
+  `SchedulesVia` varchar(1) NULL DEFAULT NULL,
+  `ServiceCharge` decimal(6, 5) NOT NULL DEFAULT 0.00000 COMMENT '服务费用',
+  `ShipTo` varchar(20) NULL DEFAULT NULL,
+  `ShipVia` varchar(20) NULL DEFAULT NULL,
+  `Site` varchar(24) NULL DEFAULT NULL,
+  `SecondarySOCrHold` smallint NOT NULL DEFAULT 0,
+  `PrimarySO` varchar(8) NULL DEFAULT NULL,
+  `SpecialCharge` decimal(6, 5) NOT NULL DEFAULT 0.00000 COMMENT '特殊费用',
+  `Status` varchar(2) NULL DEFAULT NULL,
+  `Taxable` bit(1) NOT NULL DEFAULT b'0' COMMENT '应交税',
+  `TaxClass` varchar(20) NULL DEFAULT NULL,
+  `TaxDate` datetime NULL DEFAULT NULL COMMENT '开税日期',
+  `TaxEnvironment` varchar(16) NULL DEFAULT NULL,
+  `Tax1` decimal(7, 5) NOT NULL DEFAULT 0.00000 COMMENT '税额',
+  `Tax2` decimal(7, 5) NOT NULL DEFAULT 0.00000 COMMENT '税额',
+  `Tax3` decimal(7, 5) NOT NULL DEFAULT 0.00000 COMMENT '税额',
+  `TaxUsage` varchar(8) NULL DEFAULT NULL,
+  `TermsofTrade` varchar(20) NULL DEFAULT NULL,
+  `TransportDays` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '交易天数',
+  `Typed` varchar(18) NULL DEFAULT NULL,
+  `Ufld1` varchar(24) NULL DEFAULT NULL,
+  `Ufld2` varchar(60) NULL DEFAULT NULL,
+  `EnteredBy` varchar(8) NULL DEFAULT NULL,
+  `Supp` varchar(20) NULL DEFAULT NULL,
+  `Transm` varchar(1) NULL DEFAULT NULL,
+  `BusinessID` bigint NOT NULL DEFAULT 0 COMMENT '业务流程ID',
+  `CreateUser` varchar(24) NULL DEFAULT NULL,
+  `UpdateUser` varchar(24) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `UpdateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `EffTime` datetime NULL DEFAULT NULL COMMENT '失效时间',
+  `IsActive` bit(1) NOT NULL DEFAULT b'0' COMMENT '有效',
+  `IsConfirm` bit(1) NOT NULL DEFAULT b'0' COMMENT '确认',
+  `RecID` int NOT NULL AUTO_INCREMENT COMMENT '自增列',
+  `Potype` varchar(8) NOT NULL,
+  `Department` varchar(8) NULL DEFAULT NULL,
+  `IsChanged` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否改变',
+  `TaxIn` bit(1) NOT NULL DEFAULT b'0' COMMENT '含税',
+  `Amt` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '金额',
+  `Usage` varchar(30) NULL DEFAULT NULL,
+  `CustAddress` varchar(200) NULL DEFAULT NULL,
+  `CustContact` varchar(50) NULL DEFAULT NULL,
+  `CustPhone` varchar(30) NULL DEFAULT NULL,
+  `SalesOrd` varchar(30) NULL DEFAULT NULL,
+  `CustPO` varchar(24) NULL DEFAULT NULL,
+  `IsPriceChanged` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否修改价格?',
+  `CustName` varchar(120) NULL DEFAULT NULL,
+  `Rev` int NOT NULL DEFAULT 0 COMMENT '版本',
+  `RoleNo` varchar(20) NULL DEFAULT NULL,
+  `InvoiceType` varchar(20) NULL DEFAULT NULL,
+  `PricingMethod` varchar(20) NULL DEFAULT NULL,
+  `ERPfld1` varchar(200) NULL DEFAULT NULL,
+  `ERPWorkOrd` varchar(255) NULL DEFAULT NULL COMMENT 'ERP工单号',
+  `WorkOrd` varchar(255) NULL DEFAULT NULL COMMENT '工单号',
+  PRIMARY KEY (`RecID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `ScheduleResultOpMaster`;
+CREATE TABLE `ScheduleResultOpMaster` (
+  `RecID` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `Domain` varchar(8) NOT NULL,
+  `WorkOrd` varchar(50) NOT NULL,
+  `WorkCtr` varchar(8) NOT NULL,
+  `Line` varchar(500) NOT NULL,
+  `ItemNum` varchar(30) NOT NULL,
+  `Op` int NOT NULL DEFAULT 0 COMMENT '工序',
+  `WorkDate` datetime NULL DEFAULT NULL COMMENT '计划日期',
+  `WorkQty` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '计划数量',
+  `StartDosage` decimal(18, 8) NOT NULL DEFAULT 0.00000000 COMMENT '开始数量',
+  `WorkDosage` decimal(18, 8) NOT NULL DEFAULT 0.00000000 COMMENT '工作数量',
+  `SetupDosage` decimal(18, 8) NOT NULL DEFAULT 0.00000000 COMMENT '准备数量',
+  `WorkSort` int NOT NULL DEFAULT 0 COMMENT '排序',
+  `SetupStartTime` datetime NULL DEFAULT NULL COMMENT '换型开始时间',
+  `SetupEndTime` datetime NULL DEFAULT NULL COMMENT '换型结束时间',
+  `WorkStartTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '开工时间',
+  `WorkEndTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '结束时间',
+  `Remark` varchar(100) NOT NULL,
+  `CreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
+  `DeviceAllocationCount` int NULL DEFAULT NULL COMMENT '使用设备数量',
+  `SetupTime` decimal(18, 8) NULL DEFAULT NULL COMMENT '准备时间',
+  `WorkActivateTime` datetime NULL DEFAULT NULL COMMENT '开工时间',
+  `InternalEquipmentCode` varchar(255) NULL DEFAULT NULL COMMENT '厂内设备编码',
+  `MoldTypeCode` varchar(255) NULL DEFAULT NULL COMMENT '模具类型编码',
+  `MoldAllocationCount` int NULL DEFAULT NULL COMMENT '使用模具数量',
+  `OpDescr` varchar(255) NULL DEFAULT NULL COMMENT '工序名称',
+  `AssignedEmployeeID` text NULL,
+  `SkillNo` varchar(255) NULL DEFAULT NULL,
+  `AssignedPersonnelCount` decimal(18, 8) NULL DEFAULT NULL COMMENT '实际分配员工数',
+  `OccupyInternalEquipmentCode` varchar(255) NULL DEFAULT NULL COMMENT '占用设备类型编码',
+  PRIMARY KEY (`RecID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 134 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part2.sql

@@ -0,0 +1,134 @@
+-- aidopdev SCM 相关表(Part2)
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+DROP TABLE IF EXISTS `scm_jhjh_jq`;
+CREATE TABLE `scm_jhjh_jq` (
+  `id` char(36) NOT NULL,
+  `glid` varchar(50) NULL DEFAULT NULL,
+  `wlbm` varchar(500) NULL DEFAULT NULL,
+  `wlms` varchar(500) NULL DEFAULT NULL,
+  `wlgg` varchar(500) NULL DEFAULT NULL,
+  `cgdd` varchar(500) NULL DEFAULT NULL,
+  `jhdsl` varchar(500) NULL DEFAULT NULL,
+  `wjhsl` varchar(500) NULL DEFAULT NULL,
+  `jhd` varchar(500) NULL DEFAULT NULL,
+  `yjjhrq` varchar(500) NULL DEFAULT NULL,
+  `jqhf` varchar(500) NULL DEFAULT NULL,
+  `type` varchar(50) NULL DEFAULT NULL,
+  `flag` int NULL DEFAULT 0 COMMENT '标识',
+  `scrq` varchar(500) NULL DEFAULT NULL,
+  `scrid` varchar(500) NULL DEFAULT NULL,
+  `scrxm` varchar(500) NULL DEFAULT NULL,
+  `gysdm` varchar(500) NULL DEFAULT NULL,
+  `gysmc` varchar(500) NULL DEFAULT NULL,
+  `hfrid` varchar(500) NULL DEFAULT NULL,
+  `hfrxm` varchar(500) NULL DEFAULT NULL,
+  `hfsj` varchar(500) NULL DEFAULT NULL,
+  `qhdj` varchar(500) NULL DEFAULT NULL,
+  `ddhh` int NULL DEFAULT NULL COMMENT '订单行号',
+  `dw` varchar(50) NULL DEFAULT NULL,
+  `bzsl` varchar(50) NULL DEFAULT NULL,
+  `ly` varchar(50) NULL DEFAULT NULL,
+  `glid1` varchar(50) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `scm_shbq`;
+CREATE TABLE `scm_shbq` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `glid` varchar(255) NULL DEFAULT NULL,
+  `sh_material_code` varchar(255) NULL DEFAULT NULL,
+  `sh_material_name` varchar(255) NULL DEFAULT NULL,
+  `sh_material_ggxh` varchar(255) NULL DEFAULT NULL,
+  `sh_delivery_quantity` decimal(10, 0) NULL DEFAULT NULL COMMENT '送货数量',
+  `sh_material_dw` varchar(255) NULL DEFAULT NULL,
+  `remarks` varchar(255) NULL DEFAULT NULL,
+  `bzsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '包装数量',
+  `order_type` varchar(255) NULL DEFAULT NULL,
+  `po_billno` varchar(255) NULL DEFAULT NULL,
+  `shdh` varchar(255) NULL DEFAULT NULL,
+  `shdhh` int NULL DEFAULT NULL COMMENT '行号',
+  `scrq` varchar(255) NULL DEFAULT NULL,
+  `scph` varchar(255) NULL DEFAULT NULL,
+  `xh` varchar(255) NULL DEFAULT NULL,
+  `gysdm` varchar(255) NULL DEFAULT NULL,
+  `gysmc` varchar(255) NULL DEFAULT NULL,
+  `po_billline` int NULL DEFAULT NULL COMMENT '订单行',
+  `bbh` varchar(255) NULL DEFAULT NULL,
+  `th` varchar(255) NULL DEFAULT NULL,
+  `yt` varchar(255) NULL DEFAULT NULL,
+  `ccrq` varchar(255) NULL DEFAULT NULL,
+  `shpc` varchar(255) NULL DEFAULT NULL,
+  `jhdbh` varchar(50) NULL DEFAULT NULL,
+  `jhdhh` varchar(50) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `scm_shd`;
+CREATE TABLE `scm_shd` (
+  `id` bigint NOT NULL COMMENT '流水号主键',
+  `sh_purchase_id` bigint NULL DEFAULT NULL COMMENT '供应商ID',
+  `sh_purchase_name` varchar(255) NULL DEFAULT NULL,
+  `sh_purchase_num` varchar(255) NULL DEFAULT NULL,
+  `sh_purchase_address` varchar(255) NULL DEFAULT NULL,
+  `sh_purchase_lxr` varchar(255) NULL DEFAULT NULL,
+  `sh_purchase_phone` varchar(255) NULL DEFAULT NULL,
+  `client` bigint NULL DEFAULT NULL COMMENT '终端标识',
+  `delivery_Address` varchar(255) NULL DEFAULT NULL,
+  `expected_consignee` varchar(255) NULL DEFAULT NULL,
+  `consignee_phone` varchar(255) NULL DEFAULT NULL,
+  `estimated_delivery_date` datetime NULL DEFAULT NULL COMMENT '送货日期',
+  `po_billno` varchar(255) NULL DEFAULT NULL,
+  `shddh` varchar(255) NULL DEFAULT NULL,
+  `jhshrq` varchar(50) NULL DEFAULT NULL,
+  `tjrid` varchar(50) NULL DEFAULT NULL,
+  `tjrxm` varchar(50) NULL DEFAULT NULL,
+  `tjrq` varchar(50) NULL DEFAULT NULL,
+  `scbq` int NULL DEFAULT 0 COMMENT '生成标签',
+  `chbg` text NULL,
+  `sfpc` int NULL DEFAULT NULL COMMENT '是否偏差',
+  `pcsm` text NULL,
+  `wlsc` varchar(500) NULL DEFAULT NULL COMMENT '物流时长',
+  `yjdhrq` varchar(500) NULL DEFAULT NULL COMMENT '预计到货日期',
+  `state` int NULL DEFAULT 0 COMMENT '状态',
+  `shzt` varchar(50) NULL DEFAULT NULL,
+  `wldh` varchar(50) NULL DEFAULT NULL,
+  `dycs` int NULL DEFAULT 0 COMMENT '打印次数',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `scm_shdzb`;
+CREATE TABLE `scm_shdzb` (
+  `id` bigint NOT NULL COMMENT '流水号主键',
+  `glid` varchar(255) NULL DEFAULT NULL,
+  `sh_material_code` varchar(255) NULL DEFAULT NULL,
+  `sh_material_name` varchar(255) NULL DEFAULT NULL,
+  `sh_material_ggxh` varchar(255) NULL DEFAULT NULL,
+  `sh_delivery_quantity` decimal(20, 6) NULL DEFAULT NULL COMMENT '送货数量',
+  `sh_material_dw` varchar(255) NULL DEFAULT NULL,
+  `remarks` varchar(255) NULL DEFAULT NULL,
+  `bzsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '包装数量',
+  `bqsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '标签数量',
+  `order_type` varchar(255) NULL DEFAULT NULL,
+  `po_bill` varchar(255) NULL DEFAULT NULL,
+  `po_billline` varchar(50) NULL DEFAULT NULL,
+  `hh` int NULL DEFAULT NULL COMMENT '行号',
+  `scrq` varchar(255) NULL DEFAULT NULL,
+  `scph` varchar(255) NULL DEFAULT NULL,
+  `th` varchar(255) NULL DEFAULT NULL,
+  `bbh` varchar(255) NULL DEFAULT NULL,
+  `djsl` decimal(20, 6) NULL DEFAULT NULL COMMENT '待交数量',
+  `ccrq` varchar(255) NULL DEFAULT NULL,
+  `cgyt` varchar(255) NULL DEFAULT NULL,
+  `jybb` text NULL,
+  `jhdbh` varchar(50) NULL DEFAULT NULL,
+  `jhdhh` varchar(50) NULL DEFAULT NULL,
+  `shpc` varchar(50) NULL DEFAULT NULL,
+  `shzt` varchar(255) NULL DEFAULT NULL COMMENT '收货状态',
+  `rksl` decimal(20, 6) NULL DEFAULT NULL COMMENT '入库数量',
+  `thsl` decimal(20, 6) NULL DEFAULT NULL COMMENT '退货数量',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 263 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part3.sql

@@ -0,0 +1,263 @@
+-- aidopdev SRM 采购相关表(Part3)
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+DROP TABLE IF EXISTS `srm_po_list`;
+CREATE TABLE `srm_po_list` (
+  `Id` bigint NOT NULL,
+  `po_id` bigint NOT NULL COMMENT 'po单id',
+  `po_billno` varchar(80) NULL DEFAULT NULL,
+  `polist_row` int NULL DEFAULT NULL COMMENT '行号',
+  `pr_id` bigint NULL DEFAULT NULL COMMENT 'pr申请单id',
+  `pr_billno` varchar(80) NULL DEFAULT NULL,
+  `po_mono` varchar(80) NULL DEFAULT NULL,
+  `pr_purchase_id` bigint NULL DEFAULT NULL COMMENT '供应商id',
+  `pr_purchase_name` varchar(80) NULL DEFAULT NULL,
+  `stock_id` bigint NULL DEFAULT NULL COMMENT '收货仓库id',
+  `stock_name` varchar(80) NULL DEFAULT NULL,
+  `icitem_id` bigint NOT NULL COMMENT '物料id',
+  `icitem_name` varchar(100) NULL DEFAULT NULL,
+  `number` varchar(80) NULL DEFAULT NULL,
+  `model` varchar(200) NULL DEFAULT NULL,
+  `deliveryconfirmstate` int NULL DEFAULT NULL COMMENT '交期确认状态',
+  `logisticsstate` int NULL DEFAULT NULL COMMENT '物流状态',
+  `qty` decimal(23, 10) NULL DEFAULT NULL COMMENT '订单数量',
+  `netprice` decimal(23, 10) NULL DEFAULT NULL COMMENT '净价',
+  `rate` decimal(23, 10) NULL DEFAULT NULL COMMENT '税率',
+  `price` decimal(23, 10) NULL DEFAULT NULL COMMENT '含税单价',
+  `total_price` decimal(23, 10) NULL DEFAULT NULL COMMENT '总价',
+  `plan_qty` decimal(23, 10) NULL DEFAULT NULL COMMENT '计划数量',
+  `unit` text NULL,
+  `state` int NULL DEFAULT NULL COMMENT '数据状态标识',
+  `rarrdate` datetime NULL DEFAULT NULL,
+  `rstate` int NULL DEFAULT NULL COMMENT '评审状态',
+  `rnumber` int NOT NULL COMMENT '评审次数',
+  `shippedqty` decimal(23, 10) NULL DEFAULT NULL COMMENT '已发货数量',
+  `rqty` decimal(23, 10) NULL DEFAULT NULL COMMENT '已收货数量',
+  `esqty` decimal(23, 10) NULL DEFAULT NULL COMMENT '已入库数量',
+  `procurement_rarr_date` datetime NULL DEFAULT NULL,
+  `rparrive_date` datetime NULL DEFAULT NULL,
+  `purchase_date` datetime NULL DEFAULT NULL,
+  `pur_affirmdate` datetime NULL DEFAULT NULL,
+  `currencytype` bigint NOT NULL COMMENT '币别',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建人id',
+  `create_by_name` varchar(50) NULL DEFAULT NULL,
+  `create_time` datetime NULL DEFAULT NULL,
+  `update_by` bigint NULL DEFAULT NULL COMMENT '修改人',
+  `update_by_name` varchar(50) NULL DEFAULT NULL,
+  `update_time` datetime NULL DEFAULT NULL,
+  `tenant_id` bigint NULL DEFAULT NULL COMMENT '企业ID',
+  `factory_id` bigint NULL DEFAULT NULL COMMENT '工厂ID',
+  `org_id` bigint NULL DEFAULT NULL COMMENT '组织ID',
+  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标识',
+  `ItemNum` varchar(80) NULL DEFAULT NULL,
+  `company_id` bigint NULL DEFAULT NULL COMMENT '公司ID',
+  `netmoney` decimal(23, 10) NULL DEFAULT NULL COMMENT '净金额',
+  `taxamount` decimal(23, 10) NULL DEFAULT NULL COMMENT '税额',
+  PRIMARY KEY (`Id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `srm_po_main`;
+CREATE TABLE `srm_po_main` (
+  `Id` bigint NOT NULL,
+  `po_billno` varchar(80) NULL DEFAULT NULL,
+  `po_purchaser` varchar(80) NULL DEFAULT NULL,
+  `po_purchaser_no` varchar(80) NULL DEFAULT NULL,
+  `po_ssend_date` datetime NULL DEFAULT NULL,
+  `po_total` decimal(23, 10) NULL DEFAULT NULL COMMENT '订单总价',
+  `po_delivery` bigint NULL DEFAULT NULL COMMENT '交货方式',
+  `po_tax_rate` decimal(23, 10) NULL DEFAULT NULL COMMENT '税率',
+  `po_express` int NULL DEFAULT NULL COMMENT '是否加急',
+  `state` int NULL DEFAULT NULL COMMENT '数据状态',
+  `po_note` text NULL,
+  `rstate` int NULL DEFAULT NULL COMMENT '评审状态',
+  `rnumber` decimal(23, 10) NULL DEFAULT NULL COMMENT '评审次数',
+  `review_rtime` datetime NULL DEFAULT NULL,
+  `po_Order_type` int NULL DEFAULT NULL COMMENT '单据类型',
+  `currency` bigint NOT NULL COMMENT '币别',
+  `bill_type` int NULL DEFAULT NULL COMMENT '金蝶单据类型值',
+  `purchasing_orgid` bigint NULL DEFAULT NULL COMMENT '采购组织id',
+  `purchasing_orgname` varchar(50) NULL DEFAULT NULL,
+  `telephone` varchar(80) NULL DEFAULT NULL,
+  `supplier_id` bigint NOT NULL COMMENT '供应商id',
+  `supplier_name` varchar(80) NULL DEFAULT NULL,
+  `supplier_no` varchar(80) NULL DEFAULT NULL,
+  `contact` varchar(80) NULL DEFAULT NULL,
+  `suppliertelephone` varchar(80) NULL DEFAULT NULL,
+  `deliveryaddress` varchar(200) NULL DEFAULT NULL,
+  `supplierdddress` varchar(200) NULL DEFAULT NULL,
+  `confirmstate` int NULL DEFAULT NULL COMMENT '确认状态',
+  `logisticsstate` int NULL DEFAULT NULL COMMENT '物流状态',
+  `financialstate` int NULL DEFAULT NULL COMMENT '财务状态',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建人id',
+  `create_by_name` varchar(50) NULL DEFAULT NULL,
+  `create_time` datetime NULL DEFAULT NULL,
+  `update_by` bigint NULL DEFAULT NULL COMMENT '修改人',
+  `update_by_name` varchar(50) NULL DEFAULT NULL,
+  `update_time` datetime NULL DEFAULT NULL,
+  `tenant_id` bigint NULL DEFAULT NULL COMMENT '企业ID',
+  `factory_id` bigint NULL DEFAULT NULL COMMENT '工厂ID',
+  `org_id` bigint NULL DEFAULT NULL COMMENT '组织ID',
+  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标识',
+  `company_id` bigint NULL DEFAULT NULL COMMENT '公司ID',
+  `supplier_type` varchar(50) NULL DEFAULT NULL COMMENT '供应类别',
+  PRIMARY KEY (`Id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `srm_polist_ds`;
+CREATE TABLE `srm_polist_ds` (
+  `Id` bigint NOT NULL COMMENT '主键',
+  `domain` varchar(8) NOT NULL,
+  `icdsid` bigint NOT NULL DEFAULT 0 COMMENT '交货计划ID',
+  `dsnum` varchar(128) NOT NULL,
+  `status` varchar(10) NOT NULL,
+  `itemnum` varchar(128) NOT NULL,
+  `um` varchar(124) NOT NULL,
+  `purgroup` varchar(50) NOT NULL,
+  `suppliercode` varchar(50) NOT NULL,
+  `supplier` varchar(50) NOT NULL,
+  `submitdate` datetime NULL DEFAULT NULL COMMENT '发布日期',
+  `requestdate` datetime NULL DEFAULT NULL COMMENT '交货日期',
+  `needdate` datetime NULL DEFAULT NULL COMMENT '需求日期',
+  `ponumber` varchar(50) NOT NULL,
+  `poline` int NOT NULL DEFAULT 0 COMMENT '采购单行号',
+  `schedqty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '需求数量',
+  `lastsentdate` datetime NULL DEFAULT NULL COMMENT '最近交货日期',
+  `lastsentqty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '最近交货数量',
+  `sentqty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '已交数量',
+  `restqty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '剩余待交数量',
+  `createuser` varchar(24) NULL DEFAULT NULL,
+  `updateuser` varchar(24) NULL DEFAULT NULL,
+  `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `updatetime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remarks` varchar(500) NOT NULL,
+  `isactive` int NOT NULL DEFAULT 1 COMMENT '是否活跃记录',
+  `returnqty` decimal(14, 5) NULL DEFAULT NULL COMMENT '退货数量',
+  PRIMARY KEY (`Id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `srm_pr_main`;
+CREATE TABLE `srm_pr_main` (
+  `Id` bigint NOT NULL,
+  `pr_billno` varchar(80) NULL DEFAULT NULL,
+  `pr_mono` varchar(80) NULL DEFAULT NULL,
+  `entity_id` int NULL DEFAULT NULL COMMENT '工单行号',
+  `pr_purchaseid` bigint NOT NULL COMMENT '供应商id',
+  `pr_purchasenumber` varchar(80) NULL DEFAULT NULL,
+  `pr_purchasename` varchar(80) NULL DEFAULT NULL,
+  `pr_purchaser` varchar(80) NULL DEFAULT NULL,
+  `pr_purchaser_num` varchar(80) NULL DEFAULT NULL,
+  `pr_rqty` decimal(23, 10) NULL DEFAULT NULL COMMENT '需求数量',
+  `pr_aqty` decimal(23, 10) NULL DEFAULT NULL COMMENT '申请数量',
+  `pr_sqty` decimal(23, 10) NULL DEFAULT NULL COMMENT '建议数量',
+  `icitem_id` bigint NOT NULL COMMENT '物料id',
+  `icitem_name` varchar(80) NULL DEFAULT NULL,
+  `pr_order_type` varchar(8) NULL DEFAULT NULL,
+  `pr_ssend_date` datetime NULL DEFAULT NULL,
+  `pr_sarrive_date` datetime NULL DEFAULT NULL,
+  `pr_bsarrive_date` datetime NULL DEFAULT NULL,
+  `pr_oarrive_date` datetime NULL DEFAULT NULL,
+  `pr_psend_date` datetime NULL DEFAULT NULL,
+  `pr_parrive_date` datetime NULL DEFAULT NULL,
+  `pr_rarrive_date` datetime NULL DEFAULT NULL,
+  `pr_rparrive_date` datetime NULL DEFAULT NULL,
+  `pr_pur_affirm_date` datetime NULL DEFAULT NULL,
+  `pr_sysprice` decimal(23, 10) NULL DEFAULT NULL COMMENT '系统价格 系统价格(含税)',
+  `pr_Orderprice` decimal(23, 10) NULL DEFAULT NULL COMMENT '订单价格 订单价格(含税)',
+  `pr_price` decimal(23, 10) NULL DEFAULT NULL COMMENT '采购净价 采购净价(不含税)',
+  `pr_rate` decimal(23, 10) NULL DEFAULT NULL COMMENT '税率',
+  `pr_unit` varchar(20) NULL DEFAULT NULL,
+  `state` int NULL DEFAULT NULL COMMENT '状态',
+  `old_apply_aqty` decimal(23, 10) NULL DEFAULT NULL COMMENT '已申请数量',
+  `pr_type` int NULL DEFAULT NULL COMMENT '申请类型',
+  `currencytype` bigint NOT NULL COMMENT '币种',
+  `secInv_ratio` decimal(23, 10) NULL DEFAULT NULL COMMENT '安全库存触发采购比例',
+  `remark` text NULL,
+  `pr_rreason` text NULL,
+  `sentry_id` bigint NULL DEFAULT NULL COMMENT '订单行id',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建人id',
+  `create_by_name` varchar(50) NULL DEFAULT NULL,
+  `create_time` datetime NULL DEFAULT NULL,
+  `update_by` bigint NULL DEFAULT NULL COMMENT '修改人',
+  `update_by_name` varchar(50) NULL DEFAULT NULL,
+  `update_time` datetime NULL DEFAULT NULL,
+  `tenant_id` bigint NOT NULL COMMENT '企业ID',
+  `factory_id` bigint NULL DEFAULT NULL COMMENT '工厂ID',
+  `org_id` bigint NULL DEFAULT NULL COMMENT '组织ID',
+  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标识',
+  `refer_pr_billno` varchar(80) NULL DEFAULT NULL,
+  `num` varchar(50) NULL DEFAULT NULL COMMENT '项次号',
+  `company_id` bigint NULL DEFAULT NULL COMMENT '公司ID',
+  `IsRequireGoods` int NOT NULL DEFAULT 0 COMMENT '采购类别',
+  `supplier_type` varchar(50) NULL DEFAULT NULL COMMENT '供应类别',
+  `SAP_pr_billno` varchar(80) NULL DEFAULT NULL,
+  `analogcalcversion` varchar(80) NULL DEFAULT NULL,
+  `voucher` bigint NOT NULL AUTO_INCREMENT COMMENT '发票号',
+  PRIMARY KEY (`voucher`),
+  KEY `IX_srm_pr_main_Id` (`Id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `srm_supplier`;
+CREATE TABLE `srm_supplier` (
+  `Id` bigint NOT NULL,
+  `supplier_no` varchar(80) NULL DEFAULT NULL,
+  `supplier_name` varchar(255) NULL DEFAULT NULL,
+  `supplier_full_name` varchar(255) NULL DEFAULT NULL,
+  `supplier_help_code` varchar(80) NULL DEFAULT NULL,
+  `supplier_short_name` varchar(255) NULL DEFAULT NULL,
+  `supplier_address` varchar(255) NULL DEFAULT NULL,
+  `state` varchar(80) NULL DEFAULT NULL,
+  `region` varchar(255) NULL DEFAULT NULL,
+  `trade` varchar(255) NULL DEFAULT NULL,
+  `contact` varchar(80) NULL DEFAULT NULL,
+  `telephone` varchar(80) NULL DEFAULT NULL,
+  `mobile` varchar(80) NULL DEFAULT NULL,
+  `fax` varchar(80) NULL DEFAULT NULL,
+  `post_code` varchar(80) NULL DEFAULT NULL,
+  `email` varchar(80) NULL DEFAULT NULL,
+  `taxid` varchar(255) NULL DEFAULT NULL,
+  `bank` varchar(255) NULL DEFAULT NULL,
+  `bank_account` varchar(80) NULL DEFAULT NULL,
+  `value_add_rate` decimal(23, 10) NULL DEFAULT NULL COMMENT '增值税率',
+  `type` varchar(80) NULL DEFAULT NULL,
+  `po_mode` varchar(80) NULL DEFAULT NULL,
+  `vmi_stock` varchar(255) NULL DEFAULT NULL,
+  `stockid_assignee` varchar(255) NULL DEFAULT NULL,
+  `branch_info` varchar(255) NULL DEFAULT NULL,
+  `regmark` varchar(255) NULL DEFAULT NULL,
+  `licence` varchar(255) NULL DEFAULT NULL,
+  `regster_date` datetime NULL DEFAULT NULL,
+  `approve_date` datetime NULL DEFAULT NULL,
+  `begin_day` datetime NULL DEFAULT NULL,
+  `end_day` datetime NULL DEFAULT NULL,
+  `supply_grade` varchar(80) NULL DEFAULT NULL,
+  `supply_type` varchar(80) NULL DEFAULT NULL,
+  `company_type` varchar(80) NULL DEFAULT NULL,
+  `auto_create_mr` bit(1) NULL DEFAULT NULL COMMENT '交货自动生成收货单据',
+  `auto_validate_Order` bit(1) NULL DEFAULT NULL COMMENT '自动确认订单',
+  `isuse_supplier_portal` bit(1) NULL DEFAULT NULL COMMENT '启用供应商门户',
+  `department` varchar(80) NULL DEFAULT NULL,
+  `employee_name` varchar(80) NULL DEFAULT NULL,
+  `employee_no` varchar(80) NULL DEFAULT NULL,
+  `currency` varchar(80) NULL DEFAULT NULL,
+  `settlement` varchar(80) NULL DEFAULT NULL,
+  `name_en` varchar(255) NULL DEFAULT NULL,
+  `addr_en` varchar(255) NULL DEFAULT NULL,
+  `country` varchar(255) NULL DEFAULT NULL,
+  `checker` varchar(80) NULL DEFAULT NULL,
+  `op_time` datetime NULL DEFAULT NULL,
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建人id',
+  `create_by_name` varchar(50) NULL DEFAULT NULL,
+  `create_time` datetime NULL DEFAULT NULL,
+  `update_by` bigint NULL DEFAULT NULL COMMENT '修改人',
+  `update_by_name` varchar(50) NULL DEFAULT NULL,
+  `update_time` datetime NULL DEFAULT NULL,
+  `tenant_id` bigint NOT NULL COMMENT '企业ID',
+  `factory_id` bigint NULL DEFAULT NULL COMMENT '工厂ID',
+  `org_id` bigint NULL DEFAULT NULL COMMENT '组织ID',
+  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标识',
+  `company_id` bigint NULL DEFAULT NULL COMMENT '公司ID',
+  PRIMARY KEY (`Id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 63 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part4a_stubs_and_wost.sql

@@ -0,0 +1,63 @@
+-- Part4a:采购收货存根表(供 vscm_cgshrk)+ WorkOrdSetupTimeRecord
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+DROP TABLE IF EXISTS `PurOrdRctDetail`;
+CREATE TABLE `PurOrdRctDetail` (
+  `Domain` varchar(8) NOT NULL,
+  `Receiver` varchar(80) NOT NULL,
+  `OrdNbr` varchar(48) NOT NULL,
+  `OrdLine` int NOT NULL,
+  `RctType` varchar(20) NOT NULL,
+  `Line` varchar(80) NULL DEFAULT NULL,
+  `QtyReceived` decimal(23, 10) NULL DEFAULT NULL,
+  `Delivery` varchar(200) NULL DEFAULT NULL,
+  `ItemNum` varchar(128) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL,
+  `QCNbr` varchar(80) NULL DEFAULT NULL,
+  `StatusByQC` varchar(80) NULL DEFAULT NULL,
+  `QCDescr` varchar(500) NULL DEFAULT NULL,
+  `RctQty` decimal(23, 10) NULL DEFAULT NULL,
+  `QtyReturn` decimal(23, 10) NULL DEFAULT NULL,
+  `LotSerial` varchar(200) NULL DEFAULT NULL,
+  PRIMARY KEY (`Domain`, `Receiver`, `OrdNbr`, `OrdLine`, `RctType`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `PurOrdRctMaster`;
+CREATE TABLE `PurOrdRctMaster` (
+  `Domain` varchar(8) NOT NULL,
+  `Receiver` varchar(80) NOT NULL,
+  `Remark` varchar(500) NULL DEFAULT NULL,
+  PRIMARY KEY (`Domain`, `Receiver`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `PurOrdDetail`;
+CREATE TABLE `PurOrdDetail` (
+  `Domain` varchar(8) NOT NULL DEFAULT '',
+  `PurOrd` varchar(48) NOT NULL DEFAULT '',
+  `Line` int NOT NULL DEFAULT 0,
+  `Req` varchar(80) NULL DEFAULT NULL,
+  `QtyOrded` decimal(23, 10) NULL DEFAULT NULL,
+  `ReceiptQty` decimal(23, 10) NULL DEFAULT NULL,
+  `RctQty` decimal(23, 10) NULL DEFAULT NULL,
+  `QtyReturned` decimal(23, 10) NULL DEFAULT NULL,
+  PRIMARY KEY (`Domain`, `PurOrd`, `Line`),
+  KEY `IX_PurOrdDetail_Req` (`Req`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+DROP TABLE IF EXISTS `WorkOrdSetupTimeRecord`;
+CREATE TABLE `WorkOrdSetupTimeRecord` (
+  `RecID` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `Domain` varchar(8) NOT NULL,
+  `WorkOrd` varchar(50) NOT NULL,
+  `ItemNum` varchar(128) NOT NULL,
+  `Op` int NOT NULL DEFAULT 0 COMMENT '工序',
+  `CreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `StartTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '开始时间',
+  `Line` varchar(120) NULL DEFAULT NULL,
+  `Qty` int NULL DEFAULT 0 COMMENT '占用设备 占用设备/人工数量',
+  `DailyPlanOrder` int NULL DEFAULT NULL COMMENT '拆分日工单的第几天',
+  PRIMARY KEY (`RecID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 514 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part4b_workord.sql

@@ -0,0 +1,514 @@
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS=0;
+DROP TABLE IF EXISTS `WorkOrdRouting`;
+DROP TABLE IF EXISTS `WorkOrdDetail`;
+DROP TABLE IF EXISTS `WorkOrdMaster`;
+DROP TABLE IF EXISTS `WorkOrdSetupTimeRecord`;
+CREATE TABLE `WorkOrdDetail`  (
+  `FrozenBOMCost` decimal(15, 8) NOT NULL DEFAULT 0.00000000 COMMENT '冻结BOM成本',
+  `FrozenBOMQty` decimal(15, 8) NOT NULL DEFAULT 0.00000000 COMMENT '冻结BOM数量',
+  `QtyBO` decimal(15, 8) NOT NULL DEFAULT 0.00000000 COMMENT '数量BO',
+  `WorkCode` text NULL,
+  `CommentIndex` int NOT NULL DEFAULT 0 COMMENT '备注索引',
+  `CoveredAmt` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '覆盖金额',
+  `AmtLastPosted` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '金额最近已过帐',
+  `Critical` bit(1) NOT NULL DEFAULT b'0' COMMENT '重要的',
+  `DeliverTo` varchar(80) NULL DEFAULT NULL,
+  `Domain` varchar(80) NOT NULL,
+  `Engineer` varchar(80) NULL DEFAULT NULL,
+  `ExchPrice` decimal(17, 7) NOT NULL DEFAULT 0.0000000 COMMENT '汇兑价格',
+  `ChargeCode` varchar(80) NULL DEFAULT NULL,
+  `MasterIndex` int NOT NULL DEFAULT 0 COMMENT '主要索引',
+  `ColumnNum` smallint NOT NULL DEFAULT 0 COMMENT '序次号',
+  `SortCode` varchar(24) NULL DEFAULT NULL,
+  `Location` varchar(80) NULL DEFAULT NULL,
+  `Site` varchar(12) NULL DEFAULT NULL,
+  `ServiceCategory` varchar(80) NULL DEFAULT NULL,
+  `FSMType` varchar(80) NULL DEFAULT NULL,
+  `InstalledBaseRef` int NOT NULL DEFAULT 0 COMMENT '导入基本参考',
+  `IssueDate` datetime NULL DEFAULT NULL COMMENT '发放日期',
+  `LineNum` int NOT NULL DEFAULT 0 COMMENT '项次',
+  `LineTotal` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '项次汇总',
+  `ListPrice` decimal(17, 7) NOT NULL DEFAULT 0.0000000 COMMENT '列表价格',
+  `FromLocation` varchar(8) NULL DEFAULT NULL,
+  `ID` varchar(24) NOT NULL DEFAULT '',
+  `Material` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料',
+  `MtlRateAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料费率收益',
+  `MtlRatePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料费率已过帐',
+  `MtlRateReVald` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料费率重估',
+  `MtlUseAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料应用收益',
+  `MtlUsePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料应用已过帐',
+  `MtlUseReVal` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料使用重估',
+  `WorkOrd` varchar(24) NULL DEFAULT NULL,
+  `Op` int NOT NULL DEFAULT 0 COMMENT '工序',
+  `ItemNum` varchar(24) NOT NULL,
+  `Dimension1` varchar(80) NOT NULL DEFAULT '',
+  `Dimension2` varchar(80) NOT NULL DEFAULT '',
+  `Price` decimal(17, 7) NOT NULL DEFAULT 0.0000000 COMMENT '价格',
+  `ProductLine` varchar(4) NULL DEFAULT NULL,
+  `Project` varchar(24) NULL DEFAULT NULL,
+  `QtyAllocated` decimal(15, 8) NOT NULL DEFAULT 0.00000000 COMMENT '已分配数量',
+  `QtytoIssue` decimal(18, 8) NOT NULL DEFAULT 0.00000000 COMMENT '发放数量',
+  `QtyIssued` decimal(18, 8) NOT NULL DEFAULT 0.00000000 COMMENT '过账数量',
+  `QtyPicked` decimal(15, 8) NOT NULL DEFAULT 0.00000000 COMMENT '备料量',
+  `QtyPosted` decimal(15, 8) NOT NULL DEFAULT 0.00000000 COMMENT '发布数量',
+  `QtyRequired` decimal(18, 8) NOT NULL DEFAULT 0.00000000 COMMENT '需求数量',
+  `QtyReturned` decimal(15, 8) NOT NULL DEFAULT 0.00000000 COMMENT '退回数量',
+  `Refs` text NULL,
+  `QtyReturnedPosted` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '数量退回已过帐',
+  `ReturnLocation` varchar(8) NULL DEFAULT NULL,
+  `InvRef` varchar(24) NULL DEFAULT NULL,
+  `ReturnLotSerial` varchar(24) NULL DEFAULT NULL,
+  `ReturnSite` varchar(8) NULL DEFAULT NULL,
+  `LoadedfromMO` bit(1) NOT NULL DEFAULT b'0' COMMENT '效率从MO',
+  `LotSerial` varchar(200) NULL DEFAULT NULL,
+  `FromSite` varchar(8) NULL DEFAULT NULL,
+  `Line` smallint NOT NULL DEFAULT 0 COMMENT '项次',
+  `SalesOrd` varchar(24) NULL DEFAULT NULL,
+  `Status` varchar(8) NULL DEFAULT NULL,
+  `UnitCost` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '单位成本',
+  `ContracType` varchar(8) NULL DEFAULT NULL,
+  `StdCost` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '标准成本',
+  `Ufld1` text NULL,
+  `Ufld2` text NULL,
+  `Yield` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '损耗',
+  `BusinessID` bigint NOT NULL DEFAULT 0 COMMENT '业务流程ID',
+  `CreateUser` varchar(24) NULL DEFAULT NULL,
+  `UpdateUser` varchar(24) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `UpdateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `EffTime` datetime NULL DEFAULT NULL COMMENT '失效时间',
+  `IsActive` bit(1) NOT NULL DEFAULT b'0' COMMENT '有效',
+  `IsConfirm` bit(1) NOT NULL DEFAULT b'0' COMMENT '确认',
+  `RecID` int NOT NULL AUTO_INCREMENT COMMENT '自增列',
+  `Typed` varchar(4) NULL DEFAULT NULL,
+  `CarID` varchar(18) NULL DEFAULT NULL,
+  `Group` varchar(4) NULL DEFAULT NULL,
+  `QtyReject` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '拒绝数量',
+  `IsChanged` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否改变',
+  `ModelItem` varchar(24) NULL DEFAULT NULL,
+  `SumSendQty` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇总发出数量',
+  `SumSendAmount` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇总发出数量',
+  `SumOutAmount` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇总产出数量',
+  `SumOutQty` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇总产出数量',
+  `IsMainMas` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否主材',
+  `UM` varchar(8) NULL DEFAULT NULL,
+  `PerAmt` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `PriceQty` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '价格数量',
+  `CoByType` varchar(20) NULL DEFAULT NULL,
+  `OptionGroup` varchar(20) NULL DEFAULT NULL,
+  `BottomSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalLaborSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomLaborSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalBurdenSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomBurdenSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalSubcontractSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomSubcontractSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalIndirectSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomIndirectSumSendAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalLaborSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomLaborSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalBurdenSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomBurdenSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalSubcontractSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomSubcontractSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `LocalIndirectSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `BottomIndirectSumOutAmount` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单物料成本计算参数',
+  `WorkOrdMasterRecID` bigint NOT NULL DEFAULT 0 COMMENT '工单流水号',
+  `ERPfld1` varchar(200) NULL DEFAULT NULL,
+  `ERPfld2` varchar(200) NULL DEFAULT NULL,
+  `BatchQty` decimal(18, 8) NULL DEFAULT NULL,
+  PRIMARY KEY (`RecID`)
+);
+
+CREATE TABLE `WorkOrdMaster`  (
+  `Acct` varchar(24) NULL DEFAULT NULL,
+  `AcctingClosed` bit(1) NOT NULL DEFAULT b'0' COMMENT '账户关闭标识',
+  `OwnerApplication` varchar(12) NULL DEFAULT NULL,
+  `Assay` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '检验',
+  `BaseID` varchar(8) NULL DEFAULT NULL,
+  `Batch` varchar(24) NULL DEFAULT NULL,
+  `BurdenCost` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '制造费用成本',
+  `BurdenCost2` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '责任成本中心',
+  `UpdateCurrentBurdenCost` bit(1) NOT NULL DEFAULT b'0' COMMENT '修改当前责任成本',
+  `BdnVar` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `BOMFormula` varchar(24) NULL DEFAULT NULL,
+  `QtyBO` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '数量BO',
+  `WorkCode` varchar(8) NULL DEFAULT NULL,
+  `CostCtr` varchar(4) NULL DEFAULT NULL,
+  `AcctingCloseDate` datetime NULL DEFAULT NULL COMMENT '账户关闭日期',
+  `Eff` datetime NULL DEFAULT NULL COMMENT '失效',
+  `CommentIndex` int NOT NULL DEFAULT 0 COMMENT '备注索引',
+  `PostedDate` datetime NULL DEFAULT NULL COMMENT '已过帐日期',
+  `Domain` varchar(8) NOT NULL,
+  `Drawing` varchar(24) NULL DEFAULT NULL,
+  `DueDate` datetime NULL DEFAULT NULL COMMENT '到期日',
+  `Engineer` varchar(8) NULL DEFAULT NULL,
+  `ExpireDate` datetime NULL DEFAULT NULL COMMENT '到期日期',
+  `FloorStockAcct` varchar(8) NULL DEFAULT NULL,
+  `FloorStockCC` varchar(4) NULL DEFAULT NULL,
+  `FloorStockSubAcct` varchar(8) NULL DEFAULT NULL,
+  `Typed` varchar(8) NULL DEFAULT NULL,
+  `CreateGLforBurdenVar` bit(1) NOT NULL DEFAULT b'0' COMMENT '工单成本计算参数',
+  `CreateGLforLaborVar` bit(1) NOT NULL DEFAULT b'0' COMMENT '工单成本计算参数',
+  `Grade` varchar(24) NULL DEFAULT NULL,
+  `IssueSite` varchar(8) NULL DEFAULT NULL,
+  `ItemLine` int NOT NULL DEFAULT 0 COMMENT '零件项次',
+  `CoByType` varchar(1) NULL DEFAULT NULL,
+  `LaborCost1` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '劳动成本',
+  `LaborCost2` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '劳动成本',
+  `UpdateCurrentLaborCost` bit(1) NOT NULL DEFAULT b'0' COMMENT '修改当前工作成本',
+  `LbrVar` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `WOLeadTime` smallint NOT NULL DEFAULT 0 COMMENT '工单开始时间',
+  `ProdLine` varchar(8) NULL DEFAULT NULL,
+  `Location` varchar(8) NULL DEFAULT NULL,
+  `ID` varchar(24) NOT NULL DEFAULT '',
+  `LotSerial` varchar(200) NULL DEFAULT NULL,
+  `PreviousID` varchar(8) NULL DEFAULT NULL,
+  `SingleLot` bit(1) NOT NULL DEFAULT b'0' COMMENT '单批',
+  `AccumulatedMixVar` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `MthdChgVar` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `MaterialCost` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '物料成本',
+  `MaterialCost1` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '物料成本',
+  `MtlVar` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `MaterialUsageVar` varchar(8) NULL DEFAULT NULL,
+  `MaterialUsageVarCC` varchar(4) NULL DEFAULT NULL,
+  `MtlUsageVarSub` varchar(8) NULL DEFAULT NULL,
+  `MaterialRateVar` varchar(8) NULL DEFAULT NULL,
+  `MaterialRateVarCC` varchar(4) NULL DEFAULT NULL,
+  `MtlRateVarSub` varchar(8) NULL DEFAULT NULL,
+  `MixYieldVar` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `WorkOrd` varchar(24) NULL DEFAULT NULL,
+  `OrdDate` datetime NULL DEFAULT NULL COMMENT '订单日期',
+  `OvheadCost1` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '额外开销',
+  `OvheadCost2` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '额外开销',
+  `ItemNum` varchar(24) NULL DEFAULT NULL,
+  `PerfDate` datetime NULL DEFAULT NULL COMMENT '执行日期',
+  `Process` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '处理状态',
+  `Project` varchar(24) NULL DEFAULT NULL,
+  `RctQty` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '收货数量',
+  `QtyCompleted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '完成量d',
+  `QtyOrded` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '订单数量',
+  `QtyReject` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '不良品数量',
+  `QtyType` varchar(1) NULL DEFAULT NULL,
+  `QueuePct` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '线边等待',
+  `RctStatus` varchar(8) NULL DEFAULT NULL,
+  `Active` bit(1) NOT NULL DEFAULT b'0' COMMENT '有效的',
+  `LastRecordDate` datetime NULL DEFAULT NULL COMMENT '最后记录日期',
+  `Refs` varchar(60) NULL DEFAULT NULL,
+  `ReleaseDate` datetime NULL DEFAULT NULL COMMENT '下达日期',
+  `Rev` varchar(60) NULL DEFAULT NULL,
+  `RejectQty` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '不良品 不良品 数量',
+  `RejectedCost` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '项目成本',
+  `Remark` text NULL,
+  `RoutingCode` varchar(24) NULL DEFAULT NULL,
+  `ReValdTotal` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `ScheduleCode` varchar(1) NULL DEFAULT NULL,
+  `NextLotSerial` varchar(24) NULL DEFAULT NULL,
+  `Site` varchar(12) NULL DEFAULT NULL,
+  `SalesJob` varchar(24) NULL DEFAULT NULL,
+  `Status` varchar(1) NULL DEFAULT NULL,
+  `WOCloseDate` datetime NULL DEFAULT NULL COMMENT '加工单号关闭日期',
+  `WOCloseUserID` varchar(8) NULL DEFAULT NULL,
+  `SubAcct` varchar(24) NULL DEFAULT NULL,
+  `SubcontractCost1` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包成本',
+  `SubcontractCost2` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包成本',
+  `SubVar` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `SubcontractUsageVar` varchar(8) NULL DEFAULT NULL,
+  `SubcontractUsageVarCC` varchar(4) NULL DEFAULT NULL,
+  `SubUsageVarSub` varchar(8) NULL DEFAULT NULL,
+  `SubcontractRateVar` varchar(8) NULL DEFAULT NULL,
+  `SubcontractRateVarCC` varchar(4) NULL DEFAULT NULL,
+  `SubRateVarSub` varchar(8) NULL DEFAULT NULL,
+  `JointTyped` varchar(1) NULL DEFAULT NULL,
+  `UnitCost` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '单位成本',
+  `Ufld1` varchar(8) NULL DEFAULT NULL,
+  `Ufld2` varchar(8) NULL DEFAULT NULL,
+  `PostVarsatSFC` bit(1) NOT NULL DEFAULT b'0' COMMENT '完成数是否包含不良',
+  `Supp` varchar(20) NULL DEFAULT NULL,
+  `WipCost` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT 'WIP成本',
+  `MixVar` varchar(8) NULL DEFAULT NULL,
+  `MixVarCC` varchar(4) NULL DEFAULT NULL,
+  `MixVarSubAcct` varchar(8) NULL DEFAULT NULL,
+  `Yield` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '损耗',
+  `BusinessID` bigint NOT NULL DEFAULT 0 COMMENT '业务流程ID',
+  `CreateUser` varchar(24) NULL DEFAULT NULL,
+  `UpdateUser` varchar(24) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `UpdateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `EffTime` datetime NULL DEFAULT NULL COMMENT '失效时间',
+  `IsActive` bit(1) NOT NULL DEFAULT b'0' COMMENT '有效',
+  `IsConfirm` bit(1) NOT NULL DEFAULT b'0' COMMENT '确认',
+  `RecID` int NOT NULL AUTO_INCREMENT COMMENT '自增列',
+  `ProcessType` varchar(16) NULL DEFAULT NULL,
+  `WoTyped` varchar(24) NULL DEFAULT NULL,
+  `Dimension1` varchar(8) NOT NULL DEFAULT '',
+  `Dimension2` varchar(8) NOT NULL DEFAULT '',
+  `Period` smallint NOT NULL DEFAULT 0 COMMENT '班次',
+  `Priority` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '优先级',
+  `LastIssueTime` datetime NULL DEFAULT NULL COMMENT '上次报工时间',
+  `WagesWay` varchar(8) NULL DEFAULT NULL,
+  `ModelItem` varchar(24) NULL DEFAULT NULL,
+  `Department` varchar(20) NULL DEFAULT NULL,
+  `QtyOpened` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '未结数量',
+  `KPISet` decimal(8, 3) NOT NULL DEFAULT 0.000 COMMENT 'KPI设定值',
+  `CommissionOrdNbr` varchar(30) NULL DEFAULT NULL,
+  `IsInitial` varchar(8) NULL DEFAULT NULL,
+  `isreceiver` varchar(8) NULL DEFAULT NULL,
+  `AnalogCalcVersion` varchar(80) NULL DEFAULT NULL,
+  `ERPfld1` varchar(200) NULL DEFAULT NULL,
+  `ERPfld2` varchar(200) NULL DEFAULT NULL,
+  `QtySterilize` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '灭菌数量',
+  `QtyReservation` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '留样数量',
+  `fj1` text NULL,
+  `TypeId` int NULL DEFAULT NULL COMMENT '类型ID',
+  `ebrStatus` text NULL,
+  `ebrStartTime` datetime NULL DEFAULT NULL COMMENT '生化开始时间',
+  `ebrEndTime` datetime NULL DEFAULT NULL COMMENT '生化完成时间',
+  `DispatchWeek` varchar(255) NULL DEFAULT NULL COMMENT '下达周次',
+  `ItemName` text NULL,
+  `AuthorSign` text NULL,
+  `AuthorDate` datetime NULL DEFAULT NULL COMMENT '编制人审批时间',
+  `Author` varchar(255) NULL DEFAULT '' COMMENT '编制人姓名',
+  `CheckSign` text NULL,
+  `CheckDate` datetime NULL DEFAULT NULL COMMENT '审批人审批时间',
+  `Check` varchar(255) NULL DEFAULT '' COMMENT '审批人姓名',
+  `ApproveSign` text NULL,
+  `ApproveDate` datetime NULL DEFAULT NULL COMMENT '批准人审批时间',
+  `Approve` varchar(255) NULL DEFAULT '' COMMENT '批准人姓名',
+  `QtyMarket` decimal(12, 5) NULL DEFAULT 0.00000 COMMENT '可销售数量',
+  `QtySample` decimal(12, 5) NULL DEFAULT NULL COMMENT '留样数量',
+  `QtyWastage` decimal(12, 5) NULL DEFAULT NULL COMMENT '消耗数量',
+  `FlowStatus` varchar(10) NULL DEFAULT NULL,
+  `IsRead` bit(1) NULL DEFAULT NULL COMMENT '是否需要打二维码',
+  `IpqcStatus` varchar(10) NULL DEFAULT NULL,
+  `ReadUser` varchar(255) NULL DEFAULT NULL,
+  `ChangeStatus` int NULL DEFAULT NULL,
+  `LocationStock` decimal(18, 8) NULL DEFAULT NULL COMMENT '在库齐套数量',
+  `InProdcutQty` decimal(18, 8) NULL DEFAULT NULL COMMENT '在制数量',
+  `OpQtyCompleted` decimal(18, 8) NULL DEFAULT NULL COMMENT '工序完成数',
+  `QualityQty` decimal(18, 8) NULL DEFAULT NULL COMMENT '在库 在库+在检齐套数量',
+  `TransitQty` decimal(18, 8) NULL DEFAULT NULL COMMENT '在库 在库+在检+在途齐套数量',
+  `PromiseQty` decimal(18, 8) NULL DEFAULT NULL COMMENT '在库 在库+在检+在途+承诺齐套数量',
+  `Urgent` int NOT NULL DEFAULT 0 COMMENT '加急',
+  `PriorityNo` text NULL,
+  `CustNo` varchar(255) NULL DEFAULT NULL COMMENT '客户编号',
+  `Class` decimal(18, 8) NULL DEFAULT NULL COMMENT '客户优先级',
+  `Ipqc` decimal(8, 3) NULL DEFAULT NULL,
+  `ItemModel` varchar(255) NULL DEFAULT NULL COMMENT '规格型号',
+  PRIMARY KEY (`RecID`)
+);
+
+CREATE TABLE `WorkOrdRouting`  (
+  `Descr` text NULL,
+  `ServiceCategory` varchar(50) NULL DEFAULT NULL,
+  `StdOp` varchar(20) NULL DEFAULT NULL,
+  `Start` varchar(10) NULL DEFAULT NULL,
+  `Status` varchar(1) NULL DEFAULT NULL,
+  `CommentIndex` int NOT NULL DEFAULT 0 COMMENT '是否换包',
+  `BdnRateAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `QtyPosted` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '发布数量',
+  `ActRunTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际运行时间',
+  `ActSetupTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际准备时间',
+  `AutoLaborRpt` bit(1) NOT NULL DEFAULT b'0' COMMENT '自动报工标识',
+  `BurdenAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `BurdenLLAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `TotalBurden` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '总负荷',
+  `LbrBdn` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `LbrBdnRate` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `BurdenStd` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '标准成本',
+  `Burden` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '制造费用',
+  `BdnRatePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `BdnRateReVald` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `BdnUsageAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `BdnUsePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `BdnUseReVald` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `WorkCode` varchar(200) NULL DEFAULT NULL,
+  `CoveredAmt` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '加工系数',
+  `AmtPosted` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '过账金额',
+  `Curr` varchar(3) NULL DEFAULT NULL,
+  `Domain` varchar(8) NOT NULL,
+  `DueDate` datetime NULL DEFAULT NULL COMMENT '到期日',
+  `EndDate` datetime NULL DEFAULT NULL COMMENT '综止日期',
+  `Engineer` text NULL,
+  `ExpenseFlag` bit(1) NOT NULL DEFAULT b'0' COMMENT '开销标识',
+  `StdBurdenCost` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '标准载荷费用',
+  `ChargeCode` text NULL,
+  `WrouteIndex` int NOT NULL DEFAULT 0 COMMENT '工单成本计算参数',
+  `ColumnNum` smallint NOT NULL DEFAULT 0 COMMENT '序次号',
+  `SortCode` varchar(24) NULL DEFAULT NULL,
+  `StdCost1` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '标准成本',
+  `StdCost2` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '标准成本',
+  `FSMType` varchar(8) NULL DEFAULT NULL,
+  `ItemLineNum` int NOT NULL DEFAULT 0 COMMENT '零件项次',
+  `LaborAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际工时',
+  `LaborLLAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `TotalLabor` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '总人工数',
+  `LaborOverhead` decimal(10, 5) NOT NULL DEFAULT 0.00000 COMMENT '人工开销',
+  `LaborRate` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '人工费率',
+  `LaborStd` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '劳动标准',
+  `Labor` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '人工',
+  `ListPrice` decimal(17, 7) NOT NULL DEFAULT 0.0000000 COMMENT '列表价格',
+  `ID` varchar(24) NOT NULL DEFAULT '',
+  `LbrRateAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `LbrRatePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `LbrRateReVald` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `LbrUseAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `LbrUsagePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `LbrUseReVald` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `Machine` text NULL,
+  `MachBdnRate` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `MachinesperOp` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '每工序机器数',
+  `RunCrew` decimal(10, 5) NOT NULL DEFAULT 0.00000 COMMENT '操作人数',
+  `MilestoneOp` bit(1) NOT NULL DEFAULT b'0' COMMENT '关键工序',
+  `StdMoveTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '标准移动时间',
+  `MtlAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `MtlLLAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `Material1` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料',
+  `Material2` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料',
+  `MoveNextOp` bit(1) NOT NULL DEFAULT b'0' COMMENT '转移到下一工序',
+  `WorkOrd` varchar(24) NOT NULL,
+  `OP` int NOT NULL DEFAULT 0 COMMENT '工序',
+  `OvhAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `OvhLLAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `Overhead1` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '额外开销',
+  `Overhead2` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '额外开销',
+  `ItemNum` varchar(24) NULL DEFAULT NULL,
+  `RunTime` decimal(23, 10) NULL DEFAULT 0.0000000000 COMMENT '运行时间',
+  `PurOrd` varchar(8) NULL DEFAULT NULL,
+  `Price` decimal(17, 7) NOT NULL DEFAULT 0.0000000 COMMENT '价格',
+  `ProductLine` varchar(4) NULL DEFAULT NULL,
+  `Project` varchar(24) NULL DEFAULT NULL,
+  `QtyComplete` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '完成数量',
+  `CumMovedOut` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `CumOutAdjust` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `CumOutScrap` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `CumProcessed` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `CumRjctAdjust` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `CumRejected` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '不良数量',
+  `CumRjctScrap` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `CumReworked` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '返工数量',
+  `InQueue` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '队列',
+  `BeginInQueue` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '开始进队列',
+  `QtyMoved` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '移动数量',
+  `QtyOrded` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '订单数量',
+  `OutQueue` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '出队列',
+  `BeginOutQueue` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '开始出队列',
+  `RjctQueue` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '不良队列数量',
+  `BeginRjctQueue` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `QtyReject` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '不良数量',
+  `QtyRework` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '返工数量',
+  `QtyWIP` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '数量在制品',
+  `QueueTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '排队时间',
+  `StdRunTime` decimal(14, 7) NOT NULL DEFAULT 0.0000000 COMMENT '标准运行时间',
+  `SetupBdnUsagePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '已报准备时间',
+  `StdSetupTime` decimal(14, 7) NOT NULL DEFAULT 0.0000000 COMMENT '标准准备时间',
+  `SetupCrew` decimal(10, 5) NOT NULL DEFAULT 0.00000 COMMENT '准备人数',
+  `SetupRate` decimal(11, 5) NOT NULL DEFAULT 0.00000 COMMENT '准备费率',
+  `SetupLbrUsagePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '已报准备人工时间',
+  `StartDate` datetime NULL DEFAULT NULL COMMENT '开始日期',
+  `SubcontractAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包账号',
+  `SubQtyComp` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包完成量',
+  `SubcontractCost` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包成本',
+  `SubcontractLT` int NOT NULL DEFAULT 0 COMMENT '外包提前期',
+  `SubcontractLLAct` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `Subcontract1` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '项目合同',
+  `SubcontractStd` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包标准',
+  `Subcontract2` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '项目合同',
+  `SubRateAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包累积费率',
+  `SubRatePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `SubRateReVald` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `SubUseAccrued` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `SubUsagePosted` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `SubUseReVald` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `ContractType` varchar(8) NULL DEFAULT NULL,
+  `ToolCode` text NULL,
+  `OverlapUnits` int NOT NULL DEFAULT 0 COMMENT '平行加工件数',
+  `UM` varchar(8) NULL DEFAULT NULL,
+  `UnprocessedHours` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `Ufld1` varchar(8) NULL DEFAULT NULL,
+  `Ufld2` varchar(8) NULL DEFAULT NULL,
+  `Supp` varchar(20) NULL DEFAULT NULL,
+  `WaitTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '等待时间',
+  `WIPItem` varchar(24) NULL DEFAULT NULL,
+  `WorkCtr` varchar(8) NULL DEFAULT NULL,
+  `Yield` decimal(8, 5) NOT NULL DEFAULT 0.00000 COMMENT '损耗',
+  `BusinessID` bigint NOT NULL DEFAULT 0 COMMENT '业务流程ID',
+  `CreateUser` varchar(24) NULL DEFAULT NULL,
+  `UpdateUser` varchar(24) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `UpdateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `EffTime` datetime NULL DEFAULT NULL COMMENT '失效时间',
+  `IsActive` bit(1) NOT NULL DEFAULT b'0' COMMENT '有效',
+  `IsConfirm` bit(1) NOT NULL DEFAULT b'0' COMMENT '确认',
+  `RecID` int NOT NULL AUTO_INCREMENT COMMENT '自增列',
+  `Priority` int NOT NULL DEFAULT 0 COMMENT '优先级',
+  `Setup` decimal(18, 5) NULL DEFAULT 0.00000 COMMENT '准备时间',
+  `Early` datetime NULL DEFAULT NULL COMMENT '早期',
+  `Last` datetime NULL DEFAULT NULL COMMENT '最后',
+  `SetupStart` datetime NULL DEFAULT NULL COMMENT '准备开始',
+  `SetupEnd` datetime NULL DEFAULT NULL COMMENT '准备结束',
+  `RunStart` datetime NULL DEFAULT NULL COMMENT '运行开始',
+  `RunEnd` datetime NULL DEFAULT NULL COMMENT '运行结束',
+  `NextOp1` int NOT NULL DEFAULT 0 COMMENT '下个工序',
+  `LastOp1` int NOT NULL DEFAULT 0 COMMENT '最后工序',
+  `AlterOp` int NOT NULL DEFAULT 0 COMMENT '替代序',
+  `IsArranged` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否安排?',
+  `ProdLine` varchar(8) NULL DEFAULT NULL,
+  `ActRestTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际休息时间',
+  `ActStopTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际停线时间',
+  `ActScrapTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际无效时间',
+  `ActReworkTime` decimal(9, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际返工时间',
+  `CumScrap` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '报废数量',
+  `ActDownTime` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '实际下线时间',
+  `CumRjctComp` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `Dimension1` varchar(8) NOT NULL DEFAULT '',
+  `Dimension2` varchar(8) NOT NULL DEFAULT '',
+  `ScrapeStd` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '报废标准',
+  `WagesWay` varchar(8) NULL DEFAULT NULL,
+  `QtyScrap` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '报废数量',
+  `ModelItem` varchar(24) NULL DEFAULT NULL,
+  `PerAmt` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '工单成本计算参数',
+  `InvVal` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '发票值',
+  `CommissionOrdNbr` varchar(30) NULL DEFAULT NULL,
+  `WorkOp` varchar(10) NULL DEFAULT NULL,
+  `IsUseTurnoverBox` bit(1) NOT NULL DEFAULT b'0' COMMENT '使用周转箱标识',
+  `IsAllowBatchScan` bit(1) NOT NULL DEFAULT b'0' COMMENT '批量扫描',
+  `IsReplaceSingleBarCode` bit(1) NOT NULL DEFAULT b'0' COMMENT '换签标识',
+  `IsFirstOpScan` bit(1) NOT NULL DEFAULT b'0' COMMENT '首序扫描标识',
+  `IsNeedAssistOp` bit(1) NOT NULL DEFAULT b'0' COMMENT '需要辅线序标识',
+  `IsPaintingOp` bit(1) NOT NULL DEFAULT b'0' COMMENT '喷涂标识',
+  `Remark` varchar(500) NULL DEFAULT NULL,
+  `NetWeight` decimal(18, 8) NOT NULL DEFAULT 0.00000000 COMMENT '净重',
+  `IsBOMQtyProcess` bit(1) NOT NULL DEFAULT b'0' COMMENT '按BOM标识',
+  `PackingQty` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '包装数量',
+  `IsUseKanban` bit(1) NOT NULL DEFAULT b'0' COMMENT '使用看板标识',
+  `IsCheckOp` bit(1) NOT NULL DEFAULT b'0' COMMENT '检验标识',
+  `IsJYOp` bit(1) NOT NULL DEFAULT b'0' COMMENT '精益工序标识',
+  `ParentOp` int NOT NULL DEFAULT 0 COMMENT '父级工序',
+  `WorkOrdMasterRecID` bigint NOT NULL DEFAULT 0 COMMENT '工单流水号',
+  `ERPfld1` varchar(200) NULL DEFAULT NULL,
+  `ERPfld2` varchar(200) NULL DEFAULT NULL,
+  `ProcessOut` int NOT NULL DEFAULT 0 COMMENT '工序委外',
+  `ProcessOutDay` decimal(12, 5) NULL DEFAULT 0.00000 COMMENT '工序委外日期',
+  `ProcessOutSupp` varchar(48) NULL DEFAULT NULL,
+  `Ufld3` varchar(200) NULL DEFAULT NULL,
+  `Line` varchar(200) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`RecID`)
+);
+
+CREATE TABLE `WorkOrdSetupTimeRecord`  (
+  `RecID` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `Domain` varchar(8) NOT NULL,
+  `WorkOrd` varchar(50) NOT NULL,
+  `ItemNum` varchar(128) NOT NULL,
+  `Op` int NOT NULL DEFAULT 0 COMMENT '工序',
+  `CreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `StartTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '开始时间',
+  `Line` varchar(120) NULL DEFAULT NULL,
+  `Qty` int NULL DEFAULT 0 COMMENT '占用设备 占用设备/人工数量',
+  `DailyPlanOrder` int NULL DEFAULT NULL COMMENT '拆分日工单的第几天',
+  PRIMARY KEY (`RecID`)
+);
+SET FOREIGN_KEY_CHECKS=1;

+ 45 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part5_linkageplan.sql

@@ -0,0 +1,45 @@
+-- 计划联动看板(与 Admin.NET.Plugin.AiDOP Order/Entity/LinkagePlan.cs 及 pr_Mes_LinkagePlan 一致)
+SET NAMES utf8mb4;
+
+DROP TABLE IF EXISTS `LinkagePlan`;
+CREATE TABLE `LinkagePlan` (
+  `id` bigint NOT NULL,
+  `bill_no` varchar(64) NULL DEFAULT NULL,
+  `custom_no` varchar(64) NULL DEFAULT NULL,
+  `order_type` varchar(32) NULL DEFAULT NULL,
+  `item_number` varchar(64) NULL DEFAULT NULL,
+  `Descr` varchar(256) NULL DEFAULT NULL,
+  `Descr1` varchar(256) NULL DEFAULT NULL,
+  `ItemType` varchar(64) NULL DEFAULT NULL,
+  `qty` decimal(18, 6) NULL DEFAULT NULL,
+  `update_time` datetime NULL DEFAULT NULL,
+  `sys_capacity_date` datetime NULL DEFAULT NULL,
+  `type` varchar(32) NULL DEFAULT NULL,
+  `bomstart` varchar(80) NULL DEFAULT NULL,
+  `bomend` varchar(80) NULL DEFAULT NULL,
+  `linestart` varchar(80) NULL DEFAULT NULL,
+  `lineend` varchar(80) NULL DEFAULT NULL,
+  `productstart` varchar(80) NULL DEFAULT NULL,
+  `productend` varchar(80) NULL DEFAULT NULL,
+  `needtime` varchar(80) NULL DEFAULT NULL,
+  `sys_material_date` varchar(80) NULL DEFAULT NULL,
+  `cgneedtime` varchar(80) NULL DEFAULT NULL,
+  `cgend` varchar(80) NULL DEFAULT NULL,
+  `blstart` varchar(80) NULL DEFAULT NULL,
+  `blend` varchar(80) NULL DEFAULT NULL,
+  `starttime` varchar(80) NULL DEFAULT NULL,
+  `endtime` varchar(80) NULL DEFAULT NULL,
+  `ipqcjystart` varchar(80) NULL DEFAULT NULL,
+  `ipqcjyend` varchar(80) NULL DEFAULT NULL,
+  `fqcjystart` varchar(80) NULL DEFAULT NULL,
+  `fqcjyend` varchar(80) NULL DEFAULT NULL,
+  `rkstart` varchar(80) NULL DEFAULT NULL,
+  `rkend` varchar(80) NULL DEFAULT NULL,
+  `fystarttime` varchar(80) NULL DEFAULT NULL,
+  `fyendtime` varchar(80) NULL DEFAULT NULL,
+  `levelnum` int NULL DEFAULT NULL,
+  `background` varchar(512) NULL DEFAULT NULL,
+  `isuse` int NULL DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `IX_LinkagePlan_type` (`type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

+ 38 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part5_view.sql

@@ -0,0 +1,38 @@
+SET NAMES utf8mb4;
+DROP VIEW IF EXISTS `vscm_cgshrk`;
+CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `vscm_cgshrk` AS
+SELECT
+  `d`.`Receiver` AS `Receiver`,
+  `d`.`Line` AS `Line`,
+  `d`.`QtyReceived` AS `QtyReceived`,
+  `m`.`PurOrd` AS `OrdNbr`,
+  `m`.`Line` AS `OrdLine`,
+  `d`.`Delivery` AS `Delivery`,
+  `d`.`ItemNum` AS `ItemNum`,
+  `d`.`CreateTime` AS `CreateTime`,
+  `d`.`QCNbr` AS `QCNbr`,
+  `d`.`StatusByQC` AS `StatusByQC`,
+  `d`.`QCDescr` AS `QCDescr`,
+  `d`.`RctQty` AS `RctQty`,
+  `d`.`QtyReturn` AS `QtyReturn`,
+  `m`.`QtyOrded` AS `QtyOrded`,
+  IF((`m`.`ReceiptQty` >= `m`.`RctQty`), `m`.`ReceiptQty`, `m`.`RctQty`) AS `ReceiptQty`,
+  `m`.`RctQty` AS `yssl`,
+  `m`.`QtyReturned` AS `QtyReturned`,
+  `d`.`LotSerial` AS `LotSerial`
+FROM (
+  (`PurOrdDetail` `m`
+  LEFT JOIN `PurOrdRctDetail` `d`
+    ON (
+      (`d`.`Domain` = `m`.`Domain`)
+      AND (`d`.`OrdNbr` = `m`.`PurOrd`)
+      AND (`d`.`OrdLine` = `m`.`Line`)
+      AND (`d`.`RctType` = 'temp')
+    )
+  )
+  LEFT JOIN `PurOrdRctMaster` `p`
+    ON (
+      (`d`.`Domain` = `p`.`Domain`)
+      AND (`d`.`Receiver` = `p`.`Receiver`)
+    )
+);

+ 603 - 0
doc/migrations/2026-04-17_aidopdev_linkage_ddl_part6_procedure.sql

@@ -0,0 +1,603 @@
+DELIMITER //
+DROP PROCEDURE IF EXISTS `pr_Mes_LinkagePlan`//
+CREATE PROCEDURE `pr_Mes_LinkagePlan`(IN Params VARCHAR(1000))
+BEGIN
+    DECLARE RowCnt INT DEFAULT 0;
+    
+    -- 清空表
+    DELETE FROM LinkagePlan;
+    
+    -- 第一部分:插入计划数据和实际数据
+    INSERT INTO LinkagePlan(
+        id, bill_no, custom_no, order_type, item_number, Descr, Descr1, ItemType, 
+        qty, update_time, sys_capacity_date, bomstart, bomend, linestart, lineend, 
+        productstart, productend, needtime, sys_material_date, cgneedtime, cgend, 
+        blstart, blend, starttime, endtime, ipqcjystart, ipqcjyend, fqcjystart, 
+        fqcjyend, rkstart, rkend, fystarttime, fyendtime, `type`, levelnum, isuse
+    )
+    SELECT * FROM (
+        -- 计划数据查询
+        SELECT 
+            b.id,
+            a.bill_no,
+            a.custom_no,
+            IF(a.order_type='1', '销售', '计划') as order_type,
+            b.item_number,
+            c.Descr,
+            c.Descr1,
+            c.ownerapplication as ItemType,
+            b.qty,
+            h.create_time as update_time,
+            b.sys_capacity_date,
+            h.create_time as bomstart,
+            DATE_ADD(h.create_time, INTERVAL IFNULL(c.BOMDesignTime, 0) DAY) as bomend,
+            DATE_ADD(h.create_time, INTERVAL IFNULL(c.BOMDesignTime, 0) DAY) as linestart,
+            DATE_ADD(h.create_time, INTERVAL (IFNULL(c.BOMDesignTime, 0) + IFNULL(c.RoutingDesignTime, 0)) DAY) as lineend,
+            DATE_ADD(h.create_time, INTERVAL (IFNULL(c.BOMDesignTime, 0) + IFNULL(c.RoutingDesignTime, 0)) DAY) as productstart,
+            DATE_ADD(h.create_time, INTERVAL (IFNULL(c.BOMDesignTime, 0) + IFNULL(c.RoutingDesignTime, 0) + 
+                CEILING(IFNULL(((b.qty-1)*d.maxruntime+d.runtime)/8, 0))) DAY) as productend,
+            h.create_time as needtime,
+            b.sys_material_date,
+            h.create_time as cgneedtime,
+            e.kitting_time as cgend,
+            e.kitting_time as blstart,
+            DATE_ADD(e.kitting_time, INTERVAL IFNULL(c.mfgmttr, 0) DAY) as blend,
+            g.starttime,
+            g.endtime,
+            g.endtime as ipqcjystart,
+            DATE_ADD(g.endtime, INTERVAL IFNULL(c.InsLT, 0) DAY) as ipqcjyend,
+            g.endtime as fqcjystart,
+            DATE_ADD(g.endtime, INTERVAL IFNULL(c.InsLT, 0) DAY) as fqcjyend,
+            DATE_ADD(g.endtime, INTERVAL IFNULL(c.InsLT, 0) DAY) as rkstart,
+            DATE_ADD(g.endtime, INTERVAL (IFNULL(c.InsLT, 0) + 1) DAY) as rkend,
+            DATE_ADD(g.endtime, INTERVAL (IFNULL(c.InsLT, 0) + 1) DAY) as fystarttime,
+            DATE_ADD(g.endtime, INTERVAL (IFNULL(c.InsLT, 0) + 2) DAY) as fyendtime,
+            '计划' as `type`,
+            2 as levelnum,
+            0 as isuse
+        FROM crm_seorder a
+        LEFT JOIN crm_seorderentry b ON a.bill_no = b.bill_no
+        LEFT JOIN ItemMaster c ON b.item_number = c.ItemNum
+        LEFT JOIN (
+            SELECT RoutingCode, SUM(runtime) as runtime, MAX(runtime) as maxruntime 
+            FROM RoutingOpDetail 
+            GROUP BY RoutingCode
+        ) d ON c.ItemNum = d.RoutingCode
+        LEFT JOIN (
+            SELECT sentry_id, MAX(kitting_time) as kitting_time 
+            FROM (
+                SELECT 
+                    a.sentry_id,
+                    b.kitting_time,
+                    ROW_NUMBER() OVER (PARTITION BY a.sentry_id ORDER BY a.create_time DESC) AS rn
+                FROM b_examine_result a
+                JOIN b_bom_child_examine b ON a.id = b.examine_id 
+                WHERE a.sorderid IS NOT NULL AND b.erp_cls IN ('2','3')
+            ) ex 
+            WHERE rn = 1  
+            GROUP BY sentry_id
+        ) e ON b.id = e.sentry_id
+        LEFT JOIN mes_moentry f ON b.id = f.soentry_id
+        LEFT JOIN mes_morder h ON f.moentry_mono = h.morder_no AND h.parent_id IS NULL
+        LEFT JOIN (
+            SELECT workords, MIN(plandate) as starttime, MAX(plandate) as endtime 
+            FROM PeriodSequenceDet 
+            GROUP BY workords
+        ) g ON f.moentry_mono = g.workords
+        WHERE a.IsDeleted = 0 AND h.create_time IS NOT NULL
+        
+        UNION ALL
+        
+        -- 实际数据查询
+        SELECT 
+            b.id,
+            a.bill_no,
+            a.custom_no,
+            IF(a.order_type='1', '销售', '计划') as order_type,
+            b.item_number,
+            c.Descr,
+            c.Descr1,
+            c.ownerapplication as ItemType,
+            b.qty,
+            h.create_time as update_time,
+            b.sys_capacity_date,
+            h.create_time as bomstart,
+            nb.CreateTime as bomend,
+            h.create_time as linestart,
+            nb.CreateTime as lineend,
+            d.starttime as productstart,
+            d.endtime as productend,
+            h.create_time as needtime,
+            b.sys_material_date,
+            e.cgneedtime as cgneedtime,
+            e.kitting_time as cgend,
+            nb.CreateTime as blstart,
+            nd.blend as blend,
+            g.starttime,
+            g.endtime,
+            e.FAPPLYTIME as ipqcjystart,
+            e.FINSPESTARTDATE as ipqcjyend,
+            g.endtime as fqcjystart,
+            fqc.fqcDate as fqcjyend,
+            i.starttime as rkstart,
+            i.endtime as rkend,
+            asn.starttime as fystarttime,
+            asn.endtime as fyendtime,
+            '实际' as `type`,
+            1 as levelnum,
+            0 as isuse
+        FROM crm_seorder a
+        LEFT JOIN crm_seorderentry b ON a.bill_no = b.bill_no
+        LEFT JOIN ItemMaster c ON b.item_number = c.ItemNum
+        LEFT JOIN (
+            SELECT 
+                pr.sentry_id,
+                MAX(sh.createtime) as kitting_time,
+                MIN(jq.jqhf) as cgneedtime,
+                MIN(iqcjy.FINSPESTARTDATE) as FINSPESTARTDATE,
+                MAX(iqcjy.FAPPLYTIME) as FAPPLYTIME 
+            FROM srm_pr_main pr
+            LEFT JOIN PurOrdDetail pod ON pr.pr_billno = pod.Req
+            LEFT JOIN vscm_cgshrk sh ON pod.PurOrd = sh.OrdNbr AND pod.Line = sh.OrdLine
+            LEFT JOIN scm_jhjh_jq jq ON pod.PurOrd = jq.cgdd AND pod.Line = jq.ddhh
+            LEFT JOIN (
+                SELECT 
+                    f.po_bill,
+                    f.po_billline,
+                    MIN(a.FINSPESTARTDATE) as FINSPESTARTDATE,
+                    MAX(b.FAPPLYTIME) as FAPPLYTIME  
+                FROM qms_qcp_inspbill a
+                LEFT JOIN qms_qcp_inspecapplyn b ON a.lydjbh = b.FBILLNO
+                LEFT JOIN qms_qcp_insappnentry c ON b.id = c.glid
+                JOIN scm_shd cd ON c.shdh = cd.shddh
+                LEFT JOIN scm_shdzb f ON f.shpc = c.FLOTNUMBER 
+                    AND f.sh_material_code = c.FMATERIALCFG  
+                    AND f.glid = cd.id 
+                GROUP BY f.po_bill, f.po_billline
+            ) iqcjy ON pod.PurOrd = iqcjy.po_bill AND pod.Line = iqcjy.po_billline  
+            WHERE jq.flag = '1' AND pr.sentry_id IS NOT NULL 
+            GROUP BY pr.sentry_id
+        ) e ON e.sentry_id = b.id
+        LEFT JOIN mes_moentry f ON b.id = f.soentry_id
+        LEFT JOIN mes_morder h ON f.moentry_mono = h.morder_no AND h.parent_id IS NULL
+        LEFT JOIN (
+            SELECT workords, MIN(plandate) as starttime, MAX(plandate) as endtime 
+            FROM PeriodSequenceDet 
+            GROUP BY workords
+        ) d ON h.morder_no = d.workords
+        LEFT JOIN (
+            SELECT WorkOrd, MIN(CreateTime) as CreateTime 
+            FROM NbrMaster 
+            WHERE Type = 'SM' 
+            GROUP BY WorkOrd
+        ) nb ON h.morder_no = nb.WorkOrd
+        LEFT JOIN (
+            SELECT WorkOrd, MIN(UpdateTime) as blend 
+            FROM NbrDetail 
+            GROUP BY WorkOrd
+        ) nd ON h.morder_no = nd.WorkOrd
+        LEFT JOIN (
+            SELECT workords, MIN(plandate) as starttime, MAX(plandate) as endtime 
+            FROM PeriodSequenceDet 
+            WHERE CompQty > 0 
+            GROUP BY workords
+        ) g ON f.moentry_mono = g.workords
+        LEFT JOIN (
+            SELECT WorkOrd, MIN(CreateTime) as starttime, MAX(CreateTime) as endtime 
+            FROM InvTransHist 
+            WHERE TransType = 'rct-wo' AND QtyChange > 0 
+            GROUP BY WorkOrd
+        ) i ON h.morder_no = i.WorkOrd
+        LEFT JOIN (
+            SELECT 
+                ad.OrdNbr,
+                ad.ContainerItem,
+                ad.OrdLine,
+                MIN(ad.CreateTime) as starttime,
+                MAX(ad.UpdateTime) as endtime 
+            FROM ASNBOLShipperDetail ad 
+            INNER JOIN ASNBOLShipperMaster am ON ad.ASNBOLShipperRecID = am.RecID 
+            WHERE am.shtype = 'SH' AND am.typed <> 'S' 
+            GROUP BY ad.OrdNbr, ad.ContainerItem, ad.OrdLine
+        ) asn ON b.bill_no = asn.OrdNbr AND b.item_number = asn.ContainerItem
+        LEFT JOIN WorkOrdMaster wm ON h.morder_no = wm.WorkOrd
+        LEFT JOIN (
+            SELECT sczld, MAX(FINSPEENDDATE) as fqcDate 
+            FROM qms_qcpp_inspbill 
+            GROUP BY sczld
+        ) fqc ON wm.Batch = fqc.sczld
+        WHERE a.IsDeleted = 0 AND h.create_time IS NOT NULL
+    ) as viewall;
+    
+    -- 第二部分:插入偏差数据
+    INSERT INTO LinkagePlan(
+        id, bill_no, custom_no, order_type, item_number, Descr, Descr1, ItemType, 
+        qty, update_time, sys_capacity_date, bomstart, bomend, linestart, lineend, 
+        productstart, productend, needtime, sys_material_date, cgneedtime, cgend, 
+        blstart, blend, starttime, endtime, ipqcjystart, ipqcjyend, fqcjystart, 
+        fqcjyend, rkstart, rkend, fystarttime, fyendtime, `type`, levelnum, isuse
+    )
+    SELECT 
+        a.id,
+        a.bill_no,
+        a.custom_no,
+        a.order_type,
+        b.item_number,
+        a.Descr,
+        a.Descr1,
+        a.ItemType,
+        b.qty,
+        a.update_time,
+        b.sys_capacity_date,
+        DATEDIFF(b.bomstart, a.bomstart) as bomstart,
+        DATEDIFF(b.bomend, a.bomend) as bomend,
+        DATEDIFF(b.linestart, a.linestart) as linestart,
+        DATEDIFF(b.lineend, a.lineend) as lineend,
+        DATEDIFF(b.productstart, a.productstart) as productstart,
+        DATEDIFF(b.productend, a.productend) as productend,
+        DATEDIFF(b.needtime, a.needtime) as needtime,
+        DATEDIFF(b.sys_material_date, a.sys_material_date) as sys_material_date,
+        DATEDIFF(b.cgneedtime, a.cgneedtime) as cgneedtime,
+        DATEDIFF(b.cgend, a.cgend) as cgend,
+        DATEDIFF(b.blstart, a.blstart) as blstart,
+        DATEDIFF(b.blend, a.blend) as blend,
+        DATEDIFF(b.starttime, a.starttime) as starttime,
+        DATEDIFF(b.endtime, a.endtime) as endtime,
+        DATEDIFF(b.ipqcjystart, a.ipqcjystart) as ipqcjystart,
+        DATEDIFF(b.ipqcjyend, a.ipqcjyend) as ipqcjyend,
+        DATEDIFF(b.fqcjystart, a.fqcjystart) as fqcjystart,
+        DATEDIFF(b.fqcjyend, a.fqcjyend) as fqcjyend,
+        DATEDIFF(b.rkstart, a.rkstart) as rkstart,
+        DATEDIFF(b.rkend, a.rkend) as rkend,
+        DATEDIFF(b.fystarttime, a.fystarttime) as fystarttime,
+        DATEDIFF(b.fyendtime, a.fyendtime) as fyendtime,
+        '偏差' as `type`,
+        0 as levelnum,
+        0 as isuse
+    FROM (SELECT * FROM LinkagePlan WHERE `type` = '计划') a
+    LEFT JOIN (SELECT * FROM LinkagePlan WHERE `type` = '实际') b ON a.id = b.id;
+    
+    -- 统计行数
+    SELECT COUNT(*) INTO RowCnt FROM LinkagePlan WHERE isuse = 1;
+    
+    -- 第三部分:更新背景色标记
+    UPDATE LinkagePlan a
+    LEFT JOIN (
+        SELECT 
+            a.id,
+            a.`type`,
+            CONCAT(
+                -- bomstart背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.bomstart IS NOT NULL AND b.bomstart IS NULL AND DATEDIFF(NOW(), a.bomstart) > 7 THEN 'bomstart:red;'
+                            WHEN a.bomstart IS NOT NULL AND b.bomstart IS NULL AND DATEDIFF(NOW(), a.bomstart) > 0 THEN 'bomstart:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.bomstart AS SIGNED), 0) > 7 THEN 'bomstart:red;'
+                            WHEN IFNULL(CAST(a.bomstart AS SIGNED), 0) > 0 THEN 'bomstart:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- bomend背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.bomend IS NOT NULL AND b.bomend IS NULL AND DATEDIFF(NOW(), a.bomend) > 7 THEN 'bomend:red;'
+                            WHEN a.bomend IS NOT NULL AND b.bomend IS NULL AND DATEDIFF(NOW(), a.bomend) > 0 THEN 'bomend:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.bomend AS SIGNED), 0) > 7 THEN 'bomend:red;'
+                            WHEN IFNULL(CAST(a.bomend AS SIGNED), 0) > 0 THEN 'bomend:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- linestart背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.linestart IS NOT NULL AND b.linestart IS NULL AND DATEDIFF(NOW(), a.linestart) > 7 THEN 'linestart:red;'
+                            WHEN a.linestart IS NOT NULL AND b.linestart IS NULL AND DATEDIFF(NOW(), a.linestart) > 0 THEN 'linestart:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.linestart AS SIGNED), 0) > 7 THEN 'linestart:red;'
+                            WHEN IFNULL(CAST(a.linestart AS SIGNED), 0) > 0 THEN 'linestart:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- lineend背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.lineend IS NOT NULL AND b.lineend IS NULL AND DATEDIFF(NOW(), a.lineend) > 7 THEN 'lineend:red;'
+                            WHEN a.lineend IS NOT NULL AND b.lineend IS NULL AND DATEDIFF(NOW(), a.lineend) > 0 THEN 'lineend:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.lineend AS SIGNED), 0) > 7 THEN 'lineend:red;'
+                            WHEN IFNULL(CAST(a.lineend AS SIGNED), 0) > 0 THEN 'lineend:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- productstart背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.productstart IS NOT NULL AND b.productstart IS NULL AND DATEDIFF(NOW(), a.productstart) > 7 THEN 'productstart:red;'
+                            WHEN a.productstart IS NOT NULL AND b.productstart IS NULL AND DATEDIFF(NOW(), a.productstart) > 0 THEN 'productstart:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.productstart AS SIGNED), 0) > 7 THEN 'productstart:red;'
+                            WHEN IFNULL(CAST(a.productstart AS SIGNED), 0) > 0 THEN 'productstart:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- productend背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.productend IS NOT NULL AND b.productend IS NULL AND DATEDIFF(NOW(), a.productend) > 7 THEN 'productend:red;'
+                            WHEN a.productend IS NOT NULL AND b.productend IS NULL AND DATEDIFF(NOW(), a.productend) > 0 THEN 'productend:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.productend AS SIGNED), 0) > 7 THEN 'productend:red;'
+                            WHEN IFNULL(CAST(a.productend AS SIGNED), 0) > 0 THEN 'productend:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- needtime, sys_material_date, cgneedtime, cgend背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.needtime IS NOT NULL AND b.needtime IS NULL AND DATEDIFF(NOW(), a.needtime) > 7 THEN 'needtime:red;'
+                            WHEN a.needtime IS NOT NULL AND b.needtime IS NULL AND DATEDIFF(NOW(), a.needtime) > 0 THEN 'needtime:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.needtime AS SIGNED), 0) > 7 THEN 'needtime:red;'
+                            WHEN IFNULL(CAST(a.needtime AS SIGNED), 0) > 0 THEN 'needtime:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.sys_material_date IS NOT NULL AND b.sys_material_date IS NULL AND DATEDIFF(NOW(), a.sys_material_date) > 7 THEN 'sys_material_date:red;'
+                            WHEN a.sys_material_date IS NOT NULL AND b.sys_material_date IS NULL AND DATEDIFF(NOW(), a.sys_material_date) > 0 THEN 'sys_material_date:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.sys_material_date AS SIGNED), 0) > 7 THEN 'sys_material_date:red;'
+                            WHEN IFNULL(CAST(a.sys_material_date AS SIGNED), 0) > 0 THEN 'sys_material_date:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.cgneedtime IS NOT NULL AND b.cgneedtime IS NULL AND DATEDIFF(NOW(), a.cgneedtime) > 7 THEN 'cgneedtime:red;'
+                            WHEN a.cgneedtime IS NOT NULL AND b.cgneedtime IS NULL AND DATEDIFF(NOW(), a.cgneedtime) > 0 THEN 'cgneedtime:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.cgneedtime AS SIGNED), 0) > 7 THEN 'cgneedtime:red;'
+                            WHEN IFNULL(CAST(a.cgneedtime AS SIGNED), 0) > 0 THEN 'cgneedtime:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.cgend IS NOT NULL AND b.cgend IS NULL AND DATEDIFF(NOW(), a.cgend) > 7 THEN 'cgend:red;'
+                            WHEN a.cgend IS NOT NULL AND b.cgend IS NULL AND DATEDIFF(NOW(), a.cgend) > 0 THEN 'cgend:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.cgend AS SIGNED), 0) > 7 THEN 'cgend:red;'
+                            WHEN IFNULL(CAST(a.cgend AS SIGNED), 0) > 0 THEN 'cgend:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- blstart, starttime, endtime背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.blstart IS NOT NULL AND b.blstart IS NULL AND DATEDIFF(NOW(), a.blstart) > 7 THEN 'blstart:red;'
+                            WHEN a.blstart IS NOT NULL AND b.blstart IS NULL AND DATEDIFF(NOW(), a.blstart) > 0 THEN 'blstart:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.blstart AS SIGNED), 0) > 7 THEN 'blstart:red;'
+                            WHEN IFNULL(CAST(a.blstart AS SIGNED), 0) > 0 THEN 'blstart:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.starttime IS NOT NULL AND b.starttime IS NULL AND DATEDIFF(NOW(), a.starttime) > 7 THEN 'starttime:red;'
+                            WHEN a.starttime IS NOT NULL AND b.starttime IS NULL AND DATEDIFF(NOW(), a.starttime) > 0 THEN 'starttime:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.starttime AS SIGNED), 0) > 7 THEN 'starttime:red;'
+                            WHEN IFNULL(CAST(a.starttime AS SIGNED), 0) > 0 THEN 'starttime:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.endtime IS NOT NULL AND b.endtime IS NULL AND DATEDIFF(NOW(), a.endtime) > 7 THEN 'endtime:red;'
+                            WHEN a.endtime IS NOT NULL AND b.endtime IS NULL AND DATEDIFF(NOW(), a.endtime) > 0 THEN 'endtime:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.endtime AS SIGNED), 0) > 7 THEN 'endtime:red;'
+                            WHEN IFNULL(CAST(a.endtime AS SIGNED), 0) > 0 THEN 'endtime:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- ipqcjystart, ipqcjyend, fqcjystart, fqcjyend背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.ipqcjystart IS NOT NULL AND b.ipqcjystart IS NULL AND DATEDIFF(NOW(), a.ipqcjystart) > 7 THEN 'ipqcjystart:red;'
+                            WHEN a.ipqcjystart IS NOT NULL AND b.ipqcjystart IS NULL AND DATEDIFF(NOW(), a.ipqcjystart) > 0 THEN 'ipqcjystart:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.ipqcjystart AS SIGNED), 0) > 7 THEN 'ipqcjystart:red;'
+                            WHEN IFNULL(CAST(a.ipqcjystart AS SIGNED), 0) > 0 THEN 'ipqcjystart:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.ipqcjyend IS NOT NULL AND b.ipqcjyend IS NULL AND DATEDIFF(NOW(), a.ipqcjyend) > 7 THEN 'ipqcjyend:red;'
+                            WHEN a.ipqcjyend IS NOT NULL AND b.ipqcjyend IS NULL AND DATEDIFF(NOW(), a.ipqcjyend) > 0 THEN 'ipqcjyend:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.ipqcjyend AS SIGNED), 0) > 7 THEN 'ipqcjyend:red;'
+                            WHEN IFNULL(CAST(a.ipqcjyend AS SIGNED), 0) > 0 THEN 'ipqcjyend:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.fqcjystart IS NOT NULL AND b.fqcjystart IS NULL AND DATEDIFF(NOW(), a.fqcjystart) > 7 THEN 'fqcjystart:red;'
+                            WHEN a.fqcjystart IS NOT NULL AND b.fqcjystart IS NULL AND DATEDIFF(NOW(), a.fqcjystart) > 0 THEN 'fqcjystart:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.fqcjystart AS SIGNED), 0) > 7 THEN 'fqcjystart:red;'
+                            WHEN IFNULL(CAST(a.fqcjystart AS SIGNED), 0) > 0 THEN 'fqcjystart:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.fqcjyend IS NOT NULL AND b.fqcjyend IS NULL AND DATEDIFF(NOW(), a.fqcjyend) > 7 THEN 'fqcjyend:red;'
+                            WHEN a.fqcjyend IS NOT NULL AND b.fqcjyend IS NULL AND DATEDIFF(NOW(), a.fqcjyend) > 0 THEN 'fqcjyend:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.fqcjyend AS SIGNED), 0) > 7 THEN 'fqcjyend:red;'
+                            WHEN IFNULL(CAST(a.fqcjyend AS SIGNED), 0) > 0 THEN 'fqcjyend:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                -- rkstart, rkend, fystarttime, fyendtime背景色
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.rkstart IS NOT NULL AND b.rkstart IS NULL AND DATEDIFF(NOW(), a.rkstart) > 7 THEN 'rkstart:red;'
+                            WHEN a.rkstart IS NOT NULL AND b.rkstart IS NULL AND DATEDIFF(NOW(), a.rkstart) > 0 THEN 'rkstart:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.rkstart AS SIGNED), 0) > 7 THEN 'rkstart:red;'
+                            WHEN IFNULL(CAST(a.rkstart AS SIGNED), 0) > 0 THEN 'rkstart:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.rkend IS NOT NULL AND b.rkend IS NULL AND DATEDIFF(NOW(), a.rkend) > 7 THEN 'rkend:red;'
+                            WHEN a.rkend IS NOT NULL AND b.rkend IS NULL AND DATEDIFF(NOW(), a.rkend) > 0 THEN 'rkend:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.rkend AS SIGNED), 0) > 7 THEN 'rkend:red;'
+                            WHEN IFNULL(CAST(a.rkend AS SIGNED), 0) > 0 THEN 'rkend:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.fystarttime IS NOT NULL AND b.fystarttime IS NULL AND DATEDIFF(NOW(), a.fystarttime) > 7 THEN 'fystarttime:red;'
+                            WHEN a.fystarttime IS NOT NULL AND b.fystarttime IS NULL AND DATEDIFF(NOW(), a.fystarttime) > 0 THEN 'fystarttime:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.fystarttime AS SIGNED), 0) > 7 THEN 'fystarttime:red;'
+                            WHEN IFNULL(CAST(a.fystarttime AS SIGNED), 0) > 0 THEN 'fystarttime:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END,
+                CASE
+                    WHEN a.`type` = '计划' THEN 
+                        CASE 
+                            WHEN a.fyendtime IS NOT NULL AND b.fyendtime IS NULL AND DATEDIFF(NOW(), a.fyendtime) > 7 THEN 'fyendtime:red;'
+                            WHEN a.fyendtime IS NOT NULL AND b.fyendtime IS NULL AND DATEDIFF(NOW(), a.fyendtime) > 0 THEN 'fyendtime:yellow;'
+                            ELSE ''
+                        END
+                    WHEN a.`type` = '偏差' THEN 
+                        CASE 
+                            WHEN IFNULL(CAST(a.fyendtime AS SIGNED), 0) > 7 THEN 'fyendtime:red;'
+                            WHEN IFNULL(CAST(a.fyendtime AS SIGNED), 0) > 0 THEN 'fyendtime:yellow;'
+                            ELSE ''
+                        END
+                    ELSE ''
+                END
+            ) AS background
+        FROM LinkagePlan a 
+        LEFT JOIN (SELECT * FROM LinkagePlan WHERE `type` = '实际') b ON a.id = b.id
+        LEFT JOIN (SELECT * FROM LinkagePlan WHERE `type` = '偏差') c ON a.id = c.id
+    ) AS bg ON a.id = bg.id AND a.`type` = bg.`type`
+    SET a.background = bg.background;
+
+END//
+DELIMITER ;

+ 65 - 0
doc/migrations/_extract_linkage_ddl.mjs

@@ -0,0 +1,65 @@
+import fs from "fs";
+
+const transcriptPath =
+  "C:/Users/15850/.cursor/projects/d-DEMONET/agent-transcripts/b932712b-5542-4604-92f5-cfdf726de39a/b932712b-5542-4604-92f5-cfdf726de39a.jsonl";
+const base = "d:/DEMONET/doc/migrations/";
+const raw = fs.readFileSync(transcriptPath, "utf8");
+const line = raw.split(/\r?\n/).find((l) => l.startsWith('{"role":"user"') && l.includes("WorkOrdDetail"));
+if (!line) {
+  console.error("transcript line not found");
+  process.exit(1);
+}
+const o = JSON.parse(line);
+let c = o.message.content[0].text;
+c = c.replace(/^<user_query>\n/, "").replace(/\n<\/user_query>$/, "");
+
+const i1 = c.indexOf("CREATE TABLE `aidopdev`.`WorkOrdDetail`");
+const i2 = c.indexOf("CREATE PROCEDURE `aidopdev`.`pr_Mes_LinkagePlan`");
+if (i1 < 0 || i2 < 0) {
+  console.error("markers", i1, i2);
+  process.exit(1);
+}
+let workordSql = c.slice(i1, i2).trim();
+const rest = c.slice(i2).trim();
+const iv = rest.indexOf("CREATE ALGORITHM");
+const procSql = iv > 0 ? rest.slice(0, iv).trim() : rest;
+const viewSql = iv > 0 ? rest.slice(iv).trim() : "";
+
+workordSql = workordSql.replace(/`aidopdev`\./g, "");
+
+function addPkToTable(sql, tableName) {
+  const marker = `CREATE TABLE \`${tableName}\``;
+  const start = sql.indexOf(marker);
+  if (start < 0) return sql;
+  const nextCreate = sql.indexOf("CREATE TABLE `", start + marker.length);
+  const end = nextCreate < 0 ? sql.length : nextCreate;
+  let block = sql.slice(start, end);
+  if (block.includes("PRIMARY KEY")) return sql;
+  const closeIdx = block.lastIndexOf("\n);");
+  if (closeIdx < 0) return sql;
+  block = block.slice(0, closeIdx) + ",\n  PRIMARY KEY (`RecID`)" + block.slice(closeIdx);
+  return sql.slice(0, start) + block + sql.slice(end);
+}
+
+for (const t of ["WorkOrdDetail", "WorkOrdMaster", "WorkOrdRouting", "WorkOrdSetupTimeRecord"]) {
+  workordSql = addPkToTable(workordSql, t);
+}
+
+const part4b =
+  `SET NAMES utf8mb4;\n` +
+  `SET FOREIGN_KEY_CHECKS=0;\n` +
+  `DROP TABLE IF EXISTS \`WorkOrdRouting\`;\n` +
+  `DROP TABLE IF EXISTS \`WorkOrdDetail\`;\n` +
+  `DROP TABLE IF EXISTS \`WorkOrdMaster\`;\n` +
+  `DROP TABLE IF EXISTS \`WorkOrdSetupTimeRecord\`;\n` +
+  workordSql +
+  `\nSET FOREIGN_KEY_CHECKS=1;\n`;
+
+fs.writeFileSync(base + "2026-04-17_aidopdev_linkage_ddl_part4b_workord.sql", part4b, "utf8");
+
+const procBody = procSql.replace(/\s*;\s*$/, "");
+const procFile = `DELIMITER //\nDROP PROCEDURE IF EXISTS \`pr_Mes_LinkagePlan\`//\n${procBody}//\nDELIMITER ;\n`;
+fs.writeFileSync(base + "2026-04-17_aidopdev_linkage_ddl_part6_procedure.sql", procFile, "utf8");
+fs.writeFileSync(base + "_extracted_view_raw.txt", viewSql, "utf8");
+
+console.log("ok workord", workordSql.length, "proc", procSql.length);

+ 1 - 0
doc/migrations/_extracted_view_raw.txt

@@ -0,0 +1 @@
+CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `aidopdev`.`vscm_cgshrk` AS select `d`.`Receiver` AS `Receiver`,`d`.`Line` AS `Line`,`d`.`QtyReceived` AS `QtyReceived`,`m`.`PurOrd` AS `OrdNbr`,`m`.`Line` AS `OrdLine`,`d`.`Delivery` AS `Delivery`,`d`.`ItemNum` AS `ItemNum`,`d`.`CreateTime` AS `CreateTime`,`d`.`QCNbr` AS `QCNbr`,`d`.`StatusByQC` AS `StatusByQC`,`d`.`QCDescr` AS `QCDescr`,`d`.`RctQty` AS `RctQty`,`d`.`QtyReturn` AS `QtyReturn`,`m`.`QtyOrded` AS `QtyOrded`,if((`m`.`ReceiptQty` >= `m`.`RctQty`),`m`.`ReceiptQty`,`m`.`RctQty`) AS `ReceiptQty`,`m`.`RctQty` AS `yssl`,`m`.`QtyReturned` AS `QtyReturned`,`d`.`LotSerial` AS `LotSerial` from ((`PurOrdDetail` `m` left join `PurOrdRctDetail` `d` on(((`d`.`Domain` = `m`.`Domain`) and (`d`.`OrdNbr` = `m`.`PurOrd`) and (`d`.`OrdLine` = `m`.`Line`) and (`d`.`RctType` = 'temp')))) left join `PurOrdRctMaster` `p` on(((`d`.`Domain` = `p`.`Domain`) and (`d`.`Receiver` = `p`.`Receiver`))));

+ 4 - 4
server/Admin.NET.Application/Configuration/Database.json

@@ -31,18 +31,18 @@
         //	}
         //],
         "DbSettings": {
-          "EnableInitDb": false, // 启用库初始化(若实体没有变化建议关闭
-          "EnableInitView": false, // 启用视图初始化(远端受限账号建议关闭
+          "EnableInitDb": true, // 启用库初始化(无库时自动建库;稳定后可改 false
+          "EnableInitView": true, // 启用视图初始化(账号无 CREATE VIEW 权限时请改 false
           "EnableDiffLog": false, // 启用库表差异日志
           "EnableUnderLine": false, // 启用驼峰转下划线
           "EnableConnEncrypt": false // 启用数据库连接串加密(国密SM2加解密)
         },
         "TableSettings": {
-          "EnableInitTable": false, // 关闭:远端库含遗留表已有主键,CodeFirst 会 ADD PRIMARY KEY 报错导致启动失败;需迁表时再临时打开
+          "EnableInitTable": true, // 启用表结构 CodeFirst 初始化/增量对齐
           "EnableIncreTable": false // 启用表增量更新(只更新贴了特性[IncreTable]的实体表)
         },
         "SeedSettings": {
-          "EnableInitSeed": false, // 启用种子初始化(若种子没有变化建议关闭
+          "EnableInitSeed": false, // 启用种子初始化(需要初始化字典/菜单数据时改 true
           "EnableIncreSeed": false // 启用种子增量更新(只更新贴了特性[IncreSeed]的种子表)
         }
       }

+ 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.50</AssemblyVersion>
-    <FileVersion>1.0.50</FileVersion>
-    <Version>1.0.50</Version>
+    <AssemblyVersion>1.0.51</AssemblyVersion>
+    <FileVersion>1.0.51</FileVersion>
+    <Version>1.0.51</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 52 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Infrastructure/AidopMenuLinkSync.cs

@@ -23,6 +23,7 @@ public static class AidopMenuLinkSync
         var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>();
         NormalizeMaterialSubstitutionMenu(db);
         NormalizeS1OrderWorkOrderParents(db);
+        EnsureLinkagePlanMenu(db);
         RemoveDeprecatedS8DashboardChildMenu(db);
         NormalizeS8MenuParents(db);
         var seedMenus = new global::Admin.NET.Plugin.AiDOP.SysMenuSeedData().HasData().ToList();
@@ -107,6 +108,57 @@ public static class AidopMenuLinkSync
             db.Insertable(roleRows).ExecuteCommand();
     }
 
+    /// <summary>
+    /// 计划联动看板(Id=1322000000107):<c>Database.json</c> 常关闭 <c>EnableIncreSeed</c>,种子不会入库,故在启动时补插/纠偏。
+    /// 父级为产销协同看板目录 1322000000005。
+    /// </summary>
+    private static void EnsureLinkagePlanMenu(ISqlSugarClient db)
+    {
+        const long menuId = 1322000000107L;
+        const long salesKanBanDirId = 1322000000005L;
+        if (!db.Queryable<SysMenu>().Any(m => m.Id == salesKanBanDirId))
+            return;
+
+        var ct = DateTime.Parse("2022-02-10 00:00:00");
+        if (!db.Queryable<SysMenu>().Any(m => m.Id == menuId))
+        {
+            db.Insertable(new SysMenu
+            {
+                Id = menuId,
+                Pid = salesKanBanDirId,
+                Title = "计划联动看板",
+                Path = "/aidop/s1/SalesKanBan/linkage-plan",
+                Name = "aidopS1LinkagePlan",
+                Component = "/aidop/business/linkagePlanList",
+                Icon = "ele-DataBoard",
+                Type = MenuTypeEnum.Menu,
+                CreateTime = ct,
+                OrderNo = 30,
+                Status = StatusEnum.Enable,
+                Remark = "S1 计划联动看板(LinkagePlan)"
+            }).ExecuteCommand();
+            return;
+        }
+
+        var row = db.Queryable<SysMenu>().First(m => m.Id == menuId);
+        if (row.Pid != salesKanBanDirId
+            || row.Path != "/aidop/s1/SalesKanBan/linkage-plan"
+            || row.Component != "/aidop/business/linkagePlanList")
+        {
+            row.Pid = salesKanBanDirId;
+            row.Path = "/aidop/s1/SalesKanBan/linkage-plan";
+            row.Name = "aidopS1LinkagePlan";
+            row.Component = "/aidop/business/linkagePlanList";
+            row.Title = "计划联动看板";
+            row.Icon = "ele-DataBoard";
+            row.OrderNo = 30;
+            row.Type = MenuTypeEnum.Menu;
+            db.Updateable(row)
+                .UpdateColumns(m => new { m.Pid, m.Path, m.Name, m.Component, m.Title, m.Icon, m.OrderNo, m.Type })
+                .ExecuteCommand();
+        }
+    }
+
     private static void NormalizeMaterialSubstitutionMenu(ISqlSugarClient db)
     {
         var deprecatedMenuId = DeprecatedMaterialSubstitutionMenuId;

+ 16 - 12
server/Plugins/Admin.NET.Plugin.AiDOP/Order/AsnShipperService.cs

@@ -102,7 +102,14 @@ public class AsnShipperService : IDynamicApiController, ITransient
         var master = await _masterRep.GetFirstAsync(u => u.RecID == id)
                      ?? throw Oops.Oh("发货单不存在");
 
+        // 主键关联:ASNBOLShipperDetail.ASNBOLShipperRecID = 主表 RecID
         var details = await _detailRep.GetListAsync(u => u.AsnShipperRecID == id);
+        // 兼容历史数据:若外键未写入或曾用错误方式取 RecID,则按业务单号 Id + 销售单号 OrdNbr 兜底
+        if (details.Count == 0 && !string.IsNullOrWhiteSpace(master.Id) && !string.IsNullOrWhiteSpace(master.OrdNbr))
+        {
+            details = await _detailRep.GetListAsync(u =>
+                u.Id == master.Id && u.OrdNbr == master.OrdNbr);
+        }
 
         return new
         {
@@ -164,11 +171,8 @@ public class AsnShipperService : IDynamicApiController, ITransient
                 CreateUser = user,
                 CreateTime = now,
             };
-            await _masterRep.InsertAsync(entity);
-
-            var newId = await _db.Ado.GetIntAsync(
-                "SELECT MAX(RecID) FROM ASNBOLShipperMaster WHERE CreateTime2 = @ct AND CreateUser = @cu",
-                new { ct = now, cu = user });
+            var inserted = await _masterRep.AsInsertable(entity).ExecuteReturnEntityAsync();
+            var newId = inserted.RecID;
 
             await SaveDetailsAsync(newId, input.Id ?? string.Empty, input.Details, user, now, isNew: true);
             return new { id = newId, message = "新增成功" };
@@ -300,20 +304,20 @@ public class AsnShipperService : IDynamicApiController, ITransient
     public async Task<object> GetSalesOrdOptions([FromQuery] string? keyword)
     {
         var pars = new List<SugarParameter>();
-        var where = "s.IsActive = 1";
+        var where = "s.IsDeleted = 0";
         if (!string.IsNullOrWhiteSpace(keyword))
         {
-            where += " AND (s.SalesOrd LIKE @kw OR c.SortName LIKE @kw)";
+            where += " AND (s.bill_no LIKE @kw OR s.custom_name LIKE @kw)";
             pars.Add(new SugarParameter("@kw", $"%{keyword.Trim()}%"));
         }
 
+        // MySQL:字符串拼接用 CONCAT(对应 SQL Server 的 bill_no+'_'+custom_name)
         var sql = $"""
-            SELECT s.SalesOrd AS Value,
-                CONCAT(s.SalesOrd, '_', IFNULL(s.SoldTo,''), '_', IFNULL(c.SortName,'')) AS Label
-            FROM SalesOrdMaster s
-            LEFT JOIN CustMaster c ON s.SoldTo = c.Cust
+            SELECT s.bill_no AS Value,
+                CONCAT(s.bill_no, '_', IFNULL(s.custom_name, '')) AS Label
+            FROM crm_seorder s
             WHERE {where}
-            ORDER BY s.SalesOrd DESC
+            ORDER BY s.bill_no DESC
             LIMIT 100
             """;
 

+ 5 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Dto/OrderDeliveryDto.cs

@@ -28,7 +28,12 @@ public class OrderDeliveryListInput
 
 public sealed class OrderDeliveryListRow
 {
+    /// <summary>订单行 Id(crm_seorderentry.Id)</summary>
     public long Id { get; set; }
+
+    /// <summary>销售订单头 Id(crm_seorder.Id),用于打开销售订单详情</summary>
+    public long SeOrderId { get; set; }
+
     public string? BillNo { get; set; }
     public string? MoentryMono { get; set; }
     public int? EntrySeq { get; set; }

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/AsnShipperDetail.cs

@@ -3,7 +3,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 /// <summary>
 /// 销售发货明细表(ASNBOLShipperDetail)
 /// </summary>
-[IgnoreTable]
 [SugarTable("ASNBOLShipperDetail", "销售订单发货通知单子表")]
 public class AsnShipperDetail
 {

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/AsnShipperMaster.cs

@@ -3,7 +3,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 /// <summary>
 /// 销售发货主表(ASNBOLShipperMaster)
 /// </summary>
-[IgnoreTable]
 [SugarTable("ASNBOLShipperMaster", "销售订单发货通知")]
 public class AsnShipperMaster
 {

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/LinkagePlan.cs

@@ -2,7 +2,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 
 /// <summary>计划联动看板</summary>
 [SugarTable("LinkagePlan", "计划联动看板")]
-[IgnoreTable]
 public class LinkagePlan
 {
     [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = false)]

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/SeOrder.cs

@@ -3,7 +3,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 /// <summary>
 /// 销售订单主表(crm_seorder)
 /// </summary>
-[IgnoreTable]
 [SugarTable("crm_seorder", "销售订单表")]
 public class SeOrder
 {

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/SeOrderChange.cs

@@ -3,7 +3,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 /// <summary>
 /// 销售订单变更表(crm_seorder_change)
 /// </summary>
-[IgnoreTable]
 [SugarTable("crm_seorder_change", "销售订单变更表")]
 public class SeOrderChange
 {

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/SeOrderEntry.cs

@@ -3,7 +3,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 /// <summary>
 /// 销售订单明细表(crm_seorderentry)
 /// </summary>
-[IgnoreTable]
 [SugarTable("crm_seorderentry", "销售订单明细表")]
 public class SeOrderEntry
 {

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/ShippingPlan.cs

@@ -3,7 +3,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 /// <summary>
 /// 出货计划主表(ShippingPlan)
 /// </summary>
-[IgnoreTable]
 [SugarTable("ShippingPlan", "出货计划表")]
 public class ShippingPlan
 {

+ 0 - 1
server/Plugins/Admin.NET.Plugin.AiDOP/Order/Entity/ShippingPlanDetail.cs

@@ -3,7 +3,6 @@ namespace Admin.NET.Plugin.AiDOP.Order;
 /// <summary>
 /// 出货计划明细表(ShippingPlanDetail)
 /// </summary>
-[IgnoreTable]
 [SugarTable("ShippingPlanDetail", "出货计划明细表")]
 public class ShippingPlanDetail
 {

+ 31 - 71
server/Plugins/Admin.NET.Plugin.AiDOP/Order/OrderDeliveryService.cs

@@ -77,6 +77,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
     private static string BuildListBaseSql(string innerWhere) => $"""
         SELECT
             entry.Id                                                    AS Id,
+            sorder.Id                                                   AS SeOrderId,
             sorder.bill_no                                              AS BillNo,
             entry.rstate                                                AS Rstate,
             entry.entry_seq                                             AS EntrySeq,
@@ -121,42 +122,32 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
         LEFT JOIN (
             SELECT a.id, a.soentry_id, b.product_code, a.moentry_mono
             FROM mes_moentry a
-            JOIN mes_morder b ON a.moentry_mono = b.morder_no
-        ) mo ON entry.id = mo.soentry_id AND entry.item_number = mo.product_code
-        LEFT JOIN (
+            JOIN mes_morder b ON a.moentry_mono = b.morder_no        ) mo ON entry.id = mo.soentry_id AND entry.item_number = mo.product_code        LEFT JOIN (
             SELECT WorkOrd, COUNT(*) AS num
             FROM NbrMaster WHERE type = 'SM' GROUP BY WorkOrd
-        ) nb ON mo.moentry_mono = nb.WorkOrd
-        LEFT JOIN (
+        ) nb ON mo.moentry_mono = nb.WorkOrd        LEFT JOIN (
             SELECT WorkOrds, COUNT(*) AS num
             FROM PeriodSequenceDet GROUP BY WorkOrds
-        ) p ON mo.moentry_mono = p.WorkOrds
-        LEFT JOIN (
+        ) p ON mo.moentry_mono = p.WorkOrds        LEFT JOIN (
             SELECT pr_mono, COUNT(*) AS num
             FROM srm_pr_main WHERE state > 1 GROUP BY pr_mono
-        ) pr ON mo.moentry_mono = pr.pr_mono
-        LEFT JOIN (
+        ) pr ON mo.moentry_mono = pr.pr_mono        LEFT JOIN (
             SELECT WorkOrds, COUNT(*) AS num
             FROM PeriodSequenceDet WHERE CompQty > 0 GROUP BY WorkOrds
-        ) compp ON mo.moentry_mono = compp.WorkOrds
-        LEFT JOIN (
+        ) compp ON mo.moentry_mono = compp.WorkOrds        LEFT JOIN (
             SELECT WorkOrd, COUNT(*) AS num
             FROM NbrDetail WHERE type = 'SM' AND QtyFrom > 0 GROUP BY WorkOrd
-        ) cnb ON mo.moentry_mono = cnb.WorkOrd
-        LEFT JOIN (
+        ) cnb ON mo.moentry_mono = cnb.WorkOrd        LEFT JOIN (
             SELECT ProdLine, ProdRange, SAPItemNumber
             FROM YearDemandManagement GROUP BY ProdLine, ProdRange, SAPItemNumber
-        ) yeard ON entry.item_number = yeard.SAPItemNumber
-        LEFT JOIN (
+        ) yeard ON entry.item_number = yeard.SAPItemNumber        LEFT JOIN (
             SELECT OrdNbr, ContainerItem, MAX(UpdateTime) AS ShipDate
             FROM ASNBOLShipperDetail GROUP BY OrdNbr, ContainerItem
-        ) asn ON asn.OrdNbr = sorder.bill_no AND asn.ContainerItem = entry.item_number
-        LEFT JOIN ShippingPlanDetail sp ON entry.id = sp.sentry_id
+        ) asn ON asn.OrdNbr = sorder.bill_no AND asn.ContainerItem = entry.item_number        LEFT JOIN ShippingPlanDetail sp ON entry.id = sp.sentry_id
         LEFT JOIN LATERAL (
             SELECT COUNT(*) AS nboNum
             FROM ASNBOLShipperDetail
-            WHERE OrdNbr = sorder.bill_no AND ContainerItem = entry.item_number
-        ) AS nbo ON TRUE
+            WHERE OrdNbr = sorder.bill_no AND ContainerItem = entry.item_number        ) AS nbo ON TRUE
         WHERE {innerWhere}
         """;
 
@@ -261,8 +252,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
             FROM b_examine_result a
             LEFT JOIN b_bom_child_examine b ON a.id = b.examine_id
             LEFT JOIN mes_moentry c ON a.sentry_id = c.soentry_id
-            LEFT JOIN mes_morder d ON c.moentry_mono = d.morder_no
-            WHERE a.create_time = (
+            LEFT JOIN mes_morder d ON c.moentry_mono = d.morder_no            WHERE a.create_time = (
                 SELECT MAX(create_time)
                 FROM b_examine_result
                 WHERE sentry_id = @EntryId
@@ -286,8 +276,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 a.change_content AS ChangeContent,
                 a.update_time AS UpdateTime
             FROM crm_seorder_change a
-            LEFT JOIN crm_seorderentry b ON a.bill_no = b.bill_no
-            WHERE a.bill_no IS NOT NULL AND b.id = @Id
+            LEFT JOIN crm_seorderentry b ON a.bill_no = b.bill_no            WHERE a.bill_no IS NOT NULL AND b.id = @Id
             ORDER BY a.id
             """;
         return await _db.Ado.SqlQueryAsync<FlowChangeRow>(sql, new { Id = entryId });
@@ -309,9 +298,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 im.Descr1,
                 sch.CreateTime
             FROM PeriodSequenceDet sch
-            LEFT JOIN ItemMaster im ON sch.ItemNum = im.ItemNum
-            LEFT JOIN mes_morder mo ON mo.morder_no = sch.WorkOrds
-            INNER JOIN mes_moentry me ON mo.Id = me.moentry_moid
+            LEFT JOIN ItemMaster im ON sch.ItemNum = im.ItemNum            LEFT JOIN mes_morder mo ON mo.morder_no = sch.WorkOrds            INNER JOIN mes_moentry me ON mo.Id = me.moentry_moid
             LEFT JOIN crm_seorderentry se ON se.Id = me.soentry_id
             WHERE se.id = @EntryId AND mo.IsDeleted = 0
             ORDER BY sch.PlanDate
@@ -402,8 +389,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                     END AS State
                 FROM srm_po_main pm
                 LEFT JOIN srm_po_list pl ON pm.id = pl.po_id
-                LEFT JOIN srm_po_occupy occ ON pl.Id = occ.polist_id AND pm.factory_id = occ.factory_id
-                LEFT JOIN mes_morder mo ON mo.id = occ.morder_id
+                LEFT JOIN srm_po_occupy occ ON pl.Id = occ.polist_id AND CAST(pm.factory_id AS CHAR(64)) = CAST(occ.factory_id AS CHAR(64))                LEFT JOIN mes_morder mo ON mo.id = occ.morder_id
                 LEFT JOIN mes_moentry me ON mo.id = me.moentry_moid
                 LEFT JOIN crm_seorderentry se ON me.soentry_id = se.id
                 WHERE se.id = @EntryId AND pm.IsDeleted = 0
@@ -431,8 +417,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 pm.pr_unit AS PrUnit,
                 pm.pr_purchaser AS PrPurchaser
             FROM srm_pr_main pm
-            LEFT JOIN srm_po_occupy occ ON pm.Id = occ.polist_id AND pm.factory_id = occ.factory_id
-            LEFT JOIN ic_item ic ON pm.icitem_id = ic.Id
+            LEFT JOIN srm_po_occupy occ ON pm.Id = occ.polist_id AND CAST(pm.factory_id AS CHAR(64)) = CAST(occ.factory_id AS CHAR(64))            LEFT JOIN ic_item ic ON pm.icitem_id = ic.Id
             LEFT JOIN mes_morder mo ON mo.id = occ.morder_id
             LEFT JOIN mes_moentry me ON mo.id = me.moentry_moid
             LEFT JOIN crm_seorderentry se ON me.soentry_id = se.id
@@ -474,13 +459,10 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                     ds.restqty AS RestQty
                 FROM srm_po_main pm
                 LEFT JOIN srm_po_list pl ON pm.id = pl.po_id
-                LEFT JOIN srm_po_occupy occ ON pl.Id = occ.polist_id AND pm.factory_id = occ.factory_id
-                LEFT JOIN mes_morder mo ON mo.id = occ.morder_id
+                LEFT JOIN srm_po_occupy occ ON pl.Id = occ.polist_id AND CAST(pm.factory_id AS CHAR(64)) = CAST(occ.factory_id AS CHAR(64))                LEFT JOIN mes_morder mo ON mo.id = occ.morder_id
                 LEFT JOIN mes_moentry me ON mo.id = me.moentry_moid
                 LEFT JOIN crm_seorderentry se ON me.soentry_id = se.id
-                LEFT JOIN srm_polist_ds ds ON pl.po_billno = ds.ponumber AND pl.ItemNum = ds.itemnum
-                LEFT JOIN ItemMaster im ON ds.itemnum = im.ItemNum
-                WHERE se.id = @EntryId AND pm.IsDeleted = 0
+                LEFT JOIN srm_polist_ds ds ON pl.po_billno = ds.ponumber AND pl.ItemNum = ds.itemnum                LEFT JOIN ItemMaster im ON ds.itemnum = im.ItemNum                WHERE se.id = @EntryId AND pm.IsDeleted = 0
             ) AS t
             ORDER BY t.DsNum
             """;
@@ -507,12 +489,8 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 nd.UpdateTime AS UpdateTime,
                 nd.WorkOrd AS WorkOrd
             FROM NbrDetail nd
-            LEFT JOIN NbrMaster nm ON nd.nbr = nm.nbr
-            LEFT JOIN mes_morder mo ON mo.morder_no = nm.WorkOrd
-            INNER JOIN mes_moentry me ON mo.Id = me.moentry_moid
-            LEFT JOIN crm_seorderentry se ON se.Id = me.soentry_id AND mo.product_code = se.item_number
-            LEFT JOIN ItemMaster im ON nd.ItemNum = im.ItemNum
-            WHERE se.id = @EntryId AND mo.IsDeleted = 0 AND nm.Type = 'SM'
+            LEFT JOIN NbrMaster nm ON nd.nbr = nm.nbr            LEFT JOIN mes_morder mo ON mo.morder_no = nm.WorkOrd            INNER JOIN mes_moentry me ON mo.Id = me.moentry_moid
+            LEFT JOIN crm_seorderentry se ON se.Id = me.soentry_id AND mo.product_code = se.item_number            LEFT JOIN ItemMaster im ON nd.ItemNum = im.ItemNum            WHERE se.id = @EntryId AND mo.IsDeleted = 0 AND nm.Type = 'SM'
             ORDER BY nm.Nbr
             """;
         return await _db.Ado.SqlQueryAsync<FlowNbrRow>(sql, new { EntryId = entryId });
@@ -525,7 +503,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
             SELECT
                 ROW_NUMBER() OVER (ORDER BY ote.ProdDate DESC) AS Sno,
                 ote.WorkOrd,
-                us.Name AS Name,
+                ote.Name AS Name,
                 ote.Op,
                 ote.ProdDate,
                 im.ItemNum,
@@ -536,12 +514,9 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 CAST(ote.QtyReject AS DECIMAL(18,2)) AS QtyReject,
                 CAST(ote.QtyScrapped AS DECIMAL(18,2)) AS QtyScrapped
             FROM OpTransEmployee ote
-            LEFT JOIN mes_morder mo ON mo.morder_no = ote.WorkOrd
-            INNER JOIN mes_moentry me ON mo.Id = me.moentry_moid
+            LEFT JOIN mes_morder mo ON mo.morder_no = ote.WorkOrd            INNER JOIN mes_moentry me ON mo.Id = me.moentry_moid
             LEFT JOIN crm_seorderentry se ON se.Id = me.soentry_id
-            LEFT JOIN ItemMaster im ON ote.ItemNum = im.ItemNum
-            LEFT JOIN rf_user us ON ote.Name = us.account
-            WHERE se.id = @EntryId AND mo.IsDeleted = 0
+            LEFT JOIN ItemMaster im ON ote.ItemNum = im.ItemNum            WHERE se.id = @EntryId AND mo.IsDeleted = 0
             ORDER BY ote.ProdDate DESC
             """;
         return await _db.Ado.SqlQueryAsync<FlowProdReportRow>(sql, new { EntryId = entryId });
@@ -564,10 +539,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 iqcjy.FINSPESTARTDATE AS FInspeStartDate,
                 iqcjy.FINSPECTSTATUS AS FInspecStatus
             FROM srm_pr_main pr
-            LEFT JOIN PurOrdDetail pod ON pr.pr_billno = pod.Req
-            LEFT JOIN vscm_cgshrk sh ON pod.PurOrd = sh.OrdNbr AND pod.Line = sh.OrdLine
-            LEFT JOIN scm_jhjh_jq jq ON pod.PurOrd = jq.cgdd AND pod.Line = jq.ddhh
-            LEFT JOIN (
+            LEFT JOIN PurOrdDetail pod ON pr.pr_billno = pod.Req            LEFT JOIN vscm_cgshrk sh ON pod.PurOrd = sh.OrdNbr AND CAST(pod.Line AS CHAR(32)) = CAST(sh.OrdLine AS CHAR(32))            LEFT JOIN scm_jhjh_jq jq ON pod.PurOrd = jq.cgdd AND CAST(pod.Line AS CHAR(32)) = CAST(jq.ddhh AS CHAR(32))            LEFT JOIN (
                 SELECT
                     f.po_bill,
                     f.po_billline,
@@ -580,12 +552,9 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                     a.FRINSQTY,
                     c.FINSPECTSTATUS
                 FROM qms_qcp_inspbill a
-                LEFT JOIN qms_qcp_inspecapplyn b ON a.lydjbh = b.FBILLNO
-                LEFT JOIN qms_qcp_insappnentry c ON b.id = c.glid
-                LEFT JOIN scm_shd cd ON c.shdh = cd.shddh
-                LEFT JOIN scm_shdzb f ON f.shpc = c.FLOTNUMBER AND f.sh_material_code = c.FMATERIALCFG AND f.glid = cd.id
-            ) iqcjy ON pod.PurOrd = iqcjy.po_bill AND pod.Line = iqcjy.po_billline
-            WHERE jq.flag = '1'
+                LEFT JOIN qms_qcp_inspecapplyn b ON a.lydjbh = b.FBILLNO                LEFT JOIN qms_qcp_insappnentry c ON b.id = c.glid
+                LEFT JOIN scm_shd cd ON c.shdh = cd.shddh                LEFT JOIN scm_shdzb f ON f.shpc = c.FLOTNUMBER AND f.sh_material_code = c.FMATERIALCFG AND f.glid = cd.id
+            ) iqcjy ON pod.PurOrd = iqcjy.po_bill AND CAST(pod.Line AS CHAR(32)) = CAST(iqcjy.po_billline AS CHAR(32))            WHERE jq.flag = '1'
               AND pr.sentry_id IS NOT NULL
               AND pr.sentry_id = @EntryId
             ORDER BY iqcjy.FAPPLYTIME DESC
@@ -609,9 +578,7 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 CAST(a.FRINSQTY AS DECIMAL(18,2)) AS FRinsQty,
                 a.FINSPEENDDATE AS FInspeEndDate
             FROM qms_qcpp_inspbill a
-            LEFT JOIN WorkOrdMaster b ON a.sczld = b.Batch
-            LEFT JOIN mes_moentry c ON b.WorkOrd = c.moentry_mono
-            WHERE c.soentry_id = @EntryId
+            LEFT JOIN WorkOrdMaster b ON a.sczld = b.Batch            LEFT JOIN mes_moentry c ON b.WorkOrd = c.moentry_mono            WHERE c.soentry_id = @EntryId
             ORDER BY a.FBILLNO
             """;
         return await _db.Ado.SqlQueryAsync<FlowFqcRow>(sql, new { EntryId = entryId });
@@ -645,15 +612,11 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 im.descr AS Descr
             FROM WorkOrdMaster c
             LEFT JOIN InvTransHist a ON a.WorkOrd = c.WorkOrd AND a.TransType = 'rct-wo' AND a.QtyChange > 0
-            LEFT JOIN GeneralizedCodeMaster b ON a.TransType = b.Val AND b.FldName = 'TransType' AND b.`Domain` = c.`Domain`
-            LEFT JOIN ItemMaster im ON c.ItemNum = im.ItemNum AND im.`Domain` = c.`Domain`
-            LEFT JOIN PeriodSequenceDet det ON det.ItemNum = im.ItemNum AND det.WorkOrds = c.WorkOrd AND det.`Domain` = c.`Domain`
-            LEFT JOIN (
+            LEFT JOIN GeneralizedCodeMaster b ON a.TransType = b.Val AND b.FldName = 'TransType' AND b.`Domain` = c.`Domain`            LEFT JOIN ItemMaster im ON c.ItemNum = im.ItemNum AND im.`Domain` = c.`Domain`            LEFT JOIN PeriodSequenceDet det ON det.ItemNum = im.ItemNum AND det.WorkOrds = c.WorkOrd AND det.`Domain` = c.`Domain`            LEFT JOIN (
                 SELECT WorkOrds, SUM(IFNULL(CompQty, 0)) AS CompQty
                 FROM PeriodSequenceDet
                 GROUP BY WorkOrds
-            ) compp ON c.WorkOrd = compp.WorkOrds
-            LEFT JOIN mes_morder mo ON mo.morder_no = c.WorkOrd AND mo.IsDeleted = 0
+            ) compp ON c.WorkOrd = compp.WorkOrds            LEFT JOIN mes_morder mo ON mo.morder_no = c.WorkOrd AND mo.IsDeleted = 0
             LEFT JOIN mes_moentry motry ON motry.moentry_moid = mo.Id AND motry.IsDeleted = 0
             WHERE motry.soentry_id = @EntryId
             ORDER BY mo.morder_no
@@ -675,11 +638,8 @@ public class OrderDeliveryService : IDynamicApiController, ITransient
                 ad.RealQty
             FROM ASNBOLShipperDetail ad
             INNER JOIN ASNBOLShipperMaster am ON ad.ASNBOLShipperRecID = am.RecID
-            LEFT JOIN LocationMaster lm ON ad.location = lm.Location
-            INNER JOIN crm_seorderentry se ON se.id = @EntryId
-                AND ad.ContainerItem = se.item_number
-            INNER JOIN crm_seorder so ON so.Id = se.seorder_id AND ad.OrdNbr = so.bill_no
-            WHERE am.shtype = 'SH'
+            LEFT JOIN LocationMaster lm ON ad.location = lm.Location            INNER JOIN crm_seorderentry se ON se.id = @EntryId
+                AND ad.ContainerItem = se.item_number            INNER JOIN crm_seorder so ON so.Id = se.seorder_id AND ad.OrdNbr = so.bill_no            WHERE am.shtype = 'SH'
               AND am.typed <> 'S'
             ORDER BY ad.Id
             """;

+ 17 - 3
server/Plugins/Admin.NET.Plugin.AiDOP/SeedData/SysMenuSeedData.cs

@@ -817,7 +817,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
     }
 
     /// <summary>
-    /// S1「产销协同看板」目录(Id=1322000000005)下的子菜单:指标看板、需求明细核验。
+    /// S1「产销协同看板」目录(Id=1322000000005)下的子菜单:指标看板、需求明细核验、计划联动看板
     /// </summary>
     private static IEnumerable<SysMenu> BuildS1SalesKanbanMenus(DateTime ct)
     {
@@ -852,12 +852,28 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             OrderNo = 20,
             Remark = "S1 需求明细核验"
         };
+
+        yield return new SysMenu
+        {
+            Id = 1322000000107L,
+            Pid = salesKanBanDirId,
+            Title = "计划联动看板",
+            Path = "/aidop/s1/SalesKanBan/linkage-plan",
+            Name = "aidopS1LinkagePlan",
+            Component = "/aidop/business/linkagePlanList",
+            Icon = "ele-DataBoard",
+            Type = MenuTypeEnum.Menu,
+            CreateTime = ct,
+            OrderNo = 30,
+            Remark = "S1 计划联动看板(LinkagePlan)"
+        };
     }
 
     /// <summary>
     /// S1「订单管理」「工单管理」目录化后的子菜单:销售订单、合同评审、产品设计、工单下达等。
     /// 父级 Id:订单管理=1322000000003,工单管理=1322000000004(menuSeq 与 ModuleDefinitions 中 S1 叶子顺序一致)。
     /// 产销协同看板=1322000000005,路径 /aidop/s1/SalesKanBan(勿与工单管理目录混淆)。
+    /// 订单管理下扩展子菜单 Id:1322000000101~0105;计划联动看板 Id=1322000000107 挂在产销协同看板目录下。
     /// </summary>
     private static IEnumerable<SysMenu> BuildS1OrderWorkOrderMenus(DateTime ct)
     {
@@ -938,8 +954,6 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             OrderNo = 50,
             Remark = "S1 订单发货"
         };
-        
-
 
         yield return new SysMenu
         {

+ 13 - 8
server/Plugins/Admin.NET.Plugin.AiDOP/WorkOrder/WorkOrderDispatchService.cs

@@ -28,21 +28,23 @@ public class WorkOrderDispatchService : IDynamicApiController, ITransient
     public async Task<object> GetDispatchList([FromQuery] WorkOrderDispatchListInput input)
     {
         var pars = new List<SugarParameter>();
-        var conditions = new List<string> { "a.Status = 'p'" };
+        // 与库内其它原生 SQL 一致:统一 COLLATE,避免 utf8mb4_general_ci / utf8mb4_0900_ai_ci 混用报错
+        const string C = "utf8mb4_general_ci";
+        var conditions = new List<string> { $"a.Status COLLATE {C} = 'p'" };
 
         if (!string.IsNullOrWhiteSpace(input.WorkOrd))
         {
-            conditions.Add("a.WorkOrd LIKE @WorkOrd");
+            conditions.Add($"(a.WorkOrd COLLATE {C}) LIKE (@WorkOrd COLLATE {C})");
             pars.Add(new SugarParameter("@WorkOrd", $"%{input.WorkOrd.Trim()}%"));
         }
         if (!string.IsNullOrWhiteSpace(input.ItemNum))
         {
-            conditions.Add("a.ItemNum LIKE @ItemNum");
+            conditions.Add($"(a.ItemNum COLLATE {C}) LIKE (@ItemNum COLLATE {C})");
             pars.Add(new SugarParameter("@ItemNum", $"%{input.ItemNum.Trim()}%"));
         }
         if (!string.IsNullOrWhiteSpace(input.Descr))
         {
-            conditions.Add("b.Descr LIKE @Descr");
+            conditions.Add($"(b.Descr COLLATE {C}) LIKE (@Descr COLLATE {C})");
             pars.Add(new SugarParameter("@Descr", $"%{input.Descr.Trim()}%"));
         }
         if (!string.IsNullOrWhiteSpace(input.OrdDateFrom))
@@ -72,13 +74,16 @@ public class WorkOrderDispatchService : IDynamicApiController, ITransient
                 IFNULL(nm1.Nbr,'') AS Nbr,
                 CONCAT(IFNULL(b.ItemNum,''), IFNULL(b.Descr,''), IFNULL(b.Descr1,'')) AS Wl
             FROM WorkOrdMaster a
-            LEFT JOIN ItemMaster b ON a.ItemNum = b.ItemNum
-            LEFT JOIN mes_morder m ON a.WorkOrd = m.morder_no AND a.Domain = m.factory_id
+            LEFT JOIN ItemMaster b ON a.ItemNum COLLATE utf8mb4_general_ci = b.ItemNum COLLATE utf8mb4_general_ci
+            LEFT JOIN mes_morder m ON a.WorkOrd COLLATE utf8mb4_general_ci = m.morder_no COLLATE utf8mb4_general_ci
+                AND CAST(a.Domain AS CHAR(64)) COLLATE utf8mb4_general_ci = CAST(m.factory_id AS CHAR(64)) COLLATE utf8mb4_general_ci
             LEFT JOIN NbrMaster nm
-                ON a.Domain = nm.Domain AND a.WorkOrd = nm.WorkOrd
+                ON a.Domain COLLATE utf8mb4_general_ci = nm.Domain COLLATE utf8mb4_general_ci
+                AND a.WorkOrd COLLATE utf8mb4_general_ci = nm.WorkOrd COLLATE utf8mb4_general_ci
                 AND nm.Type = 'SM' AND nm.TransType = 'PrevProcess'
             LEFT JOIN NbrMaster nm1
-                ON a.Domain = nm1.Domain AND a.WorkOrd = nm1.WorkOrd
+                ON a.Domain COLLATE utf8mb4_general_ci = nm1.Domain COLLATE utf8mb4_general_ci
+                AND a.WorkOrd COLLATE utf8mb4_general_ci = nm1.WorkOrd COLLATE utf8mb4_general_ci
                 AND nm1.Type = 'SM' AND nm1.TransType = ''
             {whereClause}
             """;

+ 15 - 0
server/sql/aidopdev_alter_tables_utf8mb4_unicode_ci.sql

@@ -0,0 +1,15 @@
+-- aidopdev:将下列表整表转换为 utf8mb4 / utf8mb4_unicode_ci(消除与 utf8mb4_general_ci 混用时的 collation 冲突)
+-- 执行前请备份;大表可能耗时较长。
+
+SET FOREIGN_KEY_CHECKS = 0;
+USE `aidopdev`;
+
+ALTER TABLE `NbrDetail` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `NbrMaster` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `OpTransEmployee` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `PurOrdDetail` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `YearDemandManagement` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `qms_qcp_insappnentry` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `srm_po_occupy` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 409 - 0
server/sql/aidopdev_create_tables_20260417.sql

@@ -0,0 +1,409 @@
+-- aidopdev 建表脚本(补充 PRIMARY KEY / InnoDB / utf8mb4;保留字列加反引号)
+SET FOREIGN_KEY_CHECKS = 0;
+USE `aidopdev`;
+
+DROP TABLE IF EXISTS `GeneralizedCodeMaster`;
+CREATE TABLE `GeneralizedCodeMaster` (
+  `Comments` varchar(50) NULL DEFAULT NULL,
+  `Descr` varchar(60) NULL DEFAULT NULL,
+  `Domain` varchar(8) NOT NULL,
+  `FldName` varchar(100) NULL DEFAULT NULL,
+  `Ufld1` varchar(50) NULL DEFAULT NULL,
+  `Ufld2` varchar(50) NULL DEFAULT NULL,
+  `Val` varchar(50) NOT NULL,
+  `BusinessID` bigint NOT NULL DEFAULT 0 COMMENT '业务流程ID',
+  `CreateUser` varchar(24) NULL DEFAULT NULL,
+  `UpdateUser` varchar(24) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `UpdateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `EffTime` datetime NULL DEFAULT NULL COMMENT '失效时间',
+  `IsActive` bit(1) NOT NULL DEFAULT b'0' COMMENT '有效',
+  `IsConfirm` bit(1) NOT NULL DEFAULT b'0' COMMENT '确认',
+  `RecID` int NOT NULL AUTO_INCREMENT COMMENT '自增列',
+  `IsChanged` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否改变',
+  `UDeci1` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '预留字段 预留字段,可以为空',
+  `UDeci2` decimal(13, 5) NOT NULL DEFAULT 0.00000 COMMENT '预留字段 预留字段,可以为空',
+  PRIMARY KEY (`RecID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+DROP TABLE IF EXISTS `InvTransHist`;
+CREATE TABLE `InvTransHist` (
+  `Address` varchar(20) NULL DEFAULT NULL,
+  `Assay` decimal(18, 5) NULL DEFAULT 0.00000 COMMENT '检验',
+  `AutoInstalled` bit(1) NOT NULL DEFAULT b'0' COMMENT '自动导入',
+  `Batch` varchar(24) NULL DEFAULT NULL,
+  `Burden` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '制造费用',
+  `BeginBalance` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '开始结余',
+  `WorkCode` varchar(8) NULL DEFAULT NULL,
+  `OpenDate` datetime NULL DEFAULT NULL COMMENT '开放日期',
+  `CoveredAmt` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '覆盖金额',
+  `CurrPrice` decimal(17, 7) NOT NULL DEFAULT 0.0000000 COMMENT '货币价格',
+  `Curr` varchar(3) NULL DEFAULT NULL,
+  `Dated` datetime NULL DEFAULT NULL COMMENT '已录入日期',
+  `DayCode` varchar(8) NULL DEFAULT NULL,
+  `Domain` varchar(8) NOT NULL,
+  `EffTime` datetime NULL DEFAULT NULL COMMENT '失效时间',
+  `EndUser` varchar(8) NULL DEFAULT NULL,
+  `ServiceArea` varchar(24) NULL DEFAULT NULL,
+  `EngineerCode` varchar(8) NULL DEFAULT NULL,
+  `ExpireDate` datetime NULL DEFAULT NULL COMMENT '到期日期',
+  `Sequence` int NOT NULL DEFAULT 0 COMMENT '序列',
+  `ExchRate1` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇率',
+  `ExchRate2` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '汇率',
+  `RateType` varchar(8) NULL DEFAULT NULL,
+  `ChargeCode` varchar(8) NULL DEFAULT NULL,
+  `Comment` int NOT NULL DEFAULT 0 COMMENT '备注',
+  `ServicePart` varchar(24) NULL DEFAULT NULL,
+  `ServiceCategory` varchar(8) NULL DEFAULT NULL,
+  `FSMType` varchar(8) NULL DEFAULT NULL,
+  `Amt` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '金额',
+  `GLDate` datetime NULL DEFAULT NULL COMMENT '总帐日期',
+  `Grade` varchar(2) NULL DEFAULT NULL,
+  `LastActivity` datetime NULL DEFAULT NULL COMMENT '最近活动',
+  `Labor` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '人工',
+  `Line` smallint NULL DEFAULT 0 COMMENT '项次',
+  `Loc` varchar(8) NULL DEFAULT NULL,
+  `BeginLocBal` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '开始LocBal',
+  `ID` varchar(200) NULL DEFAULT NULL,
+  `MessageNum` int NOT NULL DEFAULT 0 COMMENT '信息号码',
+  `Material` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '材料',
+  `OrdNbr` varchar(60) NULL DEFAULT NULL,
+  `Revision` int NOT NULL DEFAULT 0 COMMENT '修正',
+  `Overhead` decimal(15, 5) NOT NULL DEFAULT 0.00000 COMMENT '开销',
+  `ItemNum` varchar(24) NULL DEFAULT NULL,
+  `Dimension1` varchar(8) NOT NULL,
+  `Dimension2` varchar(8) NOT NULL,
+  `PerfDate` datetime NULL DEFAULT NULL COMMENT '执行日期',
+  `Price` decimal(16, 7) NOT NULL DEFAULT 0.0000000 COMMENT '价格',
+  `ProductLine` varchar(4) NULL DEFAULT NULL,
+  `Program` varchar(12) NULL DEFAULT NULL,
+  `PromiseDate` datetime NULL DEFAULT NULL COMMENT '承诺日期',
+  `QtyChange` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '变化数量',
+  `LocQtyChange` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '库存变化数量',
+  `QtyRequired` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '需求数量',
+  `QtyShort` decimal(12, 5) NOT NULL DEFAULT 0.00000 COMMENT '数量Short',
+  `Refs` varchar(8) NULL DEFAULT NULL,
+  `RefSite` varchar(8) NULL DEFAULT NULL,
+  `Rev` varchar(4) NULL DEFAULT NULL,
+  `Remark` varchar(200) NULL DEFAULT NULL,
+  `Reason` varchar(30) NULL DEFAULT NULL,
+  `Contract` varchar(8) NULL DEFAULT NULL,
+  `LotSerial` varchar(30) NULL DEFAULT NULL,
+  `ShipDate` datetime NULL DEFAULT NULL COMMENT '发货数量',
+  `ShipperNum` varchar(60) NULL DEFAULT NULL,
+  `InvMovementCode` varchar(8) NULL DEFAULT NULL,
+  `ShipType` varchar(1) NULL DEFAULT NULL,
+  `Site` varchar(12) NULL DEFAULT NULL,
+  `Salesperson1` varchar(8) NULL DEFAULT NULL,
+  `Salesperson2` varchar(8) NULL DEFAULT NULL,
+  `Salesperson3` varchar(8) NULL DEFAULT NULL,
+  `Salesperson4` varchar(8) NULL DEFAULT NULL,
+  `SalesJob` varchar(200) NULL DEFAULT NULL,
+  `InvStatus` varchar(8) NULL DEFAULT NULL,
+  `Subcontract` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '外包',
+  `ContractType1` varchar(1) NULL DEFAULT NULL,
+  `ContractType2` varchar(8) NULL DEFAULT NULL,
+  `SystemProductLine` varchar(4) NULL DEFAULT NULL,
+  `Timed` int NOT NULL DEFAULT 0 COMMENT '时间',
+  `Trans` int NOT NULL DEFAULT 0 COMMENT '交易',
+  `TransType` varchar(16) NULL DEFAULT NULL,
+  `TransUM` varchar(10) NULL DEFAULT NULL,
+  `UpdateInstalledBase` bit(1) NOT NULL DEFAULT b'0' COMMENT '更新导入基本',
+  `Ufld1` varchar(8) NULL DEFAULT NULL,
+  `Ufld2` varchar(8) NULL DEFAULT NULL,
+  `UserID` varchar(24) NULL DEFAULT NULL,
+  `SuppProdDate` datetime NULL DEFAULT NULL COMMENT '供应商生产日期',
+  `SuppLot` varchar(24) NULL DEFAULT NULL,
+  `Op` int NOT NULL DEFAULT 0 COMMENT '工序',
+  `NotUsedCrAcct` varchar(8) NULL DEFAULT NULL,
+  `NotUsedCrCostCtr` varchar(4) NULL DEFAULT NULL,
+  `NotusedCrProject` varchar(8) NULL DEFAULT NULL,
+  `NotusedDrAcct` varchar(8) NULL DEFAULT NULL,
+  `NotusedDrCostCtr` varchar(4) NULL DEFAULT NULL,
+  `NotusedDrProject` varchar(8) NULL DEFAULT NULL,
+  `NotusedGLRef` varchar(14) NULL DEFAULT NULL,
+  `Salesperson5` varchar(8) NULL DEFAULT NULL,
+  `Salesperson6` varchar(8) NULL DEFAULT NULL,
+  `BusinessID` bigint NOT NULL DEFAULT 0 COMMENT '业务流程ID',
+  `CreateUser` varchar(24) NULL DEFAULT NULL,
+  `UpdateUser` varchar(24) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `UpdateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `IsActive` bit(1) NOT NULL DEFAULT b'0' COMMENT '有效',
+  `IsConfirm` bit(1) NOT NULL DEFAULT b'0' COMMENT '确认',
+  `RecID` int NOT NULL AUTO_INCREMENT COMMENT '自增列',
+  `WorkOrd` varchar(24) NULL DEFAULT NULL,
+  `IsChanged` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否改变',
+  `TaxClass` varchar(20) NULL DEFAULT NULL,
+  `TaxIn` bit(1) NOT NULL DEFAULT b'0' COMMENT '含税',
+  `EffDate` datetime NULL DEFAULT NULL COMMENT '失效日期',
+  `InvShelf` text NULL,
+  `FreezeQty` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '冻结数量',
+  PRIMARY KEY (`RecID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+DROP TABLE IF EXISTS `MissedPrint`;
+CREATE TABLE `MissedPrint` (
+  `RecID` bigint NOT NULL AUTO_INCREMENT COMMENT '自增列',
+  `Domain` varchar(24) NULL DEFAULT NULL,
+  `LabelFormat` varchar(20) NOT NULL,
+  `Printer` varchar(50) NOT NULL,
+  `Company` varchar(50) NOT NULL,
+  `Product` varchar(160) NULL DEFAULT NULL,
+  `ItemNum` varchar(60) NULL DEFAULT NULL,
+  `Descr` varchar(120) NOT NULL,
+  `Download` bit(1) NOT NULL DEFAULT b'0' COMMENT '下载',
+  `Customer` varchar(60) NULL DEFAULT NULL,
+  `BarCode` varchar(200) NULL DEFAULT NULL,
+  `BatchNum` varchar(60) NULL DEFAULT NULL,
+  `Qty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '数量',
+  `PrintTime` datetime NULL DEFAULT NULL COMMENT '打印时间',
+  `Checker` varchar(10) NOT NULL,
+  `Position` varchar(30) NOT NULL,
+  `IsMiss` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否补打?',
+  `CreateUser` varchar(24) NULL DEFAULT NULL,
+  `UpdateUser` varchar(24) NULL DEFAULT NULL,
+  `CreateTime` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `UpdateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `Carton` varchar(20) NULL DEFAULT NULL,
+  `ProdDate` datetime NULL DEFAULT NULL COMMENT '生产日期',
+  `ProdLine` varchar(8) NULL DEFAULT NULL,
+  `FirmString1` varchar(200) NULL DEFAULT NULL,
+  `FirmString2` varchar(200) NULL DEFAULT NULL,
+  `FirmString3` varchar(160) NULL DEFAULT NULL,
+  `FirmString4` varchar(160) NULL DEFAULT NULL,
+  `FirmString5` varchar(160) NULL DEFAULT NULL,
+  `MantissaQty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '尾数数量',
+  `OrdNbr` varchar(300) NULL DEFAULT NULL,
+  `PCName` varchar(100) NULL DEFAULT NULL,
+  `PackingQty` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '包装数量',
+  `CustItem` varchar(60) NULL DEFAULT NULL,
+  `Remark` text NULL,
+  `Period` smallint NOT NULL DEFAULT 0 COMMENT '班次',
+  `WorkOrd` varchar(50) NULL DEFAULT NULL,
+  `PeriodDate` datetime NULL DEFAULT NULL COMMENT '周期日期',
+  `Location` varchar(8) NULL DEFAULT NULL,
+  `Shelf` varchar(24) NULL DEFAULT NULL,
+  `Site` varchar(24) NULL DEFAULT NULL,
+  `Status` varchar(4) NULL DEFAULT NULL,
+  `InvStatus` varchar(12) NULL DEFAULT NULL,
+  `Supply` varchar(12) NULL DEFAULT NULL,
+  `PickQty` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '打包数量',
+  `LotSerial` varchar(120) NULL DEFAULT NULL,
+  `RelatedBarCode` varchar(200) NULL DEFAULT NULL,
+  `PurLine` int NOT NULL DEFAULT 0 COMMENT '采购其次',
+  `RctNbr` varchar(80) NULL DEFAULT NULL,
+  `ShipperNbr` varchar(80) NULL DEFAULT NULL,
+  `CartonNbr` varchar(80) NULL DEFAULT NULL,
+  `IsGP12Demand` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否经过GP12?',
+  `GP12CheckedQty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT 'GP12检验数量',
+  `GP12Line` varchar(8) NULL DEFAULT NULL,
+  `CompQty` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '合格数量',
+  `CompDate` datetime NULL DEFAULT NULL COMMENT '开始日期',
+  `IsWms` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否经过WMS?',
+  `MidLocation` varchar(20) NULL DEFAULT NULL,
+  `IsFeeding` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否投料?',
+  `MoldNum` varchar(20) NULL DEFAULT NULL,
+  `FurnaceLot` varchar(20) NULL DEFAULT NULL,
+  `QtyIssued` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '过账数量',
+  `Refs` varchar(24) NULL DEFAULT NULL,
+  `PeriodChar` varchar(20) NULL DEFAULT NULL,
+  `Type` varchar(8) NULL DEFAULT NULL,
+  `HangRecID` int NOT NULL DEFAULT 0 COMMENT '上挂流水号',
+  `StandItem` varchar(30) NULL DEFAULT NULL,
+  `CheckNo` varchar(24) NULL DEFAULT NULL,
+  `CheckTime` datetime NULL DEFAULT NULL COMMENT '检验时间',
+  `StNbr` varchar(20) NULL DEFAULT NULL,
+  `LabelColor` varchar(20) NULL DEFAULT NULL,
+  `Ufld1` text NULL,
+  `Ufld2` text NULL,
+  `CartonQty` int NOT NULL DEFAULT 1 COMMENT '箱数',
+  `QtyAccN` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '良品数',
+  `QtyRejectN` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '不良数',
+  `NetWeight` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '净重',
+  `PackingWeight` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '包装容量',
+  `QtyPrinted` decimal(14, 5) NOT NULL DEFAULT 0.00000 COMMENT '打印数量',
+  `Op` int NOT NULL DEFAULT 0 COMMENT '工序',
+  `Level` int NOT NULL DEFAULT 0 COMMENT '等级',
+  `EffSize` decimal(8, 3) NOT NULL DEFAULT 0.000 COMMENT '失效时间',
+  `Ufld3` text NULL,
+  `CustItemDescr` varchar(100) NULL DEFAULT NULL,
+  `IsTag` bit(1) NOT NULL DEFAULT b'0' COMMENT '标识位',
+  `PurOrd` varchar(100) NULL DEFAULT NULL,
+  `PurQty` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '采购数量',
+  `CustBarcode` varchar(200) NULL DEFAULT NULL,
+  `ExpireDate` datetime NULL DEFAULT NULL COMMENT '到期日期',
+  `InvDate` datetime NULL DEFAULT NULL COMMENT '库存日期',
+  `GuaranteeDate` datetime NULL DEFAULT NULL COMMENT '保证日期',
+  `OccupyStock` decimal(13, 3) NOT NULL DEFAULT 0.000 COMMENT '占用数量',
+  `OpDescr` varchar(100) NULL DEFAULT NULL,
+  `ProdLineType` varchar(60) NULL DEFAULT NULL,
+  `LevelChar` varchar(20) NULL DEFAULT NULL,
+  `Remark1` varchar(100) NULL DEFAULT NULL,
+  `Remark2` varchar(100) NULL DEFAULT NULL,
+  `Remark3` varchar(100) NULL DEFAULT NULL,
+  `Remark4` varchar(100) NULL DEFAULT NULL,
+  `Remark5` varchar(100) NULL DEFAULT NULL,
+  `Remark6` varchar(100) NULL DEFAULT NULL,
+  `QtyChange` decimal(18, 5) NOT NULL DEFAULT 0.00000 COMMENT '变化数量',
+  `SuppLotSerial` varchar(120) NULL DEFAULT NULL,
+  `ShipperLine` int NOT NULL DEFAULT 0 COMMENT '发货项次',
+  `Drawing` varchar(120) NULL DEFAULT NULL,
+  `Usage` varchar(200) NULL DEFAULT NULL,
+  `PurOrdDetBatchNbr` varchar(60) NULL DEFAULT NULL,
+  `PurOrdDetBatchLine` int NOT NULL DEFAULT 0 COMMENT '采购明细分批行号',
+  PRIMARY KEY (`RecID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+DROP TABLE IF EXISTS `qms_qcp_inspbill`;
+CREATE TABLE `qms_qcp_inspbill` (
+  `id` bigint NOT NULL COMMENT 'id',
+  `lydjbh` varchar(255) NULL DEFAULT NULL,
+  `FBILLNO` varchar(80) NULL DEFAULT NULL,
+  `FBILLSTATUS` varchar(80) NULL DEFAULT NULL,
+  `FCREATORID` bigint NULL DEFAULT NULL COMMENT '创建人',
+  `FMODIFIERID` bigint NULL DEFAULT NULL COMMENT '修改人',
+  `FAUDITORID` bigint NULL DEFAULT NULL COMMENT '审核人',
+  `FAUDITDATE` datetime NULL DEFAULT NULL COMMENT '审核时间',
+  `FMODIFYTIME` datetime NULL DEFAULT NULL COMMENT '修改时间',
+  `FCREATETIME` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `FORGID` bigint NULL DEFAULT NULL COMMENT '质检组织',
+  `FINSPESTARTDATE` datetime NULL DEFAULT NULL COMMENT '检验开始日期',
+  `FINSPEENDDATE` datetime NULL DEFAULT NULL COMMENT '检验完成时间',
+  `FINSPEDEPTID` bigint NULL DEFAULT NULL COMMENT '质检部门',
+  `FINSPECTORID` varchar(255) NULL DEFAULT NULL,
+  `FBILLTYPE` varchar(255) NULL DEFAULT NULL,
+  `FBIZTYPE` bigint NULL DEFAULT NULL COMMENT '业务类型',
+  `FCOMMENT` text NULL,
+  `FMATERIALCFG` varchar(255) NULL DEFAULT NULL,
+  `wlmc` varchar(255) NULL DEFAULT NULL,
+  `ggxh` varchar(255) NULL DEFAULT NULL,
+  `FRINSQTY` decimal(10, 0) NULL DEFAULT NULL COMMENT '样本数量',
+  `ypxx` varchar(255) NULL DEFAULT NULL,
+  `pd` bigint NULL DEFAULT NULL COMMENT '判定',
+  `jyr` varchar(255) NULL DEFAULT NULL,
+  `jysj` varchar(255) NULL DEFAULT NULL,
+  `dhsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '到货数量',
+  `hid` bigint NULL DEFAULT NULL COMMENT '申请单行id',
+  `lysl` decimal(10, 0) NULL DEFAULT NULL COMMENT '留样数量',
+  `phsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '破坏数量',
+  `pcsq` int NULL DEFAULT NULL COMMENT '偏差申请',
+  `pcsm` text NULL,
+  `clfs` bigint NULL DEFAULT NULL COMMENT '处理方式',
+  `bhgsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '不合格数量',
+  `blwtflid` bigint NULL DEFAULT NULL COMMENT '不良问题分类id',
+  `blwtflmc` varchar(255) NULL DEFAULT NULL,
+  `pch` varchar(255) NULL DEFAULT NULL,
+  `jlqjbh` varchar(255) NULL DEFAULT NULL,
+  `jykyd` varchar(255) NULL DEFAULT NULL,
+  `jygfid` varchar(50) NULL DEFAULT NULL,
+  `jygfbbm` varchar(500) NULL DEFAULT NULL,
+  `cbzx` varchar(255) NULL DEFAULT NULL,
+  `bqjl` varchar(255) NULL DEFAULT NULL COMMENT '标签记录',
+  `cbzxmc` varchar(255) NULL DEFAULT NULL COMMENT '成本中心名称',
+  `fj` text NULL,
+  `fs` decimal(10, 0) NULL DEFAULT NULL COMMENT '供应商分数',
+  `ffj` text NULL,
+  `bdbh` varchar(255) NULL DEFAULT NULL COMMENT '表单编号',
+  `bb` varchar(255) NULL DEFAULT NULL COMMENT '版本',
+  `sxrq` datetime NULL DEFAULT NULL COMMENT '生效日期',
+  `jysl` decimal(10, 0) NULL DEFAULT NULL COMMENT '检验数量',
+  `title` varchar(250) NULL DEFAULT NULL,
+  `shdh` varchar(250) NULL DEFAULT NULL,
+  `jgbh` varchar(250) NULL DEFAULT NULL,
+  `jgbb` varchar(250) NULL DEFAULT NULL,
+  `jgsxrq` varchar(250) NULL DEFAULT NULL,
+  `gysmc` varchar(250) NULL DEFAULT NULL,
+  `thyy` varchar(255) NULL DEFAULT NULL COMMENT '退货原因',
+  `DrawingID` text NULL,
+  `UnqualifiedDescription` text NULL,
+  `leader` varchar(50) NULL DEFAULT NULL,
+  `SampleQty` decimal(18, 5) NOT NULL DEFAULT 0.00000,
+  `TestQty` decimal(18, 5) NOT NULL DEFAULT 0.00000,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+DROP TABLE IF EXISTS `qms_qcp_inspecapplyn`;
+CREATE TABLE `qms_qcp_inspecapplyn` (
+  `id` bigint NOT NULL COMMENT '主表id',
+  `FBILLNO` text NULL,
+  `FBILLSTATUS` varchar(255) NULL DEFAULT NULL,
+  `FCREATORID` bigint NULL DEFAULT NULL COMMENT '创建人 创建人 基础资料:人员 bos_user',
+  `FMODIFIERID` bigint NULL DEFAULT NULL COMMENT '修改人 修改人 基础资料:人员 bos_user',
+  `FAUDITORID` bigint NULL DEFAULT NULL COMMENT '审核人 审核人 基础资料:人员 bos_user',
+  `FAUDITDATE` datetime NULL DEFAULT NULL COMMENT '审核时间',
+  `FMODIFYTIME` datetime NULL DEFAULT NULL COMMENT '修改时间',
+  `FCREATETIME` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `FORGID` bigint NULL DEFAULT NULL COMMENT '申请组织 申请组织 基础资料:业务单元 bos_org',
+  `FQUALITYORG` bigint NULL DEFAULT NULL COMMENT '申请部门 申请部门 基础资料:业务单元 bos_org',
+  `FAPPLYUSER` text NULL,
+  `FAPPLYTIME` datetime NULL DEFAULT NULL COMMENT '申请时间',
+  `FBILLTYPE` varchar(255) NULL DEFAULT NULL,
+  `FBIZTYPE` bigint NULL DEFAULT NULL COMMENT '业务类型 业务类型 基础资料:业务类型 qcbd_biztype',
+  `FINSPECORGID` bigint NULL DEFAULT NULL COMMENT '质检组织 质检组织 基础资料:业务单元 bos_org',
+  `FCOMMENT` text NULL,
+  `FAUTHORIZEOBJID` bigint NULL DEFAULT NULL COMMENT '鉴权对象 鉴权对象 基础资料:鉴权对象 qcbd_authorize_object',
+  `FINTERFACEID` varchar(50) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+DROP TABLE IF EXISTS `qms_qcpp_inspbill`;
+CREATE TABLE `qms_qcpp_inspbill` (
+  `id` bigint NOT NULL COMMENT '主表id',
+  `FBILLNO` varchar(80) NULL DEFAULT NULL,
+  `FBILLSTATUS` varchar(50) NULL DEFAULT NULL,
+  `FCREATORID` bigint NULL DEFAULT NULL COMMENT '创建人 创建人 基础资料:人员 bos_user',
+  `FMODIFIERID` bigint NULL DEFAULT NULL COMMENT '修改人 修改人 基础资料:人员 bos_user',
+  `FAUDITORID` bigint NULL DEFAULT NULL COMMENT '审核人 审核人 基础资料:人员 bos_user',
+  `FAUDITDATE` datetime NULL DEFAULT NULL COMMENT '审核时间',
+  `FMODIFYTIME` datetime NULL DEFAULT NULL COMMENT '修改时间',
+  `FCREATETIME` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `FORGID` bigint NULL DEFAULT NULL COMMENT '质检组织 质检组织 基础资料:业务单元 bos_org',
+  `FINSPESTARTDATE` datetime NULL DEFAULT NULL COMMENT '检验开始日期',
+  `FINSPEENDDATE` datetime NULL DEFAULT NULL COMMENT '检验完成时间',
+  `FINSPEDEPTID` bigint NULL DEFAULT NULL COMMENT '质检部门 质检部门 基础资料:业务单元 bos_org',
+  `FINSPECTORID` bigint NULL DEFAULT NULL COMMENT '质检员 质检员 基础资料:人员 bos_user',
+  `FBILLTYPE` varchar(50) NULL DEFAULT NULL,
+  `FBIZTYPE` bigint NULL DEFAULT NULL COMMENT '业务类型 业务类型 基础资料:业务类型 qcbd_biztype',
+  `FCOMMENT` text NULL,
+  `FMATERIALCFG` varchar(255) NULL DEFAULT NULL,
+  `wlmc` varchar(255) NULL DEFAULT NULL,
+  `ggxh` varchar(255) NULL DEFAULT NULL,
+  `FRINSQTY` varchar(255) NULL DEFAULT NULL,
+  `ypxx` varchar(255) NULL DEFAULT NULL,
+  `pd` varchar(255) NULL DEFAULT NULL,
+  `jyr` varchar(255) NULL DEFAULT NULL,
+  `jysj` decimal(10, 0) NULL DEFAULT NULL COMMENT '检验数量',
+  `dhsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '到货数量',
+  `hid` bigint NULL DEFAULT NULL COMMENT '申请单行id',
+  `lysl` decimal(10, 0) NULL DEFAULT NULL COMMENT '留样数量',
+  `phsl` decimal(10, 0) NULL DEFAULT 0 COMMENT '破坏数量',
+  `lydjbh` varchar(255) NULL DEFAULT NULL,
+  `scph` varchar(255) NULL DEFAULT NULL,
+  `hgsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '合格数量',
+  `bhgsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '不合格数量',
+  `jfbh` text NULL,
+  `jygfid` varchar(50) NULL DEFAULT NULL COMMENT '检验规范id',
+  `jygfbbm` varchar(500) NULL DEFAULT NULL COMMENT '没有用',
+  `jgbh` varchar(255) NULL DEFAULT NULL COMMENT '检规编号',
+  `jgbb` varchar(255) NULL DEFAULT NULL COMMENT '检规版本',
+  `bdbh` varchar(255) NULL DEFAULT NULL COMMENT '表单编号',
+  `bbh` varchar(255) NULL DEFAULT NULL COMMENT '版本号',
+  `sxrq` datetime NULL DEFAULT NULL COMMENT '生效日期',
+  `fj` text NULL,
+  `sczld` varchar(255) NULL DEFAULT NULL COMMENT '生产指定单',
+  `sczldsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '生产指令单数量',
+  `ENDhgsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '最终合格数',
+  `ENDbhgsl` decimal(10, 0) NULL DEFAULT NULL COMMENT '最终不合格数',
+  `jgid` bigint NULL DEFAULT NULL COMMENT '检规id',
+  `clfs` int NULL DEFAULT NULL COMMENT '处理方式',
+  `cbzx` varchar(100) NULL DEFAULT NULL,
+  `leader` varchar(100) NULL DEFAULT NULL,
+  `jyrmc` varchar(100) NULL DEFAULT NULL,
+  `NonConformingReworkCount` decimal(10, 0) NULL DEFAULT NULL,
+  `NonConformingScrapCount` decimal(10, 0) NULL DEFAULT NULL,
+  `NonConformingSelectedCount` decimal(10, 0) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 279 - 0
server/sql/aidopdev_utf8mb4_0900_ai_ci_columns.tsv

@@ -0,0 +1,279 @@
+TABLE_NAME	COLUMN_NAME	COLUMN_TYPE	COLLATION_NAME
+ApprovalFlowNotifyLog	NotifyType	varchar(32)	utf8mb4_0900_ai_ci
+ApprovalFlowNotifyLog	Channel	varchar(16)	utf8mb4_0900_ai_ci
+ApprovalFlowNotifyLog	Title	varchar(256)	utf8mb4_0900_ai_ci
+ApprovalFlowNotifyLog	TargetUserIds	varchar(1024)	utf8mb4_0900_ai_ci
+ApprovalFlowNotifyLog	ErrorMessage	varchar(1024)	utf8mb4_0900_ai_ci
+ApprovalFlowNotifyLog	CreateUserName	varchar(64)	utf8mb4_0900_ai_ci
+ApprovalFlowNotifyLog	UpdateUserName	varchar(64)	utf8mb4_0900_ai_ci
+NbrDetail	Domain	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	Type	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	Nbr	varchar(24)	utf8mb4_0900_ai_ci
+NbrDetail	ItemNum	varchar(24)	utf8mb4_0900_ai_ci
+NbrDetail	Dimension1	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	Dimension2	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	LocationFrom	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	LocationTo	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	UM	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	Status	varchar(1)	utf8mb4_0900_ai_ci
+NbrDetail	LotSerial	text	utf8mb4_0900_ai_ci
+NbrDetail	LotTo	varchar(24)	utf8mb4_0900_ai_ci
+NbrDetail	Refs	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	RefTo	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	Remark	text	utf8mb4_0900_ai_ci
+NbrDetail	User1	text	utf8mb4_0900_ai_ci
+NbrDetail	User2	text	utf8mb4_0900_ai_ci
+NbrDetail	SiteFrom	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	SiteTo	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	ProdLine	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	Reason	varchar(8)	utf8mb4_0900_ai_ci
+NbrDetail	Wolot	varchar(200)	utf8mb4_0900_ai_ci
+NbrDetail	WorkOrd	varchar(500)	utf8mb4_0900_ai_ci
+NbrDetail	Address	varchar(60)	utf8mb4_0900_ai_ci
+NbrDetail	CreateUser	varchar(24)	utf8mb4_0900_ai_ci
+NbrDetail	UpdateUser	varchar(24)	utf8mb4_0900_ai_ci
+NbrDetail	InvShelf	varchar(24)	utf8mb4_0900_ai_ci
+NbrDetail	Keeper	varchar(20)	utf8mb4_0900_ai_ci
+NbrDetail	Name	varchar(12)	utf8mb4_0900_ai_ci
+NbrDetail	BarCode	varchar(20)	utf8mb4_0900_ai_ci
+NbrDetail	Department	varchar(30)	utf8mb4_0900_ai_ci
+NbrDetail	PUfld1	text	utf8mb4_0900_ai_ci
+NbrDetail	PUfld2	text	utf8mb4_0900_ai_ci
+NbrDetail	PUfld3	text	utf8mb4_0900_ai_ci
+NbrDetail	OrdNbr	varchar(48)	utf8mb4_0900_ai_ci
+NbrDetail	ItemName	text	utf8mb4_0900_ai_ci
+NbrDetail	ERPfld1	varchar(200)	utf8mb4_0900_ai_ci
+NbrDetail	ERPfld2	varchar(200)	utf8mb4_0900_ai_ci
+NbrMaster	Domain	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	Type	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	Nbr	varchar(24)	utf8mb4_0900_ai_ci
+NbrMaster	Status	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	Remark	varchar(200)	utf8mb4_0900_ai_ci
+NbrMaster	User1	text	utf8mb4_0900_ai_ci
+NbrMaster	User2	text	utf8mb4_0900_ai_ci
+NbrMaster	SiteFrom	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	SiteTo	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	LocationFrom	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	LocationTo	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	ProdLine	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	Reason	varchar(30)	utf8mb4_0900_ai_ci
+NbrMaster	WorkOrd	varchar(24)	utf8mb4_0900_ai_ci
+NbrMaster	Wolot	varchar(200)	utf8mb4_0900_ai_ci
+NbrMaster	Address	varchar(30)	utf8mb4_0900_ai_ci
+NbrMaster	CreateUser	varchar(24)	utf8mb4_0900_ai_ci
+NbrMaster	UpdateUser	varchar(24)	utf8mb4_0900_ai_ci
+NbrMaster	Department	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	ItemNum	varchar(24)	utf8mb4_0900_ai_ci
+NbrMaster	Dimension1	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	Dimension2	varchar(8)	utf8mb4_0900_ai_ci
+NbrMaster	TransType	varchar(24)	utf8mb4_0900_ai_ci
+NbrMaster	Name	varchar(12)	utf8mb4_0900_ai_ci
+NbrMaster	Ufld1	varchar(50)	utf8mb4_0900_ai_ci
+NbrMaster	Cust	varchar(100)	utf8mb4_0900_ai_ci
+NbrMaster	OpDescr	varchar(60)	utf8mb4_0900_ai_ci
+NbrMaster	RoleNo	varchar(20)	utf8mb4_0900_ai_ci
+NbrMaster	PretreatmentState	varchar(50)	utf8mb4_0900_ai_ci
+NbrMaster	ERPfld1	varchar(200)	utf8mb4_0900_ai_ci
+OpTransEmployee	Domain	varchar(8)	utf8mb4_0900_ai_ci
+OpTransEmployee	RewardNbr	varchar(24)	utf8mb4_0900_ai_ci
+OpTransEmployee	WorkOrd	varchar(24)	utf8mb4_0900_ai_ci
+OpTransEmployee	Name	text	utf8mb4_0900_ai_ci
+OpTransEmployee	WorkCtr	varchar(24)	utf8mb4_0900_ai_ci
+OpTransEmployee	CreateUser	varchar(24)	utf8mb4_0900_ai_ci
+OpTransEmployee	UpdateUser	varchar(24)	utf8mb4_0900_ai_ci
+OpTransEmployee	Employee	varchar(24)	utf8mb4_0900_ai_ci
+OpTransEmployee	Typed	varchar(8)	utf8mb4_0900_ai_ci
+OpTransEmployee	WorkShit	varchar(8)	utf8mb4_0900_ai_ci
+OpTransEmployee	ActionCode	varchar(8)	utf8mb4_0900_ai_ci
+OpTransEmployee	ItemNum	varchar(48)	utf8mb4_0900_ai_ci
+OpTransEmployee	ProdLine	varchar(24)	utf8mb4_0900_ai_ci
+OpTransEmployee	RefBusinessID	varchar(100)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	Site	varchar(12)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	ItemNum	varchar(24)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	Line	varchar(8)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	Domain	varchar(8)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	UChar1	varchar(300)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	UChar2	text	utf8mb4_0900_ai_ci
+PeriodSequenceDet	UChar3	varchar(300)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	CreateUser	varchar(24)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	UpdateUser	varchar(24)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	StartTime	varchar(24)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	EndTime	varchar(24)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	WorkOrds	varchar(300)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	UChar4	varchar(30)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	UChar5	varchar(300)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	WorkCtr	varchar(8)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	CommissionOrdNbr	varchar(30)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	Status	varchar(10)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	Employee	varchar(60)	utf8mb4_0900_ai_ci
+PeriodSequenceDet	MoldNum	varchar(50)	utf8mb4_0900_ai_ci
+PurOrdDetail	PurAcct	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	ApprovedBy	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	ApprovalCode	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Blanket	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	CostCtr	varchar(4)	utf8mb4_0900_ai_ci
+PurOrdDetail	Contract	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	ContractID	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	ActiveRlseID1	varchar(100)	utf8mb4_0900_ai_ci
+PurOrdDetail	ActiveRlseID2	varchar(100)	utf8mb4_0900_ai_ci
+PurOrdDetail	ActiveRlseID3	varchar(100)	utf8mb4_0900_ai_ci
+PurOrdDetail	Dock	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Domain	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	DRPRef	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	FrtList	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	FSMType	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Grade	varchar(2)	utf8mb4_0900_ai_ci
+PurOrdDetail	Location	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	NextLotSerial	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	PurOrd	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	ItemNum	varchar(60)	utf8mb4_0900_ai_ci
+PurOrdDetail	Dimension1	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Dimension2	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	PastDueLogic	varchar(1)	utf8mb4_0900_ai_ci
+PurOrdDetail	PayUM	varchar(2)	utf8mb4_0900_ai_ci
+PurOrdDetail	PkgCode	varchar(60)	utf8mb4_0900_ai_ci
+PurOrdDetail	PODatabase	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	POSite	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Project	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	PriceList	varchar(20)	utf8mb4_0900_ai_ci
+PurOrdDetail	RctStatus	varchar(60)	utf8mb4_0900_ai_ci
+PurOrdDetail	Reason	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	RequestedBy	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Req	varchar(20)	utf8mb4_0900_ai_ci
+PurOrdDetail	Revision	varchar(4)	utf8mb4_0900_ai_ci
+PurOrdDetail	RMAType	varchar(1)	utf8mb4_0900_ai_ci
+PurOrdDetail	RMAUM	varchar(2)	utf8mb4_0900_ai_ci
+PurOrdDetail	ScheduleData	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	ShipDlvyPattern	varchar(2)	utf8mb4_0900_ai_ci
+PurOrdDetail	ShipDlvyTime	varchar(2)	utf8mb4_0900_ai_ci
+PurOrdDetail	WIPLotSerial	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	Site	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	SalesJob	varchar(200)	utf8mb4_0900_ai_ci
+PurOrdDetail	SecondarySOStatus	varchar(1)	utf8mb4_0900_ai_ci
+PurOrdDetail	Status	varchar(1)	utf8mb4_0900_ai_ci
+PurOrdDetail	PurSubAcct	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	SubcontractType	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	TaxClass	varchar(20)	utf8mb4_0900_ai_ci
+PurOrdDetail	TaxEnvironment	varchar(16)	utf8mb4_0900_ai_ci
+PurOrdDetail	TaxUsage	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Typed	varchar(1)	utf8mb4_0900_ai_ci
+PurOrdDetail	UM	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Ufld1	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	Ufld2	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	SuppItem	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	LotSerial	varchar(120)	utf8mb4_0900_ai_ci
+PurOrdDetail	WorkOrdID	varchar(30)	utf8mb4_0900_ai_ci
+PurOrdDetail	CreateUser	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	UpdateUser	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	Potype	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Remark	text	utf8mb4_0900_ai_ci
+PurOrdDetail	Usage	varchar(30)	utf8mb4_0900_ai_ci
+PurOrdDetail	Comments1	varchar(50)	utf8mb4_0900_ai_ci
+PurOrdDetail	Rev	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	Remarks	varchar(100)	utf8mb4_0900_ai_ci
+PurOrdDetail	Department	varchar(8)	utf8mb4_0900_ai_ci
+PurOrdDetail	WorkOrd	varchar(30)	utf8mb4_0900_ai_ci
+PurOrdDetail	Drawing	varchar(24)	utf8mb4_0900_ai_ci
+PurOrdDetail	ERPfld1	varchar(200)	utf8mb4_0900_ai_ci
+PurOrdDetail	ERPfld2	varchar(200)	utf8mb4_0900_ai_ci
+PurOrdDetail	Descr	text	utf8mb4_0900_ai_ci
+YearDemandManagement	Area	varchar(50)	utf8mb4_0900_ai_ci
+YearDemandManagement	ProdLine	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	ProdRange	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	Line	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	Model	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	PlanMonth	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	create_by_name	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	update_by_name	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	LifeCycle	varchar(50)	utf8mb4_0900_ai_ci
+YearDemandManagement	SAPItemNumber	varchar(128)	utf8mb4_0900_ai_ci
+YearDemandManagement	Languages	varchar(50)	utf8mb4_0900_ai_ci
+YearDemandManagement	SpecificationsProportion	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_mfg_bom	Code	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_mfg_bom	Name	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_mfg_bom	BizVersion	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_mfg_bom	DocStatus	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_mfg_bom	Remark	varchar(500)	utf8mb4_0900_ai_ci
+ado_s0_mfg_bom_item	Unit	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_mfg_bom_item	Remark	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	Code	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	Name	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	NameEn	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	CustomerType	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	ContactPerson	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	ContactPhone	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	Address	varchar(500)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	ForbidStatus	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	Currency	varchar(20)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	PrimarySales	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	BackupSales	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_customer	Remark	varchar(1000)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	Code	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	Name	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	NameEn	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	MaterialType	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	Unit	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	Spec	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	PlCategory	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	DrawingNo	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	Language	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	BizVersion	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	ProductCode	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	MaterialAttribute	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	StockTypeCode	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	SpecialReqType	varchar(50)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	ForbidStatus	varchar(20)	utf8mb4_0900_ai_ci
+ado_s0_sales_material	Remark	varchar(500)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	Code	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	Name	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	SortDirection	varchar(10)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	SourceEntity	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	SourceField	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	SourceFieldType	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	SourceLinkField	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	WorkOrderField	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	WorkOrderFieldType	varchar(100)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	WorkOrderLinkField	varchar(200)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	RuleExpr	varchar(1000)	utf8mb4_0900_ai_ci
+ado_s0_sales_order_priority_rule	Remark	varchar(500)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FUNIT	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FLOTNUMBER	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FSRCORDERTYPE	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FSRCORDERNUM	varchar(80)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FSRCBILLENTITY	varchar(36)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FINSPECTSTATUS	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FWAREHOUSEID	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FLOCATIONID	varchar(500)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FWBBILLENTITY	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FWBBILLNO	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FWBBILLID	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FWBBILLENTITYENTITY	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FWBBILLENTRYID	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FWBBILLENTRYSEQ	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FSECONDCK	char(1)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FMATERIALCFG	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	wlmc	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	ggxh	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	wlfl	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FSCSYSTEM	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FORDERNUM	varchar(80)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FSUPPLIER	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FORDERTYPE	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FINSPFIRSTENTRYKEY	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	FRESULTSTATUS	varchar(10)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	jyfzr	varchar(50)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	jykssj	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	jywcsj	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	shdh	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	yy	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	gysbm	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	gysmc	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	wllb	varchar(255)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	process_instance_id	varchar(64)	utf8mb4_0900_ai_ci
+qms_qcp_insappnentry	flowstate	varchar(20)	utf8mb4_0900_ai_ci
+srm_po_occupy	type	varchar(80)	utf8mb4_0900_ai_ci
+srm_po_occupy	cby	varchar(80)	utf8mb4_0900_ai_ci
+srm_po_occupy	creason	text	utf8mb4_0900_ai_ci
+srm_po_occupy	create_by_name	varchar(50)	utf8mb4_0900_ai_ci
+srm_po_occupy	update_by_name	varchar(50)	utf8mb4_0900_ai_ci
+srm_po_occupy	morder_mo	varchar(50)	utf8mb4_0900_ai_ci