From d39e4f7d839167c16425086dfa2f8747bccfdff9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 17:39:01 +0800
Subject: [PATCH] feat: 打通销售采购财务闭环并完成累计业务优化
---
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/AfterSaleTicketController.java | 64 ++++++++++++++++++++++++++------
1 files changed, 52 insertions(+), 12 deletions(-)
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/AfterSaleTicketController.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/AfterSaleTicketController.java
index 4f6cddd..20eda4f 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/AfterSaleTicketController.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/AfterSaleTicketController.java
@@ -5,11 +5,15 @@
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketFlowRespVO;
import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketPageReqVO;
import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketRespVO;
import cn.iocoder.yudao.module.aftersales.controller.admin.ticket.vo.ticket.AfterSaleTicketSaveReqVO;
import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketDO;
+import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketFlowDO;
import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketItemDO;
+import cn.iocoder.yudao.module.aftersales.enums.AfterSaleTicketStatusEnum;
+import cn.iocoder.yudao.module.aftersales.service.ticket.AfterSaleTicketFlowService;
import cn.iocoder.yudao.module.aftersales.service.ticket.AfterSaleTicketService;
import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
@@ -38,6 +42,8 @@
@Resource
private AfterSaleTicketService ticketService;
+ @Resource
+ private AfterSaleTicketFlowService ticketFlowService;
@Resource
private CrmCustomerApi customerApi;
@@ -73,7 +79,6 @@
@GetMapping("/get")
@Operation(summary = "鑾峰緱鍞悗宸ュ崟")
@Parameter(name = "id", description = "宸ュ崟缂栧彿", required = true, example = "1")
- @PreAuthorize("@ss.hasPermission('aftersales:ticket:query')")
public CommonResult<AfterSaleTicketRespVO> getTicket(@RequestParam("id") Long id) {
AfterSaleTicketDO ticket = ticketService.getTicket(id);
List<AfterSaleTicketItemDO> items = ticketService.getTicketItemListByTicketId(id);
@@ -81,26 +86,28 @@
List<AfterSaleTicketRespVO> enrichedList = buildTicketDetailList(List.of(ticket));
AfterSaleTicketRespVO respVO = enrichedList.get(0);
respVO.setItems(BeanUtils.toBean(items, AfterSaleTicketRespVO.Item.class));
+ respVO.setFeedbackAttachmentList(
+ storageAttachmentApi.listAttachments("aftersales_after_sale_ticket_feedback", id));
+ respVO.setResultAttachmentList(
+ storageAttachmentApi.listAttachments("aftersales_after_sale_ticket_result", id));
respVO.setAttachmentList(storageAttachmentApi.listAttachments("aftersales_after_sale_ticket", id));
+ respVO.setFlowList(buildFlowList(id));
return success(respVO);
+ }
+
+ @GetMapping("/flow-list")
+ @Operation(summary = "鑾峰緱鍞悗宸ュ崟娴佽浆璁板綍")
+ @Parameter(name = "ticketId", description = "宸ュ崟缂栧彿", required = true, example = "1")
+ public CommonResult<List<AfterSaleTicketFlowRespVO>> getTicketFlowList(@RequestParam("ticketId") Long ticketId) {
+ return success(buildFlowList(ticketId));
}
@GetMapping("/page")
@Operation(summary = "鑾峰緱鍞悗宸ュ崟鍒嗛〉")
- @PreAuthorize("@ss.hasPermission('aftersales:ticket:query')")
public CommonResult<PageResult<AfterSaleTicketRespVO>> getTicketPage(@Valid AfterSaleTicketPageReqVO pageReqVO) {
PageResult<AfterSaleTicketDO> pageResult = ticketService.getTicketPage(pageReqVO, getLoginUserId());
List<AfterSaleTicketRespVO> list = buildTicketDetailList(pageResult.getList());
return success(new PageResult<>(list, pageResult.getTotal()));
- }
-
- @PostMapping("/assign")
- @Operation(summary = "鍒嗛厤澶勭悊浜�")
- @PreAuthorize("@ss.hasPermission('aftersales:ticket:update')")
- public CommonResult<Boolean> assignTicket(@RequestParam("id") Long id,
- @RequestParam("handlerUserId") Long handlerUserId) {
- ticketService.assignTicket(id, handlerUserId);
- return success(true);
}
@PostMapping("/classify")
@@ -138,7 +145,40 @@
return success(true);
}
- // ========== 鍐呴儴鏂规硶锛氭壒閲忔嫾瑁呭叧鑱斿悕绉� ==========
+ // ========== 鍐呴儴鏂规硶锛氭祦杞褰� / 鎵归噺鎷艰鍏宠仈鍚嶇О ==========
+
+ private List<AfterSaleTicketFlowRespVO> buildFlowList(Long ticketId) {
+ List<AfterSaleTicketFlowDO> flowList = ticketFlowService.getFlowList(ticketId);
+ if (CollUtil.isEmpty(flowList)) {
+ return Collections.emptyList();
+ }
+ Set<Long> operatorIds = convertSet(flowList, AfterSaleTicketFlowDO::getOperatorId);
+ Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(operatorIds);
+ return BeanUtils.toBean(flowList, AfterSaleTicketFlowRespVO.class, vo -> {
+ vo.setFromStatusName(getStatusName(vo.getFromStatus()));
+ vo.setToStatusName(getStatusName(vo.getToStatus()));
+ AdminUserRespDTO operator = userMap.get(vo.getOperatorId());
+ if (operator != null) {
+ vo.setOperatorName(operator.getNickname());
+ } else if (vo.getOperatorId() != null) {
+ vo.setOperatorName("鐢ㄦ埛(ID=" + vo.getOperatorId() + ")");
+ } else {
+ vo.setOperatorName("绯荤粺");
+ }
+ });
+ }
+
+ private String getStatusName(Integer status) {
+ if (status == null) {
+ return null;
+ }
+ for (AfterSaleTicketStatusEnum item : AfterSaleTicketStatusEnum.values()) {
+ if (item.getStatus().equals(status)) {
+ return item.getName();
+ }
+ }
+ return "鏈煡鐘舵��(ID=" + status + ")";
+ }
private List<AfterSaleTicketRespVO> buildTicketDetailList(List<AfterSaleTicketDO> ticketList) {
if (CollUtil.isEmpty(ticketList)) {
--
Gitblit v1.9.3