package cn.iocoder.yudao.module.aftersales.controller.admin.visit; 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.aftersales.controller.admin.visit.vo.AfterSaleVisitCreateReqVO; import cn.iocoder.yudao.module.aftersales.controller.admin.visit.vo.AfterSaleVisitPageReqVO; import cn.iocoder.yudao.module.aftersales.controller.admin.visit.vo.AfterSaleVisitRespVO; import cn.iocoder.yudao.module.aftersales.dal.dataobject.visit.AfterSaleVisitDO; import cn.iocoder.yudao.module.aftersales.service.visit.AfterSaleVisitService; import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; 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.*; 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.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - 售后回访记录") @RestController @RequestMapping("/aftersales/visit") @Validated public class AfterSaleVisitController { @Resource private AfterSaleVisitService visitService; @Resource private AdminUserApi adminUserApi; @Resource private StorageAttachmentApi storageAttachmentApi; @PostMapping("/create") @Operation(summary = "登记售后回访") @PreAuthorize("@ss.hasPermission('aftersales:visit:create')") public CommonResult createVisit(@Valid @RequestBody AfterSaleVisitCreateReqVO createReqVO) { return success(visitService.createVisit(createReqVO, getLoginUserId())); } @GetMapping("/get") @Operation(summary = "获得售后回访记录") @Parameter(name = "id", description = "回访记录编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('aftersales:visit:query')") public CommonResult getVisit(@RequestParam("id") Long id) { AfterSaleVisitDO visitDO = visitService.getVisit(id); AfterSaleVisitRespVO respVO = buildVisitDetailList(List.of(visitDO)).get(0); respVO.setAttachmentList(storageAttachmentApi.listAttachments("aftersales_after_sale_visit", id)); return success(respVO); } @GetMapping("/list") @Operation(summary = "获得某工单的回访记录列表") @Parameter(name = "ticketId", description = "工单编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('aftersales:visit:query')") public CommonResult> getVisitListByTicketId(@RequestParam("ticketId") Long ticketId) { List visitList = visitService.getVisitListByTicketId(ticketId); return success(buildVisitDetailList(visitList)); } @GetMapping("/page") @Operation(summary = "获得售后回访记录分页") @PreAuthorize("@ss.hasPermission('aftersales:visit:query')") public CommonResult> getVisitPage(@Valid AfterSaleVisitPageReqVO pageReqVO) { PageResult pageResult = visitService.getVisitPage(pageReqVO); return success(new PageResult<>(buildVisitDetailList(pageResult.getList()), pageResult.getTotal())); } // ========== 内部方法:批量拼装关联名称 ========== private List buildVisitDetailList(List visitList) { if (CollUtil.isEmpty(visitList)) { return Collections.emptyList(); } // 批量加载回访人名称 Set userIds = convertSet(visitList, AfterSaleVisitDO::getVisitorUserId); Map userMap = adminUserApi.getUserMap(userIds); return BeanUtils.toBean(visitList, AfterSaleVisitRespVO.class, vo -> { AdminUserRespDTO visitorUser = userMap.get(vo.getVisitorUserId()); if (visitorUser != null) { vo.setVisitorUserName(visitorUser.getNickname()); } }); } }