From fdbc5af6474abb39120b771af87005aeb6186ae5 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期一, 14 九月 2026 15:28:28 +0800
Subject: [PATCH] feat: 售后工单按条绑定部门与原因类型;新增加班工资管理;员工附件留档
---
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java | 37 ++++++++++++++++++++++++++++---------
1 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java
index a076b58..294181a 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java
@@ -15,6 +15,7 @@
import cn.iocoder.yudao.module.aftersales.enums.permission.AfterSalePermissionLevelEnum;
import cn.iocoder.yudao.module.aftersales.service.permission.AfterSalePermissionService;
import cn.iocoder.yudao.module.aftersales.service.permission.bo.AfterSalePermissionCreateReqBO;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -47,6 +48,9 @@
@Resource
private AfterSalePermissionService permissionService;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
public Long createTicket(AfterSaleTicketSaveReqVO createReqVO, Long userId) {
@@ -63,16 +67,21 @@
.setOwnerUserId(userId);
ticketMapper.insert(ticket);
- // 3. 鎻掑叆鏄庣粏琛�
+ // 3. 鎻掑叆鏄庣粏琛岋紙姣忔潯鐢熸垚鐙珛鍞悗鍗曞彿锛氬伐鍗曞彿-搴忓彿锛�
if (CollUtil.isNotEmpty(createReqVO.getItems())) {
- createReqVO.getItems().forEach(item -> {
- AfterSaleTicketItemDO itemDO = BeanUtils.toBean(item, AfterSaleTicketItemDO.class);
+ for (int i = 0; i < createReqVO.getItems().size(); i++) {
+ AfterSaleTicketItemDO itemDO = BeanUtils.toBean(createReqVO.getItems().get(i), AfterSaleTicketItemDO.class);
itemDO.setTicketId(ticket.getId());
+ itemDO.setItemNo(buildItemNo(no, i + 1));
ticketItemMapper.insert(itemDO);
- });
+ }
}
- // 4. 鍒涘缓鏁版嵁鏉冮檺锛堣礋璐d汉锛�
+ // 4. 缁戝畾闄勪欢
+ storageAttachmentApi.bindAttachments("file", "aftersales_after_sale_ticket",
+ ticket.getId(), createReqVO.getBlobIds());
+
+ // 5. 鍒涘缓鏁版嵁鏉冮檺锛堣礋璐d汉锛�
AfterSalePermissionCreateReqBO permBO = new AfterSalePermissionCreateReqBO();
permBO.setBizType(AfterSaleBizTypeEnum.AFTER_SALE_TICKET.getType());
permBO.setBizId(ticket.getId());
@@ -94,15 +103,19 @@
AfterSaleTicketDO updateObj = BeanUtils.toBean(updateReqVO, AfterSaleTicketDO.class);
ticketMapper.updateById(updateObj);
- // 3. 鏇存柊鏄庣粏琛岋紙鍏堝垹鍚庡锛�
+ // 3. 鏇存柊鏄庣粏琛岋紙鍏堝垹鍚庡锛屾瘡鏉$敓鎴愮嫭绔嬪敭鍚庡崟鍙凤細宸ュ崟鍙�-搴忓彿锛�
ticketItemMapper.deleteByTicketId(ticket.getId());
if (CollUtil.isNotEmpty(updateReqVO.getItems())) {
- updateReqVO.getItems().forEach(item -> {
- AfterSaleTicketItemDO itemDO = BeanUtils.toBean(item, AfterSaleTicketItemDO.class);
+ for (int i = 0; i < updateReqVO.getItems().size(); i++) {
+ AfterSaleTicketItemDO itemDO = BeanUtils.toBean(updateReqVO.getItems().get(i), AfterSaleTicketItemDO.class);
itemDO.setTicketId(ticket.getId());
+ itemDO.setItemNo(buildItemNo(ticket.getNo(), i + 1));
ticketItemMapper.insert(itemDO);
- });
+ }
}
+
+ // 4. 鏇存柊闄勪欢
+ storageAttachmentApi.updateAttachments("file", "aftersales_after_sale_ticket", updateReqVO.getId(), updateReqVO.getBlobIds());
}
@Override
@@ -113,6 +126,7 @@
// 杞垹闄�
ticketMapper.deleteById(id);
ticketItemMapper.deleteByTicketId(id);
+ storageAttachmentApi.deleteAttachmentsByRecord("aftersales_after_sale_ticket", id);
permissionService.deletePermission(AfterSaleBizTypeEnum.AFTER_SALE_TICKET.getType(), id);
}
@@ -192,6 +206,11 @@
// ========== 鍐呴儴鏂规硶 ==========
+ /** 鐢熸垚鏄庣粏鍞悗鍗曞彿锛氬伐鍗曞彿-涓や綅搴忓彿 */
+ private String buildItemNo(String ticketNo, int index) {
+ return ticketNo + "-" + String.format("%02d", index);
+ }
+
private AfterSaleTicketDO validateTicketExists(Long id) {
AfterSaleTicketDO ticket = ticketMapper.selectById(id);
if (ticket == null) {
--
Gitblit v1.9.3