package cn.iocoder.yudao.module.aftersales.service.repair; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.aftersales.dal.dataobject.repair.AfterSaleRepairDO; import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketDO; import cn.iocoder.yudao.module.aftersales.dal.mysql.repair.AfterSaleRepairMapper; import cn.iocoder.yudao.module.aftersales.dal.mysql.ticket.AfterSaleTicketMapper; import cn.iocoder.yudao.module.aftersales.enums.AfterSaleRepairStatusEnum; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.aftersales.enums.ErrorCodeConstants.*; /** * 售后维修记录 Service 实现类 */ @Service @Validated @Slf4j public class AfterSaleRepairServiceImpl implements AfterSaleRepairService { @Resource private AfterSaleRepairMapper repairMapper; @Resource private AfterSaleTicketMapper ticketMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createRepair(AfterSaleRepairDO repairDO) { // 校验工单存在 AfterSaleTicketDO ticket = ticketMapper.selectById(repairDO.getTicketId()); if (ticket == null) { throw exception(TICKET_NOT_EXISTS); } repairDO.setStatus(AfterSaleRepairStatusEnum.PENDING.getStatus()); repairMapper.insert(repairDO); // 更新工单关联维修记录 ticketMapper.updateById(new AfterSaleTicketDO().setId(ticket.getId()) .setRepairId(repairDO.getId())); return repairDO.getId(); } @Override @Transactional(rollbackFor = Exception.class) public void updateRepair(AfterSaleRepairDO repairDO) { validateRepairExists(repairDO.getId()); repairMapper.updateById(repairDO); } @Override @Transactional(rollbackFor = Exception.class) public void completeRepair(Long id) { AfterSaleRepairDO repair = validateRepairExists(id); repairMapper.updateById(new AfterSaleRepairDO().setId(id) .setStatus(AfterSaleRepairStatusEnum.COMPLETED.getStatus()) .setFinishTime(LocalDateTime.now())); // 更新工单状态 AfterSaleTicketDO ticket = ticketMapper.selectById(repair.getTicketId()); if (ticket != null) { ticketMapper.updateById(new AfterSaleTicketDO().setId(ticket.getId()) .setStatus(cn.iocoder.yudao.module.aftersales.enums.AfterSaleTicketStatusEnum.COMPLETED.getStatus()) .setResolvedTime(LocalDateTime.now())); } } @Override public AfterSaleRepairDO getRepair(Long id) { return validateRepairExists(id); } @Override public List getRepairList(Collection ids) { if (CollUtil.isEmpty(ids)) { return List.of(); } return repairMapper.selectBatchIds(ids); } @Override public PageResult getRepairPage(Object pageParam, Long ticketId, Integer status) { if (pageParam instanceof PageParam) { return repairMapper.selectPage((PageParam) pageParam, ticketId, status); } return repairMapper.selectPage(new PageParam(), ticketId, status); } // ========== 内部方法 ========== private AfterSaleRepairDO validateRepairExists(Long id) { AfterSaleRepairDO repair = repairMapper.selectById(id); if (repair == null) { throw exception(REPAIR_NOT_EXISTS); } return repair; } }