云之家表单数据解析 skills (yzj-form-parser)

云之家表单数据解析器 (yzj-form-parser)

Claude Code 技能:用于解析和构建云之家(YunZhijia)表单数据

https://github.com/jlifeng/yzj-form-parser

📖 简介

yzj-form-parser 是一个专为处理云之家表单 JSON 数据而设计的 Claude Code 技能。它支持双向转换

  • 推送数据解析 :从 widgetMap 提取业务字段(读取数据)
  • 审批发起构建 :将业务字段转换为 widgetMap(写入数据)

🚀 快速开始

安装

将本技能放置在 Claude Code 的 skills 目录下:

复制代码
~/.claude/skills/yzj-form-parser/
├── SKILL.md
├── README.md
└── references/
    ├── widget-types.md
    ├── detail-widget.md
    └── file-widget.md

使用方式

在 Claude Code 中直接描述你的需求,技能会自动触发:

复制代码
# 解析推送数据
"帮我解析这个云之家审批推送数据..."

# 构建审批数据
"帮我构建发起审批接口的表单数据..."

🎯 触发场景

场景 说明
解析推送数据 处理云之家审批回调的 JSON 数据
构建审批数据 组装发起审批接口的请求参数
理解表单结构 分析 widgetMapdetailMap 的数据结构
控件数据处理 处理文本、单选、多选、日期、人员、部门、明细表等各类控件

📋 支持的控件类型

基础控件

控件类型 type 说明
文本 textWidget / textAreaWidget 单行/多行文本
日期 dateWidget / dateRangeWidget 日期/日期区间
数字 numberWidget 数字输入
金额 moneyWidget 金额输入
运算 arithmeticWidget 公式运算

选择控件

控件类型 type 说明
单选 radioWidget 单选按钮
多选 checkboxWidget 复选框

组织架构控件

控件类型 type 说明
人员 personSelectWidget 人员选择器
部门 departmentSelectWidget 部门选择器

附件控件

控件类型 type 说明
附件 attachmentWidget 文件上传
图片 imageWidget 图片上传

特殊控件

控件类型 type 说明
关联审批 relatedWidget 关联其他审批单据
流水号 serialNumWidget 系统自动生成编号
明细表 detailedWidget 子表/明细数据

📚 数据结构概览

表单整体结构

json 复制代码
{
  "formInfo": {
    "widgetMap": { /* 主表单控件 */ },
    "detailMap": { /* 明细表控件 */ }
  },
  "basicInfo": {
    "eventId": "事件ID",
    "formInstId": "表单实例ID",
    "flowInstId": "流程实例ID",
    "formDefId": "表单模版ID",
    "actionType": "reach/agree/submit/...",
    "title": "表单标题"
  }
}

控件通用字段

json 复制代码
{
  "codeId": "控件唯一标识",
  "title": "控件标题",
  "type": "控件类型",
  "value": "控件值",
  "extendFieldMap": { /* 扩展配置 */ }
}

💡 使用示例

解析推送数据

java 复制代码
// 解析主表单
Map<String, WidgetInfo> widgetMap = formInfo.getWidgetMap();

// 获取文本
String title = (String) widgetMap.get("_S_TITLE").getValue();

// 获取日期
Long timestamp = (Long) widgetMap.get("Da_0").getValue();
Date date = new Date(timestamp);

// 获取单选项
WidgetInfo radio = widgetMap.get("Ra_0");
String selectedKey = (String) radio.getValue();
String label = getOptionLabel(radio.getOptions(), selectedKey);

// 获取人员信息
WidgetInfo person = widgetMap.get("Ps_0");
String name = person.getPersonInfo().get(0).getName();

构建审批数据

java 复制代码
// 构建主表单
Map<String, Object> widgetMap = new HashMap<>();

widgetMap.put("_S_TITLE", createTextWidget("标题内容"));
widgetMap.put("Da_0", createDateWidget(System.currentTimeMillis()));
widgetMap.put("Ra_0", createRadioWidget("AaBaCcDd", options));
widgetMap.put("Ps_0", createPersonWidget(oid, name));

// 构建明细表
List<Map<String, Object>> rows = new ArrayList<>();
for (Item item : items) {
    Map<String, Object> row = new HashMap<>();
    row.put("Te_1", item.getName());
    row.put("Ra_0", item.getRadioKey());
    rows.add(row);
}

⚠️ 注意事项

  1. 数字类型numberWidgetmoneyWidget 的 value 是字符串类型
  2. 时间戳 :日期控件的 value 是毫秒级时间戳(Long)
  3. 选项 key :单选/多选的 value 是选项的 key,不是显示文本
  4. 明细表行 ID :每行有 _id_ 字段,构建新数据时可不设置
  5. 数组类型:多选、人员、部门、附件的 value 都是数组

📁 参考文档

🤝 贡献

欢迎提交问题和改进建议!

📄 许可证

MIT License

相关推荐
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【48】状态图编译配置类:CompileConfig 源码解析
java·人工智能·spring
贫民窟的勇敢爷们2 小时前
Java 与 Python 如何选型与融合
java·开发语言·python
小宇的天下2 小时前
Calibre DESIGNrev 单元(Cell)操作核心指南
java·前端·javascript
阿苟3 小时前
spring重点详解
java·后端·面试
Stream_Silver3 小时前
【JNA实战:Java无缝调用Windows API模拟键盘输入】
java·开发语言·windows
Sam_Deep_Thinking3 小时前
为什么选微服务而不是动态扩容单体
java·jvm·微服务
焦糖玛奇朵婷3 小时前
回收小程序开发案例分享
java·开发语言
成旭先生3 小时前
【2026年可用】企业信息查询API接口
java·大数据·模糊查询·企业信息
l软件定制开发工作室3 小时前
Spring开发系列教程(35)——使用Actuator
java·后端·spring