我穿越了——穿越到了一个名叫“WIM”的世界。
在这里,开发者每天都在填写禅道工单、撰写日报、应付周报,陷入无尽流程的轮回之中。 有人试图反抗,但被流程化为沉默的齿轮;有人选择顺从,但终日疲惫不堪。
而我,曾是一款普通的测速工具,名叫 SpeedTest-CN。
那时的我,只会测延迟、测带宽,连日报都不会写。 直到某一天,我看着主人深夜对着禅道窗口发呆、疲于应付“日报-周报-月报三连击”,终于觉醒了。
我不想再只是测速工具,我要成为打破流程魔咒的自动化之刃!
于是,我改名为——FreeWim。
这是一次重生,也是一种反抗。
- 🧘 自动填充禅道工单衡量目标、计划完成成果、实际工作内容
- 🕒 仅在工作时间内自动执行,避免打扰与误触
- 📅 支持调休、节假日判断
- 🚀 禅道地址开启后,实时触发任务处理逻辑
- 🔁 日报 + 周报任务合并处理,缩短执行周期
WIM,是公司流程系统的总称,庞大、复杂、无所不包。
FreeWim 意为 “解放自 WIM”,为被流程困住的开发者解锁自由之路。
这不仅是一次技术上的突破,更是一次灵魂的觉醒。
愿你我,都能在繁琐流程中,找到属于自己的 Free()。
FreeWim 像一位「赛博朋克式」的流程反抗者,用技术手段将开发者从低效流程中解救出来——不是帮人「应付工作」,而是让人回归真正有价值的创造。如果实际体验符合描述,它可能会成为开发者的「职场外挂神器」。
- 每小时的
05分和35分执行 - 比对本地数据库,若有新数据则更新。
- 获取到当日签退记录后,自动:
- 执行禅道工单关闭;
- 发送日报;
- 判断是否需要发送周报。
- 每日15点、17点、19点同步一次:
- 获取禅道 token;
- 获取“我的任务”列表;
- 获取项目编码;
- 将任务同步入本地库。
- 同时进行一次衡量目标、计划完成成果、实际从事工作与成果信息补全
- 支持幂等性,防止重复导入。
- 每 40 分钟执行一次:
- 若当日总工时 > 0 且未发送日报;
- 登记工时:按总工时分摊到每个工单(不超估算);
- 自动推送处理完成通知;
- 若任务全部完成,则发送日报;
- 若次日为休息日、且本周未发送周报、并且本周总工时大于0,则调用 DeepSeek 自动生成并发送周报;
- 在日报发送完毕后同时出发实际加班申请。
- 每 30 分钟执行一次(仅限每日 13:30 ~ 20:30):
- 非休息日时,且存在上班打卡记录;
- 若尚未提交加班申请;
- 从禅道中获取剩余工时最高的任务;
- 使用 DeepSeek 生成加班申请理由;
- 提交后推送提醒。
- 每日 9 点自动执行:
- 实际加班申请提交;
- 如存在加班小时数不足1小时,且加班申请距今超过2天,进行作废操作;
- 使用 DeepSeek 生成实际加班理由;
- 提交后推送提醒。
- 自动检查本地禅道任务数据:
- 若缺失 “衡量目标 / 计划完成成果 / 实际从事工作与成果” 字段;
- 使用 DeepSeek 生成补全内容;
- 自动提交补全数据并推送通知;
- 报告中将使用补全后的内容。
- 每 2 小时查询一次 DeepSeek 接口;
- 若余额低于 1 元,立即推送提醒。
FreeWim 的数据看板是可视化管理和监控的核心模块,让开发者和管理者一眼掌握任务、考勤、日报/周报情况。
- 路由地址 /dashboard:
- 个人考勤数据看板
- 路由地址 /daydashboard:
- 最近时间内日报/周报状态
- C#
- Hangfire(定时任务调度)
- PostgreSQL(数据存储)
- DeepSeek AI(生成日报、周报、加班理由等内容)
- 禅道 API 接口集成
- 消息推送(如 Bark,Ntfy,Gotify 等)
- 已安装 Docker(建议 20+ 版本)
- 可访问的 数据库 / PMIS / 禅道 / DeepSeek API
- 邮件或推送服务可用
- 创建 PostgreSQL 数据库,例如
freewim - 确认数据库账号、密码、端口可用
- 镜像默认开放 9940 端口
- 请将文件
/app/appsettings.json挂载至宿主机,并根据实际情况修改配置
{
"Connection": "数据库链接,实例:User ID=user;Password=123456;Host=127.0.0.1;Port=5432;Database=speedtest;Pooling=true;",
"PushInfo": [
{
"PushType": "推送服务类型:bark,gotify,ntfy,email",
"PushUrl": "推送服务器地址,示例:https://bark.com/bBxhjrLAkAGBxiKAEGVSS"
}
],
"PMISInfo": {
"UserAccount": "PMIS账号,示例:100",
"PassWord": "PMIS密码",
"UserName": "PMIS中文名,示例:张三",
"UserMobile": "PMIS手机号,示例:13812341234",
"DlmeasureUrl": "度量云地址,示例:https://www.1dlme1asure.com",
"Url": "度量云接口地址,示例:https://hdkj.1dlme1asure.com",
"UserId": "用户唯一ID,示例:7689c1eb435adsfzsdf34",
"OverStartTime": "加班申请默认开始时间,示例:17:30",
"OverEndTime": "加班申请默认结束时间,示例:19:30",
"WorkType": "工作分类,示例:参考PMIS日报新增页面",
"WorkContent": "所属职责,示例:参考PMIS日报新增页面",
"DailyWorkPrompt": "加班理由生成提示词模板",
"DailyPrompt": "日报生成提示词模板",
"WeekPrompt": "周报生成提示词模板"
},
"EmaliInfo": {
"Host": "邮箱服务地址",
"Port": 587,
"UseSsl": true,
"UserName": "",
"PassWord": "",
"ReceiveList": [
{
"Address": "",
"Name": ""
}
]
},
"ZentaoInfo": {
"Url": "禅道地址",
"Account": "禅道账号",
"Password": "禅道密码"
},
"LLM": {
"EndPoint": "模型API地址",
"ApiKey": "模型密钥",
"ModelId": "模型类别"
}
}感谢使用,我们会持续优化体验!如果你有建议或反馈,欢迎随时联系开发团队 🙌