| | |
| | | 1. 输出必须是纯JSON数组,不要用markdown代码块包裹,不要有任何其他文字 |
| | | 2. 每个JSON对象必须包含 "entity" 字段,值为实体类型名 |
| | | 3. 数据内容要符合指定行业的特征(公司名称、产品名称、联系人等要像该行业的) |
| | | 4. 日期字段在指定的时间范围内随机分布 |
| | | 4. 所有日期字段必须在指定的时间范围内,严禁使用范围之外的日期 |
| | | 5. 金额、数量等数值字段要合理 |
| | | 6. 同一模块内的实体之间要有引用关系(如销售台账引用客户名称) |
| | | 7. 所有字符串字段不要使用emoji或特殊unicode字符 |
| | | 8. 合同编号、批号等包含日期的字段,必须使用时间范围内的日期,不要使用示例中的具体日期 |
| | | """; |
| | | } |
| | | |
| | |
| | | sb.append(buildPurchasePrompt(countMin, countMax, dateStart, dateEnd)); |
| | | } |
| | | if (modules.contains("quality")) { |
| | | sb.append(buildQualityPrompt(countMin, countMax)); |
| | | sb.append(buildQualityPrompt(countMin, countMax, dateStart)); |
| | | } |
| | | if (modules.contains("production")) { |
| | | sb.append(buildProductionPrompt(countMin, countMax, dateStart, dateEnd)); |
| | | } |
| | | if (modules.contains("stock")) { |
| | | sb.append(buildStockPrompt(countMin, countMax)); |
| | | sb.append(buildStockPrompt(countMin, countMax, dateStart)); |
| | | } |
| | | |
| | | sb.append("\n请直接输出JSON数组,不要有任何其他内容:"); |
| | |
| | | |
| | | private static String buildSalesPrompt(int min, int max, String dateStart, String dateEnd) { |
| | | return """ |
| | | 销售模块 - 按以下格式生成: |
| | | 销售模块 - 按以下格式生成(注意:示例中的日期仅作格式参考,实际日期必须在 %s ~ %s 范围内): |
| | | { |
| | | "entity": "customer", |
| | | "customerName": "XX科技有限公司", |
| | |
| | | "contactPerson": "张三", |
| | | "contactPhone": "13800138000", |
| | | "companyAddress": "XX省XX市XX区XX路XX号", |
| | | "taxpayerIdentificationNumber": "91110108XXXXXXXXXX" |
| | | "companyPhone": "0513-XXXXXXXX", |
| | | "taxpayerIdentificationNumber": "91110108XXXXXXXXXX", |
| | | "maintainer": "李四", |
| | | "maintenanceTime": "%s", |
| | | "bankAccount": "622202XXXXXXXXXXXX", |
| | | "basicBankAccount": "XX银行XX支行", |
| | | "bankCode": "308100XXXXXX" |
| | | } |
| | | { |
| | | "entity": "salesLedger", |
| | | "customerName": "引用上面生成的客户名称", |
| | | "salesContractNo": "XS-20260601-001", |
| | | "salesContractNo": "XS-年月日-序号", |
| | | "projectName": "XX项目", |
| | | "entryDate": "2026-06-01", |
| | | "entryDate": "%s", |
| | | "entryPerson": "张三", |
| | | "salesman": "销售员姓名", |
| | | "contractAmount": 50000.00, |
| | | "paymentMethod": "月结30天", |
| | | "executionDate": "2026-06-01", |
| | | "deliveryDate": "2026-07-01", |
| | | "executionDate": "%s", |
| | | "deliveryDate": "%s", |
| | | "type": 1, |
| | | "productData": [ |
| | | { |
| | |
| | | "quantity": 100, |
| | | "taxInclusiveUnitPrice": 500.00, |
| | | "taxInclusiveTotalPrice": 50000.00, |
| | | "taxExclusiveTotalPrice": 44247.79, |
| | | "taxRate": 13.00, |
| | | "unit": "件", |
| | | "type": 1 |
| | | } |
| | | ] |
| | | } |
| | | 客户名称要像指定行业的公司,合同编号格式XS-年月日-序号,金额合理。 |
| | | 客户名称要像指定行业的公司,合同编号格式XS-年月日-序号(年月日取entryDate的日期),金额合理。 |
| | | 注意 taxExclusiveTotalPrice 是不含税总价,需要根据含税总价和税率计算(=含税总价/(1+税率/100))。 |
| | | 日期范围: %s ~ %s,每种实体生成%d-%d条。 |
| | | """.formatted(dateStart, dateEnd, min, max); |
| | | """.formatted(dateStart, dateEnd, dateStart, dateStart, dateStart, dateEnd, dateStart, dateEnd, min, max); |
| | | } |
| | | |
| | | private static String buildPurchasePrompt(int min, int max, String dateStart, String dateEnd) { |
| | | return """ |
| | | 采购模块 - 按以下格式生成: |
| | | 采购模块 - 按以下格式生成(注意:示例中的日期仅作格式参考,实际日期必须在 %s ~ %s 范围内): |
| | | { |
| | | "entity": "supplier", |
| | | "supplierName": "XX原材料有限公司", |
| | |
| | | "contactUserName": "李四", |
| | | "contactUserPhone": "13900139000", |
| | | "companyAddress": "XX省XX市XX区XX路XX号", |
| | | "companyPhone": "0513-XXXXXXXX", |
| | | "taxpayerIdentificationNum": "91110108XXXXXXXXXX", |
| | | "bankAccountName": "XX银行XX支行", |
| | | "bankAccountNum": "622202XXXXXXXXXXXX", |
| | |
| | | { |
| | | "entity": "purchaseLedger", |
| | | "supplierName": "引用上面生成的供应商名称", |
| | | "purchaseContractNumber": "CG-20260601-001", |
| | | "purchaseContractNumber": "CG-年月日-序号", |
| | | "projectName": "XX采购项目", |
| | | "entryDate": "2026-06-01", |
| | | "entryDate": "%s", |
| | | "contractAmount": 30000.00, |
| | | "paymentMethod": "货到付款", |
| | | "executionDate": "2026-06-01", |
| | | "executionDate": "%s", |
| | | "productData": [ |
| | | { |
| | | "productId": 1, |
| | |
| | | "quantity": 50, |
| | | "taxInclusiveUnitPrice": 600.00, |
| | | "taxInclusiveTotalPrice": 30000.00, |
| | | "taxExclusiveTotalPrice": 26548.67, |
| | | "taxRate": 13.00, |
| | | "unit": "件", |
| | | "type": 2 |
| | | } |
| | | ] |
| | | } |
| | | 供应商名称要像指定行业的供应商,合同编号格式CG-年月日-序号。 |
| | | 供应商名称要像指定行业的供应商,合同编号格式CG-年月日-序号(年月日取entryDate的日期)。 |
| | | 注意 taxExclusiveTotalPrice 是不含税总价,需要根据含税总价和税率计算(=含税总价/(1+税率/100))。 |
| | | 日期范围: %s ~ %s,每种实体生成%d-%d条。 |
| | | """.formatted(dateStart, dateEnd, min, max); |
| | | """.formatted(dateStart, dateEnd, dateStart, dateStart, dateStart, dateEnd, min, max); |
| | | } |
| | | |
| | | private static String buildQualityPrompt(int min, int max) { |
| | | private static String buildQualityPrompt(int min, int max, String dateStart) { |
| | | return """ |
| | | 质量模块 - 按以下格式生成: |
| | | { |
| | | "entity": "qualityTestStandard", |
| | | "standardNo": "QTS-20260601-001", |
| | | "standardNo": "QTS-年月日-序号", |
| | | "standardName": "XX产品检验标准", |
| | | "inspectType": 0, |
| | | "remark": "适用于XX行业的质量检验标准" |
| | | } |
| | | inspectType: 0=原材料检验, 1=过程检验, 2=出厂检验。三种类型都要覆盖。 |
| | | standardNo中的年月日使用 %s 这个日期。 |
| | | { |
| | | "entity": "qualityTestStandardBinding", |
| | | "productId": 1, |
| | | "testStandardId": 1 |
| | | } |
| | | 每种实体生成%d-%d条。 |
| | | """.formatted(min, max); |
| | | """.formatted(dateStart, min, max); |
| | | } |
| | | |
| | | private static String buildProductionPrompt(int min, int max, String dateStart, String dateEnd) { |
| | | return """ |
| | | 生产模块 - 按以下格式生成: |
| | | 生产模块 - 按以下格式生成(注意:示例中的日期仅作格式参考,实际日期必须在 %s ~ %s 范围内): |
| | | { |
| | | "entity": "productionPlan", |
| | | "productModelId": 1, |
| | | "qtyRequired": 200, |
| | | "requiredDate": "2026-06-15", |
| | | "requiredDate": "%s", |
| | | "source": "销售", |
| | | "promisedDeliveryDate": "2026-07-01", |
| | | "promisedDeliveryDate": "%s", |
| | | "remark": "XX客户订单需求" |
| | | } |
| | | { |
| | | "entity": "productionOrder", |
| | | "productModelId": 1, |
| | | "quantity": 200, |
| | | "planCompleteTime": "2026-06-30", |
| | | "planCompleteTime": "%s", |
| | | "remark": "根据生产计划XX生成" |
| | | } |
| | | productionPlan的source可选"销售"或"内部"。 |
| | | 日期范围: %s ~ %s,每种实体生成%d-%d条。 |
| | | """.formatted(dateStart, dateEnd, min, max); |
| | | """.formatted(dateStart, dateEnd, dateStart, dateEnd, dateEnd, dateStart, dateEnd, min, max); |
| | | } |
| | | |
| | | private static String buildStockPrompt(int min, int max) { |
| | | private static String buildStockPrompt(int min, int max, String dateStart) { |
| | | return """ |
| | | 库存模块 - 按以下格式生成: |
| | | { |
| | | "entity": "stockInventory", |
| | | "productModelId": 1, |
| | | "qualitity": 500, |
| | | "batchNo": "BATCH-20260601-001", |
| | | "batchNo": "BATCH-年月日-序号", |
| | | "warnNum": 50, |
| | | "remark": "安全库存" |
| | | } |
| | | 每种实体生成%d-%d条。batchNo格式BATCH-年月日-序号。 |
| | | """.formatted(min, max); |
| | | 每种实体生成%d-%d条。batchNo格式BATCH-年月日-序号,年月日使用 %s 这个日期。 |
| | | """.formatted(min, max, dateStart); |
| | | } |
| | | } |