52 Commits

Author SHA1 Message Date
Your Name
1d66f0d7f5 修复子任务积分计算错误的bug
问题:当子任务包含多个任务类型时,updateTaskItemsQuantityAndScore方法
只用第一个任务类型的单价计算总积分,导致积分显示错误。

解决:
1. 先更新typeDetails JSON,再从更新后的typeDetails中重新计算总积分
2. 新增calculateTotalScoreFromTypeDetails方法从JSON中累加所有类型积分
3. 新增calculateTotalQuantityFromTypeDetails方法计算总数量
4. 同时更新平均单价以保持数据一致性
2026-01-27 20:57:28 +08:00
Your Name
b49c9e411a fix: 修复接单部门审核页面重新调整任务明细数量后无法生效的问题
问题描述:
- 接单部门负责人在审核页面调整任务明细数量时
- applyTaskUpdates方法只更新了主任务的taskTypeIds、quantity和score
- 但没有同步更新子任务(task_item)表中的quantity、totalScore和typeDetails字段
- 导致调整后的数量无法生效

解决方案:
- 在applyTaskUpdates方法中添加updateTaskItemsQuantityAndScore调用
- 新增updateTaskItemsQuantityAndScore方法:同步更新子任务的数量和积分
- 新增updateTypeDetailsJson方法:更新typeDetails JSON字段中的数量信息
2026-01-26 18:57:36 +08:00
Your Name
20e7ede2d5 fix: 修复一级需求任务明细完善后再次编辑导致重新启动一级审批的问题
问题描述:
- 一级需求任务在明细完善后被再次编辑时,如果approval_status为null
- 系统无法识别一级审批已通过,导致任务被重新设为pending_primary_approval
- 需求部门负责人需要再次审批并指定明细完善人

解决方案:
- 在updatePipelineTask方法中增强判断逻辑
- 通过查询审批日志(approve_primary记录)判断一级审批是否已通过
- 如果已通过,直接进入接单部门审核流程,跳过重复的一级审批

新增方法:
- TaskApprovalService.hasPrimaryApprovalPassed() - 检查一级审批是否已通过
2026-01-26 18:51:06 +08:00
Your Name
a41553fe88 一级需求任务:补充各节点对一级发起人的通知
补充以下节点的一级发起人通知:
1. 子任务被接单 - 同时通知一级发起人
2. 子任务进度更新 - 同时通知一级发起人
3. 流水线任务全部完成 - 同时通知一级发起人
4. 子任务组审核通过并指派 - 通知一级发起人
5. 需求部门审批通过 - 通知一级发起人审核进度
6. 需求部门审批驳回 - 同时通知一级发起人
7. 接单部门审批通过 - 通知一级发起人任务已发布
8. 接单部门审批驳回 - 同时通知一级发起人

确保一级需求发起人能够全程跟踪任务状态变化
2026-01-24 11:34:19 +08:00
Your Name
c575d6fedb feat: 添加任务节点查询功能 - 支持通过任务编号或标题查询任务流程状态和当前节点 2026-01-24 10:35:04 +08:00
Your Name
e2feece96b fix: 修复一级需求部门任务子任务状态设置,支持顺序和并行流水线模式 2026-01-22 18:36:28 +08:00
Your Name
03c792b22f fix: 修复一级需求部门任务在需求部门负责人审核通过后子任务状态更新为pending_approval 2026-01-22 18:16:57 +08:00
Your Name
d15baa97f5 fix: 接单部门驳回任务时,如果需求部门没有负责人则退回给发起人 2026-01-22 11:35:44 +08:00
Your Name
4163799b63 fix: 使用@Autowired字段注入解决循环依赖 2026-01-20 00:21:22 +08:00
Your Name
907f88e486 fix: 在TaskApprovalService中也添加@Lazy解决循环依赖 2026-01-20 00:19:17 +08:00
Your Name
6714a18972 fix: 修复logApproval方法调用 2026-01-20 00:16:04 +08:00
Your Name
3bbbd20098 feat: 支持一级需求任务明细完善功能
- 修改updatePipelineTask方法允许detailCompleterId编辑任务
- 添加pending_detail_completion状态到允许编辑的状态列表
- 添加handlePrimaryTaskDetailCompletion方法处理明细完善后的状态转换
- 明细完善后任务直接进入接单部门审核流程
- 将determineReceivingLeader方法改为public以便跨服务调用
2026-01-20 00:11:28 +08:00
Your Name
e50a659dd2 fix: 一级需求部门任务流程修复 - 设置正确的任务状态和审核状态,添加通知发送 2026-01-19 23:09:52 +08:00
Your Name
c99a927cca feat: 添加一级需求部门功能
- 新增一级需求部门类型和品牌关联管理
- 新增一级需求部门任务创建、审核、明细完善流程
- 新增一级需求部门数据分析模块
- 任务卡片显示一级需求人信息
- 部门管理增加品牌关联配置
2026-01-19 20:58:09 +08:00
Your Name
5573a89e41 fix: 修复接单部门审批人选择错误的问题
1. TaskService: 创建子任务时保存用户选择的接单部门(selectedDeptId)到receiver_dept_id
2. TaskApprovalService: 优先从子任务的receiver_dept_id确定接单部门负责人
3. 解决多接单部门时总是取第一个部门负责人的问题
2026-01-16 15:23:24 +08:00
Your Name
7f698455eb fix: 截止时间显示到时分(任务卡片和钉钉通知) 2026-01-15 18:33:35 +08:00
Your Name
3922d3653b feat: 所有页面积分显示支持小数点后两位
- Analytics.vue: 设计师绩效、用户需求、扣分明细、CSV导出
- DesignerHall.vue: 设计师卡片累计积分
- TaskHall.vue: 任务卡片积分、typeDetails积分
- LeaderWorkbench.vue: 任务积分
- MyTasks.vue: 任务积分
- CreateTask.vue: 预估积分、任务类型积分
- RewardRecords.vue: 累计积分、奖励积分
- Goals.vue: 奖励积分
- IncentiveCenter.vue: 用户积分、奖励积分
- Contests.vue: 竞赛得分、奖励积分
- CheckIn.vue: 历史奖励积分
- ScorePoolManagement.vue: 积分变动
- Achievements.vue: 奖励积分
2026-01-15 15:39:32 +08:00
Your Name
b47e322870 修复接单部门负责人驳回任务时没有通知任务发起人的问题
- 接单部门负责人驳回时,首先通知任务发起人
- 如果需求部门负责人不是发起人,也通知需求部门负责人
- 添加日志记录通知发送情况
2026-01-14 19:40:11 +08:00
Your Name
9b5407060a 修复流水线任务审核通过后只通知一个设计师的问题
- 新增sendTaskAssignedNotification方法
- 流水线任务审核通过后,遍历第一个部门的所有子任务
- 给每个子任务的设计师都发送钉钉通知
- 每个设计师收到的通知只包含自己负责的任务明细
2026-01-14 19:26:14 +08:00
Your Name
124e18ab78 feat: 实施工作时间配置系统
- 添加工作时间配置数据库迁移(V12__add_work_hours_config.sql)
- 创建WorkHoursCalculator工具类用于工作时间计算
- 添加工作时间配置API接口(SystemConfigController)
- 修改后端服务使用动态工作时间(TaskService、TaskItemService、TaskApprovalService、AnalyticsService)
- 在Settings.vue中添加工作时间配置UI
- 修改前端时效格式化函数使用动态工作时长(TaskHall.vue、CreateTask.vue)
- 所有时间计算(截止时间、延误扣分、时效格式化)现在使用配置的工作时间,替换硬编码的8小时
2026-01-14 11:40:43 +08:00
Your Name
4ee87abe73 fix: 统一钉钉通知工时格式化标准为8小时=1天 2026-01-13 18:04:27 +08:00
Your Name
75a0783379 修复指派任务:在拆分流水线子任务前先保存主任务receiverId,确保子任务能正确获取接收人 2026-01-13 15:15:41 +08:00
Your Name
b7038e8531 fix: 修复指派模式流水线任务审核通过后状态未正确更新为in_progress的BUG 2026-01-08 16:01:35 +08:00
Your Name
7b92476bc5 fix: 统一任务通知模版格式,指派任务通知与新任务发布通知保持一致 2026-01-08 15:56:40 +08:00
Your Name
eb53c182ad fix: 1.指派任务审核通过后只发送个人通知给设计师 2.优化通知内容明确告知无需抢单 3.修复设计师进行中任务列表调用正确的接口 2026-01-08 15:53:31 +08:00
Your Name
81cb6b3eed fix: 设计师绩效排行榜横向拉满,修复积分统计,优化表格深色样式,白色星星评分 2026-01-08 11:59:27 +08:00
Your Name
4e4b8293c2 fix: 所有任务都需要两级审核,预先指定设计师的任务在接单部门审核时不能修改 2026-01-08 10:07:06 +08:00
Your Name
7936451d61 修复:1.添加素材API配置项到数据库 2.RestTemplate支持信任所有HTTPS证书 2026-01-07 14:23:31 +08:00
Your Name
54438a9910 功能:1.指定设计师发送钉钉个人通知 2.部门负责人可查看部门内所有任务 2026-01-07 13:00:19 +08:00
Your Name
c001103192 fix: 优化钉钉通知消息,去掉重复的标题 2026-01-07 09:51:07 +08:00
Your Name
b6457bba01 feat: 钉钉通知模板增加任务类型明细、数量和积分信息 2026-01-07 09:48:08 +08:00
Your Name
a6d620d114 feat: 任务标题改为SPU+品牌+平台,SPU输入限制大写字母和数字 2026-01-06 22:50:18 +08:00
Your Name
73fd5a9b08 fix: 后端全面支持三级分类继承二级分类的接单部门配置
- TaskService: 创建任务分组时支持继承
- TaskService: 获取可接单任务列表时支持继承
- TaskItemService: 接单权限验证时支持继承
- TaskApprovalService: 确定接单部门负责人时支持继承
- PipelineTaskDTO: 添加预览图字段
2026-01-06 22:40:35 +08:00
Your Name
571388f414 fix: 修复多个问题
1. 修复部门负责人看不到任务关联信息(品牌、类目、平台)
   - TaskService.getTaskById增加fillTaskRelatedInfo方法填充所有关联信息

2. 修复调整任务类型数量时积分同步显示
   - 审核弹窗添加预估积分实时计算和显示

3. 修复流水线任务拆分后母任务不再显示在任务大厅
   - TaskMapper添加is_pipeline=0条件

4. 修复驳回任务显示'草稿'问题
   - 驳回时保存rejectReason到数据库
   - 前端正确判断并显示'已驳回'状态

5. 修复重新编辑被驳回任务时数据丢失问题
   - loadTaskForEdit完善所有字段加载
   - 显示驳回原因提示用户修改
   - 添加remark字段到formData

6. 修复进行中任务卡片缺少'指定'标签显示
2026-01-05 11:21:16 +08:00
Your Name
07ce2e5613 feat: 管理员享受所有角色权限
- 管理员可以代审核所有任务(主任务和子任务组)
- 管理员可以发起任务(不受部门类型限制)
- isAdminUser同时检查isAdmin字段和角色
2026-01-04 08:36:33 +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
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
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
e86b5a45f3 feat: 接单部门审核时添加指定设计师接单功能,显示设计师工作量 2026-01-02 19:32:53 +08:00