gongchunyi
5 天以前 089964a497c2528e88ddc610af5f88f631303431
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceDefectRecordDto;
@@ -17,7 +19,6 @@
import com.ruoyi.device.service.DeviceDefectRecordService;
import com.ruoyi.device.service.IDeviceLedgerService;
import com.ruoyi.device.service.IDeviceRepairService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.other.service.TempFileService;
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.pojo.CommonFile;
@@ -31,11 +32,13 @@
import javax.servlet.http.HttpServletResponse;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@Service
@AllArgsConstructor
@@ -62,35 +65,132 @@
    }
    @Override
    public AjaxResult saveDeviceRepair(DeviceRepair deviceRepair) {
    public Long saveDeviceRepair(DeviceRepair deviceRepair) {
        DeviceLedger byId = deviceLedgerService.getById(deviceRepair.getDeviceLedgerId());
        if (byId == null) {
            throw new ServiceException("设备台账不存在");
        }
        deviceRepair.setDeviceName(byId.getDeviceName());
        deviceRepair.setDeviceModel(byId.getDeviceModel());
        boolean save = this.save(deviceRepair);
        if (save) {
            return AjaxResult.success();
        if (!this.save(deviceRepair)) {
            throw new ServiceException("添加失败");
        }
        return AjaxResult.error();
        return deviceRepair.getId();
    }
    @Override
    public AjaxResult updateDeviceRepair(DeviceRepair deviceRepair) {
        if (this.updateById(deviceRepair)) {
            Long id = deviceRepair.getId();
            //
            DeviceDefectRecordDto deviceDefectRecordDto = new DeviceDefectRecordDto();
            deviceDefectRecordDto.setDeviceLedgerId(id);
            deviceDefectRecordDto.setStatus("严重缺陷");
            List<DeviceDefectRecordDto> records = deviceDefectRecordService.listPage(new Page<>(1, -1), deviceDefectRecordDto).getRecords();
            if (!records.isEmpty()) {
                records.forEach(deviceDefectRecord -> {
                    deviceDefectRecord.setStatus("正常");
                    deviceDefectRecordService.updateByDDR(deviceDefectRecord);
                });
            }
            return AjaxResult.success();
    public void updateDeviceRepair(DeviceRepair deviceRepair) {
        DeviceRepair existing = this.getById(deviceRepair.getId());
        if (existing == null) {
            throw new ServiceException("报修单不存在");
        }
        return AjaxResult.error();
        if (!Objects.equals(existing.getStatus(), 0)) {
            throw new ServiceException("仅待维修状态可编辑");
        }
        if (!this.updateById(deviceRepair)) {
            throw new ServiceException("修改失败");
        }
        clearDefectRecordsIfNeeded(deviceRepair.getId());
    }
    @Override
    public void submitDeviceMaintain(DeviceRepair deviceRepair) {
        if (deviceRepair == null || deviceRepair.getId() == null) {
            throw new ServiceException("报修单ID不能为空");
        }
        DeviceRepair existing = this.getById(deviceRepair.getId());
        if (existing == null) {
            throw new ServiceException("报修单不存在");
        }
        if (!Objects.equals(existing.getStatus(), 0)) {
            throw new ServiceException("仅待维修状态可提交维修");
        }
        if (StringUtils.isEmpty(deviceRepair.getMaintenanceResult())) {
            throw new ServiceException("请填写维修结果");
        }
        String loginNick = SecurityUtils.getLoginUser().getNickName();
        if (StringUtils.isEmpty(existing.getMaintenanceName())) {
            throw new ServiceException("未指定维修人,无法维修");
        }
        if (!Objects.equals(existing.getMaintenanceName(), loginNick)) {
            throw new ServiceException("仅指定的维修人可进行维修");
        }
        existing.setMaintenanceResult(deviceRepair.getMaintenanceResult());
        existing.setMaintenanceTime(deviceRepair.getMaintenanceTime() != null
                ? deviceRepair.getMaintenanceTime() : LocalDateTime.now());
        // 维修失败=2,否则进入待验收=3
        if (Objects.equals(deviceRepair.getStatus(), 2)) {
            existing.setStatus(2);
        } else {
            existing.setStatus(3);
        }
        if (!this.updateById(existing)) {
            throw new ServiceException("提交维修失败");
        }
        clearDefectRecordsIfNeeded(existing.getId());
    }
    @Override
    public void acceptDeviceRepair(DeviceRepair deviceRepair) {
        if (deviceRepair == null || deviceRepair.getId() == null) {
            throw new ServiceException("报修单ID不能为空");
        }
        DeviceRepair existing = this.getById(deviceRepair.getId());
        if (existing == null) {
            throw new ServiceException("报修单不存在");
        }
        if (!Objects.equals(existing.getStatus(), 3)) {
            throw new ServiceException("当前状态不可验收");
        }
        String loginNick = SecurityUtils.getLoginUser().getNickName();
        if (StringUtils.isEmpty(existing.getAcceptanceName())) {
            throw new ServiceException("未指定验收人,无法验收");
        }
        if (!Objects.equals(existing.getAcceptanceName(), loginNick)) {
            throw new ServiceException("仅指定的验收人可进行验收");
        }
        if (StringUtils.isEmpty(deviceRepair.getAcceptanceRemark())) {
            throw new ServiceException("请填写验收备注");
        }
        existing.setAcceptanceTime(deviceRepair.getAcceptanceTime() != null
                ? deviceRepair.getAcceptanceTime() : LocalDateTime.now());
        existing.setAcceptanceRemark(deviceRepair.getAcceptanceRemark());
        existing.setStatus(1);
        if (!this.updateById(existing)) {
            throw new ServiceException("验收失败");
        }
        clearDefectRecordsIfNeeded(existing.getId());
    }
    private void clearDefectRecordsIfNeeded(Long repairId) {
        DeviceDefectRecordDto deviceDefectRecordDto = new DeviceDefectRecordDto();
        deviceDefectRecordDto.setDeviceLedgerId(repairId);
        deviceDefectRecordDto.setStatus("严重缺陷");
        List<DeviceDefectRecordDto> records = deviceDefectRecordService.listPage(new Page<>(1, -1), deviceDefectRecordDto).getRecords();
        if (!records.isEmpty()) {
            records.forEach(deviceDefectRecord -> {
                deviceDefectRecord.setStatus("正常");
                deviceDefectRecordService.updateByDDR(deviceDefectRecord);
            });
        }
    }
    private static String statusLabel(Integer status) {
        if (status == null) {
            return "";
        }
        switch (status) {
            case 0:
                return "待维修";
            case 1:
                return "完成";
            case 2:
                return "维修失败";
            case 3:
                return "待验收";
            default:
                return "";
        }
    }
    @Override
@@ -101,7 +201,7 @@
            supplierManageList.stream().forEach(deviceRepair -> {
                DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                BeanUtils.copyProperties(deviceRepair, deviceRepairExeclDto);
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : deviceRepair.getStatus() == 1 ? "完结" : "失败");
                deviceRepairExeclDto.setStatusStr(statusLabel(deviceRepair.getStatus()));
                deviceLedgerExeclDtos.add(deviceRepairExeclDto);
            });
@@ -117,7 +217,7 @@
            supplierManageList.stream().forEach(deviceRepair -> {
                DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                BeanUtils.copyProperties(deviceRepair, deviceRepairExeclDto);
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : deviceRepair.getStatus() == 1 ? "完结" : "失败");
                deviceRepairExeclDto.setStatusStr(statusLabel(deviceRepair.getStatus()));
                deviceLedgerExeclDtos.add(deviceRepairExeclDto);
            });
@@ -134,19 +234,41 @@
    }
    @Override
    public void uploadFile(MultipartFile file, Long deviceRepairId) {
    public void uploadFile(MultipartFile file, Long deviceRepairId, Integer fileType) {
        if (file == null || file.isEmpty()) {
            throw new ServiceException("上传失败,文件不能为空");
        }
        if (deviceRepairId == null || deviceRepairId <= 0) {
            throw new ServiceException("上传失败,设备报修ID不能为空");
        }
        int resolvedType = resolveRepairFileType(fileType);
        try {
            tempFileService.uploadByCommon(file, FileNameType.EQUIPMENT_WARRANTY.getValue(), deviceRepairId);
            tempFileService.uploadByCommon(file, resolvedType, deviceRepairId);
        } catch (Exception e) {
            throw new ServiceException("上传失败," + e.getMessage());
        }
    }
    /** 设备报修附件类型:14设备问题 15维修完成;13为历史类型归入设备问题 */
    private int resolveRepairFileType(Integer fileType) {
        if (fileType == null) {
            return FileNameType.EQUIPMENT_REPAIR_PROBLEM.getValue();
        }
        if (Objects.equals(fileType, FileNameType.EQUIPMENT_REPAIR_PROBLEM.getValue())
                || Objects.equals(fileType, FileNameType.EQUIPMENT_REPAIR_MAINTAIN.getValue())
                || Objects.equals(fileType, FileNameType.EQUIPMENT_WARRANTY.getValue())) {
            return fileType;
        }
        throw new ServiceException("上传失败,附件类型无效");
    }
    private List<Integer> repairFileTypes() {
        return Arrays.asList(
                FileNameType.EQUIPMENT_REPAIR_PROBLEM.getValue(),
                FileNameType.EQUIPMENT_REPAIR_MAINTAIN.getValue(),
                FileNameType.EQUIPMENT_WARRANTY.getValue()
        );
    }
    @Override
@@ -157,7 +279,8 @@
        return commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                .eq(CommonFile::getCommonId, deviceRepairId)
                .eq(CommonFile::getType, FileNameType.EQUIPMENT_WARRANTY.getValue()));
                .in(CommonFile::getType, repairFileTypes())
                .orderByAsc(CommonFile::getId));
    }
    @Override
@@ -190,7 +313,7 @@
        List<CommonFile> fileList = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                .in(CommonFile::getCommonId, ids)
                .eq(CommonFile::getType, FileNameType.EQUIPMENT_WARRANTY.getValue()));
                .in(CommonFile::getType, repairFileTypes()));
        for (CommonFile commonFile : fileList) {
            deleteFile(commonFile.getId());
        }