| | |
| | | package com.ruoyi.device.service.impl; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | |
| | | import com.ruoyi.device.dto.DeviceMaintenanceDto; |
| | | import com.ruoyi.device.execl.DeviceMaintenanceExeclDto; |
| | | import com.ruoyi.device.mapper.DeviceMaintenanceMapper; |
| | | import com.ruoyi.device.pojo.DeviceLedger; |
| | | import com.ruoyi.device.pojo.DeviceMaintenance; |
| | | import com.ruoyi.device.service.IDeviceLedgerService; |
| | | import com.ruoyi.device.service.IDeviceMaintenanceService; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | |
| | | @Service |
| | | public class DeviceMaintenanceServiceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements IDeviceMaintenanceService { |
| | | |
| | | |
| | | |
| | | @Autowired |
| | | private DeviceMaintenanceMapper deviceMaintenanceMapper; |
| | |
| | | private SparePartsMapper sparePartsMapper; |
| | | @Autowired |
| | | private SparePartsRequisitionRecordService sparePartsRequisitionRecordService; |
| | | @Autowired |
| | | private IDeviceLedgerService deviceLedgerService; |
| | | |
| | | @Override |
| | | public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) { |
| | | |
| | | return deviceMaintenanceMapper.queryPage(page, deviceMaintenanceDto); |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult saveDeviceRepair(DeviceMaintenance deviceMaintenance) { |
| | | boolean save = this.save(deviceMaintenance); |
| | | if (save){ |
| | | return AjaxResult.success(); |
| | | List<DeviceMaintenance> records = buildMaintenanceRecords(deviceMaintenance); |
| | | if (records.isEmpty()) { |
| | | return AjaxResult.error("请选择设备"); |
| | | } |
| | | return AjaxResult.error(); |
| | | return this.saveBatch(records) ? AjaxResult.success() : AjaxResult.error(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenance deviceMaintenance) { |
| | | DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId()); |
| | | // 处理备件使用情况 |
| | | if (oldDeviceMaintenance == null) { |
| | | return AjaxResult.error("保养记录不存在"); |
| | | } |
| | | if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) { |
| | | List<Long> sparePartIds = new ArrayList<>(); |
| | | for (DeviceMaintenance.SparePartUse sparePartUse : deviceMaintenance.getSparePartsUseList()) { |
| | | // 获取备件信息 |
| | | SpareParts spareParts = sparePartsMapper.selectById(sparePartUse.getId()); |
| | | if (spareParts != null) { |
| | | // 检查数量是否足够 |
| | | if (spareParts.getQuantity().compareTo(new BigDecimal(sparePartUse.getQuantity())) >= 0) { |
| | | // 更新数量 |
| | | spareParts.setQuantity(spareParts.getQuantity().subtract(new BigDecimal(sparePartUse.getQuantity()))); |
| | | sparePartsMapper.updateById(spareParts); |
| | | sparePartIds.add(sparePartUse.getId()); |
| | | |
| | | // 创建备件领用记录 |
| | | SparePartsRequisitionRecord record = new SparePartsRequisitionRecord(); |
| | | record.setSourceType(1); // 1 保养 |
| | | record.setSourceType(1); |
| | | record.setSourceId(deviceMaintenance.getId()); |
| | | record.setDeviceLedgerId(oldDeviceMaintenance.getDeviceLedgerId()); |
| | | record.setSparePartsId(sparePartUse.getId()); |
| | |
| | | } |
| | | } |
| | | } |
| | | // 更新备件IDs字段 |
| | | if (!sparePartIds.isEmpty()) { |
| | | deviceMaintenance.setSparePartsIds(StringUtils.join(sparePartIds, ",")); |
| | | } |
| | | } |
| | | |
| | | if (this.updateById(deviceMaintenance)) { |
| | | return AjaxResult.success(); |
| | | } |
| | | return AjaxResult.error(); |
| | | return this.updateById(deviceMaintenance) ? AjaxResult.success() : AjaxResult.error(); |
| | | } |
| | | |
| | | @Override |
| | | public void export(HttpServletResponse response, Long[] ids) { |
| | | List<DeviceMaintenance> supplierManageList = deviceMaintenanceMapper.selectList(null); |
| | | ArrayList<DeviceMaintenanceExeclDto> deviceLedgerExeclDtos = new ArrayList<>(); |
| | | ArrayList<DeviceMaintenanceExeclDto> result = new ArrayList<>(); |
| | | supplierManageList.forEach(deviceMaintenance -> { |
| | | DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto(); |
| | | BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto); |
| | | deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "待维修" : deviceMaintenance.getStatus() == 1 ? "完结" : "失败"); |
| | | // deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "维修" : "完好"); |
| | | deviceLedgerExeclDtos.add(deviceRepairExeclDto); |
| | | DeviceMaintenanceExeclDto dto = new DeviceMaintenanceExeclDto(); |
| | | BeanUtils.copyProperties(deviceMaintenance, dto); |
| | | dto.setStatus(deviceMaintenance.getStatus() == 0 ? "待维修" : deviceMaintenance.getStatus() == 1 ? "完结" : "失败"); |
| | | result.add(dto); |
| | | }); |
| | | ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<DeviceMaintenanceExeclDto>(DeviceMaintenanceExeclDto.class); |
| | | util.exportExcel(response, deviceLedgerExeclDtos, "设备报修导出"); |
| | | ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<>(DeviceMaintenanceExeclDto.class); |
| | | util.exportExcel(response, result, "设备保养导出"); |
| | | } |
| | | |
| | | @Override |
| | | public DeviceMaintenanceDto detailById(Long id) { |
| | | |
| | | return deviceMaintenanceMapper.detailById(id); |
| | | } |
| | | |
| | | private List<DeviceMaintenance> buildMaintenanceRecords(DeviceMaintenance source) { |
| | | Long[] deviceIds = source.getDeviceLedgerIds(); |
| | | if (deviceIds == null || deviceIds.length == 0) { |
| | | deviceIds = source.getDeviceLedgerId() == null ? new Long[0] : new Long[]{source.getDeviceLedgerId()}; |
| | | } |
| | | List<DeviceMaintenance> records = new ArrayList<>(); |
| | | Arrays.stream(deviceIds).distinct().forEach(deviceId -> { |
| | | DeviceLedger deviceLedger = deviceLedgerService.getById(deviceId); |
| | | if (deviceLedger == null) { |
| | | return; |
| | | } |
| | | int quantity = resolveQuantity(deviceLedger); |
| | | for (int i = 0; i < quantity; i++) { |
| | | DeviceMaintenance record = new DeviceMaintenance(); |
| | | BeanUtils.copyProperties(source, record); |
| | | record.setId(null); |
| | | record.setDeviceLedgerIds(null); |
| | | record.setDeviceLedgerId(deviceLedger.getId()); |
| | | record.setAreaId(deviceLedger.getAreaId()); |
| | | record.setDeviceName(deviceLedger.getDeviceName()); |
| | | record.setDeviceModel(deviceLedger.getDeviceModel()); |
| | | records.add(record); |
| | | } |
| | | }); |
| | | return records; |
| | | } |
| | | |
| | | private int resolveQuantity(DeviceLedger deviceLedger) { |
| | | if (deviceLedger == null || deviceLedger.getNumber() == null || deviceLedger.getNumber().compareTo(BigDecimal.ONE) < 0) { |
| | | return 1; |
| | | } |
| | | return Math.max(1, deviceLedger.getNumber().intValue()); |
| | | } |
| | | } |