51 Commits

Author SHA1 Message Date
Your Name
d6c81f1fdc feat: 管理员可以抢单,拥有完整权限
- 管理员可以抢单主任务(绕过部门类型、部门负责人限制)
- 管理员可以抢单子任务(绕过所有限制)
- 管理员拥有:发起任务、审核任务、指定任务、抢单、交付等完整权限
2026-01-04 08:39:52 +08:00
Your Name
07ce2e5613 feat: 管理员享受所有角色权限
- 管理员可以代审核所有任务(主任务和子任务组)
- 管理员可以发起任务(不受部门类型限制)
- isAdminUser同时检查isAdmin字段和角色
2026-01-04 08:36:33 +08:00
Your Name
79c0d92410 fix: 修复TaskItemService中userMapper改用userService 2026-01-04 08:31:22 +08:00
Your Name
d0cb8e800f feat: 群通知增加处理人信息和@功能
- 任务指派时发送群通知并@被指定的设计师
- 子任务组指派时发送群通知并@被指定的设计师
- 任务驳回时如果有处理人发送群通知并@处理人
- 子任务组驳回时发送群通知并@所有处理人
- 钉钉机器人支持通过手机号@群成员
2026-01-04 08:30:03 +08:00
Your Name
3733713e5c feat: 确保管理员可以看到所有任务
- 待审核任务:管理员可看到所有待审核任务
- 待审核子任务组:管理员可看到所有待审核子任务组
- 进行中子任务:管理员可看到所有进行中子任务
- 已完成子任务:管理员可看到所有已完成子任务
2026-01-04 08:19:29 +08:00
Your Name
cd9bb2bde1 fix: 修复DemandType字段名getName 2026-01-04 08:13:41 +08:00
Your Name
259fdcbe3f feat: 群通知标签增加任务需求类型 2026-01-04 08:12:13 +08:00
Your Name
7f6bef38cb fix: 群通知使用简洁纯文本样式
- 移除所有emoji图标
- 使用简单横线分隔
- 类似星巴克标签的简洁风格
2026-01-03 19:03:59 +08:00
Your Name
88532d1857 fix: 修复钉钉群通知格式
- 修复换行问题(两个空格+换行符)
- 移除所有星号和Markdown语法
- 使用纯文本格式
2026-01-03 19:01:34 +08:00
Your Name
92e30a9b23 fix: 优化群通知模板
- 移除截止时间(任务从接单开始计时)
- 预估工时添加说明'接单后开始计时'
- 添加访问地址 qd.yydd.ai
2026-01-03 18:56:06 +08:00
Your Name
6dcc725b48 feat: 优化群通知模板,显示完整任务信息
- 添加任务数量、品牌、类目、平台、SPU、子类型
- 添加预估工时、截止时间
- 添加发起人、发起部门信息
- 子任务组通知也添加完整信息
- 使用emoji图标和分隔线美化排版
2026-01-03 18:49:37 +08:00
Your Name
17d3799870 feat: 完善抢单权限控制、草稿状态编辑、群通知新模板等功能
- 后端: 子任务抢单权限校验(部门类型、任务类型限制)
- 后端: 子任务组驳回联动主任务逻辑
- 后端: 群通知新模板样式
- 后端: 个人钉钉通知自动绑定
- 前端: 抢单按钮状态判断优化
- 前端: 草稿状态显示及编辑功能
- 前端: 驳回状态样式
- 前端: 指定设计师功能增强
2026-01-03 18:31:49 +08:00
Your Name
64f3e25714 fix: 设计师列表支持递归查询子部门成员
问题:
- 部门负责人指定设计师时,只能看到直属部门成员
- 如果设计师在2级或3级部门,无法被上级部门负责人看到

修改:
- UserService.getDesignersWithWorkload:
  - 增加 getAllSubDepartmentIds 递归查询方法
  - 使用 IN 查询获取该部门及其所有子部门下的成员
2026-01-03 13:57:38 +08:00
Your Name
d08f0a3d47 fix: 添加UserService.isAdminUser方法以修复编译错误 2026-01-03 13:45:53 +08:00
Your Name
2bd4163328 fix: 修复任务审核弹窗UI对齐和设计师列表权限问题,排查详情信息缺失
1. 前端 TaskHall.vue:
   - 修复接单方式单选框的对齐问题,改为 Flex 布局并排显示且等高
   - 调整样式使其更整齐

2. 后端 UserController.java:
   - getDesignersWithWorkload 方法增加权限控制
   - 如果未传 deptId,非管理员用户强制使用自己的 deptId
   - 修复了其他部门负责人可以看到全公司设计师的问题

3. 后端 TaskApprovalService.java:
   - 在 getPendingApprovalTasks 中添加日志
   - 记录品牌、类目、平台信息填充失败的情况,便于排查数据问题
2026-01-03 13:44:23 +08:00
Your Name
c3454123db feat: 优化指派设计师功能,改用Select下拉框并显示工作量和预计完成时间
问题修复:
✅ 修复指派设计师按钮点击无效的问题
✅ 将Radio组改为Select下拉框,体验更好

功能优化:

1. 后端增强 (UserService.java)
   ✅ 新增返回设计师最早预计完成时间 (earliestDeadline)
   ✅ 查询该设计师进行中任务的最早deadline
   ✅ 便于负责人评估设计师工作量

2. 前端界面优化 (TaskHall.vue)
   ✅ 将RadioGroup改为Select下拉框
   ✅ 下拉框尺寸改为large,更易操作
   ✅ 显示设计师姓名
   ✅ 显示进行中任务数量
   ✅ 显示预计最早完成时间(相对时间)
   ✅ 根据工作量显示不同颜色:
      - 0个任务:绿色 "空闲"
      - 1-3个:绿色 "进行中: X个"
      - 4-5个:橙色 "进行中: X个"
      - 6+个:红色 "进行中: X个"

3. 时间显示格式
   ✅ 相对时间显示(例如:2天8小时后)
   ✅ 24小时内显示小时数
   ✅ 已逾期显示为"已逾期"

4. 下拉框选项样式
   ✅ 双栏布局:左侧姓名,右侧工作信息
   ✅ 工作量和完成时间用 | 分隔
   ✅ 信息一目了然

使用示例:
- 选择"指定设计师接单"
- 点击下拉框
- 看到:张三 | 进行中: 2个 | 最早完成: 1天5小时后
- 方便评估后选择最合适的设计师
2026-01-03 12:27:52 +08:00
Your Name
fac68333a7 feat: 优化任务时效计算逻辑 - 从接单时开始计算
问题:
- 任务时效(deadline)应该从设计师接单时开始计算
- 而不是从任务创建或审核通过时计算

修改内容:

1. TaskService.grabTask()
   - 无论任务之前是否有deadline
   - 抢单时都重新计算deadline
   - 从接单时间(now)开始 + estimatedHours
   - 添加详细日志记录

2. TaskApprovalService.approveReceivingLevel()
   - 接单部门负责人指定设计师时
   - 重新计算deadline
   - 从指定时间(now)开始 + estimatedHours
   - 添加详细日志记录

3. TaskApprovalService.approveDemandLevel()
   - assigned模式下已有正确逻辑
   - 从分配时间开始计算deadline
   - 保持不变

计算逻辑:
- deadline = 接单时间 + estimatedHours(小时)
- 如果estimatedHours为空或0,不设置deadline
- 记录详细日志便于排查

影响范围:
- 设计师抢单:✅ 重新计算
- 负责人指派:✅ 重新计算
- 需求部门指定:✅ 已有逻辑
- 发布到大厅:❌ 不设置(等待接单后计算)

示例:
- 任务预估8小时
- 设计师12:00接单
- deadline = 12:00 + 8小时 = 20:00
2026-01-03 11:54:59 +08:00
Your Name
193810628a fix: 修复三个问题
问题1:接单部门负责人审核缺少指派选项
- 已在之前修复handleApproveTask函数,接单部门负责人审核时会调用handleApproveTwoLevelTask
- 提供完整的审核选项(指派设计师/发布到大厅)

问题2:被驳回任务状态显示和编辑功能
- 修复状态显示:rejected显示"已驳回"(之前显示"已取消")
- 添加"重新编辑提交"按钮到被驳回的任务卡片
- 点击跳转到任务创建页面进行编辑
- 用户可以修改任务信息后重新提交审核

问题3:钉钉群通知调试改进
- 添加更详细的日志记录
- 在发送前后都记录日志
- 记录sendRobotMessage的返回值
- 方便排查通知发送失败的问题

改进内容:
1. 任务状态映射优化
   - rejected -> "已驳回"
   - cancelled -> "已取消"
   - 不再混淆这两种状态

2. 被驳回任务编辑流程
   - 任务卡片显示"重新编辑提交"按钮
   - 跳转到创建页面(带editId和mode参数)
   - 保留原有任务信息,允许修改后重新提交

3. 钉钉通知日志增强
   - "准备发送钉钉群通知"
   - "准备调用钉钉机器人发送消息"
   - "钉钉群通知发送成功/失败"
   - 详细的异常堆栈信息
2026-01-03 11:48:28 +08:00
Your Name
fdda2e5878 feat: 添加任务发布到大厅时的钉钉群机器人通知
问题:
- 任务审核通过并发布到大厅时,没有触发钉钉群机器人通知
- 设计师无法第一时间知道有新任务可接单

修复内容:
1. TaskApprovalService.approveReceivingLevel()
   - 接单部门负责人审核通过时
   - 如果未指定设计师(发布到大厅)
   - 自动发送钉钉群机器人消息
   - 包含任务标题、编号、积分、品牌等信息

2. TaskItemService.approveTaskGroup()
   - 子任务组审核通过时
   - 如果未指定设计师(发布到大厅)
   - 自动发送钉钉群机器人消息
   - 包含主任务标题、子任务组信息、任务列表

3. 通知内容:
   - 标题:🎯 新任务发布 / 🎯 新子任务组发布
   - 详细信息:任务编号、积分、品牌、类目、平台等
   - 行动提示:💡 赶快去任务大厅抢单吧!

4. 错误处理:
   - 通知发送失败不影响主流程
   - 记录错误日志便于排查

影响范围:
- 每次任务发布到大厅时,接单部门群会收到通知
- 提高设计师接单效率
- 通知发送失败不会影响任务正常流转
2026-01-03 11:35:36 +08:00
Your Name
371cfd5b2a feat: 为任务卡片添加子任务进度统计功能
新增功能:
1. Task实体新增字段:
   - subTaskTotal: 子任务总数
   - subTaskCompleted: 已完成子任务数
   - subTaskInProgress: 进行中子任务数
   - subTaskPending: 待接单子任务数
   - subTasks: 子任务列表(包含处理人信息)

2. TaskService新增方法:
   - fillSubTaskStats(): 填充流水线任务的子任务统计信息
   - 自动在getMyPublishedTasks和getMyReceivedTasks中调用
   - 统计各状态子任务数量
   - 自动填充处理人信息

3. 同时修复流水线任务主任务状态同步问题:
   - 设计师接单第一个子任务时,主任务状态更新为in_progress
   - 确保需求方能正确看到任务进度

影响范围:
- 需求方查看"我发起的"任务时,可以看到子任务进度
- 设计师查看接收的任务时,可以看到子任务详情
- 为后续前端显示提供数据支持
2026-01-03 11:32:16 +08:00
Your Name
6c50652df8 fix: 为所有通知添加钉钉推送功能
问题:
1. 需求部门负责人收不到审核通知
2. 任务完结时发起者收不到通知
3. 所有通知都没有钉钉个人消息推送

修复内容:
1. TaskItemService - 添加5个通知的钉钉推送
   - 子任务被接单通知
   - 子任务组待审核通知
   - 流水线任务完成通知
   - 子任务被驳回通知
   - 子任务已指派通知

2. TaskService - 已完成(之前修复)
   - 任务待审核通知
   - 任务提交审核通知
   - 任务审核通过通知
   - 任务被驳回通知
   - 抢单成功通知

3. NotificationService便捷方法
   - sendNotification(receiverId, title, content, type, id)
   - 默认启用钉钉推送

现在所有通知都会:
✅ 发送站内通知
✅ 发送钉钉个人工作消息(如果用户绑定了钉钉ID)
2026-01-03 11:17:07 +08:00
Your Name
038659bd41 fix: 修复用户管理和任务抢单权限控制
1. 修复设置管理员报错
   - 修正BusinessException构造函数调用

2. 完善抢单权限控制
   - 需求部门成员不能抢单
   - 所有部门负责人不能抢单(包括需求和接单部门)
   - 只有指定接单部门的普通成员可以抢单
   - 验证部门是否允许接该需求类型
   - 抢单成功后发送通知给任务发起人

3. 前端抢单按钮状态控制
   - 添加canGrabTask方法判断抢单权限
   - 可接单:绿色按钮
   - 不可接单:灰色按钮并禁用
   - 鼠标悬停显示不能抢单的原因
   - 支持任务列表和详情页面

4. 优化用户体验
   - 点击不可抢单按钮时提示具体原因
   - 按钮文案动态显示状态
2026-01-03 11:07:42 +08:00
Your Name
c62fe7853f fix: 修复钉钉个人通知未发送的问题
- TaskService中所有关键通知添加setPushDingtalk(1)
  - 任务待审核通知
  - 任务提交审核通知
  - 任务审核通过通知
  - 任务被驳回通知(高优先级)
- NotificationService便捷方法默认启用钉钉推送
- 确保所有重要通知都能触发个人工作消息推送
2026-01-03 10:42:59 +08:00
Your Name
1fd4d245a1 feat: 实现钉钉个人通知功能
- NotificationService添加DingTalkService和UserMapper依赖
- 实现asyncPushToDingtalk方法,支持发送个人工作通知
- 自动检查用户是否绑定钉钉ID
- 构建Markdown格式的通知内容
- 异步发送,不影响主流程性能
2026-01-03 10:29:55 +08:00
Your Name
e0a9402efd feat: 添加用户管理员身份设置功能
- 数据库添加is_admin字段和索引
- User实体类添加isAdmin字段
- 后端添加setAdmin API(UserController和UserService)
- 前端用户管理界面添加管理员标识列
- 添加设置/取消管理员按钮及功能
- 用户管理表格显示管理员标识(红色标签)
2026-01-03 10:13:29 +08:00
Your Name
8e0ecdb3ce fix: 移除TaskItem不存在的setStartTime调用 2026-01-02 20:05:09 +08:00
Your Name
2a7f9f7cd7 feat: 隐藏招募任务和指定任务发布类型,只保留默认模式 2026-01-02 19:54:25 +08:00
Your Name
e86b5a45f3 feat: 接单部门审核时添加指定设计师接单功能,显示设计师工作量 2026-01-02 19:32:53 +08:00
Your Name
ea4b6a8dc5 修复流水线任务审核通过后主任务状态未更新的问题
问题:流水线任务在审核通过后,主任务status仍为draft,导致子任务无法在可接任务列表中显示
原因:splitIntoPipelineSubTasks方法中只处理了recruitment和assigned模式,default模式下没有设置主任务状态
解决:为default模式及其他模式添加status=pending的设置,确保子任务可以被设计师看到并接单
2026-01-02 19:18:51 +08:00
Your Name
7d881ab617 修复Notification实体类updateTime字段导致的SQL错误
问题:审核通过时发送通知失败,提示'Unknown column update_time in field list'
原因:Notification实体类定义了updateTime字段并标记为自动填充,但数据库表sys_notification中没有此字段
解决:将updateTime字段标记为exist=false,表示此字段不存在于数据库表中
2026-01-02 18:52:42 +08:00
Your Name
cf33f38274 添加TeamScorePoolService的@Slf4j注解以支持日志功能 2026-01-02 18:10:15 +08:00
Your Name
6df38c4f89 修复部门设置负责人失败的问题
- 前端:允许选择所有用户作为部门负责人,不限于该部门成员
- 前端:修复leaderId和parentId的类型兼容性问题
- 后端:添加leaderId有效性验证,防止设置不存在的用户
2026-01-02 18:00:20 +08:00
Your Name
ec6a0d1838 修复保存部门失败问题:添加详细错误处理和日志记录 2026-01-02 16:45:30 +08:00
Your Name
ffed3d0856 修复设置部门负责人:改进leaderId处理逻辑,支持清除负责人 2026-01-02 16:33:02 +08:00
Your Name
f17415f44e 修复设置部门负责人:允许设置为null或0来清除负责人 2026-01-02 16:27:55 +08:00
Your Name
4e74747947 添加调试日志:在syncUserFromDingTalk中添加详细的roleIds检查日志 2026-01-02 16:17:37 +08:00
Your Name
cfa38c9b36 修复三个问题:1.钉钉登录时保留管理员角色 2.用户管理已支持设置管理员角色 3.网站设置添加注册功能开关 2026-01-02 16:08:44 +08:00
Your Name
e1989510de 添加后端日志:在getUserInfoByToken中记录roleIds 2026-01-02 15:59:08 +08:00
Your Name
a6ebea2438 修复编译错误:matchedDeptId变量引用 2026-01-02 14:30:19 +08:00
Your Name
9dc5b1d9ee 实现单用户多部门支持:创建中间表、实体类、Mapper和多部门操作方法,修改钉钉登录逻辑支持匹配多个部门 2026-01-02 14:29:48 +08:00
Your Name
7e72c665ee 优化钉钉部门同步:修复parent_id更新逻辑,确保父子关系正确处理(支持多级关系) 2026-01-02 13:58:17 +08:00
Your Name
f0ae3dabdf 添加缺失的inferDeptType方法 2026-01-02 13:43:22 +08:00
Your Name
43c6a6ce36 实现部门自动创建功能:同步钉钉部门时自动创建不存在的部门,修复已有用户部门分配逻辑 2026-01-02 13:42:23 +08:00
Your Name
5f75dd3888 移除未使用的import 2026-01-02 13:36:34 +08:00
Your Name
ff1363f55d 实现钉钉部门同步功能:递归获取所有部门并保存ding_dept_id,修复类型转换错误 2026-01-02 13:34:51 +08:00
Your Name
949eecaf37 修复钉钉登录:使用官方logo SVG路径,优化部门匹配逻辑(匹配失败时使用默认部门) 2026-01-02 13:26:14 +08:00
Your Name
d8a5191e3b 增强钉钉登录地址获取接口:添加登录功能启用检查和异常处理,增加详细日志 2026-01-02 12:58:35 +08:00
Your Name
9c71237bdf 修复钉钉配置保存问题:确保enabledFeatures正确保存到数据库,保存后重新加载配置 2026-01-02 12:46:09 +08:00
Your Name
ad343c357e 添加钉钉登录按钮:在登录页面显示钉钉登录按钮(仅在启用时显示),增强后端isFeatureEnabled方法检查配置启用状态 2026-01-02 12:37:49 +08:00
Your Name
3d52a3ac4d 修复钉钉测试连接功能:处理appSecret占位符、修复NullPointerException、增强错误处理 2026-01-02 12:22:04 +08:00