package com.ruoyi.stock.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.excel.SupplierManageExcelDto; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.domain.R; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.stock.dto.ManufacturerDto; import com.ruoyi.stock.execl.ManufacturerExcelDto; import com.ruoyi.stock.mapper.ManufacturerMapper; import com.ruoyi.stock.mapper.StockInventoryMapper; import com.ruoyi.stock.pojo.Manufacturer; import com.ruoyi.stock.pojo.StockInventory; import com.ruoyi.stock.service.ManufacturerService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; /** *

* 厂商服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-05-28 09:52:35 */ @Service @RequiredArgsConstructor public class ManufacturerServiceImpl extends ServiceImpl implements ManufacturerService { private final StockInventoryMapper stockInventoryMapper; private final ManufacturerMapper manufacturerMapper; private final SysUserMapper sysUserMapper; /** * 厂商新增 */ @Override @Transactional public void saveManufacturer(Manufacturer manufacturer) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Manufacturer::getName,manufacturer.getName()); if (baseMapper.selectCount(queryWrapper) > 0) { throw new RuntimeException("厂家已存在"); } baseMapper.insert(manufacturer); } /** * 厂商删除 */ @Override @Transactional public int delManufacturer(List ids) { // 批量检查是否关联库存 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(StockInventory::getManufacturerId, ids); List inventoryList = stockInventoryMapper.selectList(queryWrapper); if (!inventoryList.isEmpty()) { throw new RuntimeException("厂商已关联库存,无法删除"); } return baseMapper.deleteBatchIds(ids); } /** * 厂商详情 */ @Override public Manufacturer manufacturerDetail(Long id) { return baseMapper.selectById(id); } /** * 厂商修改 */ @Override @Transactional public int manufacturerUpdate(Manufacturer manufacturer) { return baseMapper.updateById(manufacturer); } /** * 厂商分页查询 */ @Override public IPage manufacturerListPage(Page page, ManufacturerDto manufacturerDto) { return manufacturerMapper.manufacturerListPage(page,manufacturerDto); } /** * 厂商导出 */ @Override public void manufacturerExport(HttpServletResponse response, ManufacturerDto manufacturerDto) { List list = manufacturerMapper.manufacturerExportList(manufacturerDto); ExcelUtil util = new ExcelUtil<>(ManufacturerExcelDto.class); util.exportExcel(response, list, "厂家数据"); } /** * 厂商导入 */ @Override @Transactional public R importData(MultipartFile file) { try { ExcelUtil util = new ExcelUtil<>(ManufacturerExcelDto.class); List list = util.importExcel(file.getInputStream()); ArrayList manufacturers = new ArrayList<>(); list.stream().forEach(dto -> { Manufacturer manufacturer = new Manufacturer(); BeanUtils.copyProperties(dto, manufacturer); manufacturer.setMaintainTime(LocalDate.now()); // 检查厂家名称是否重复 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Manufacturer::getName, manufacturer.getName()); if (baseMapper.selectCount(queryWrapper) > 0) { throw new RuntimeException("厂家名称已存在: " + manufacturer.getName()); } if (StringUtils.isEmpty(dto.getMaintainUserName())) { manufacturer.setMaintainUserId(SecurityUtils.getLoginUser().getUser().getUserId()); } else { SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper().eq(SysUser::getNickName, dto.getMaintainUserName())); if (sysUser == null) { throw new RuntimeException("维护人不存在: " + dto.getMaintainUserName()); } manufacturer.setMaintainUserId(sysUser.getUserId()); } manufacturers.add(manufacturer); }); this.saveOrUpdateBatch(manufacturers); return R.ok("导入成功"); } catch (Exception e) { log.error("导入失败", e); return R.fail("导入失败: " + e.getMessage()); } } }