package cn.iocoder.yudao.module.ums.controller.admin.member;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
|
import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.ums.controller.admin.member.vo.UmsMemberPageReqVO;
|
import cn.iocoder.yudao.module.ums.controller.admin.member.vo.UmsMemberRespVO;
|
import cn.iocoder.yudao.module.ums.controller.admin.member.vo.UmsMemberSaveReqVO;
|
import cn.iocoder.yudao.module.ums.dal.dataobject.member.UmsMemberDO;
|
import cn.iocoder.yudao.module.ums.service.member.UmsMemberService;
|
import cn.iocoder.yudao.module.ums.service.member.UmsMemberServiceImpl;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jakarta.annotation.Resource;
|
import jakarta.validation.Valid;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
import java.util.stream.Collectors;
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
|
|
@Tag(name = "管理后台 - 会员管理")
|
@RestController
|
@RequestMapping("/ums/member")
|
@Validated
|
public class UmsMemberController {
|
|
public static final String MEMBER_RECORD_TYPE =
|
UmsMemberServiceImpl.MEMBER_RECORD_TYPE;
|
|
@Resource
|
private UmsMemberService memberService;
|
|
@Resource
|
private AdminUserApi adminUserApi;
|
|
@Resource
|
private StorageAttachmentApi storageAttachmentApi;
|
|
@PostMapping("/create")
|
@Operation(summary = "创建会员")
|
@PreAuthorize("@ss.hasPermission('ums:member:create')")
|
public CommonResult<Long> createMember(@Valid @RequestBody UmsMemberSaveReqVO createReqVO) {
|
return success(memberService.createMember(createReqVO));
|
}
|
|
@PutMapping("/update")
|
@Operation(summary = "更新会员")
|
@PreAuthorize("@ss.hasPermission('ums:member:update')")
|
public CommonResult<Boolean> updateMember(@Valid @RequestBody UmsMemberSaveReqVO updateReqVO) {
|
memberService.updateMember(updateReqVO);
|
return success(true);
|
}
|
|
@DeleteMapping("/delete")
|
@Operation(summary = "删除会员")
|
@Parameter(name = "id", description = "编号", required = true)
|
@PreAuthorize("@ss.hasPermission('ums:member:delete')")
|
public CommonResult<Boolean> deleteMember(@RequestParam("id") Long id) {
|
memberService.deleteMember(id);
|
return success(true);
|
}
|
|
@GetMapping("/get")
|
@Operation(summary = "获得会员")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('ums:member:query')")
|
public CommonResult<UmsMemberRespVO> getMember(@RequestParam("id") Long id) {
|
UmsMemberDO member = memberService.getMember(id);
|
return success(buildMemberDetail(member));
|
}
|
|
@GetMapping("/get-by-user-id")
|
@Operation(summary = "通过用户ID获得会员")
|
@Parameter(name = "userId", description = "用户ID", required = true, example = "100")
|
@PreAuthorize("@ss.hasPermission('ums:member:query')")
|
public CommonResult<UmsMemberRespVO> getMemberByUserId(@RequestParam("userId") Long userId) {
|
UmsMemberDO member = memberService.getMemberByUserId(userId);
|
return success(buildMemberDetail(member));
|
}
|
|
@GetMapping("/page")
|
@Operation(summary = "获得会员/通讯录分页")
|
@PreAuthorize("@ss.hasPermission('ums:member:query')")
|
public CommonResult<PageResult<UmsMemberRespVO>> getMemberPage(
|
@Valid UmsMemberPageReqVO pageReqVO) {
|
PageResult<UmsMemberDO> pageResult = memberService.getMemberPage(pageReqVO);
|
return success(new PageResult<>(buildMemberDetailList(pageResult.getList()), pageResult.getTotal()));
|
}
|
|
// ==================== 内部方法 ====================
|
|
private UmsMemberRespVO buildMemberDetail(UmsMemberDO member) {
|
if (member == null) {
|
return null;
|
}
|
return buildMemberDetailList(Collections.singletonList(member)).get(0);
|
}
|
|
private List<UmsMemberRespVO> buildMemberDetailList(List<UmsMemberDO> list) {
|
if (CollUtil.isEmpty(list)) {
|
return Collections.emptyList();
|
}
|
|
// 1.1 获取关联系统用户信息
|
Set<Long> userIds = convertSet(list, UmsMemberDO::getUserId);
|
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
|
// 1.2 获取附件
|
Map<Long, List<StorageBlobRespDTO>> attachmentMap = list.stream()
|
.collect(Collectors.toMap(UmsMemberDO::getId,
|
r -> storageAttachmentApi.listAttachments(MEMBER_RECORD_TYPE, r.getId())));
|
|
// 2. 拼接结果
|
return BeanUtils.toBean(list, UmsMemberRespVO.class, (vo) -> {
|
findAndThen(userMap, vo.getUserId(), user -> vo.setUsername(user.getNickname()));
|
List<StorageBlobRespDTO> attachments = attachmentMap.getOrDefault(vo.getId(), Collections.emptyList());
|
vo.setAttachmentList(attachments);
|
vo.setHasAttachment(CollUtil.isNotEmpty(attachments));
|
});
|
}
|
|
}
|