e10-data 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -3
- package/bin/e10-data.mjs +46 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ e10-data noun list --skill <skillKey> 词库查询(可带 --s
|
|
|
21
21
|
e10-data field id2name|name2id 关联字段翻译(testRemoteBrowser / complete)
|
|
22
22
|
e10-data conf get|batch|batch-file|resolve|resolve-file|add|add-file|update|delete 环境参数配置中心(chatBi config map,替代 config-resolve 脚本 URL 直连;confType 默认按 CONN_/DS_/WF_ 前缀推导,可 --type 显式)
|
|
23
23
|
e10-data exp status|manifest|commits|file|pull|init|commit|lock|release|rollback 专家包版本管理
|
|
24
|
+
e10-data attend statis 考勤假期余额统计 getAttendInfoStatis(hr-attendance 病假/事假等,v0.1.5 新增)
|
|
24
25
|
```
|
|
25
26
|
|
|
26
27
|
## 通用约定
|
|
@@ -48,11 +49,11 @@ e10-data conf add CONN_EC_EDCAPP --value 10 --name "说明" --attrs '{"schema":"
|
|
|
48
49
|
e10-data conf delete CONN_EC_EDCAPP
|
|
49
50
|
e10-data exp status --expert data-assistant
|
|
50
51
|
e10-data exp pull --expert data-assistant --dir <本地专家包目录> [--dry-run] [--force]
|
|
52
|
+
e10-data attend statis # 查当前登录用户当月假期余额(病假/事假/年假)
|
|
53
|
+
e10-data attend statis --user 6264843388578732287 --begin 2026-09-01 --end 2026-09-30
|
|
51
54
|
```
|
|
52
55
|
|
|
53
|
-
## exp pull 智能拉取(v0.1.4
|
|
54
|
-
|
|
55
|
-
`exp pull` 不再盲目覆盖。CLI 在专家包本地目录维护基线文件 `.sync-state.json`(记录上次同步的 commitId/headRevision 与每文件 sha256),拉取时逐文件三方对比:
|
|
56
|
+
## exp pull 智能拉取(v0.1.4 新增,防本地修改被覆盖)`exp pull` 不再盲目覆盖。CLI 在专家包本地目录维护基线文件 `.sync-state.json`(记录上次同步的 commitId/headRevision 与每文件 sha256),拉取时逐文件三方对比:
|
|
56
57
|
|
|
57
58
|
| 场景 | 判定 | 处理 |
|
|
58
59
|
|---|---|---|
|
|
@@ -66,3 +67,16 @@ e10-data exp pull --expert data-assistant --dir <本地专家包目录> [--dry-r
|
|
|
66
67
|
- `--dry-run`:只预览决策,不写盘不下载;
|
|
67
68
|
- `.sync-state.json` 为本地同步元文件,**永不随包提交**(`walkDir`/`collectPackage` 已排除);`exp commit` 成功后也会自动刷新该基线。
|
|
68
69
|
|
|
70
|
+
## attend statis 考勤假期余额(v0.1.5 新增)
|
|
71
|
+
|
|
72
|
+
封装 E10 考勤 REST 接口 `POST /api/attend/web/attendInfoV2/getAttendInfoStatis`(hr-attendance 场景六:病假/事假/年假余额统计,替代原手工 curl)。认证/绕代理由 CLI 进程内自动完成(读 `~/.workbuddy/e10-login-cache.md`)。
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
e10-data attend statis [--user <人员ID>] [--begin 2026-09-01] [--end 2026-09-30]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- `--user`:目标人员 ID;**缺省 = 当前登录用户**(查他人前需先 HRM 下属校验,见 hr-attendance Skill);
|
|
79
|
+
- `--begin` / `--end`:统计月份范围,**缺省 = 当前月 1 日 ~ 月末**(接口按整月统计,时间范围不影响假期余额口径);
|
|
80
|
+
- `--json`:原样输出接口 JSON(含 `data.attendStatis` 出勤统计 / `data.attendSummary` 汇总 / `data.leaveInfo` 请假 / `data.outAttend` 外出 / `data.vacationBalanceList` 假期余额);
|
|
81
|
+
- 默认人读输出:仅列出 `data.vacationBalanceList`(按 title 区分假期类型)——带薪病假 `100584850000000003`、带薪事假 `100584850000000010` 含 `lastRemaining`(历年可请)/`remaining`(今年可请)/`total`(总计可请) 三项。
|
|
82
|
+
|
package/bin/e10-data.mjs
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* e10-data field id2name|name2id 关联字段翻译 testRemoteBrowser / complete
|
|
12
12
|
* e10-data conf get|batch|batch-file|resolve|resolve-file|add|add-file|update|delete
|
|
13
13
|
* 环境参数配置中心(chatBi config map,替代 config-resolve 脚本 URL 直连)
|
|
14
|
+
* e10-data attend statis 考勤假期余额统计 getAttendInfoStatis(hr-attendance 病假/事假,2026-09-07)
|
|
14
15
|
*
|
|
15
16
|
* 通用:--json 原样输出;复杂 JSON 参数支持 @文件 或 内联(中文走 @文件 更稳)
|
|
16
17
|
* 认证:进程内读取用户级登录缓存 ~/.workbuddy/e10-login-cache.md;不存在/失效提示先 e10-login
|
|
@@ -679,6 +680,44 @@ async function cmdConf(sub, args, json, pos) {
|
|
|
679
680
|
}
|
|
680
681
|
}
|
|
681
682
|
|
|
683
|
+
// ---------------- attend:考勤 REST 接口 ----------------
|
|
684
|
+
// 2026-09-07:封装 /api/attend/web/attendInfoV2/getAttendInfoStatis(假期余额统计,hr-attendance 场景六病假/事假)。
|
|
685
|
+
// 请求参数 {beginDate, endDate, userId};返回 data.vacationBalanceList[]:{id,title,data:[{name,value,key}]},
|
|
686
|
+
// key 含 lastRemaining(历年可请)/remaining(今年可请)/total(总计可请)。
|
|
687
|
+
function defaultMonthRange() {
|
|
688
|
+
const now = new Date();
|
|
689
|
+
const y = now.getFullYear();
|
|
690
|
+
const m = now.getMonth() + 1;
|
|
691
|
+
const lastDay = new Date(y, m, 0).getDate();
|
|
692
|
+
const p = (n) => String(n).padStart(2, "0");
|
|
693
|
+
return { begin: y + "-" + p(m) + "-01", end: y + "-" + p(m) + "-" + p(lastDay) };
|
|
694
|
+
}
|
|
695
|
+
async function cmdAttendStatis(args, json) {
|
|
696
|
+
const user = args.user || auth.userId || "";
|
|
697
|
+
if (!user) throw new Error("缺少查询人员:--user <人员ID>(查本人可不传,默认当前登录用户)");
|
|
698
|
+
const def = defaultMonthRange();
|
|
699
|
+
const body = { beginDate: args.begin || def.begin, endDate: args.end || def.end, userId: user };
|
|
700
|
+
const r = await postJson("/api/attend/web/attendInfoV2/getAttendInfoStatis", body);
|
|
701
|
+
if (json) return r;
|
|
702
|
+
if (String(r.code) !== "200") {
|
|
703
|
+
console.log("code=" + r.code + " msg=" + (r.msg || ""));
|
|
704
|
+
if (/没有权限|无权限|权限不足|未授权|无权访问|无查询权限/i.test(String(r.msg || ""))) {
|
|
705
|
+
throw new Error("当前用户对该人员考勤数据无查询权限,请检查 ETEAMSID 或联系管理员开通");
|
|
706
|
+
}
|
|
707
|
+
return;
|
|
708
|
+
}
|
|
709
|
+
const d = r.data || {};
|
|
710
|
+
const list = Array.isArray(d.vacationBalanceList) ? d.vacationBalanceList : [];
|
|
711
|
+
if (!list.length) { console.log("(空:该人员无假期余额数据) userId=" + user + " " + body.beginDate + "~" + body.endDate); return; }
|
|
712
|
+
console.log("== 考勤假期余额 userId=" + user + "(" + body.beginDate + " ~ " + body.endDate + ")==");
|
|
713
|
+
for (const item of list) {
|
|
714
|
+
console.log((item.title || item.id || "?") + (item.id ? " [" + item.id + "]" : ""));
|
|
715
|
+
if (Array.isArray(item.data) && item.data.length) {
|
|
716
|
+
console.log(" " + item.data.map((x) => (x.name || x.key) + "=" + (x.value ?? "")).join(" "));
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
682
721
|
// ---------------- exp:专家包版本管理(expert-repository) ----------------
|
|
683
722
|
async function expGet(url) {
|
|
684
723
|
// 返回 {raw, j}:raw 用于正则提取大整数 id(commitId 19 位超 JS Number 精度,JSON.parse 会丢精度!)
|
|
@@ -962,8 +1001,8 @@ async function expLock(args, json) {
|
|
|
962
1001
|
printExpData(r, "有效锁");
|
|
963
1002
|
return;
|
|
964
1003
|
}
|
|
965
|
-
const token = need("lock-token", args);
|
|
966
1004
|
if (act === "heartbeat") {
|
|
1005
|
+
const token = need("lock-token", args);
|
|
967
1006
|
const r = await postJson("/api/dw/expert-repository/v1/repositories/locks/heartbeat?lockToken=" + encodeURIComponent(token), {});
|
|
968
1007
|
if (json) return r;
|
|
969
1008
|
if (!expOk(r)) throw new Error(expFailMsg(r));
|
|
@@ -971,6 +1010,7 @@ async function expLock(args, json) {
|
|
|
971
1010
|
return;
|
|
972
1011
|
}
|
|
973
1012
|
if (act === "release") {
|
|
1013
|
+
const token = need("lock-token", args);
|
|
974
1014
|
const req = new Request(BASE + "/api/dw/expert-repository/v1/repositories/locks?lockToken=" + encodeURIComponent(token), { method: "DELETE" });
|
|
975
1015
|
const resp = await fetch(req, { headers: { "cookie": auth.cookie, "eteamsid": auth.eteamsid, "accept": "application/json" } });
|
|
976
1016
|
const text = await resp.text();
|
|
@@ -1048,6 +1088,8 @@ exp 专家包版本管理(expert-repository/v1,响应以 data.actionMsg.
|
|
|
1048
1088
|
exp lock --expert <code> --action query|acquire(默认)|heartbeat|release --component ROOT --ttl 30 --lock-token <token>
|
|
1049
1089
|
exp release --expert <code> --commit <id> --version vX.Y.Z [--note 说明]
|
|
1050
1090
|
exp rollback --expert <code> --version vX.Y.Z
|
|
1091
|
+
attend 考勤 REST 接口(2026-09-07 新增,hr-attendance 病假/事假等假期余额)
|
|
1092
|
+
attend statis [--user <人员ID>] [--begin 2026-09-01] [--end 2026-09-30] # getAttendInfoStatis 假期余额统计;--user 默认当前登录用户,--begin/--end 默认当月
|
|
1051
1093
|
认证: 读 ~/.workbuddy/e10-login-cache.md;失效请先 e10-login oidc`);
|
|
1052
1094
|
}
|
|
1053
1095
|
|
|
@@ -1104,6 +1146,9 @@ async function main() {
|
|
|
1104
1146
|
case "rollback": result = await expRollback(args, json); break;
|
|
1105
1147
|
default: usage(); process.exit(1);
|
|
1106
1148
|
}
|
|
1149
|
+
} else if (family === "attend") {
|
|
1150
|
+
if (sub === "statis") result = await cmdAttendStatis(args, json);
|
|
1151
|
+
else { usage(); process.exit(1); }
|
|
1107
1152
|
} else { usage(); process.exit(1); }
|
|
1108
1153
|
if (json && result !== undefined) console.log(JSON.stringify(result, null, 1));
|
|
1109
1154
|
}
|
package/package.json
CHANGED