| | |
| | | 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.github.xiaoymin.knife4j.core.util.StrUtil; |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.device.dto.DeviceMaintenanceDto; |
| | | import com.ruoyi.device.dto.DeviceRepairDto; |
| | | import com.ruoyi.device.execl.DeviceMaintenanceExeclDto; |
| | | import com.ruoyi.device.mapper.DeviceMaintenanceMapper; |
| | | import com.ruoyi.device.pojo.DeviceMaintenance; |
| | | import com.ruoyi.device.pojo.DeviceRepair; |
| | | import com.ruoyi.device.service.IDeviceMaintenanceService; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper; |
| | | import com.ruoyi.measuringinstrumentledger.pojo.SpareParts; |
| | | import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; |
| | | import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | | @Service |
| | | public class DeviceMaintenanceServiceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements IDeviceMaintenanceService { |
| | | |
| | | |
| | | @Autowired |
| | | private SparePartsMapper sparePartsMapper; |
| | | |
| | | @Autowired |
| | | private DeviceMaintenanceMapper deviceMaintenanceMapper; |
| | | |
| | | @Autowired |
| | | private SparePartsRequisitionRecordService sparePartsRequisitionRecordService; |
| | | |
| | | @Override |
| | | public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) { |
| | | |
| | | return deviceMaintenanceMapper.queryPage(page, deviceMaintenanceDto); |
| | | IPage<DeviceMaintenanceDto> deviceMaintenanceDtoIPage = deviceMaintenanceMapper.queryPage(page, deviceMaintenanceDto); |
| | | List<DeviceMaintenanceDto> records = deviceMaintenanceDtoIPage.getRecords(); |
| | | if (!CollectionUtils.isEmpty(records)) { |
| | | // 1. 获取所有唯一的备件ID |
| | | Set<String> allIds = records.stream() |
| | | .map(DeviceMaintenanceDto::getSparePartsIds) |
| | | .filter(StrUtil::isNotBlank) |
| | | .flatMap(ids -> Arrays.stream(StringUtils.split(ids, ","))) |
| | | .map(String::trim) |
| | | .filter(StrUtil::isNotBlank) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | if (!allIds.isEmpty()) { |
| | | // 2. 查询并创建ID到名称的映射 |
| | | Map<Long, String> idToNameMap = sparePartsMapper.selectBatchIds(new ArrayList<>(allIds)) |
| | | .stream() |
| | | .collect(Collectors.toMap( |
| | | SpareParts::getId, |
| | | SpareParts::getName, |
| | | (v1, v2) -> v1 |
| | | )); |
| | | |
| | | // 3. 为每个记录设置备件名称 |
| | | records.forEach(record -> { |
| | | String names = Optional.ofNullable(record.getSparePartsIds()) |
| | | .filter(StrUtil::isNotBlank) |
| | | .map(ids -> Arrays.stream(StringUtils.split(ids, ",")) |
| | | .map(String::trim) |
| | | .map(Long::valueOf) |
| | | .map(idToNameMap::get) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.joining(","))) |
| | | .orElse(""); |
| | | record.setSparePartsNames(names); |
| | | }); |
| | | } |
| | | } |
| | | return deviceMaintenanceDtoIPage; |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenance deviceMaintenance) { |
| | | DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId()); |
| | | // 处理备件使用情况 |
| | | 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.setSourceId(deviceMaintenance.getId()); |
| | | record.setDeviceLedgerId(oldDeviceMaintenance.getDeviceLedgerId()); |
| | | record.setSparePartsId(sparePartUse.getId()); |
| | | record.setQuantity(sparePartUse.getQuantity()); |
| | | sparePartsRequisitionRecordService.save(record); |
| | | } else { |
| | | return AjaxResult.error("备件 " + spareParts.getName() + " 数量不足"); |
| | | } |
| | | } |
| | | } |
| | | // 更新备件IDs字段 |
| | | if (!sparePartIds.isEmpty()) { |
| | | deviceMaintenance.setSparePartsIds(StringUtils.join(sparePartIds, ",")); |
| | | } |
| | | } |
| | | |
| | | if (this.updateById(deviceMaintenance)) { |
| | | return AjaxResult.success(); |
| | | } |
| | |
| | | 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); |
| | | }); |
| | | ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<DeviceMaintenanceExeclDto>(DeviceMaintenanceExeclDto.class); |