From bec65dbf49980d8e91e5c8e45b73ded4c53b204b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=AE=8F=E6=96=8C?= <2164406372@qq.com> Date: Tue, 29 Jul 2025 11:39:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E7=8F=AD=E4=BF=A1=E6=81=AF=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SchedulingController.java | 14 +++ .../scheduling/mapper/SchedulingMapper.java | 3 + .../scheduling/service/SchedulingService.java | 2 + .../service/impl/SchedulingServiceImpl.java | 91 +++++++++++++++++++ .../mapper/scheduling/SchedulingMapper.xml | 4 + 5 files changed, 114 insertions(+) diff --git a/src/main/java/com/xujie/sys/modules/scheduling/controller/SchedulingController.java b/src/main/java/com/xujie/sys/modules/scheduling/controller/SchedulingController.java index d5cd9991..bbeca330 100644 --- a/src/main/java/com/xujie/sys/modules/scheduling/controller/SchedulingController.java +++ b/src/main/java/com/xujie/sys/modules/scheduling/controller/SchedulingController.java @@ -7,6 +7,7 @@ import com.xujie.sys.modules.scheduling.entity.SchedulingRecordData; import com.xujie.sys.modules.scheduling.service.SchedulingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -94,4 +95,17 @@ public class SchedulingController { R r = schedulingService.editSaveSchedulingRecord(data); return r; } + + /** + * @description: 排班信息导入 + * @author: zhb + * @date: 202/7/28 11.12 + * @param: [file] + * @return: com.xujie.sys.common.utils.R + **/ + @PostMapping("/uploadSchedulingExcel") + public R uploadTemplateExcel(@RequestParam(value = "file") MultipartFile file, @ModelAttribute SchedulingData data){ + R r = schedulingService.uploadTemplateExcel(file, data); + return r; + } } diff --git a/src/main/java/com/xujie/sys/modules/scheduling/mapper/SchedulingMapper.java b/src/main/java/com/xujie/sys/modules/scheduling/mapper/SchedulingMapper.java index 18900846..02c9220b 100644 --- a/src/main/java/com/xujie/sys/modules/scheduling/mapper/SchedulingMapper.java +++ b/src/main/java/com/xujie/sys/modules/scheduling/mapper/SchedulingMapper.java @@ -4,6 +4,7 @@ import com.xujie.sys.modules.scheduling.entity.ClassesData; import com.xujie.sys.modules.scheduling.entity.SchedulingData; import com.xujie.sys.modules.scheduling.entity.SchedulingRecordData; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -34,4 +35,6 @@ public interface SchedulingMapper { int deleteSchedulingRecord(SchedulingRecordData data); int editSaveSchedulingRecord(SchedulingRecordData data); + + String queryUserDisplayName(@Param("adminId") String adminId); } diff --git a/src/main/java/com/xujie/sys/modules/scheduling/service/SchedulingService.java b/src/main/java/com/xujie/sys/modules/scheduling/service/SchedulingService.java index ab1d03cf..e7e86932 100644 --- a/src/main/java/com/xujie/sys/modules/scheduling/service/SchedulingService.java +++ b/src/main/java/com/xujie/sys/modules/scheduling/service/SchedulingService.java @@ -4,6 +4,7 @@ import com.xujie.sys.common.utils.R; import com.xujie.sys.modules.scheduling.entity.ClassesData; import com.xujie.sys.modules.scheduling.entity.SchedulingData; import com.xujie.sys.modules.scheduling.entity.SchedulingRecordData; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -26,4 +27,5 @@ public interface SchedulingService { R editSaveSchedulingRecord(SchedulingRecordData data); + R uploadTemplateExcel(MultipartFile file, SchedulingData data); } diff --git a/src/main/java/com/xujie/sys/modules/scheduling/service/impl/SchedulingServiceImpl.java b/src/main/java/com/xujie/sys/modules/scheduling/service/impl/SchedulingServiceImpl.java index 65fb8af7..ac7728b7 100644 --- a/src/main/java/com/xujie/sys/modules/scheduling/service/impl/SchedulingServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/scheduling/service/impl/SchedulingServiceImpl.java @@ -7,10 +7,16 @@ import com.xujie.sys.modules.scheduling.entity.SchedulingData; import com.xujie.sys.modules.scheduling.entity.SchedulingRecordData; import com.xujie.sys.modules.scheduling.mapper.SchedulingMapper; import com.xujie.sys.modules.scheduling.service.SchedulingService; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.InputStream; import java.util.*; @Service @@ -177,5 +183,90 @@ public class SchedulingServiceImpl implements SchedulingService { return R.ok(); } + @Override + @Transactional + public R uploadTemplateExcel(MultipartFile file, SchedulingData data) { + try { + // 转流 + InputStream is = file.getInputStream(); + // 读取工作簿 + XSSFWorkbook workbook = new XSSFWorkbook(is); + // 读取工作表 + XSSFSheet sheet = workbook.getSheetAt(0); + // 获取行数 + int rows = sheet.getPhysicalNumberOfRows(); + // 声明对象 + SchedulingData schedulingData = null; + //排除标准数据下的空白行数据 + int nonEmptyRows = 0; + for (int i = 0; i < rows; i++) { + XSSFRow row = sheet.getRow(i); + if (row != null && row.getCell(0) != null && StringUtils.isNotBlank(row.getCell(0).toString())) { + nonEmptyRows++; + } + } + for (int j = 1; j < nonEmptyRows; j++) { + // 实例化对象 + schedulingData = new SchedulingData(); + // 获得该行 + XSSFRow row = sheet.getRow(j); + //截取site和bu + String[] split = data.getBu().split("_"); + // 为对象赋值 + schedulingData.setSite(split[0]); + schedulingData.setBuNo(split[1]); + String classesDesc = row.getCell(0).getStringCellValue(); + if ("白班".equals(classesDesc)) { + if ("01-Label".equals(split[1])){ + schedulingData.setClassesCode("A001"); + } + if ("02-Hardtag".equals(split[1])){ + schedulingData.setClassesCode("B001"); + } + if ("03-RFID".equals(split[1])){ + schedulingData.setClassesCode("C001"); + } + } else if ("夜班".equals(classesDesc)){ + if ("01-Label".equals(split[1])){ + schedulingData.setClassesCode("A002"); + } + if ("02-Hardtag".equals(split[1])){ + schedulingData.setClassesCode("B002"); + } + if ("03-RFID".equals(split[1])){ + schedulingData.setClassesCode("C002"); + } + }else { + throw new RuntimeException("第" + j + "行 班次有误,请检查后重新上传"); + } + schedulingData.setDate(row.getCell(1).getDateCellValue()); + schedulingMapper.saveSchedulingHeader(schedulingData); + int id = schedulingData.getId(); + int cells = row.getLastCellNum(); + int actualCellCount = 0; + for (int i = 0; i < cells; i++) { + if (row.getCell(i) != null && StringUtils.isNotBlank(row.getCell(i).toString())) { + actualCellCount++; + } + } + for (int i = 2; i < actualCellCount; i++) { + SchedulingRecordData schedulingRecordData = new SchedulingRecordData(); + schedulingRecordData.setHeadId(id); + schedulingRecordData.setIsHoliday("N"); + String adminId = row.getCell(i).getStringCellValue(); + schedulingRecordData.setAdminId(adminId); + String username = schedulingMapper.queryUserDisplayName(adminId); + if (Objects.isNull(username) || username.isEmpty()) { + throw new RuntimeException("第" + j + "行 第"+(i+1)+"列人员编码不存在,请检查后重新上传"); + } + schedulingRecordData.setAdminName(username); + schedulingMapper.saveSchedulingRecord(schedulingRecordData); + } + } + }catch (Exception e){ + throw new RuntimeException("上传失败:" + e.getMessage()); + } + return R.ok(); + } } diff --git a/src/main/resources/mapper/scheduling/SchedulingMapper.xml b/src/main/resources/mapper/scheduling/SchedulingMapper.xml index 3b044264..b562bd37 100644 --- a/src/main/resources/mapper/scheduling/SchedulingMapper.xml +++ b/src/main/resources/mapper/scheduling/SchedulingMapper.xml @@ -97,4 +97,8 @@ from tpm_scheduling_record tsr where tsr.head_id = #{id} + \ No newline at end of file