Skip to content

JPwise 业务场景智能适配

业务场景识别规则

财务业务场景

javascript
const financialScenario = {
  // 识别模式
  patterns: [
    'INVOICE', 'PAYMENT', 'AMOUNT', 'TAX', 'EXPENSE', 
    'COST', 'FEE', 'SALARY', 'BUDGET', 'FINANCE',
    'BILLING', 'ACCOUNTING', 'CURRENCY', 'EXCHANGE'
  ],
  
  // 专用组件映射
  componentMapping: {
    'AMOUNT': 'JPWInput',     // 金额使用统计数值组件
    'PRICE': 'JPWInput',      // 价格使用统计数值组件
    'COST': 'JPWInput',       // 成本使用统计数值组件
    'FEE': 'JPWInput',        // 费用使用统计数值组件
    'RATE': 'slider',         // 税率使用滑块组件
    'RATIO': 'slider',        // 比率使用滑块组件
    'CURRENCY': 'select',     // 币种使用下拉选择
    'INVOICE_TYPE': 'select', // 发票类型使用下拉选择
    'PAY_METHOD': 'select',   // 付款方式使用下拉选择
    'ACCOUNT': 'popupSelect', // 账户使用弹窗选择
    'BANK': 'popupSelect'     // 银行使用弹窗选择
  },
  
  // 字段分组优化
  grouping: {
    'basic': ['NAME', 'CODE', 'TYPE', 'STATUS'],
    'amount': ['AMOUNT', 'CURRENCY', 'RATE', 'TAX'],
    'party': ['PAYER', 'PAYEE', 'BANK', 'ACCOUNT'],
    'time': ['APPLY_DATE', 'PAY_DATE', 'DUE_DATE'],
    'additional': ['REMARK', 'ATTACHMENT', 'APPROVAL']
  },
  
  // 必填字段
  requiredFields: [
    'AMOUNT', 'CURRENCY', 'APPLICANT', 'APPLY_DATE'
  ],
  
  // 验证规则
  validationRules: {
    'AMOUNT': { min: 0.01, max: 999999999.99 },
    'RATE': { min: 0, max: 1 },
    'TAX_RATE': { min: 0, max: 0.5 }
  }
}

合同业务场景

javascript
const contractScenario = {
  // 识别模式
  patterns: [
    'CONTRACT', 'AGREEMENT', 'PARTY', 'SIGN', 'TERM',
    'CLAUSE', 'OBLIGATION', 'RIGHT', 'LIABILITY'
  ],
  
  // 专用组件映射
  componentMapping: {
    'PARTY_A': 'popupSelect',     // 甲方使用弹窗选择
    'PARTY_B': 'popupSelect',     // 乙方使用弹窗选择
    'CONTRACT_TYPE': 'select',    // 合同类型下拉选择
    'CONTRACT_STATUS': 'select',  // 合同状态下拉选择
    'AMOUNT': 'JPWInput',         // 合同金额统计数值
    'SIGN_DATE': 'date',          // 签约日期
    'START_DATE': 'date',         // 开始日期
    'END_DATE': 'date',           // 结束日期
    'MANAGER': 'userSelect',      // 项目经理用户选择
    'ATTACHMENT': 'uploadFz',     // 合同附件文件上传
    'TEMPLATE': 'uploadFz'        // 合同模板文件上传
  },
  
  // 字段分组优化
  grouping: {
    'basic': ['NAME', 'CODE', 'TYPE', 'STATUS'],
    'parties': ['PARTY_A', 'PARTY_B', 'MANAGER'],
    'amount': ['AMOUNT', 'CURRENCY', 'PAYMENT_TERMS'],
    'timeline': ['SIGN_DATE', 'START_DATE', 'END_DATE'],
    'additional': ['REMARK', 'ATTACHMENT', 'TEMPLATE']
  },
  
  // 必填字段
  requiredFields: [
    'NAME', 'PARTY_A', 'PARTY_B', 'AMOUNT', 'START_DATE'
  ],
  
  // 子表配置
  subTables: {
    'PAYMENT_PLAN': {
      fields: ['STAGE', 'RATIO', 'AMOUNT', 'PLAN_DATE', 'ACTUAL_DATE']
    },
    'DELIVERABLES': {
      fields: ['ITEM', 'DESCRIPTION', 'DEADLINE', 'STATUS']
    }
  }
}

人事业务场景

javascript
const hrScenario = {
  // 识别模式
  patterns: [
    'EMPLOYEE', 'STAFF', 'PERSONNEL', 'HR', 'POSITION',
    'DEPARTMENT', 'SALARY', 'LEAVE', 'ATTENDANCE',
    'RECRUITMENT', 'PERFORMANCE', 'TRAINING'
  ],
  
  // 专用组件映射
  componentMapping: {
    'EMPLOYEE': 'userSelect',     // 员工选择
    'DEPARTMENT': 'depSelect',    // 部门选择
    'POSITION': 'select',         // 职位下拉选择
    'LEVEL': 'select',            // 级别下拉选择
    'SALARY': 'JPWInput',         // 薪资统计数值
    'BONUS': 'JPWInput',          // 奖金统计数值
    'MANAGER': 'userSelect',      // 直属领导用户选择
    'ENTRY_DATE': 'date',         // 入职日期
    'BIRTH_DATE': 'date',         // 出生日期
    'ID_CARD': 'comInput',        // 身份证号
    'PHONE': 'comInput',          // 电话号码
    'EMAIL': 'comInput',          // 邮箱地址
    'ADDRESS': 'textarea',        // 地址信息
    'PHOTO': 'uploadImg'          // 员工照片
  },
  
  // 字段分组优化
  grouping: {
    'basic': ['NAME', 'CODE', 'EMPLOYEE_NO', 'STATUS'],
    'personal': ['GENDER', 'BIRTH_DATE', 'ID_CARD', 'PHONE', 'EMAIL'],
    'position': ['DEPARTMENT', 'POSITION', 'LEVEL', 'MANAGER'],
    'salary': ['SALARY', 'BONUS', 'ALLOWANCE'],
    'timeline': ['ENTRY_DATE', 'PROBATION_END', 'CONTRACT_END'],
    'additional': ['ADDRESS', 'PHOTO', 'REMARK']
  },
  
  // 必填字段
  requiredFields: [
    'NAME', 'EMPLOYEE_NO', 'DEPARTMENT', 'POSITION', 'ENTRY_DATE'
  ],
  
  // 验证规则
  validationRules: {
    'ID_CARD': /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/,
    'PHONE': /^1[3-9]\d{9}$/,
    'EMAIL': /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  }
}

资产业务场景

javascript
const assetScenario = {
  // 识别模式
  patterns: [
    'ASSET', 'EQUIPMENT', 'DEVICE', 'PROPERTY', 'INVENTORY',
    'MAINTENANCE', 'DEPRECIATION', 'LOCATION', 'VENDOR'
  ],
  
  // 专用组件映射
  componentMapping: {
    'ASSET_TYPE': 'select',       // 资产类型下拉选择
    'CATEGORY': 'select',         // 分类下拉选择
    'LOCATION': 'popupSelect',    // 位置弹窗选择
    'VENDOR': 'popupSelect',      // 供应商弹窗选择
    'CUSTODIAN': 'userSelect',    // 保管人用户选择
    'DEPARTMENT': 'depSelect',    // 使用部门选择
    'PURCHASE_PRICE': 'JPWInput', // 采购价格统计数值
    'CURRENT_VALUE': 'JPWInput',  // 现值统计数值
    'PURCHASE_DATE': 'date',      // 采购日期
    'WARRANTY_END': 'date',       // 保修到期
    'SERIAL_NUMBER': 'comInput',  // 序列号
    'MODEL': 'comInput',          // 型号
    'SPECIFICATION': 'textarea',   // 规格说明
    'PHOTO': 'uploadImg',         // 资产照片
    'MANUAL': 'uploadFz'          // 使用手册
  },
  
  // 字段分组优化
  grouping: {
    'basic': ['NAME', 'CODE', 'TYPE', 'STATUS'],
    'specification': ['MODEL', 'SERIAL_NUMBER', 'SPECIFICATION'],
    'financial': ['PURCHASE_PRICE', 'CURRENT_VALUE', 'DEPRECIATION'],
    'management': ['CUSTODIAN', 'DEPARTMENT', 'LOCATION'],
    'timeline': ['PURCHASE_DATE', 'WARRANTY_END', 'LAST_MAINTENANCE'],
    'additional': ['PHOTO', 'MANUAL', 'REMARK']
  },
  
  // 必填字段
  requiredFields: [
    'NAME', 'CODE', 'TYPE', 'CUSTODIAN', 'DEPARTMENT'
  ]
}

场景自动识别算法

javascript
function identifyBusinessScenario(fields, functionName) {
  const scenarios = [financialScenario, contractScenario, hrScenario, assetScenario];
  const scores = {};
  
  scenarios.forEach(scenario => {
    let score = 0;
    
    // 基于功能名称评分
    scenario.patterns.forEach(pattern => {
      if (functionName.toUpperCase().includes(pattern)) {
        score += 10;
      }
    });
    
    // 基于字段名称评分
    fields.forEach(field => {
      scenario.patterns.forEach(pattern => {
        if (field.field.includes(pattern)) {
          score += 5;
        }
      });
    });
    
    scores[scenario.name] = score;
  });
  
  // 返回得分最高的场景
  const maxScore = Math.max(...Object.values(scores));
  if (maxScore > 0) {
    return Object.keys(scores).find(key => scores[key] === maxScore);
  }
  
  return 'general'; // 通用场景
}

场景适配处理

javascript
function applyScenarioOptimization(fields, scenario) {
  const optimizedFields = fields.map(field => {
    const optimizedField = { ...field };
    
    // 应用组件映射
    if (scenario.componentMapping) {
      for (const [pattern, component] of Object.entries(scenario.componentMapping)) {
        if (field.field.includes(pattern)) {
          optimizedField.component = component;
          break;
        }
      }
    }
    
    // 应用必填规则
    if (scenario.requiredFields) {
      optimizedField.required = scenario.requiredFields.some(pattern =>
        field.field.includes(pattern)
      );
    }
    
    // 应用验证规则
    if (scenario.validationRules && scenario.validationRules[field.field]) {
      optimizedField.validation = scenario.validationRules[field.field];
    }
    
    return optimizedField;
  });
  
  return optimizedFields;
}

字典数据建议

javascript
const dictionaryMapping = {
  financial: {
    'CURRENCY': 'currency_type',
    'INVOICE_TYPE': 'invoice_type',
    'PAY_METHOD': 'payment_method',
    'TAX_TYPE': 'tax_type'
  },
  contract: {
    'CONTRACT_TYPE': 'contract_type',
    'CONTRACT_STATUS': 'contract_status',
    'PAYMENT_TERMS': 'payment_terms'
  },
  hr: {
    'GENDER': 'gender',
    'POSITION': 'position_type',
    'LEVEL': 'employee_level',
    'EMPLOYMENT_TYPE': 'employment_type'
  },
  asset: {
    'ASSET_TYPE': 'asset_type',
    'ASSET_STATUS': 'asset_status',
    'MAINTENANCE_TYPE': 'maintenance_type'
  },
  subsidy: {
    'SUBSIDY_TYPE': 'subsidy_type',
    'CURRENCY_TYPE': 'currency_type',
    'SUBSIDY_STATUS': 'subsidy_status'
  }
}

实际案例:补贴申请功能

业务场景识别

javascript
// 输入:帮我生成一个补贴申请功能
// 场景识别结果:hr(人事)+ financial(财务)混合场景

const subsidyScenario = {
  // 识别模式
  patterns: [
    'SUBSIDY', 'ALLOWANCE', 'BENEFIT', 'COMPENSATION',
    'APPLY', 'APPLICATION', 'AMOUNT', 'PAYMENT'
  ],
  
  // 专用组件映射(实际应用)
  componentMapping: {
    'SUBSIDY_TYPE': 'select',        // 补贴类型 - 下拉选择
    'SUBSIDY_AMOUNT': 'JPWInput',    // 补贴金额 - 统计数值组件
    'CURRENCY_TYPE': 'select',       // 币种 - 下拉选择
    'APPLICANT': 'userSelect',       // 申请人 - 用户选择
    'APPLY_DEPT': 'depSelect',       // 申请部门 - 部门选择
    'APPLY_DATE': 'date',            // 申请日期 - 日期选择
    'APPLY_REASON': 'textarea',      // 申请原因 - 多行文本
    'ATTACHMENT': 'uploadFz',        // 附件 - 文件上传
    'BANK_ACCOUNT': 'comInput',      // 银行账号 - 文本输入
    'CONTACT_PHONE': 'comInput'      // 联系电话 - 文本输入
  },
  
  // 字段分组优化(实际应用)
  grouping: {
    'basic': ['APPLY_TITLE', 'APPLY_CODE', 'SUBSIDY_TYPE', 'APPLICANT', 'APPLY_DEPT', 'APPLY_DATE'],
    'amount': ['SUBSIDY_AMOUNT', 'CURRENCY_TYPE', 'APPLY_PERIOD_START', 'APPLY_PERIOD_END'],
    'contact': ['CONTACT_PHONE', 'BANK_ACCOUNT', 'BANK_NAME'],
    'additional': ['APPLY_REASON', 'ATTACHMENT', 'REMARK']
  },
  
  // 必填字段(实际应用)
  requiredFields: [
    'APPLY_TITLE', 'SUBSIDY_TYPE', 'APPLICANT', 'APPLY_DEPT', 
    'APPLY_DATE', 'SUBSIDY_AMOUNT', 'APPLY_REASON'
  ],
  
  // 列表配置优化(实际应用)
  listOptimization: {
    fixedLeft: ['APPLY_TITLE', 'APPLY_CODE'],      // 左侧固定列
    searchable: ['APPLY_TITLE', 'APPLY_CODE', 'SUBSIDY_TYPE', 'APPLICANT_NAME', 'APPLY_DEPT_NAME', 'APPLY_DATE', 'STATUS'],
    summaryFields: ['SUBSIDY_AMOUNT'],              // 汇总字段
    defaultSort: 'CREATORTIME',                     // 默认排序
    sortDirection: 'desc'                           // 排序方向
  }
}

生成结果验证

javascript
// 实际生成的配置文件验证通过以下检查:
const validationResults = {
  tableStructure: {
    mainTable: 'T_HR_SUBSIDYAPPLY',
    businessFields: 19,
    systemFields: 13,
    totalFields: 32
  },
  
  formConfiguration: {
    layoutType: 'collapse',           // 折叠面板布局
    panels: 4,                        // 4个面板
    requiredFields: 7,                // 7个必填字段
    components: {
      'comInput': 5,                  // 文本输入组件
      'select': 2,                    // 下拉选择组件
      'userSelect': 1,                // 用户选择组件
      'depSelect': 1,                 // 部门选择组件
      'date': 3,                      // 日期选择组件
      'JPWInput': 1,                  // 统计数值组件
      'textarea': 2,                  // 多行文本组件
      'uploadFz': 1,                  // 文件上传组件
      'billRule': 1                   // 单据规则组件
    }
  },
  
  listConfiguration: {
    columns: 9,                       // 9个显示列
    searchableColumns: 7,             // 7个可搜索列
    summaryColumns: 1,                // 1个汇总列
    rowButtons: 3,                    // 3个行按钮
    topButtons: 4,                    // 4个顶部按钮
    eventFunctions: 4                 // 4个事件函数
  },
  
  ddlStructure: {
    indexes: 9,                       // 9个索引
    uniqueConstraints: 1,             // 1个唯一约束
    dictionaryTypes: 3                // 3种字典类型
  }
}

关键技术决策

javascript
// 1. 混合场景识别
// 补贴申请 = HR场景 + Financial场景
// 自动应用两种场景的最佳实践

// 2. 智能组件选择
// SUBSIDY_AMOUNT → JPWInput (统计数值组件,支持精度控制)
// 而不是 numInput (普通数字组件)

// 3. 布局优化
// 采用4折叠面板而非单一表单
// 基于字段语义智能分组

// 4. 列表优化
// APPLY_TITLE 和 APPLY_CODE 左侧固定
// SUBSIDY_AMOUNT 右对齐+千分位+汇总
// STATUS 使用字典显示

// 5. 搜索优化
// 模糊搜索:标题、申请人、部门
// 精确搜索:编号、类型、状态
// 范围搜索:申请日期

}