云之家表单数据解析 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 数据
构建审批数据 组装发起审批接口的请求参数
理解表单结构 分析 widgetMap 和 detailMap 的数据结构
控件数据处理 处理文本、单选、多选、日期、人员、部门、明细表等各类控件

📋 支持的控件类型

基础控件

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

📁 参考文档

🤝 贡献

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

📄 许可证

MIT License

相关推荐
daidaidaiyu5 小时前
ThingsBoard 集群的核心逻辑源码分析
java
我可能是个假开发5 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong6 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
【JAVA】玩家7 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Wang's Blog7 小时前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
MandalaO_O8 小时前
IDEA 开发(快捷键 + 调试 + 序列化)
java·ide·intellij-idea
xiaoqiMikko9 小时前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm
狼爷9 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路9 小时前
zap扩展生态与总结
java·前端·数据库
第七页独白10 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库