|
|
@@ -67,7 +67,40 @@ public class TaskService implements TaskServiceInterface {
|
|
|
if (executorType == null || executorType.isEmpty()) {
|
|
|
executorType = "child";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ if ("member".equals(executorType)) {
|
|
|
+ Long currentMemberId = getCurrentMemberId(userId);
|
|
|
+ long familyMemberCount = familyMemberMapper.selectCount(
|
|
|
+ new LambdaQueryWrapper<FamilyMember>()
|
|
|
+ .eq(FamilyMember::getFamilyId, currentUser.getFamilyId()));
|
|
|
+ if (familyMemberCount < 2) {
|
|
|
+ throw new IllegalArgumentException("该任务需分配给其他家庭成员,当前家庭不足2人");
|
|
|
+ }
|
|
|
+ List<Long> assigneeIds = dto.getMemberIds();
|
|
|
+ if (assigneeIds == null || assigneeIds.isEmpty()) {
|
|
|
+ if (dto.getExecutorId() != null) {
|
|
|
+ assigneeIds = Collections.singletonList(dto.getExecutorId());
|
|
|
+ } else if (dto.getMemberId() != null) {
|
|
|
+ assigneeIds = Collections.singletonList(dto.getMemberId());
|
|
|
+ } else {
|
|
|
+ assigneeIds = Collections.emptyList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (Long assigneeId : assigneeIds) {
|
|
|
+ if (assigneeId == null) continue;
|
|
|
+ if (assigneeId.equals(currentMemberId)) {
|
|
|
+ throw new IllegalArgumentException("不能给自己分配家庭成员任务");
|
|
|
+ }
|
|
|
+ Long count = familyMemberMapper.selectCount(
|
|
|
+ new LambdaQueryWrapper<FamilyMember>()
|
|
|
+ .eq(FamilyMember::getId, assigneeId)
|
|
|
+ .eq(FamilyMember::getFamilyId, currentUser.getFamilyId()));
|
|
|
+ if (count == 0) {
|
|
|
+ throw new IllegalArgumentException("被分配成员不属于本家庭");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 支持多孩子:为每个孩子创建独立任务实例
|
|
|
List<Long> childIds = dto.getMemberIds();
|
|
|
if (childIds == null || childIds.isEmpty()) {
|
|
|
@@ -207,6 +240,14 @@ task.setReviewByCategory(dto.getReviewByCategory() != null ? dto.getReviewByCate
|
|
|
return task;
|
|
|
}
|
|
|
|
|
|
+ private Long getCurrentMemberId(Long userId) {
|
|
|
+ FamilyMember member = familyMemberMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<FamilyMember>()
|
|
|
+ .eq(FamilyMember::getUserId, userId)
|
|
|
+ .last("LIMIT 1"));
|
|
|
+ return member != null ? member.getId() : null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 实现接口:获取今日任务列表(按childId,不过滤维度)
|
|
|
*/
|