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<AfterSaleRepairDO> getRepairList(Collection<Long> ids) {
|
if (CollUtil.isEmpty(ids)) {
|
return List.of();
|
}
|
return repairMapper.selectBatchIds(ids);
|
}
|
|
@Override
|
public PageResult<AfterSaleRepairDO> 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;
|
}
|
|
}
|