package com.aps.core.service.impl; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; import java.util.List; import com.aps.common.core.utils.DateUtils; import com.aps.common.core.utils.StringUtils; import com.aps.common.security.utils.SecurityUtils; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aps.core.mapper.ApsGasMaterialUsageMapper; import com.aps.core.domain.ApsGasMaterialUsage; import com.aps.core.service.IApsGasMaterialUsageService; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; /** * 气柜管路物料用量Service业务层处理 * * @author zhl * @date 2025-04-25 */ @Service public class ApsGasMaterialUsageServiceImpl implements IApsGasMaterialUsageService { @Autowired private ApsGasMaterialUsageMapper apsGasMaterialUsageMapper; /** * 查询气柜管路物料用量 * * @param id 气柜管路物料用量主键 * @return 气柜管路物料用量 */ @Override public ApsGasMaterialUsage selectApsGasMaterialUsageById(Long id) { return apsGasMaterialUsageMapper.selectApsGasMaterialUsageById(id); } /** * 查询气柜管路物料用量列表 * * @param apsGasMaterialUsage 气柜管路物料用量 * @return 气柜管路物料用量 */ @Override public List selectApsGasMaterialUsageList(ApsGasMaterialUsage apsGasMaterialUsage) { return apsGasMaterialUsageMapper.selectApsGasMaterialUsageList(apsGasMaterialUsage); } /** * 新增气柜管路物料用量 * * @param apsGasMaterialUsage 气柜管路物料用量 * @return 结果 */ @Override public int insertApsGasMaterialUsage(ApsGasMaterialUsage apsGasMaterialUsage) { apsGasMaterialUsage.setCreateTime(DateUtils.getNowDate()); return apsGasMaterialUsageMapper.insertApsGasMaterialUsage(apsGasMaterialUsage); } /** * 修改气柜管路物料用量 * * @param apsGasMaterialUsage 气柜管路物料用量 * @return 结果 */ @Override public int updateApsGasMaterialUsage(ApsGasMaterialUsage apsGasMaterialUsage) { return apsGasMaterialUsageMapper.updateApsGasMaterialUsage(apsGasMaterialUsage); } /** * 批量删除气柜管路物料用量 * * @param ids 需要删除的气柜管路物料用量主键 * @return 结果 */ @Override public int deleteApsGasMaterialUsageByIds(Long[] ids) { return apsGasMaterialUsageMapper.deleteApsGasMaterialUsageByIds(ids); } /** * 删除气柜管路物料用量信息 * * @param id 气柜管路物料用量主键 * @return 结果 */ @Override public int deleteApsGasMaterialUsageById(Long id) { return apsGasMaterialUsageMapper.deleteApsGasMaterialUsageById(id); } @Transactional @Override public int batchInsertGasMaterialUsage(MultipartFile file) { ArrayList list = new ArrayList<>(); Workbook workbook = null; try { workbook = WorkbookFactory.create(file.getInputStream()); } catch (IOException e) { throw new RuntimeException(e); } Sheet sheet =workbook.getSheetAt(0); int rows = sheet.getLastRowNum(); if (rows > 0) { /*从表头中取出工序名称*/ Hashtable processTitle=new Hashtable<>(); Row titleRow = sheet.getRow(0); short lastTitleNum = titleRow.getLastCellNum(); for (int i = 4; i < lastTitleNum; i++) { processTitle.put(i,titleRow.getCell(i).getStringCellValue()); } /*数据列从1开始*/ for (int i = 1; i <= rows; i++) { Row row = sheet.getRow(i); String itemNumber = row.getCell(0).getStringCellValue(); String drawingNo = row.getCell(1).getStringCellValue(); String version = row.getCell(2).getStringCellValue(); for (int j = 4; j < lastTitleNum; j++){ String processName = processTitle.get(j); double standardAmount = row.getCell(j).getNumericCellValue(); ApsGasMaterialUsage apsGasMaterialUsage = new ApsGasMaterialUsage(); apsGasMaterialUsage.setItemNumber(itemNumber); apsGasMaterialUsage.setDrawingNo(drawingNo); apsGasMaterialUsage.setVersion(version); apsGasMaterialUsage.setProcessName(processName); apsGasMaterialUsage.setStandardAmount(BigDecimal.valueOf(standardAmount)); apsGasMaterialUsage.setDelFlag("0"); apsGasMaterialUsage.setCreateBy(SecurityUtils.getUsername()); apsGasMaterialUsage.setCreateTime(DateUtils.getNowDate()); list.add(apsGasMaterialUsage); } } } int batchSize = 1000; int totalInserted = 0; apsGasMaterialUsageMapper.batchDeleteGasMaterialUsage(); for (int i = 0; i < list.size(); i += batchSize) { int end = Math.min(i + batchSize, list.size()); List subList = list.subList(i, end); // 设置创建时间 登录人 for (ApsGasMaterialUsage item : subList) { item.setCreateBy(SecurityUtils.getUsername()); item.setCreateTime(DateUtils.getNowDate()); } totalInserted += apsGasMaterialUsageMapper.batchInsertGasMaterialUsage(subList); } return totalInserted; } }