| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.basic.entity.Supply; |
| | | import com.ruoyi.basic.mapper.CoalInfoMapper; |
| | | import com.ruoyi.business.dto.EquipmentManagementDto; |
| | | import com.ruoyi.business.dto.EquipmentUsageRecordDto; |
| | | import com.ruoyi.business.entity.EquipmentManagement; |
| | |
| | | import com.ruoyi.business.mapper.EquipmentUsageRecordMapper; |
| | | import com.ruoyi.business.service.EquipmentUsageRecordService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | | import org.springframework.stereotype.Service; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | |
| | | |
| | | private final EquipmentUsageRecordMapper equipmentUsageRecordMapper; |
| | | |
| | | private final EquipmentManagementMapper equipmentManagementMapper; |
| | | private final EquipmentManagementMapper equipmentManagementMapper; |
| | | |
| | | private final SysUserMapper sysUserMapper; |
| | | |
| | | @Override |
| | | public IPage<EquipmentUsageRecordDto> selectUsageRecordList(Page<EquipmentUsageRecord> page, EquipmentUsageRecordDto equipmentUsageRecordDto) { |
| | |
| | | BeanUtils.copyProperties(entityPage, dtoPage); |
| | | |
| | | List<Long> eqIds = entityPage.getRecords().stream().map(EquipmentUsageRecord::getEquipmentId).toList(); |
| | | //批量查询 |
| | | List<Long> userIds = entityPage.getRecords().stream().map(EquipmentUsageRecord::getUserId).toList(); |
| | | //批量查询设备 |
| | | Map<Long, EquipmentManagement> equipmentManagementMap; |
| | | if (!eqIds.isEmpty()) { |
| | | List<EquipmentManagement> infos = equipmentManagementMapper.selectList(new LambdaQueryWrapper<EquipmentManagement>().in(EquipmentManagement::getId, eqIds)); |
| | |
| | | } else { |
| | | equipmentManagementMap = new HashMap<>(); |
| | | } |
| | | //人员查询 |
| | | Map<Long, SysUser> userMap; |
| | | if (!userIds.isEmpty()) { |
| | | List<SysUser> sysUsers = sysUserMapper.selectList(userIds); |
| | | userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); |
| | | }else { |
| | | userMap = new HashMap<>(); |
| | | } |
| | | //匹配数据 |
| | | List<EquipmentUsageRecordDto> dtoRecords = entityPage.getRecords().stream().map(entity -> { |
| | | EquipmentUsageRecordDto dto = new EquipmentUsageRecordDto(); |
| | | BeanUtils.copyProperties(entity, dto); |
| | | |
| | | EquipmentManagement equipment = equipmentManagementMap.get(entity.getEquipmentId()); |
| | | if (equipment != null) { |
| | | dto.setEquipmentNo(equipment.getEquipmentNo()); |
| | | dto.setEquipmentName(equipment.getEquipmentName()); |
| | | } |
| | | SysUser sysUser = userMap.get(entity.getUserId()); |
| | | if (sysUser != null) { |
| | | dto.setUserName(sysUser.getNickName()); |
| | | } |
| | | return dto; |
| | | }).toList(); |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int addOrEditUsageRecord(EquipmentUsageRecordDto equipmentUsageRecordDto) { |
| | | EquipmentUsageRecord equipmentUsageRecord = new EquipmentUsageRecord(); |
| | | BeanUtils.copyProperties(equipmentUsageRecordDto, equipmentUsageRecord); |
| | | |
| | | // 获取设备ID和领用数量 |
| | | Long equipmentId = equipmentUsageRecordDto.getEquipmentId(); |
| | | Integer newUsageQuantity = equipmentUsageRecordDto.getUsageQuantity(); |
| | | |
| | | // 查询设备信息(带乐观锁版本号) |
| | | EquipmentManagement equipment = equipmentManagementMapper.selectById(equipmentId); |
| | | if (equipment == null) { |
| | | throw new RuntimeException("设备不存在"); |
| | | } |
| | | |
| | | if (Objects.isNull(equipmentUsageRecordDto.getId())) { |
| | | // 检查库存是否充足 |
| | | if (equipment.getQuantity() < newUsageQuantity) { |
| | | throw new RuntimeException("库存不足,当前库存:" + equipment.getQuantity()); |
| | | } |
| | | |
| | | // 扣减库存 |
| | | equipment.setQuantity(equipment.getQuantity() - newUsageQuantity); |
| | | equipmentManagementMapper.updateById(equipment); |
| | | |
| | | // 创建领用记录 |
| | | return equipmentUsageRecordMapper.insert(equipmentUsageRecord); |
| | | } else { |
| | | // 1. 查询原领用记录 |
| | | EquipmentUsageRecord originalRecord = equipmentUsageRecordMapper.selectById(equipmentUsageRecordDto.getId()); |
| | | if (originalRecord == null) { |
| | | throw new RuntimeException("领用记录不存在"); |
| | | } |
| | | |
| | | // 2. 计算库存变化量(新数量 - 旧数量) |
| | | int quantityDelta = newUsageQuantity - originalRecord.getUsageQuantity(); |
| | | |
| | | if (quantityDelta != 0) { |
| | | // 3. 检查调整后库存是否充足(考虑增加和减少两种情况) |
| | | int newInventory = equipment.getQuantity() - quantityDelta; |
| | | if (newInventory < 0) { |
| | | throw new RuntimeException("库存不足,调整后库存将为:" + newInventory); |
| | | } |
| | | |
| | | // 4. 调整库存 |
| | | equipment.setQuantity(newInventory); |
| | | if (equipmentManagementMapper.updateById(equipment) == 0) { |
| | | throw new RuntimeException("库存更新失败,可能已被其他操作修改"); |
| | | } |
| | | } |
| | | |
| | | // 5. 更新领用记录 |
| | | return equipmentUsageRecordMapper.updateById(equipmentUsageRecord); |
| | | } |
| | | } |