Commit Graph

583 Commits

Author SHA1 Message Date
4f0b919235 feat(oa): add arrival detail management module
实现到货明细的增删改查、列表查询、状态管理以及发货流程,包含搜索筛选、弹窗表单、批量操作和数据导出功能
2026-06-12 11:09:18 +08:00
f745651370 Merge remote-tracking branch 'origin/main' 2026-06-12 10:51:02 +08:00
a4f479454f 修复流式审核点击后无输出(静默失败)
原因:旧实现在返回 SseEmitter 之前同步做文档解析/渲染,一旦抛异常会被全局
异常处理器包成 JSON(HTTP 200 + {code,msg})返回;前端按 SSE 流读取,找不到
\n\n 分隔帧便静默结束——表现为“闪一下后无输出、也无报错”。

后端:
- analyzeStream 拆分 prepareSync(仅校验+读字节,必须在请求线程内)与
  buildPrompt(解析/渲染/构建提示词)。buildPrompt 移入异步线程,任何异常都
  转为 SSE error 事件返回,不再走 JSON 静默路径
- 线程启动即推送 start 事件,确认通道已打开
- 流式接口去掉 @Log(操作日志切面会尝试序列化 SseEmitter 返回值)

前端 add.vue:
- 校验响应 content-type:非 text/event-stream(鉴权失败/异常JSON/HTML)时读出
  正文并弹出错误,避免静默
- 统计收到的事件数,全程零事件时提示“未收到流式数据,请检查后端能否访问AI服务”
- 处理 start 事件

注:服务端为 Undertow、未开 gzip 压缩,dev 代理默认透传,排除缓冲导致。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 10:37:18 +08:00
7a2603e1f9 AI审核新增改为独立流式页面:左侧实时输出+右侧文档预览
解决上传后长时间无反馈的问题——改为流式(SSE)边生成边展示。

后端:
- MiMoClient.chatStream:HttpURLConnection 读 SSE,分别回调 reasoning(思考)
  与 content(正文) 增量;支持多模态(扫描件PDF)
- IOaAiReviewService.analyzeStream + 实现:同步校验/解析文档后,异步线程调用
  流式接口,通过 SseEmitter 推送 {type:reasoning|content|done|error},
  结束后落库(含结论解析、摘要、原件OSS留存);createBy 显式回填(异步线程无登录上下文)
  · 抽出 prepare()/persist() 复用,analyze() 与 analyzeStream() 共用
- Controller 新增 POST /oa/aiReview/analyzeStream(multipart→text/event-stream)

前端:
- 新增独立二级页面 views/oa/aiReview/add.vue(路由 /hint/aiReview/add):
  · 顶部:类型/岗位/选文件/开始审核
  · 左侧:用原生 fetch 读流,实时渲染——思考过程(可折叠)+正文 Markdown 实时输出
  · 右侧:选中文件即用本地 objectURL 预览(PDF 内嵌 iframe,Word 占位提示)
  · 完成后显示匹配度/风险标签 + 查看详情
- 列表页「新增审核」由弹窗改为跳转该页面,移除弹窗相关逻辑
- router 增加 /hint/aiReview/add 隐藏路由

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 10:19:52 +08:00
23f65c738d refactor(oa): 优化到货明细服务的关联查询
- 添加批量填充关联VO的方法,避免N+1查询问题
- 新增需求和项目关联字段到到货明细VO中
- 实现根据需求ID自动填充项目ID和贸易类型的逻辑
- 重构查询方法以支持关联数据的批量加载
- 添加Excel导出忽略注解以防止关联对象被导出
2026-06-12 10:05:45 +08:00
d46754ede8 AI审核改为 列表页+详情页 结构,列表带审核摘要
- 表 oa_ai_review 增加 summary 列(审核结论摘要,纯文本,列表展示用),
  已应用到生产库;分析时由结果 Markdown 提炼前160字纯文本写入
- 列表查询清空大字段 result_md 减小响应体,详情接口仍返回完整结果
- 前端拆分:
  · index.vue 重写为列表页:搜索(类型/关键字)+表格(类型/文件名/岗位/结论标签/
    审核摘要/时间)+分页,「新增审核」改为弹窗上传(类型/岗位/文件),
    审核完成后跳转详情;行可删除
  · 新增 detail.vue 详情页:元信息(文件名+下载原件/岗位/模型/时间/审核人)
    + 结论标签 + 完整 Markdown 结果,返回列表按钮
  · router 增加 /hint/aiReview/detail/:id 隐藏路由
- 原件已通过 OSS 留存,详情页可下载,下次可直接查看

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 10:04:16 +08:00
faca2f85eb 新增 AI 合同/简历审核功能(小米 MiMo 多模态大模型)
核心诉求:合同审核站在我方(德睿福)立场,找出不利条款并给出利好我方的
修改/补充建议;简历审核评估候选人与目标岗位的匹配度。

后端(ruoyi-oa):
- 接入小米 MiMo(OpenAI 兼容 /chat/completions),mimo-v2.5 多模态模型
  · MiMoProperties 绑定 application.yml mimo: 配置(base-url/api-key/model/...)
  · MiMoClient:text + multimodal(image_url base64) 两种调用,独立长超时
    RestTemplate;mimo-v2.5 是推理模型,max-tokens 配 8192 留足思考额度
- DocumentParseUtil:PDF 文字(PDFBox)、Word(POI: docx XWPF / doc HWPF),
  扫描版 PDF(提取文字过短)用 PDFRenderer 转 PNG 走多模态
- OaAiReview 实体 + BO/VO/Mapper/Service/Controller(/oa/aiReview)
  · analyze 上传解析→构建提示词→调用大模型→留存原件(OSS)→落库
  · 合同/简历两套提示词;正则解析风险评级:高/中/低与匹配度评分:NN入库
  · 提供 list/detail/delete
- ruoyi-oa/pom.xml 增加 poi-ooxml、poi-scratchpad(Word 解析)
- application.yml 增加 mimo: 配置块

前端(ruoyi-ui):
- views/oa/aiReview/index.vue:类型切换(合同/简历)、拖拽上传(pdf/word)、
  简历目标岗位输入、审核(loading)、Markdown 结果渲染、历史记录列表
- api/oa/aiReview.js:analyze 用 FormData,超时放宽到 5 分钟

SQL(已应用到生产库):
- oa_ai_review 表;菜单挂信息下(menu_id 2063910000000000001),授权10个角色

已用真实接口端到端验证:合同审核输出利好我方意见、风险评级可正确解析。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 10:00:09 +08:00
005cf47424 feat(oa): 添加到货明细管理功能
- 创建到货明细实体类 OaArrivalDetail 包含基本信息字段
- 实现到货明细业务对象 OaArrivalDetailBo 和视图对象 OaArrivalDetailVo
- 开发到货明细服务接口 IOaArrivalDetailService 及其实现类
- 构建到货明细数据访问层 OaArrivalDetailMapper 及对应的 XML 映射文件
- 设计到货明细控制器 OaArrivalDetailController 提供完整的 CRUD 操作
- 集成分页查询、导出 Excel、新增修改删除等完整业务功能
2026-06-12 09:48:46 +08:00
6f64c3d4af 修复全局样式导致输入框文字与图标重叠
index.scss 全局压高度规则把 .el-input__inner 的 padding 写死为 0 8px !important,
覆盖了 element-ui 给带前/后缀图标输入框预留的 30px 内边距,导致日期选择器、
带搜索图标输入框、下拉选择等的占位文字/内容压在图标上。

在该规则后补回更高优先级的图标位 padding(prefix/suffix 各 28px),
并修正 mini 尺寸输入框图标行高(22px,原 26px 垂直偏移)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 10:33:18 +08:00
db7cbf8157 会议纪要改为 列表页+独立编辑页 结构,移除语音录入
- index.vue 重写为标准列表页:搜索(关键字/项目/类型/日期)+ 表格 + 分页,
  显示待办同步进度(已同步/总数),双击行或点编辑进入编辑页
- 新增 edit.vue 独立编辑页:新增 /hint/meeting/add、编辑 /hint/meeting/edit/:id,
  新建保存后自动切换为编辑路由,防止重复新增;路由复用时通过 $route watch 重置/加载
- router/index.js 增加 /hint 静态隐藏路由(与 /people、/claim 同惯例,activeMenu 高亮列表菜单)
- 按要求删除语音录入功能(SpeechRecognition 相关全部移除)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 10:29:58 +08:00
a9c9b8a5ea 会议纪要功能修复与改进
后端:
- 待办同步改走 ISysOaTaskService.insertByBo/updateByBo,新任务带操作日志和IM通知
- 任务状态映射修正:done→2执行完成,其余→0执行中(原 progress→1 会显示成"等待验收")
- 无负责人/无内容的待办仅作纪要记录,不再生成无主任务
- 更新时可清空字段改用显式 set(原来解绑项目、清空内容不生效)
- 新增接口返回纪要ID,前端据此进入编辑态,避免重复保存生成多条
- 会议编号加3位随机数防同秒撞唯一键;异常改 ServiceException;同步失败记日志
- enrich 为待办条目注入 assigneeName,列表/详情/导出可显示负责人姓名
- SysOaTaskServiceImpl.insertByBo 回填 taskId 供调用方关联

前端:
- 主持人/待办负责人改用人员单选弹窗(原多选组件取首位的方式易误操作)
- 会议类型、待办状态接入 sys_dict 字典(oa_meeting_type / oa_meeting_task_status)
- 新建保存后切换为编辑态;默认日期用本地时区(原 UTC 凌晨会差一天)
- 导出/打印带主持人、参会人、待办负责人姓名(原来只有用户ID)
- 删除已同步待办时提示任务不会被删除

SQL(已直接应用到生产库):
- 字典数据补全并修复 dict_id=0 脏数据(sys_dict_* 主键为雪花ID须显式指定)
- 菜单 2063809716454174722 icon 修为 documentation,授权10个角色
- 脚本改为幂等,去掉 DROP TABLE,del_flag 注释修正为逻辑删除值2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 10:12:48 +08:00
e5bfa0c78c 会议纪要:原始WIP版本留底
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 10:12:12 +08:00
79e536aeca oa更新项目总览 2026-06-08 10:11:33 +08:00
3334248847 库房回退 2026-06-05 13:54:11 +08:00
370142a99f im问题修复 2026-06-02 17:25:45 +08:00
b475bee7ed im问题修复 2026-06-02 16:22:05 +08:00
a556139b68 锁定 ruoyi-ui 依赖版本,避免别的机器 build 出 OpenIM WASM 不匹配
- 把 @openim/wasm-client-sdk 从 ^3.8.3 改为精确 3.8.3
- 解禁并提交 package-lock.json,使依赖树跨机器一致
- 其他机器请使用 npm ci 严格按 lock 安装

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 16:21:06 +08:00
9ce3bbf118 库房bug修复 2026-06-02 14:25:47 +08:00
c6e4c4bb06 库房bug修复 2026-06-02 14:22:50 +08:00
03ed8f258f 代码回退 2026-06-02 09:51:43 +08:00
bb45c2bb38 提交获取地理位置谷歌版 2026-06-02 09:46:03 +08:00
55443dac9e 提交 2026-06-01 15:31:49 +08:00
434e874777 提交 2026-06-01 13:31:05 +08:00
900b3638d4 提交 2026-06-01 10:45:47 +08:00
ffcb62cece 提交 2026-06-01 10:25:16 +08:00
dcc66aa4a9 推送项目重构代码 2026-05-31 14:19:15 +08:00
a28ea44cab 推送项目重构代码 2026-05-30 15:32:57 +08:00
3dafaceef2 推送项目重构代码 2026-05-29 19:52:32 +08:00
95141d0e1f fix(oa): 过滤考勤统计中的离职和禁用用户
在考勤统计逻辑中增加对用户状态的检查,跳过状态为非正常(已离职或已禁用)的用户,确保统计结果仅包含在职且启用的员工数据。
2026-05-28 09:37:52 +08:00
12076c5d0b feat(hrm): 新增员工紧急联系人管理功能
完成员工紧急联系人模块的全流程开发,包括:
1. 数据库表结构、Mapper、Service、Controller后端代码
2. 前端页面、API接口、导入导出功能
3. 配套SQL脚本、导入模板与使用文档
4. 支持批量导入导出、数据校验与用户关联匹配
2026-05-26 19:19:12 +08:00
81e529a2dd feat(oa): 添加项目进度步骤批量延期功能
- 在服务层接口添加批量延期方法定义
- 实现批量延期业务逻辑,支持按天或小时延期
- 添加数据库批量延期SQL映射
- 控制器增加批量延期API端点
- 前端组件添加批量延期按钮和对话框
- 集成前端批量延期API调用逻辑
- 添加批量延期数据传输对象定义
2026-05-16 15:30:19 +08:00
305d8524d1 feat(oa): 添加项目进度步骤负责人更新功能
- 引入 OaProjectScheduleStepMapper 依赖注入
- 新增 updateNodeHeaderByScheduleId 方法用于批量更新节点负责人
- 在修改项目进度时同步更新相关步骤的负责人信息
- 添加相应的 XML 映射配置实现条件更新逻辑
- 完善操作日志记录机制确保数据变更可追溯
2026-05-16 14:29:40 +08:00
47baa575df 推送任务进度操作历史,推送项目总览 2026-05-10 16:38:39 +08:00
9ce5cb8f2e 修改配置 2026-05-08 20:36:37 +08:00
ccf87c06ff Merge: OCR失败降级手动填写 + 手动新增条目 2026-05-08 19:49:06 +08:00
156602fd59 feat(报销/拨款): OCR失败时保留空条目供手动填写,支持手动新增条目和行内附件上传
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 19:49:03 +08:00
2752a31a49 修改配置 2026-05-08 18:55:53 +08:00
40fdd14d13 feat(报销/拨款): 进入页面检测OCR服务状态
- 后端新增 GET /ocr-health 端点,探测 Python OCR 服务 /health
- 前端页面 created 时调用健康检查,服务不可用时顶部显示红色警告
  "发票识别服务已停止,请联系信息化部门"
- 服务不可用时禁用附件上传区域(FileUpload 新增 disabled prop)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:47:51 +08:00
f1158d1e16 Merge: fix ossId精度丢失 2026-05-08 18:32:09 +08:00
6055f06f83 fix(报销/拨款): 修复ossId精度丢失导致附件下载失败
Number() 会将超出 JS 安全整数范围的雪花ID末位截断,
改为直接保留后端返回的字符串,保持精度。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:32:09 +08:00
a0d8f459e4 Merge: feat(详情) 发票明细内联附件下载 2026-05-08 18:28:19 +08:00
5672b1c07a feat(报销/拨款详情): 发票明细内联附件下载,移除独立单据区块
- 发票明细表格新增「附件」列,同一文件只在首行显示下载按钮
- 移除独立的「报销/拨款单据」区块,文件通过明细行直接下载
- 无发票明细的老记录保留附件兜底展示

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:28:19 +08:00
89f47860a7 Merge: fix(报销/拨款) 行项目金额改为价税合计,移除总金额输入框 2026-05-08 18:22:07 +08:00
7f9ae18022 fix(报销/拨款): 行项目金额改为价税合计,移除总金额手动输入框
- OCR解析:行项目金额改为 amount + tax_amount(价税合计)
- 总金额改为只读展示,由明细汇总自动计算,不再支持手动输入
- 去掉总金额字段的表单必填校验

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 18:22:04 +08:00
f5b2ddb743 Merge: feat(报销/拨款) 发票明细与附件双向联动 2026-05-08 17:49:47 +08:00
1e128cecfe feat(报销/拨款): 发票明细与附件双向联动
- 移除手动添加条目按钮,条目只能通过上传文件产生
- 删除附件时同步移除该文件的所有明细条目
- 删除条目时同步从附件列表移除对应文件(含该文件下全部条目)
- 无明细时隐藏明细表格区域

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 17:49:43 +08:00
534a64a874 Merge branch 'claude/magical-chebyshev-fe4d6c': feat(报销/拨款) 新增发票明细子表与OCR自动识别 2026-05-08 17:34:18 +08:00
c412f73b80 feat(报销/拨款): 新增发票明细子表与OCR自动识别
- 新增 hrm_invoice_item 共享子表(biz_type区分报销/拨款),每条记录对应一张发票条目
- 新增 HrmInvoiceOcrService,上传附件后自动调用 ai-ocr Python服务识别发票,结果逐条回填表单
- 报销/拨款申请提交及更新时同步保存发票明细;queryById 返回关联发票条目列表
- 前端:附件上传后自动触发OCR,展示"模型思考中"状态,识别完成后自动填充金额
- 详情页新增发票明细只读表格展示,兼容无明细的历史记录
- application.yml 增加 fad.ocr 配置项

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 17:34:08 +08:00
28a37f4105 feat(报销页面): 提高附件上传数量限制至200个
将报销单据附件和回执附件的上传数量限制从50个和10个统一提高到200个,以满足用户上传更多附件的需求
2026-05-07 10:31:54 +08:00
975c57f12b Merge branch 'main' of http://49.232.154.205:10100/DeXun/fad_oa 2026-05-07 10:29:31 +08:00