| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | } |
| | | |
| | | @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 |
| | |
| | | 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); |
| | | }); |
| | |
| | | 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); |
| | | }); |
| | |
| | | } |
| | | |
| | | @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 |
| | |
| | | |
| | | 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 |
| | |
| | | |
| | | 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()); |
| | | } |